mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-20 14:30:41 +00:00
## Summary Extracts desktop UI into apps/desktop-ui package with minimal changes. ## Changes - **What**: - Separates desktop-specific code into standalone package with independent Vite config, router, and i18n - Drastically simplifies the main app router by removing all desktop routes - Adds a some code duplication, most due to the existing design - Some duplication can be refactored to be *simpler* on either side - no need to split things by `isElectron()` - Rudimentary storybook support has been added - **Breaking**: Stacked PR for publishing must be merged before this PR makes it to stable core (but publishing _could_ be done manually) - #5915 - **Dependencies**: Takes full advantage of pnpm catalog. No additional dependencies added. ## Review Focus - Should be no changes to normal frontend operation - Scripts added to root package.json are acceptable - The duplication in this PR is copied as is, wherever possible. Any corrections or fix-ups beyond the scope of simply migrating the functionality as-is, can be addressed in later PRs. That said, if any changes are made, it instantly becomes more difficult to separate the duplicated code out into a shared utility. - Tracking issue to address concerns: #5925 ### i18n Fixing i18n is out of scope for this PR. It is a larger task that we should consider carefully and implement properly. Attempting to isolate the desktop i18n and duplicate the _current_ localisation scripts would be wasted energy.
53 lines
1.1 KiB
Vue
53 lines
1.1 KiB
Vue
<template>
|
|
<div
|
|
class="font-sans w-screen h-screen flex flex-col"
|
|
:class="[
|
|
dark
|
|
? 'text-neutral-300 bg-neutral-900 dark-theme'
|
|
: 'text-neutral-900 bg-neutral-300'
|
|
]"
|
|
>
|
|
<!-- Virtual top menu for native window (drag handle) -->
|
|
<div
|
|
v-show="isNativeWindow()"
|
|
ref="topMenuRef"
|
|
class="app-drag w-full h-(--comfy-topbar-height)"
|
|
/>
|
|
<div class="grow w-full flex items-center justify-center overflow-auto">
|
|
<slot />
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { nextTick, onMounted, ref } from 'vue'
|
|
|
|
import { electronAPI, isElectron, isNativeWindow } from '../../utils/envUtil'
|
|
|
|
const { dark = false } = defineProps<{
|
|
dark?: boolean
|
|
}>()
|
|
|
|
const darkTheme = {
|
|
color: 'rgba(0, 0, 0, 0)',
|
|
symbolColor: '#d4d4d4'
|
|
}
|
|
|
|
const lightTheme = {
|
|
color: 'rgba(0, 0, 0, 0)',
|
|
symbolColor: '#171717'
|
|
}
|
|
|
|
const topMenuRef = ref<HTMLDivElement | null>(null)
|
|
onMounted(async () => {
|
|
if (isElectron()) {
|
|
await nextTick()
|
|
|
|
electronAPI().changeTheme({
|
|
...(dark ? darkTheme : lightTheme),
|
|
height: topMenuRef.value?.getBoundingClientRect().height ?? 0
|
|
})
|
|
}
|
|
})
|
|
</script>
|