From 3be12e18e81e0557f4c3e8d49673d120da7f0502 Mon Sep 17 00:00:00 2001 From: Christian Byrne Date: Wed, 12 Nov 2025 20:07:53 -0800 Subject: [PATCH] Backport: Css token standardization (#6363) (#6669) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Backports the CSS token standardization changes from PR #6363 to the `core/1.30` branch. Resolved merge conflict in `MediaTitle.vue` and added missing `truncateFilename` function to maintain compatibility. **Original PR**: https://github.com/Comfy-Org/ComfyUI_frontend/pull/6363 **Cherry-picked commit**: bde5244a714117a1d4868e49a569c24c8d3104f8 ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-6669-Backport-Css-token-standardization-6363-2aa6d73d36508153be09cdc67f6ac8a4) by [Unito](https://www.unito.io) --- packages/design-system/src/css/style.css | 85 ++++++++++++++++++- .../shared-frontend-utils/src/formatUtil.ts | 10 +++ .../widget/WorkflowTemplateSelectorDialog.vue | 6 +- .../selectionToolbox/BypassButton.test.ts | 2 +- .../graph/selectionToolbox/BypassButton.vue | 2 +- .../graph/selectionToolbox/ExecuteButton.vue | 2 +- .../graph/selectionToolbox/MenuOptionItem.vue | 4 +- src/platform/assets/components/AssetCard.vue | 5 +- .../assets/components/MediaAssetMoreMenu.vue | 14 +-- src/platform/assets/components/MediaTitle.vue | 21 +++++ .../widgets/components/WidgetFileUpload.vue | 4 +- .../widgets/components/WidgetRecordAudio.vue | 2 +- .../components/audio/AudioPreviewPlayer.vue | 17 ++-- .../form/dropdown/FormDropdownMenuActions.vue | 8 +- .../form/dropdown/FormDropdownMenuFilter.vue | 4 +- .../manager/ManagerDialogContent.vue | 4 +- .../manager/NodeConflictDialogContent.vue | 4 +- .../infoPanel/tabs/WarningTabPanel.vue | 2 +- 18 files changed, 150 insertions(+), 46 deletions(-) create mode 100644 src/platform/assets/components/MediaTitle.vue diff --git a/packages/design-system/src/css/style.css b/packages/design-system/src/css/style.css index 21553a439..f5b3877be 100644 --- a/packages/design-system/src/css/style.css +++ b/packages/design-system/src/css/style.css @@ -49,27 +49,42 @@ --color-smoke-800: #8a8a8a; --color-sand-100: #e1ded5; - --color-sand-200: #d6cfc2; + --color-sand-200: #fff7d5; --color-sand-300: #888682; + --color-sand-400: #eed7ac; --color-slate-100: #9c9eab; --color-slate-200: #9fa2bd; --color-slate-300: #5b5e7d; + --color-white: #ffffff; + --color-black: #000000; + --color-electric-400: #f0ff41; --color-sapphire-700: #172dd7; --color-brand-yellow: var(--color-electric-400); --color-brand-blue: var(--color-sapphire-700); + --color-azure-300: #78bae9; --color-azure-400: #31b9f4; --color-azure-600: #0b8ce9; + --color-cobalt-800: #185a8b; + --color-jade-400: #47e469; --color-jade-600: #00cd72; --color-gold-400: #fcbf64; + --color-gold-500: #fdab34; --color-gold-600: #fd9903; + --color-coral-500: #f75951; + --color-coral-600: #e04e48; + --color-coral-700: #b33a3a; + + --color-magenta-300: #ceaac9; + --color-magenta-700: #6a246a; + --color-danger-100: #c02323; --color-danger-200: #d62952; @@ -101,6 +116,11 @@ var(--color-smoke-500) 50%, transparent ); + --color-alpha-smoke-500-20: #c5c5c533; + --color-alpha-smoke-400-40: #d9d9d966; + --color-alpha-azure-600-30: #0b8ce94d; + --color-alpha-magenta-700-60: #6a246a99; + --color-alpha-magenta-300-60: #ceaac999; /* PrimeVue pulled colors */ --color-muted: var(--p-text-muted-color); @@ -196,6 +216,27 @@ --text-secondary: var(--color-ash-500); --text-primary: var(--color-charcoal-700); --input-surface: rgb(0 0 0 / 0.15); + + /* Semantic tokens - light mode */ + --muted-foreground: var(--color-charcoal-200); + --base-foreground: var(--color-charcoal-800); + --brand-yellow: var(--color-electric-400); + --brand-blue: var(--color-sapphire-700); + --secondary-background: var(--color-smoke-200); + --secondary-background-hover: var(--color-smoke-400); + --secondary-background-selected: var(--color-smoke-600); + --base-background: var(--color-white); + --primary-background: var(--color-azure-400); + --primary-background-hover: var(--color-cobalt-800); + --destructive-background: var(--color-coral-500); + --destructive-background-hover: var(--color-coral-600); + --inverted-background-hover: var(--color-charcoal-600); + --warning-background: var(--color-gold-400); + --warning-background-hover: var(--color-gold-500); + --border-default: var(--color-smoke-600); + --border-subtle: var(--color-smoke-400); + --muted-background: var(--color-smoke-700); + --accent-background: var(--color-smoke-800); } .dark-theme { @@ -257,6 +298,27 @@ --text-primary: var(--color-white); --input-surface: rgb(130 130 130 / 0.1); + + /* Semantic tokens - dark mode */ + --muted-foreground: var(--color-smoke-800); + --base-foreground: var(--color-white); + --brand-yellow: var(--color-electric-400); + --brand-blue: var(--color-sapphire-700); + --secondary-background: var(--color-charcoal-600); + --secondary-background-hover: var(--color-charcoal-400); + --secondary-background-selected: var(--color-charcoal-200); + --base-background: var(--color-charcoal-800); + --primary-background: var(--color-azure-600); + --primary-background-hover: var(--color-azure-400); + --destructive-background: var(--color-coral-700); + --destructive-background-hover: var(--color-coral-600); + --inverted-background-hover: var(--color-smoke-200); + --warning-background: var(--color-gold-600); + --warning-background-hover: var(--color-gold-500); + --border-default: var(--color-charcoal-200); + --border-subtle: var(--color-charcoal-300); + --muted-background: var(--color-charcoal-100); + --accent-background: var(--color-charcoal-100); } @theme inline { @@ -321,6 +383,27 @@ --color-text-secondary: var(--text-secondary); --color-text-primary: var(--text-primary); --color-input-surface: var(--input-surface); + + /* Semantic tokens */ + --color-base-foreground: var(--base-foreground); + --color-muted-foreground: var(--muted-foreground); + --color-base-background: var(--base-background); + --color-secondary-background: var(--secondary-background); + --color-secondary-background-hover: var(--secondary-background-hover); + --color-secondary-background-selected: var(--secondary-background-selected); + --color-primary-background: var(--primary-background); + --color-primary-background-hover: var(--primary-background-hover); + --color-destructive-background: var(--destructive-background); + --color-destructive-background-hover: var(--destructive-background-hover); + --color-inverted-background-hover: var(--inverted-background-hover); + --color-warning-background: var(--warning-background); + --color-warning-background-hover: var(--warning-background-hover); + --color-border-default: var(--border-default); + --color-border-subtle: var(--border-subtle); + --color-muted-background: var(--muted-background); + --color-accent-background: var(--accent-background); + --color-brand-yellow: var(--brand-yellow); + --color-brand-blue: var(--brand-blue); } @custom-variant dark-theme { diff --git a/packages/shared-frontend-utils/src/formatUtil.ts b/packages/shared-frontend-utils/src/formatUtil.ts index 658498f1f..1eb429751 100644 --- a/packages/shared-frontend-utils/src/formatUtil.ts +++ b/packages/shared-frontend-utils/src/formatUtil.ts @@ -474,3 +474,13 @@ export function formatDuration(milliseconds: number): string { return parts.join(' ') } + +/** + * Truncates a filename for display purposes. + * Currently returns the filename as-is since truncation is handled by CSS. + * @param filename The filename to truncate + * @returns The display-ready filename + */ +export function truncateFilename(filename: string): string { + return filename +} diff --git a/src/components/custom/widget/WorkflowTemplateSelectorDialog.vue b/src/components/custom/widget/WorkflowTemplateSelectorDialog.vue index c64a8e19d..839c2e261 100644 --- a/src/components/custom/widget/WorkflowTemplateSelectorDialog.vue +++ b/src/components/custom/widget/WorkflowTemplateSelectorDialog.vue @@ -144,7 +144,7 @@ size="compact" variant="ghost" rounded="lg" - class="hover:bg-white dark-theme:hover:bg-zinc-800" + class="hover:bg-base-background" >