mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-01-26 19:09:52 +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.
30 lines
918 B
TypeScript
30 lines
918 B
TypeScript
import { useTimeout } from '@vueuse/core'
|
|
import { type Ref, computed, ref, watch } from 'vue'
|
|
|
|
/**
|
|
* Vue boolean ref (writable computed) with one difference: when set to `true` it stays that way for at least {@link minDuration}.
|
|
* If set to `false` before {@link minDuration} has passed, it uses a timer to delay the change.
|
|
* @param value The default value to set on this ref
|
|
* @param minDuration The minimum time that this ref must be `true` for
|
|
* @returns A custom boolean vue ref with a minimum activation time
|
|
*/
|
|
export function useMinLoadingDurationRef(
|
|
value: Ref<boolean>,
|
|
minDuration = 250
|
|
) {
|
|
const current = ref(value.value)
|
|
|
|
const { ready, start } = useTimeout(minDuration, {
|
|
controls: true,
|
|
immediate: false
|
|
})
|
|
|
|
watch(value, (newValue) => {
|
|
if (newValue && !current.value) start()
|
|
|
|
current.value = newValue
|
|
})
|
|
|
|
return computed(() => current.value || !ready.value)
|
|
}
|