diff --git a/.stylelintrc.json b/.stylelintrc.json index 26ce840f1e..4eaf9d1e23 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -40,12 +40,12 @@ "block-no-empty": true, "no-descending-specificity": null, "no-duplicate-at-import-rules": true, + "at-rule-disallowed-list": ["apply"], "at-rule-no-unknown": [ true, { "ignoreAtRules": [ "tailwind", - "apply", "layer", "config", "theme", diff --git a/apps/desktop-ui/src/assets/css/style.css b/apps/desktop-ui/src/assets/css/style.css index 0eef377ae2..1ff895f064 100644 --- a/apps/desktop-ui/src/assets/css/style.css +++ b/apps/desktop-ui/src/assets/css/style.css @@ -4,3 +4,39 @@ position: absolute; inset: 0; } + +.p-button-secondary { + border: none; + background-color: var(--color-neutral-600); + color: var(--color-white); +} + +.p-button-secondary:hover { + background-color: var(--color-neutral-550); +} + +.p-button-secondary:active { + background-color: var(--color-neutral-500); +} + +.p-button-danger { + background-color: var(--color-coral-red-600); +} + +.p-button-danger:hover { + background-color: var(--color-coral-red-500); +} + +.p-button-danger:active { + background-color: var(--color-coral-red-400); +} + +.task-div .p-card { + transition: opacity var(--default-transition-duration); + --p-card-background: var(--p-button-secondary-background); + opacity: 0.9; +} + +.task-div .p-card:hover { + opacity: 1; +} diff --git a/apps/desktop-ui/src/components/bottomPanel/tabs/terminal/BaseTerminal.vue b/apps/desktop-ui/src/components/bottomPanel/tabs/terminal/BaseTerminal.vue index ca0dcf34ec..3bc8db4cf3 100644 --- a/apps/desktop-ui/src/components/bottomPanel/tabs/terminal/BaseTerminal.vue +++ b/apps/desktop-ui/src/components/bottomPanel/tabs/terminal/BaseTerminal.vue @@ -101,13 +101,15 @@ onUnmounted(() => { diff --git a/apps/desktop-ui/src/components/common/LanguageSelector.vue b/apps/desktop-ui/src/components/common/LanguageSelector.vue index 8853c105d0..d8cf45f7a0 100644 --- a/apps/desktop-ui/src/components/common/LanguageSelector.vue +++ b/apps/desktop-ui/src/components/common/LanguageSelector.vue @@ -187,13 +187,17 @@ async function onLocaleChange(event: SelectChangeEvent) { diff --git a/apps/desktop-ui/src/components/install/InstallLocationPicker.vue b/apps/desktop-ui/src/components/install/InstallLocationPicker.vue index f962ca56c8..9921df362b 100644 --- a/apps/desktop-ui/src/components/install/InstallLocationPicker.vue +++ b/apps/desktop-ui/src/components/install/InstallLocationPicker.vue @@ -269,26 +269,43 @@ const onFocus = async () => { diff --git a/apps/desktop-ui/src/views/DesktopDialogView.vue b/apps/desktop-ui/src/views/DesktopDialogView.vue index 105117cab0..3fd28c35cf 100644 --- a/apps/desktop-ui/src/views/DesktopDialogView.vue +++ b/apps/desktop-ui/src/views/DesktopDialogView.vue @@ -1,10 +1,10 @@ - {{ t(`desktopDialogs.${id}.title`, title) }} + {{ $t(`desktopDialogs.${id}.title`, title) }} - {{ t(`desktopDialogs.${id}.message`, message) }} + {{ $t(`desktopDialogs.${id}.message`, message) }} - {{ t('desktopUpdate.title') }} + {{ $t('desktopUpdate.title') }} - {{ t('desktopUpdate.description') }} + {{ $t('desktopUpdate.description') }} @@ -19,7 +19,7 @@ @@ -44,7 +44,6 @@ import Toast from 'primevue/toast' import { onUnmounted, ref } from 'vue' import TerminalOutputDrawer from '@/components/maintenance/TerminalOutputDrawer.vue' -import { t } from '@/i18n' import { electronAPI } from '@/utils/envUtil' import BaseViewTemplate from './templates/BaseViewTemplate.vue' @@ -61,10 +60,10 @@ onUnmounted(() => electron.Validation.dispose()) diff --git a/apps/desktop-ui/src/views/MaintenanceView.vue b/apps/desktop-ui/src/views/MaintenanceView.vue index 0733f80fc2..4054092f0b 100644 --- a/apps/desktop-ui/src/views/MaintenanceView.vue +++ b/apps/desktop-ui/src/views/MaintenanceView.vue @@ -114,12 +114,12 @@ import Tag from 'primevue/tag' import Toast from 'primevue/toast' import { useToast } from 'primevue/usetoast' import { computed, onMounted, onUnmounted, ref, watch } from 'vue' +import { useI18n } from 'vue-i18n' import RefreshButton from '@/components/common/RefreshButton.vue' import StatusTag from '@/components/maintenance/StatusTag.vue' import TaskListPanel from '@/components/maintenance/TaskListPanel.vue' import TerminalOutputDrawer from '@/components/maintenance/TerminalOutputDrawer.vue' -import { t } from '@/i18n' import { useMaintenanceTaskStore } from '@/stores/maintenanceTaskStore' import type { MaintenanceFilter } from '@/types/desktop/maintenanceTypes' import { electronAPI } from '@/utils/envUtil' @@ -129,6 +129,7 @@ import BaseViewTemplate from './templates/BaseViewTemplate.vue' const electron = electronAPI() const toast = useToast() +const { t } = useI18n() const taskStore = useMaintenanceTaskStore() const { clearResolved, processUpdate, refreshDesktopTasks } = taskStore @@ -220,14 +221,14 @@ onUnmounted(() => electron.Validation.dispose()) diff --git a/src/components/breadcrumb/SubgraphBreadcrumb.vue b/src/components/breadcrumb/SubgraphBreadcrumb.vue index a3abaa4ebd..57ca316d78 100644 --- a/src/components/breadcrumb/SubgraphBreadcrumb.vue +++ b/src/components/breadcrumb/SubgraphBreadcrumb.vue @@ -195,8 +195,6 @@ onUpdated(() => { diff --git a/src/components/breadcrumb/SubgraphBreadcrumbItem.vue b/src/components/breadcrumb/SubgraphBreadcrumbItem.vue index 4f3f628d17..2e22c1424e 100644 --- a/src/components/breadcrumb/SubgraphBreadcrumbItem.vue +++ b/src/components/breadcrumb/SubgraphBreadcrumbItem.vue @@ -186,19 +186,19 @@ const inputBlur = async (doRename: boolean) => { diff --git a/src/components/common/SearchBox.vue b/src/components/common/SearchBox.vue index 2c99dfd1c3..e927fdd074 100644 --- a/src/components/common/SearchBox.vue +++ b/src/components/common/SearchBox.vue @@ -133,8 +133,6 @@ const wrapperStyle = computed(() => { diff --git a/src/components/dialog/GlobalDialog.vue b/src/components/dialog/GlobalDialog.vue index a903ac9347..0e8c9a016d 100644 --- a/src/components/dialog/GlobalDialog.vue +++ b/src/components/dialog/GlobalDialog.vue @@ -71,20 +71,30 @@ function getDialogPt(item: { diff --git a/src/components/dialog/content/signin/SignInForm.test.ts b/src/components/dialog/content/signin/SignInForm.test.ts index c27d159295..916d03e66d 100644 --- a/src/components/dialog/content/signin/SignInForm.test.ts +++ b/src/components/dialog/content/signin/SignInForm.test.ts @@ -98,16 +98,17 @@ describe('SignInForm', () => { await nextTick() const forgotPasswordSpan = wrapper.find( - 'span.text-muted.text-base.font-medium.cursor-pointer' + 'span.text-muted.text-base.font-medium.select-none' ) - expect(forgotPasswordSpan.classes()).toContain('text-link-disabled') + expect(forgotPasswordSpan.classes()).toContain('cursor-not-allowed') + expect(forgotPasswordSpan.classes()).toContain('opacity-50') }) it('shows toast and focuses email input when clicked while disabled', async () => { const wrapper = mountComponent() const forgotPasswordSpan = wrapper.find( - 'span.text-muted.text-base.font-medium.cursor-pointer' + 'span.text-muted.text-base.font-medium.select-none' ) // Mock getElementById to track focus @@ -152,7 +153,7 @@ describe('SignInForm', () => { ) const forgotPasswordSpan = wrapper.find( - 'span.text-muted.text-base.font-medium.cursor-pointer' + 'span.text-muted.text-base.font-medium.select-none' ) // Click the forgot password link diff --git a/src/components/dialog/content/signin/SignInForm.vue b/src/components/dialog/content/signin/SignInForm.vue index cbc946fea6..40e576c53d 100644 --- a/src/components/dialog/content/signin/SignInForm.vue +++ b/src/components/dialog/content/signin/SignInForm.vue @@ -34,10 +34,13 @@ {{ t('auth.login.passwordLabel') }} {{ t('auth.login.forgotPassword') }} @@ -89,6 +92,7 @@ import { useFirebaseAuthActions } from '@/composables/auth/useFirebaseAuthAction import { signInSchema } from '@/schemas/signInSchema' import type { SignInData } from '@/schemas/signInSchema' import { useFirebaseAuthStore } from '@/stores/firebaseAuthStore' +import { cn } from '@/utils/tailwindUtil' const authStore = useFirebaseAuthStore() const firebaseAuthActions = useFirebaseAuthActions() @@ -126,11 +130,3 @@ const handleForgotPassword = async ( await firebaseAuthActions.sendPasswordReset(email) } - - diff --git a/src/components/graph/selectionToolbox/ColorPickerButton.test.ts b/src/components/graph/selectionToolbox/ColorPickerButton.test.ts index cc4d7d6908..718455436c 100644 --- a/src/components/graph/selectionToolbox/ColorPickerButton.test.ts +++ b/src/components/graph/selectionToolbox/ColorPickerButton.test.ts @@ -8,20 +8,38 @@ import { createI18n } from 'vue-i18n' // Import after mocks import ColorPickerButton from '@/components/graph/selectionToolbox/ColorPickerButton.vue' -import { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore' -import type { LoadedComfyWorkflow } from '@/platform/workflow/management/stores/workflowStore' +import type { LoadedComfyWorkflow } from '@/platform/workflow/management/stores/comfyWorkflow' +import { + ComfyWorkflow, + useWorkflowStore +} from '@/platform/workflow/management/stores/workflowStore' import { useCanvasStore } from '@/renderer/core/canvas/canvasStore' +import { ChangeTracker } from '@/scripts/changeTracker' +import { defaultGraph } from '@/scripts/defaultGraph' import { createMockPositionable } from '@/utils/__tests__/litegraphTestUtils' function createMockWorkflow( overrides: Partial = {} ): LoadedComfyWorkflow { - return { - changeTracker: { + const workflow = new ComfyWorkflow({ + path: 'workflows/color-picker-test.json', + modified: 0, + size: 0 + }) + + const changeTracker = Object.assign( + new ChangeTracker(workflow, structuredClone(defaultGraph)), + { checkState: vi.fn() as Mock - }, + } + ) + + const workflowOverrides = { + changeTracker, ...overrides - } as Partial as LoadedComfyWorkflow + } satisfies Partial + + return Object.assign(workflow, workflowOverrides) as LoadedComfyWorkflow } // Mock the litegraph module @@ -110,12 +128,14 @@ describe('ColorPickerButton', () => { const wrapper = createWrapper() const button = wrapper.find('button') - expect(wrapper.find('.color-picker-container').exists()).toBe(false) + expect(wrapper.findComponent({ name: 'SelectButton' }).exists()).toBe(false) await button.trigger('click') - expect(wrapper.find('.color-picker-container').exists()).toBe(true) + const picker = wrapper.findComponent({ name: 'SelectButton' }) + expect(picker.exists()).toBe(true) + expect(picker.findAll('button').length).toBeGreaterThan(0) await button.trigger('click') - expect(wrapper.find('.color-picker-container').exists()).toBe(false) + expect(wrapper.findComponent({ name: 'SelectButton' }).exists()).toBe(false) }) }) diff --git a/src/components/graph/selectionToolbox/ColorPickerButton.vue b/src/components/graph/selectionToolbox/ColorPickerButton.vue index 17f350dbd9..e78bec6c30 100644 --- a/src/components/graph/selectionToolbox/ColorPickerButton.vue +++ b/src/components/graph/selectionToolbox/ColorPickerButton.vue @@ -11,13 +11,17 @@ @click="() => (showColorPicker = !showColorPicker)" > - + diff --git a/src/components/graph/widgets/DomWidget.vue b/src/components/graph/widgets/DomWidget.vue index 83f5e2ee45..8c7a583481 100644 --- a/src/components/graph/widgets/DomWidget.vue +++ b/src/components/graph/widgets/DomWidget.vue @@ -2,13 +2,14 @@ { if (widgetElement.value.contains(widget.element)) { return } + + widget.element.classList.add('h-full', 'w-full') widgetElement.value.appendChild(widget.element) } @@ -196,11 +199,3 @@ watch( whenever(() => !canvasStore.linearMode, mountElementIfVisible) - - diff --git a/src/components/node/NodeHelpContent.vue b/src/components/node/NodeHelpContent.vue index ad1f75e3df..6e020b5ae0 100644 --- a/src/components/node/NodeHelpContent.vue +++ b/src/components/node/NodeHelpContent.vue @@ -8,11 +8,14 @@ - + {{ $t('g.description') }}: {{ node.description }} @@ -22,48 +25,52 @@ {{ $t('nodeHelpPage.inputs') }}: - - - - {{ $t('g.name') }} - {{ $t('nodeHelpPage.type') }} - {{ $t('g.description') }} - - - - - - {{ input.name }} - - {{ input.type }} - {{ input.tooltip || '-' }} - - - + + + + + {{ $t('g.name') }} + {{ $t('nodeHelpPage.type') }} + {{ $t('g.description') }} + + + + + + {{ input.name }} + + {{ input.type }} + {{ input.tooltip || '-' }} + + + + {{ $t('nodeHelpPage.outputs') }}: - - - - {{ $t('g.name') }} - {{ $t('nodeHelpPage.type') }} - {{ $t('g.description') }} - - - - - - {{ output.name }} - - {{ output.type }} - {{ output.tooltip || '-' }} - - - + + + + + {{ $t('g.name') }} + {{ $t('nodeHelpPage.type') }} + {{ $t('g.description') }} + + + + + + {{ output.name }} + + {{ output.type }} + {{ output.tooltip || '-' }} + + + + @@ -100,39 +107,59 @@ const outputList = computed(() => diff --git a/src/components/searchbox/NodeSearchFilter.vue b/src/components/searchbox/NodeSearchFilter.vue index 0f54248268..a308150797 100644 --- a/src/components/searchbox/NodeSearchFilter.vue +++ b/src/components/searchbox/NodeSearchFilter.vue @@ -1,5 +1,5 @@ - + -
- {{ t(`desktopDialogs.${id}.message`, message) }} + {{ $t(`desktopDialogs.${id}.message`, message) }}
{{ $t('g.description') }}: {{ node.description }}
{{ input.name }}
{{ $t('nodeHelpPage.outputs') }}:
{{ output.name }}