@veltra/styles 1.1.5 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -41,7 +41,50 @@ const componentCssVarsLight = {
41
41
  "--u-switch-height-large": "24px",
42
42
  "--u-breadcrumb-small": "20px",
43
43
  "--u-breadcrumb-default": "22px",
44
- "--u-breadcrumb-large": "24px"
44
+ "--u-breadcrumb-large": "24px",
45
+ "--u-button-default-bg": T("bg-color", "top"),
46
+ "--u-button-default-border": T("border", "color"),
47
+ "--u-button-default-color": T("text-color", "main"),
48
+ "--u-button-default-hover-bg": T("bg-color", "hover"),
49
+ "--u-button-default-hover-border": T("border", "color"),
50
+ "--u-button-primary-plain-bg": T("color", "primary", "light", "9"),
51
+ "--u-button-primary-plain-shadow": T("color", "primary", "light", "5"),
52
+ "--u-button-success-plain-bg": T("color", "success", "light", "9"),
53
+ "--u-button-success-plain-shadow": T("color", "success", "light", "5"),
54
+ "--u-button-warning-plain-bg": T("color", "warning", "light", "9"),
55
+ "--u-button-warning-plain-shadow": T("color", "warning", "light", "5"),
56
+ "--u-button-danger-plain-bg": T("color", "danger", "light", "9"),
57
+ "--u-button-danger-plain-shadow": T("color", "danger", "light", "5"),
58
+ "--u-button-info-plain-bg": T("color", "info", "light", "9"),
59
+ "--u-button-info-plain-shadow": T("color", "info", "light", "5"),
60
+ "--u-tree-node-selected-bg": T("color", "primary", "light", "9"),
61
+ "--u-tree-node-selected-color": T("color", "primary"),
62
+ "--u-cascade-node-active-bg": T("color", "primary", "light", "9"),
63
+ "--u-cascade-node-active-color": T("color", "primary"),
64
+ "--u-expression-editor-chip-bg": T("color", "primary", "light", "9"),
65
+ "--u-expression-editor-chip-color": T("color", "primary"),
66
+ "--u-paginator-btn-hover-bg": T("color", "primary", "light", "9"),
67
+ "--u-paginator-btn-hover-color": T("text-color", "title"),
68
+ "--u-paginator-btn-active-bg": T("color", "primary", "light", "9"),
69
+ "--u-paginator-btn-active-color": T("color", "primary"),
70
+ "--u-tabs-bar-bg": T("bg-color", "hover"),
71
+ "--u-tabs-active-bg": T("bg-color", "top"),
72
+ "--u-tag-primary-bg": T("color", "primary", "light", "9"),
73
+ "--u-tag-primary-color": T("color", "primary"),
74
+ "--u-tag-primary-border": T("color", "primary"),
75
+ "--u-tag-success-bg": T("color", "success", "light", "9"),
76
+ "--u-tag-success-color": T("color", "success"),
77
+ "--u-tag-success-border": T("color", "success"),
78
+ "--u-tag-warning-bg": T("color", "warning", "light", "9"),
79
+ "--u-tag-warning-color": T("color", "warning"),
80
+ "--u-tag-warning-border": T("color", "warning"),
81
+ "--u-tag-danger-bg": T("color", "danger", "light", "9"),
82
+ "--u-tag-danger-color": T("color", "danger"),
83
+ "--u-tag-danger-border": T("color", "danger"),
84
+ "--u-tag-info-bg": T("color", "info", "light", "9"),
85
+ "--u-tag-info-color": T("color", "info"),
86
+ "--u-tag-info-border": T("color", "info"),
87
+ "--u-file-picker-hover-bg": T("color", "primary", "light", "9")
45
88
  };
46
89
  /** 暗色下组件 token(含与亮色相同的尺寸项,保证暗色 html 块自洽) */
47
90
  const componentCssVarsDark = {
@@ -64,7 +107,45 @@ const componentCssVarsDark = {
64
107
  "--u-menu-active-color": T("text-color", "white"),
65
108
  "--u-menu-bg-color": T("bg-color", "middle"),
66
109
  "--u-radio-border": "#595959",
67
- "--u-checkbox-border": "#595959"
110
+ "--u-checkbox-border": "#595959",
111
+ "--u-button-primary-plain-bg": T("color", "primary", "dark", "9"),
112
+ "--u-button-primary-plain-shadow": T("color", "primary", "dark", "7"),
113
+ "--u-button-success-plain-bg": T("color", "success", "dark", "9"),
114
+ "--u-button-success-plain-shadow": T("color", "success", "dark", "7"),
115
+ "--u-button-warning-plain-bg": T("color", "warning", "dark", "9"),
116
+ "--u-button-warning-plain-shadow": T("color", "warning", "dark", "7"),
117
+ "--u-button-danger-plain-bg": T("color", "danger", "dark", "9"),
118
+ "--u-button-danger-plain-shadow": T("color", "danger", "dark", "7"),
119
+ "--u-button-info-plain-bg": T("color", "info", "dark", "9"),
120
+ "--u-button-info-plain-shadow": T("color", "info", "dark", "7"),
121
+ "--u-tree-node-selected-bg": T("color", "primary", "dark", "9"),
122
+ "--u-tree-node-selected-color": T("color", "primary"),
123
+ "--u-cascade-node-active-bg": T("color", "primary", "dark", "9"),
124
+ "--u-cascade-node-active-color": T("color", "primary"),
125
+ "--u-expression-editor-chip-bg": T("color", "primary", "dark", "9"),
126
+ "--u-expression-editor-chip-color": T("color", "primary"),
127
+ "--u-paginator-btn-hover-bg": T("color", "primary", "dark", "9"),
128
+ "--u-paginator-btn-hover-color": T("color", "primary"),
129
+ "--u-paginator-btn-active-bg": T("color", "primary", "dark", "9"),
130
+ "--u-paginator-btn-active-color": T("color", "primary"),
131
+ "--u-tabs-bar-bg": T("bg-color", "bottom"),
132
+ "--u-tabs-active-bg": T("bg-color", "top"),
133
+ "--u-tag-primary-bg": T("color", "primary", "dark", "9"),
134
+ "--u-tag-primary-color": T("color", "primary"),
135
+ "--u-tag-primary-border": T("color", "primary"),
136
+ "--u-tag-success-bg": T("color", "success", "dark", "9"),
137
+ "--u-tag-success-color": T("color", "success"),
138
+ "--u-tag-success-border": T("color", "success"),
139
+ "--u-tag-warning-bg": T("color", "warning", "dark", "9"),
140
+ "--u-tag-warning-color": T("color", "warning"),
141
+ "--u-tag-warning-border": T("color", "warning"),
142
+ "--u-tag-danger-bg": T("color", "danger", "dark", "9"),
143
+ "--u-tag-danger-color": T("color", "danger"),
144
+ "--u-tag-danger-border": T("color", "danger"),
145
+ "--u-tag-info-bg": T("color", "info", "dark", "9"),
146
+ "--u-tag-info-color": T("color", "info"),
147
+ "--u-tag-info-border": T("color", "info"),
148
+ "--u-file-picker-hover-bg": T("color", "primary", "dark", "9")
68
149
  };
69
150
  function recordToDeclList(record) {
70
151
  return Object.entries(record).map(([k, v]) => `${k}: ${v}`);
@@ -1 +1 @@
1
- {"version":3,"file":"component-css-vars.js","names":[],"sources":["../../src/theme/component-css-vars.ts"],"sourcesContent":["/**\n * 桌面组件级 `--u-*` token,与内置主题一起在 `UITheme.injectBuiltInThemes` 中注入 `html`。\n * 修改此处即可在 TS 侧统一调整组件外观,无需在各组件 `style.scss` 重复声明。\n */\n\n/** 与 SCSS `fn.use-var($basename, $nodes...)` 输出一致 */\nexport function themeTokenVar(basename: string, ...nodes: Array<string | number>): string {\n const suffix = nodes.length ? `-${nodes.map(String).join('-')}` : ''\n return `var(--u-${basename}${suffix})`\n}\n\nconst T = themeTokenVar\n\n/** 亮色(及与暗色相同的尺寸类)下组件 token */\nexport const componentCssVarsLight: Record<string, string> = {\n '--u-table-border-color': '#e9e9e9',\n '--u-table-header-bg': '#f4f5f7',\n '--u-table-header-color': T('text-color', 'title'),\n '--u-table-stripe-bg': '#f8fafc',\n '--u-table-stripe-color': 'inherit',\n '--u-table-hover-bg': T('bg-color', 'hover'),\n '--u-table-hover-color': 'inherit',\n '--u-table-current-bg': T('bg-color', 'hover'),\n '--u-table-current-color': 'inherit',\n '--u-table-checked-bg': T('color', 'primary', 'light-9'),\n '--u-table-checked-color': 'inherit',\n '--u-menu-color': '#0f172a',\n '--u-menu-hover-bg': 'rgba(148, 163, 184, 0.12)',\n '--u-menu-hover-color': T('text-color', 'title'),\n '--u-menu-active-bg': 'rgba(59, 130, 246, 0.12)',\n '--u-menu-active-color': T('color', 'primary', 'dark', '1'),\n '--u-menu-height-small': '32px',\n '--u-menu-height-default': '36px',\n '--u-menu-height-large': '40px',\n '--u-menu-bg-color': T('bg-color', 'top'),\n '--u-menu-bg-blur': 'none',\n '--u-menu-bg-saturate': 'none',\n '--u-menu-bg-image': 'none',\n '--u-tag-small': '20px',\n '--u-tag-default': '24px',\n '--u-tag-large': '28px',\n '--u-switch-height-small': '18px',\n '--u-switch-height-default': '20px',\n '--u-switch-height-large': '24px',\n '--u-breadcrumb-small': '20px',\n '--u-breadcrumb-default': '22px',\n '--u-breadcrumb-large': '24px'\n}\n\n/** 暗色下组件 token(含与亮色相同的尺寸项,保证暗色 html 块自洽) */\nexport const componentCssVarsDark: Record<string, string> = {\n ...componentCssVarsLight,\n '--u-table-border-color': '#404040',\n '--u-table-header-bg': '#2a2a2a',\n '--u-table-header-color': T('text-color', 'main'),\n '--u-table-stripe-bg': '#2a2a2a',\n '--u-table-stripe-color': T('text-color', 'main'),\n '--u-table-hover-bg': '#333333',\n '--u-table-hover-color': T('text-color', 'title'),\n '--u-table-current-bg': T('bg-color', 'hover'),\n '--u-table-current-color': 'inherit',\n '--u-table-checked-bg': T('color', 'primary', 'dark', '1'),\n '--u-table-checked-color': 'inherit',\n '--u-menu-color': T('text-color', 'main'),\n '--u-menu-hover-bg': 'rgba(148, 163, 184, 0.14)',\n '--u-menu-hover-color': T('text-color', 'title'),\n '--u-menu-active-bg': 'rgba(96, 165, 250, 0.2)',\n '--u-menu-active-color': T('text-color', 'white'),\n '--u-menu-bg-color': T('bg-color', 'middle'),\n '--u-radio-border': '#595959',\n '--u-checkbox-border': '#595959'\n}\n\nfunction recordToDeclList(record: Record<string, string>): string[] {\n return Object.entries(record).map(([k, v]) => `${k}: ${v}`)\n}\n\nexport const componentCssVarsLightDecls: string[] = recordToDeclList(componentCssVarsLight)\n\nexport const componentCssVarsDarkDecls: string[] = recordToDeclList(componentCssVarsDark)\n"],"mappings":";;;;;;AAMA,SAAgB,cAAc,UAAkB,GAAG,OAAuC;AAExF,QAAO,WAAW,WADH,MAAM,SAAS,IAAI,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,GAC9B;;AAGtC,MAAM,IAAI;;AAGV,MAAa,wBAAgD;CAC3D,0BAA0B;CAC1B,uBAAuB;CACvB,0BAA0B,EAAE,cAAc,QAAQ;CAClD,uBAAuB;CACvB,0BAA0B;CAC1B,sBAAsB,EAAE,YAAY,QAAQ;CAC5C,yBAAyB;CACzB,wBAAwB,EAAE,YAAY,QAAQ;CAC9C,2BAA2B;CAC3B,wBAAwB,EAAE,SAAS,WAAW,UAAU;CACxD,2BAA2B;CAC3B,kBAAkB;CAClB,qBAAqB;CACrB,wBAAwB,EAAE,cAAc,QAAQ;CAChD,sBAAsB;CACtB,yBAAyB,EAAE,SAAS,WAAW,QAAQ,IAAI;CAC3D,yBAAyB;CACzB,2BAA2B;CAC3B,yBAAyB;CACzB,qBAAqB,EAAE,YAAY,MAAM;CACzC,oBAAoB;CACpB,wBAAwB;CACxB,qBAAqB;CACrB,iBAAiB;CACjB,mBAAmB;CACnB,iBAAiB;CACjB,2BAA2B;CAC3B,6BAA6B;CAC7B,2BAA2B;CAC3B,wBAAwB;CACxB,0BAA0B;CAC1B,wBAAwB;CACzB;;AAGD,MAAa,uBAA+C;CAC1D,GAAG;CACH,0BAA0B;CAC1B,uBAAuB;CACvB,0BAA0B,EAAE,cAAc,OAAO;CACjD,uBAAuB;CACvB,0BAA0B,EAAE,cAAc,OAAO;CACjD,sBAAsB;CACtB,yBAAyB,EAAE,cAAc,QAAQ;CACjD,wBAAwB,EAAE,YAAY,QAAQ;CAC9C,2BAA2B;CAC3B,wBAAwB,EAAE,SAAS,WAAW,QAAQ,IAAI;CAC1D,2BAA2B;CAC3B,kBAAkB,EAAE,cAAc,OAAO;CACzC,qBAAqB;CACrB,wBAAwB,EAAE,cAAc,QAAQ;CAChD,sBAAsB;CACtB,yBAAyB,EAAE,cAAc,QAAQ;CACjD,qBAAqB,EAAE,YAAY,SAAS;CAC5C,oBAAoB;CACpB,uBAAuB;CACxB;AAED,SAAS,iBAAiB,QAA0C;AAClE,QAAO,OAAO,QAAQ,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,IAAI,IAAI;;AAG7D,MAAa,6BAAuC,iBAAiB,sBAAsB;AAE3F,MAAa,4BAAsC,iBAAiB,qBAAqB"}
1
+ {"version":3,"file":"component-css-vars.js","names":[],"sources":["../../src/theme/component-css-vars.ts"],"sourcesContent":["/**\n * 桌面组件级 `--u-*` token,与内置主题一起在 `UITheme.injectBuiltInThemes` 中注入 `html`。\n * 修改此处即可在 TS 侧统一调整组件外观,无需在各组件 `style.scss` 重复声明。\n */\n\n/** 与 SCSS `fn.use-var($basename, $nodes...)` 输出一致 */\nexport function themeTokenVar(basename: string, ...nodes: Array<string | number>): string {\n const suffix = nodes.length ? `-${nodes.map(String).join('-')}` : ''\n return `var(--u-${basename}${suffix})`\n}\n\nconst T = themeTokenVar\n\n/** 亮色(及与暗色相同的尺寸类)下组件 token */\nexport const componentCssVarsLight: Record<string, string> = {\n '--u-table-border-color': '#e9e9e9',\n '--u-table-header-bg': '#f4f5f7',\n '--u-table-header-color': T('text-color', 'title'),\n '--u-table-stripe-bg': '#f8fafc',\n '--u-table-stripe-color': 'inherit',\n '--u-table-hover-bg': T('bg-color', 'hover'),\n '--u-table-hover-color': 'inherit',\n '--u-table-current-bg': T('bg-color', 'hover'),\n '--u-table-current-color': 'inherit',\n '--u-table-checked-bg': T('color', 'primary', 'light-9'),\n '--u-table-checked-color': 'inherit',\n '--u-menu-color': '#0f172a',\n '--u-menu-hover-bg': 'rgba(148, 163, 184, 0.12)',\n '--u-menu-hover-color': T('text-color', 'title'),\n '--u-menu-active-bg': 'rgba(59, 130, 246, 0.12)',\n '--u-menu-active-color': T('color', 'primary', 'dark', '1'),\n '--u-menu-height-small': '32px',\n '--u-menu-height-default': '36px',\n '--u-menu-height-large': '40px',\n '--u-menu-bg-color': T('bg-color', 'top'),\n '--u-menu-bg-blur': 'none',\n '--u-menu-bg-saturate': 'none',\n '--u-menu-bg-image': 'none',\n '--u-tag-small': '20px',\n '--u-tag-default': '24px',\n '--u-tag-large': '28px',\n '--u-switch-height-small': '18px',\n '--u-switch-height-default': '20px',\n '--u-switch-height-large': '24px',\n '--u-breadcrumb-small': '20px',\n '--u-breadcrumb-default': '22px',\n '--u-breadcrumb-large': '24px',\n\n // ─── Button (default & plain states) ───\n '--u-button-default-bg': T('bg-color', 'top'),\n '--u-button-default-border': T('border', 'color'),\n '--u-button-default-color': T('text-color', 'main'),\n '--u-button-default-hover-bg': T('bg-color', 'hover'),\n '--u-button-default-hover-border': T('border', 'color'),\n '--u-button-primary-plain-bg': T('color', 'primary', 'light', '9'),\n '--u-button-primary-plain-shadow': T('color', 'primary', 'light', '5'),\n '--u-button-success-plain-bg': T('color', 'success', 'light', '9'),\n '--u-button-success-plain-shadow': T('color', 'success', 'light', '5'),\n '--u-button-warning-plain-bg': T('color', 'warning', 'light', '9'),\n '--u-button-warning-plain-shadow': T('color', 'warning', 'light', '5'),\n '--u-button-danger-plain-bg': T('color', 'danger', 'light', '9'),\n '--u-button-danger-plain-shadow': T('color', 'danger', 'light', '5'),\n '--u-button-info-plain-bg': T('color', 'info', 'light', '9'),\n '--u-button-info-plain-shadow': T('color', 'info', 'light', '5'),\n\n // ─── Tree selection ───\n '--u-tree-node-selected-bg': T('color', 'primary', 'light', '9'),\n '--u-tree-node-selected-color': T('color', 'primary'),\n\n // ─── Cascade option active ───\n '--u-cascade-node-active-bg': T('color', 'primary', 'light', '9'),\n '--u-cascade-node-active-color': T('color', 'primary'),\n\n // ─── Expression Editor Chip ───\n '--u-expression-editor-chip-bg': T('color', 'primary', 'light', '9'),\n '--u-expression-editor-chip-color': T('color', 'primary'),\n\n // ─── Paginator active buttons ───\n '--u-paginator-btn-hover-bg': T('color', 'primary', 'light', '9'),\n '--u-paginator-btn-hover-color': T('text-color', 'title'),\n '--u-paginator-btn-active-bg': T('color', 'primary', 'light', '9'),\n '--u-paginator-btn-active-color': T('color', 'primary'),\n\n // ─── Tabs List background ───\n '--u-tabs-bar-bg': T('bg-color', 'hover'),\n '--u-tabs-active-bg': T('bg-color', 'top'),\n\n // ─── Tag Component Colors ───\n '--u-tag-primary-bg': T('color', 'primary', 'light', '9'),\n '--u-tag-primary-color': T('color', 'primary'),\n '--u-tag-primary-border': T('color', 'primary'),\n '--u-tag-success-bg': T('color', 'success', 'light', '9'),\n '--u-tag-success-color': T('color', 'success'),\n '--u-tag-success-border': T('color', 'success'),\n '--u-tag-warning-bg': T('color', 'warning', 'light', '9'),\n '--u-tag-warning-color': T('color', 'warning'),\n '--u-tag-warning-border': T('color', 'warning'),\n '--u-tag-danger-bg': T('color', 'danger', 'light', '9'),\n '--u-tag-danger-color': T('color', 'danger'),\n '--u-tag-danger-border': T('color', 'danger'),\n '--u-tag-info-bg': T('color', 'info', 'light', '9'),\n '--u-tag-info-color': T('color', 'info'),\n '--u-tag-info-border': T('color', 'info'),\n\n // ─── File Picker Colors ───\n '--u-file-picker-hover-bg': T('color', 'primary', 'light', '9')\n}\n\n/** 暗色下组件 token(含与亮色相同的尺寸项,保证暗色 html 块自洽) */\nexport const componentCssVarsDark: Record<string, string> = {\n ...componentCssVarsLight,\n '--u-table-border-color': '#404040',\n '--u-table-header-bg': '#2a2a2a',\n '--u-table-header-color': T('text-color', 'main'),\n '--u-table-stripe-bg': '#2a2a2a',\n '--u-table-stripe-color': T('text-color', 'main'),\n '--u-table-hover-bg': '#333333',\n '--u-table-hover-color': T('text-color', 'title'),\n '--u-table-current-bg': T('bg-color', 'hover'),\n '--u-table-current-color': 'inherit',\n '--u-table-checked-bg': T('color', 'primary', 'dark', '1'),\n '--u-table-checked-color': 'inherit',\n '--u-menu-color': T('text-color', 'main'),\n '--u-menu-hover-bg': 'rgba(148, 163, 184, 0.14)',\n '--u-menu-hover-color': T('text-color', 'title'),\n '--u-menu-active-bg': 'rgba(96, 165, 250, 0.2)',\n '--u-menu-active-color': T('text-color', 'white'),\n '--u-menu-bg-color': T('bg-color', 'middle'),\n '--u-radio-border': '#595959',\n '--u-checkbox-border': '#595959',\n\n // ─── Button (plain & text colors in dark mode) ───\n '--u-button-primary-plain-bg': T('color', 'primary', 'dark', '9'),\n '--u-button-primary-plain-shadow': T('color', 'primary', 'dark', '7'),\n '--u-button-success-plain-bg': T('color', 'success', 'dark', '9'),\n '--u-button-success-plain-shadow': T('color', 'success', 'dark', '7'),\n '--u-button-warning-plain-bg': T('color', 'warning', 'dark', '9'),\n '--u-button-warning-plain-shadow': T('color', 'warning', 'dark', '7'),\n '--u-button-danger-plain-bg': T('color', 'danger', 'dark', '9'),\n '--u-button-danger-plain-shadow': T('color', 'danger', 'dark', '7'),\n '--u-button-info-plain-bg': T('color', 'info', 'dark', '9'),\n '--u-button-info-plain-shadow': T('color', 'info', 'dark', '7'),\n\n // ─── Tree selection ───\n '--u-tree-node-selected-bg': T('color', 'primary', 'dark', '9'),\n '--u-tree-node-selected-color': T('color', 'primary'),\n\n // ─── Cascade option active ───\n '--u-cascade-node-active-bg': T('color', 'primary', 'dark', '9'),\n '--u-cascade-node-active-color': T('color', 'primary'),\n\n // ─── Expression Editor Chip ───\n '--u-expression-editor-chip-bg': T('color', 'primary', 'dark', '9'),\n '--u-expression-editor-chip-color': T('color', 'primary'),\n\n // ─── Paginator active buttons ───\n '--u-paginator-btn-hover-bg': T('color', 'primary', 'dark', '9'),\n '--u-paginator-btn-hover-color': T('color', 'primary'),\n '--u-paginator-btn-active-bg': T('color', 'primary', 'dark', '9'),\n '--u-paginator-btn-active-color': T('color', 'primary'),\n\n // ─── Tabs List background (improved dark contrast) ───\n '--u-tabs-bar-bg': T('bg-color', 'bottom'),\n '--u-tabs-active-bg': T('bg-color', 'top'),\n\n // ─── Tag Component Colors ───\n '--u-tag-primary-bg': T('color', 'primary', 'dark', '9'),\n '--u-tag-primary-color': T('color', 'primary'),\n '--u-tag-primary-border': T('color', 'primary'),\n '--u-tag-success-bg': T('color', 'success', 'dark', '9'),\n '--u-tag-success-color': T('color', 'success'),\n '--u-tag-success-border': T('color', 'success'),\n '--u-tag-warning-bg': T('color', 'warning', 'dark', '9'),\n '--u-tag-warning-color': T('color', 'warning'),\n '--u-tag-warning-border': T('color', 'warning'),\n '--u-tag-danger-bg': T('color', 'danger', 'dark', '9'),\n '--u-tag-danger-color': T('color', 'danger'),\n '--u-tag-danger-border': T('color', 'danger'),\n '--u-tag-info-bg': T('color', 'info', 'dark', '9'),\n '--u-tag-info-color': T('color', 'info'),\n '--u-tag-info-border': T('color', 'info'),\n\n // ─── File Picker Colors ───\n '--u-file-picker-hover-bg': T('color', 'primary', 'dark', '9')\n}\n\nfunction recordToDeclList(record: Record<string, string>): string[] {\n return Object.entries(record).map(([k, v]) => `${k}: ${v}`)\n}\n\nexport const componentCssVarsLightDecls: string[] = recordToDeclList(componentCssVarsLight)\n\nexport const componentCssVarsDarkDecls: string[] = recordToDeclList(componentCssVarsDark)\n"],"mappings":"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"}
@@ -62,7 +62,7 @@ const heroDarkTheme = heroLightTheme.new({
62
62
  placeholder: "#71717A",
63
63
  assist: "#71717A",
64
64
  disabled: "#71717A",
65
- white: "#000000"
65
+ white: "#FFFFFF"
66
66
  },
67
67
  shadow: {
68
68
  color: "rgba(0, 0, 0, 0.2)",
@@ -1 +1 @@
1
- {"version":3,"file":"hero.js","names":[],"sources":["../../src/theme/hero.ts"],"sourcesContent":["import { lightTheme } from './light'\n\nexport const heroLightTheme = lightTheme.new({\n color: {\n primary: '#7828c8', // purple\n success: '#17c964',\n warning: '#f5a524',\n danger: '#f31260',\n info: '#006fee',\n disabled: '#f4f4f5',\n default: '#f4f4f5'\n },\n border: { width: 2, color: '#dcdfe6', mutedColor: 'transparent' },\n 'text-color': {\n title: '#11181C',\n main: '#11181C',\n second: '#71717A',\n placeholder: '#A1A1AA',\n assist: '#A1A1AA',\n disabled: '#A1A1AA',\n white: '#FFFFFF'\n },\n radius: { small: 8, default: 12, large: 14 },\n shadow: {\n color: 'rgba(0, 0, 0, 0.08)',\n x: 0,\n y: 4,\n blur: 14,\n spread: 0,\n emboss: '0 2px 4px 0 #0000000a,0 1px 2px 0 #0000000f,0 0 3px 0px #0000000f'\n }\n})\n\nexport const heroDarkTheme = heroLightTheme.new({\n color: { primary: '#9353d3', disabled: '#27272a', default: '#27272a' },\n bg: {\n color: {\n bottom: '#000000',\n middle: '#18181b',\n top: '#27272a',\n hover: '#3f3f46',\n black: '#000000'\n }\n },\n border: { color: '#3f3f46', mutedColor: 'transparent' },\n 'text-color': {\n title: '#ECEDEE',\n main: '#ECEDEE',\n second: '#A1A1AA',\n placeholder: '#71717A',\n assist: '#71717A',\n disabled: '#71717A',\n white: '#000000'\n },\n shadow: {\n color: 'rgba(0, 0, 0, 0.2)',\n x: 0,\n y: 4,\n blur: 14,\n spread: 0,\n emboss: '0 2px 4px 0 #0000000a,0 1px 2px 0 #0000000f,0 0 1px 0 #0000000f'\n }\n})\n"],"mappings":";;AAEA,MAAa,iBAAiB,WAAW,IAAI;CAC3C,OAAO;EACL,SAAS;EACT,SAAS;EACT,SAAS;EACT,QAAQ;EACR,MAAM;EACN,UAAU;EACV,SAAS;EACV;CACD,QAAQ;EAAE,OAAO;EAAG,OAAO;EAAW,YAAY;EAAe;CACjE,cAAc;EACZ,OAAO;EACP,MAAM;EACN,QAAQ;EACR,aAAa;EACb,QAAQ;EACR,UAAU;EACV,OAAO;EACR;CACD,QAAQ;EAAE,OAAO;EAAG,SAAS;EAAI,OAAO;EAAI;CAC5C,QAAQ;EACN,OAAO;EACP,GAAG;EACH,GAAG;EACH,MAAM;EACN,QAAQ;EACR,QAAQ;EACT;CACF,CAAC;AAEF,MAAa,gBAAgB,eAAe,IAAI;CAC9C,OAAO;EAAE,SAAS;EAAW,UAAU;EAAW,SAAS;EAAW;CACtE,IAAI,EACF,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,KAAK;EACL,OAAO;EACP,OAAO;EACR,EACF;CACD,QAAQ;EAAE,OAAO;EAAW,YAAY;EAAe;CACvD,cAAc;EACZ,OAAO;EACP,MAAM;EACN,QAAQ;EACR,aAAa;EACb,QAAQ;EACR,UAAU;EACV,OAAO;EACR;CACD,QAAQ;EACN,OAAO;EACP,GAAG;EACH,GAAG;EACH,MAAM;EACN,QAAQ;EACR,QAAQ;EACT;CACF,CAAC"}
1
+ {"version":3,"file":"hero.js","names":[],"sources":["../../src/theme/hero.ts"],"sourcesContent":["import { lightTheme } from './light'\n\nexport const heroLightTheme = lightTheme.new({\n color: {\n primary: '#7828c8', // purple\n success: '#17c964',\n warning: '#f5a524',\n danger: '#f31260',\n info: '#006fee',\n disabled: '#f4f4f5',\n default: '#f4f4f5'\n },\n border: { width: 2, color: '#dcdfe6', mutedColor: 'transparent' },\n 'text-color': {\n title: '#11181C',\n main: '#11181C',\n second: '#71717A',\n placeholder: '#A1A1AA',\n assist: '#A1A1AA',\n disabled: '#A1A1AA',\n white: '#FFFFFF'\n },\n radius: { small: 8, default: 12, large: 14 },\n shadow: {\n color: 'rgba(0, 0, 0, 0.08)',\n x: 0,\n y: 4,\n blur: 14,\n spread: 0,\n emboss: '0 2px 4px 0 #0000000a,0 1px 2px 0 #0000000f,0 0 3px 0px #0000000f'\n }\n})\n\nexport const heroDarkTheme = heroLightTheme.new({\n color: { primary: '#9353d3', disabled: '#27272a', default: '#27272a' },\n bg: {\n color: {\n bottom: '#000000',\n middle: '#18181b',\n top: '#27272a',\n hover: '#3f3f46',\n black: '#000000'\n }\n },\n border: { color: '#3f3f46', mutedColor: 'transparent' },\n 'text-color': {\n title: '#ECEDEE',\n main: '#ECEDEE',\n second: '#A1A1AA',\n placeholder: '#71717A',\n assist: '#71717A',\n disabled: '#71717A',\n white: '#FFFFFF'\n },\n shadow: {\n color: 'rgba(0, 0, 0, 0.2)',\n x: 0,\n y: 4,\n blur: 14,\n spread: 0,\n emboss: '0 2px 4px 0 #0000000a,0 1px 2px 0 #0000000f,0 0 1px 0 #0000000f'\n }\n})\n"],"mappings":";;AAEA,MAAa,iBAAiB,WAAW,IAAI;CAC3C,OAAO;EACL,SAAS;EACT,SAAS;EACT,SAAS;EACT,QAAQ;EACR,MAAM;EACN,UAAU;EACV,SAAS;EACV;CACD,QAAQ;EAAE,OAAO;EAAG,OAAO;EAAW,YAAY;EAAe;CACjE,cAAc;EACZ,OAAO;EACP,MAAM;EACN,QAAQ;EACR,aAAa;EACb,QAAQ;EACR,UAAU;EACV,OAAO;EACR;CACD,QAAQ;EAAE,OAAO;EAAG,SAAS;EAAI,OAAO;EAAI;CAC5C,QAAQ;EACN,OAAO;EACP,GAAG;EACH,GAAG;EACH,MAAM;EACN,QAAQ;EACR,QAAQ;EACT;CACF,CAAC;AAEF,MAAa,gBAAgB,eAAe,IAAI;CAC9C,OAAO;EAAE,SAAS;EAAW,UAAU;EAAW,SAAS;EAAW;CACtE,IAAI,EACF,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,KAAK;EACL,OAAO;EACP,OAAO;EACR,EACF;CACD,QAAQ;EAAE,OAAO;EAAW,YAAY;EAAe;CACvD,cAAc;EACZ,OAAO;EACP,MAAM;EACN,QAAQ;EACR,aAAa;EACb,QAAQ;EACR,UAAU;EACV,OAAO;EACR;CACD,QAAQ;EACN,OAAO;EACP,GAAG;EACH,GAAG;EACH,MAAM;EACN,QAAQ;EACR,QAAQ;EACT;CACF,CAAC"}
@@ -42,6 +42,11 @@ const shadcnLightTheme = lightTheme.new({
42
42
  blur: 2,
43
43
  spread: 0,
44
44
  emboss: "none"
45
+ },
46
+ button: {
47
+ "primary-text-color": "#ffffff",
48
+ "primary-hover-bg": "#27272a",
49
+ "primary-hover-color": "#ffffff"
45
50
  }
46
51
  });
47
52
  const shadcnDarkTheme = shadcnLightTheme.new({
@@ -58,7 +63,7 @@ const shadcnDarkTheme = shadcnLightTheme.new({
58
63
  black: "#000000"
59
64
  } },
60
65
  border: {
61
- color: "#27272a",
66
+ color: "#3f3f46",
62
67
  mutedColor: "#27272a"
63
68
  },
64
69
  "text-color": {
@@ -68,8 +73,24 @@ const shadcnDarkTheme = shadcnLightTheme.new({
68
73
  placeholder: "#71717a",
69
74
  assist: "#71717a",
70
75
  disabled: "#71717a",
71
- white: "#000000"
72
- }
76
+ white: "#ffffff"
77
+ },
78
+ shadow: {
79
+ color: "rgba(0, 0, 0, 0.4)",
80
+ x: 0,
81
+ y: 1,
82
+ blur: 2,
83
+ spread: 0,
84
+ emboss: "none"
85
+ },
86
+ button: {
87
+ "primary-text-color": "#000000",
88
+ "primary-hover-bg": "#e4e4e7",
89
+ "primary-hover-color": "#000000",
90
+ "primary-plain-color": "#fafafa"
91
+ },
92
+ checkbox: { color: "#000000" },
93
+ tag: { "primary-dark-color": "#000000" }
73
94
  });
74
95
  //#endregion
75
96
  export { shadcnDarkTheme, shadcnLightTheme };
@@ -1 +1 @@
1
- {"version":3,"file":"shadcn.js","names":[],"sources":["../../src/theme/shadcn.ts"],"sourcesContent":["import { lightTheme } from './light'\n\nexport const shadcnLightTheme = lightTheme.new({\n color: {\n primary: '#18181b', // zinc-900\n success: '#22c55e',\n warning: '#f59e0b',\n danger: '#ef4444',\n info: '#3b82f6',\n disabled: '#f4f4f5',\n default: '#fafafa'\n },\n bg: {\n color: {\n bottom: '#f4f4f5',\n middle: '#fafafa',\n top: '#ffffff',\n hover: '#f4f4f5',\n black: '#000000'\n }\n },\n border: { color: '#e4e4e7', mutedColor: '#e4e4e7' },\n 'text-color': {\n title: '#09090b',\n main: '#09090b',\n second: '#71717a',\n placeholder: '#a1a1aa',\n assist: '#a1a1aa',\n disabled: '#a1a1aa',\n white: '#ffffff'\n },\n radius: { small: 4, default: 6, large: 8 },\n shadow: { color: 'rgba(0, 0, 0, 0.05)', x: 0, y: 1, blur: 2, spread: 0, emboss: 'none' }\n})\n\nexport const shadcnDarkTheme = shadcnLightTheme.new({\n color: {\n primary: '#fafafa', // zinc-50\n disabled: '#27272a',\n default: '#18181b'\n },\n bg: {\n color: {\n bottom: '#09090b',\n middle: '#18181b',\n top: '#27272a',\n hover: '#27272a',\n black: '#000000'\n }\n },\n border: { color: '#27272a', mutedColor: '#27272a' },\n 'text-color': {\n title: '#fafafa',\n main: '#fafafa',\n second: '#a1a1aa',\n placeholder: '#71717a',\n assist: '#71717a',\n disabled: '#71717a',\n white: '#000000'\n }\n})\n"],"mappings":";;AAEA,MAAa,mBAAmB,WAAW,IAAI;CAC7C,OAAO;EACL,SAAS;EACT,SAAS;EACT,SAAS;EACT,QAAQ;EACR,MAAM;EACN,UAAU;EACV,SAAS;EACV;CACD,IAAI,EACF,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,KAAK;EACL,OAAO;EACP,OAAO;EACR,EACF;CACD,QAAQ;EAAE,OAAO;EAAW,YAAY;EAAW;CACnD,cAAc;EACZ,OAAO;EACP,MAAM;EACN,QAAQ;EACR,aAAa;EACb,QAAQ;EACR,UAAU;EACV,OAAO;EACR;CACD,QAAQ;EAAE,OAAO;EAAG,SAAS;EAAG,OAAO;EAAG;CAC1C,QAAQ;EAAE,OAAO;EAAuB,GAAG;EAAG,GAAG;EAAG,MAAM;EAAG,QAAQ;EAAG,QAAQ;EAAQ;CACzF,CAAC;AAEF,MAAa,kBAAkB,iBAAiB,IAAI;CAClD,OAAO;EACL,SAAS;EACT,UAAU;EACV,SAAS;EACV;CACD,IAAI,EACF,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,KAAK;EACL,OAAO;EACP,OAAO;EACR,EACF;CACD,QAAQ;EAAE,OAAO;EAAW,YAAY;EAAW;CACnD,cAAc;EACZ,OAAO;EACP,MAAM;EACN,QAAQ;EACR,aAAa;EACb,QAAQ;EACR,UAAU;EACV,OAAO;EACR;CACF,CAAC"}
1
+ {"version":3,"file":"shadcn.js","names":[],"sources":["../../src/theme/shadcn.ts"],"sourcesContent":["import { lightTheme } from './light'\n\nexport const shadcnLightTheme = lightTheme.new({\n color: {\n primary: '#18181b', // zinc-900\n success: '#22c55e',\n warning: '#f59e0b',\n danger: '#ef4444',\n info: '#3b82f6',\n disabled: '#f4f4f5',\n default: '#fafafa'\n },\n bg: {\n color: {\n bottom: '#f4f4f5',\n middle: '#fafafa',\n top: '#ffffff',\n hover: '#f4f4f5',\n black: '#000000'\n }\n },\n border: { color: '#e4e4e7', mutedColor: '#e4e4e7' },\n 'text-color': {\n title: '#09090b',\n main: '#09090b',\n second: '#71717a',\n placeholder: '#a1a1aa',\n assist: '#a1a1aa',\n disabled: '#a1a1aa',\n white: '#ffffff'\n },\n radius: { small: 4, default: 6, large: 8 },\n shadow: { color: 'rgba(0, 0, 0, 0.05)', x: 0, y: 1, blur: 2, spread: 0, emboss: 'none' },\n button: {\n 'primary-text-color': '#ffffff',\n 'primary-hover-bg': '#27272a',\n 'primary-hover-color': '#ffffff'\n }\n})\n\nexport const shadcnDarkTheme = shadcnLightTheme.new({\n color: {\n primary: '#fafafa', // zinc-50\n disabled: '#27272a',\n default: '#18181b'\n },\n bg: {\n color: {\n bottom: '#09090b',\n middle: '#18181b',\n top: '#27272a',\n hover: '#27272a',\n black: '#000000'\n }\n },\n border: { color: '#3f3f46', mutedColor: '#27272a' },\n 'text-color': {\n title: '#fafafa',\n main: '#fafafa',\n second: '#a1a1aa',\n placeholder: '#71717a',\n assist: '#71717a',\n disabled: '#71717a',\n white: '#ffffff'\n },\n shadow: { color: 'rgba(0, 0, 0, 0.4)', x: 0, y: 1, blur: 2, spread: 0, emboss: 'none' },\n button: {\n 'primary-text-color': '#000000',\n 'primary-hover-bg': '#e4e4e7',\n 'primary-hover-color': '#000000',\n 'primary-plain-color': '#fafafa'\n },\n checkbox: { color: '#000000' },\n tag: { 'primary-dark-color': '#000000' }\n})\n"],"mappings":";;AAEA,MAAa,mBAAmB,WAAW,IAAI;CAC7C,OAAO;EACL,SAAS;EACT,SAAS;EACT,SAAS;EACT,QAAQ;EACR,MAAM;EACN,UAAU;EACV,SAAS;EACV;CACD,IAAI,EACF,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,KAAK;EACL,OAAO;EACP,OAAO;EACR,EACF;CACD,QAAQ;EAAE,OAAO;EAAW,YAAY;EAAW;CACnD,cAAc;EACZ,OAAO;EACP,MAAM;EACN,QAAQ;EACR,aAAa;EACb,QAAQ;EACR,UAAU;EACV,OAAO;EACR;CACD,QAAQ;EAAE,OAAO;EAAG,SAAS;EAAG,OAAO;EAAG;CAC1C,QAAQ;EAAE,OAAO;EAAuB,GAAG;EAAG,GAAG;EAAG,MAAM;EAAG,QAAQ;EAAG,QAAQ;EAAQ;CACxF,QAAQ;EACN,sBAAsB;EACtB,oBAAoB;EACpB,uBAAuB;EACxB;CACF,CAAC;AAEF,MAAa,kBAAkB,iBAAiB,IAAI;CAClD,OAAO;EACL,SAAS;EACT,UAAU;EACV,SAAS;EACV;CACD,IAAI,EACF,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,KAAK;EACL,OAAO;EACP,OAAO;EACR,EACF;CACD,QAAQ;EAAE,OAAO;EAAW,YAAY;EAAW;CACnD,cAAc;EACZ,OAAO;EACP,MAAM;EACN,QAAQ;EACR,aAAa;EACb,QAAQ;EACR,UAAU;EACV,OAAO;EACR;CACD,QAAQ;EAAE,OAAO;EAAsB,GAAG;EAAG,GAAG;EAAG,MAAM;EAAG,QAAQ;EAAG,QAAQ;EAAQ;CACvF,QAAQ;EACN,sBAAsB;EACtB,oBAAoB;EACpB,uBAAuB;EACvB,uBAAuB;EACxB;CACD,UAAU,EAAE,OAAO,WAAW;CAC9B,KAAK,EAAE,sBAAsB,WAAW;CACzC,CAAC"}
@@ -87,6 +87,7 @@ type Theme = {
87
87
  md: number; /** 大屏幕断点 */
88
88
  lg: number;
89
89
  };
90
+ [key: string]: any;
90
91
  };
91
92
  //#endregion
92
93
  export { RGBColor, Theme };
@@ -1,6 +1,6 @@
1
1
  import { componentCssVarsDarkDecls, componentCssVarsLightDecls } from "./component-css-vars.js";
2
2
  import { mixColor } from "./helper.js";
3
- import { isObj, o, str } from "@cat-kit/core";
3
+ import { isObj, str } from "@cat-kit/core";
4
4
  import { withUnit } from "@veltra/utils";
5
5
  import { reactive, toRaw, watch } from "vue";
6
6
  //#region src/theme/ui-theme.ts
@@ -128,7 +128,8 @@ var UITheme = class UITheme {
128
128
  UITheme.applyGlobalCSS(css);
129
129
  }
130
130
  render() {
131
- const decls = [...this.themeToDeclarationList(toRaw(this.theme)), ...componentCssVarsLightDecls];
131
+ const componentDecls = typeof document !== "undefined" && document.documentElement.dataset.theme === "dark" ? componentCssVarsDarkDecls : componentCssVarsLightDecls;
132
+ const decls = [...this.themeToDeclarationList(toRaw(this.theme)), ...componentDecls];
132
133
  const css = `html { ${UITheme.declarationBlock(decls)} }`;
133
134
  UITheme.applyGlobalCSS(css);
134
135
  }
@@ -142,7 +143,17 @@ var UITheme = class UITheme {
142
143
  }
143
144
  delEmpty(customTheme);
144
145
  const base = JSON.parse(JSON.stringify(toRaw(this.theme)));
145
- o(base).deepExtend(customTheme);
146
+ function deepMerge(target, source) {
147
+ if (typeof source !== "object" || source === null) return;
148
+ Object.keys(source).forEach((key) => {
149
+ const sourceVal = source[key];
150
+ if (typeof sourceVal === "object" && sourceVal !== null && !Array.isArray(sourceVal)) {
151
+ if (typeof target[key] !== "object" || target[key] === null) target[key] = {};
152
+ deepMerge(target[key], sourceVal);
153
+ } else target[key] = sourceVal;
154
+ });
155
+ }
156
+ deepMerge(base, customTheme);
146
157
  return new UITheme(base, { reactive: this.reactiveEnabled });
147
158
  }
148
159
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ui-theme.js","names":[],"sources":["../../src/theme/ui-theme.ts"],"sourcesContent":["import { isObj, o, str } from '@cat-kit/core'\nimport { withUnit } from '@veltra/utils'\nimport { reactive, toRaw, watch } from 'vue'\n\nimport { componentCssVarsDarkDecls, componentCssVarsLightDecls } from './component-css-vars'\nimport { mixColor } from './helper'\nimport type { Theme } from './type'\n\ntype RecursivePartial<T> = {\n [P in keyof T]?: T[P] extends object ? RecursivePartial<T[P]> : T[P]\n}\n\nexport class UITheme {\n static themeID = 'ultra-ui-theme'\n\n private static adoptedSheet: CSSStyleSheet | null = null\n\n readonly theme: Theme\n\n private readonly reactiveEnabled: boolean\n\n constructor(theme: Theme, options?: { reactive?: boolean }) {\n this.reactiveEnabled = options?.reactive !== false\n this.theme = reactive(theme) as Theme\n if (this.reactiveEnabled) {\n watch(this.theme, () => this.render(), { deep: true })\n }\n }\n\n static setTheme(mode: 'light' | 'dark' | 'auto'): void {\n if (typeof document === 'undefined') return\n const el = document.documentElement\n if (mode === 'auto') {\n delete el.dataset.theme\n } else {\n el.dataset.theme = mode\n }\n }\n\n private renderBase(\n theme: Record<string, unknown>,\n themeRules: string[] = [],\n parentKey = '--u'\n ): string[] {\n Object.keys(theme).forEach((key) => {\n const value = theme[key]\n const varKey = `${parentKey.startsWith('-') ? parentKey : str(parentKey).kebabCase()}-${str(key).kebabCase()}`\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n this.renderBase(value as Record<string, unknown>, themeRules, varKey)\n } else {\n if (value || value === 0) {\n const v = withUnit(value as number | string, 'px')\n if (v !== undefined) {\n themeRules.push(`${varKey}: ${v}`)\n }\n }\n }\n })\n\n return themeRules\n }\n\n private renderBorder(theme: Theme): string {\n const shorthandKeys = (Object.keys(theme.border) as Array<keyof typeof theme.border>).filter(\n (key) => key !== 'mutedColor'\n )\n const border = shorthandKeys.map((key) => `var(--u-border-${key})`).join(' ')\n\n return [\n `--u-border: ${border}`,\n `--u-border-muted: var(--u-border-muted-color) var(--u-border-width) var(--u-border-style)`\n ].join(';')\n }\n\n private renderTypeColor(theme: Theme): string {\n const { color } = theme\n\n const types = Object.keys(color)\n const rates = [1, 3, 5, 7, 9]\n\n return types\n .map((type) => {\n const colorValue = color[type as keyof typeof color]! as `#${string}`\n\n return rates\n .map((rate) => {\n const light = `--u-color-${type}-light-${rate}: ${mixColor(\n colorValue,\n '#fff',\n rate / 10\n )}`\n const dark = `--u-color-${type}-dark-${rate}: ${mixColor(\n colorValue,\n '#000',\n rate / 10\n )}`\n return `${light};${dark}`\n })\n .join(';')\n })\n .join(';')\n }\n\n private renderShadow(_theme: Theme): string {\n const shadow = ['x', 'y', 'blur', 'spread', 'color']\n .map((k) => `var(--u-shadow-${k})`)\n .join(' ')\n\n return `--u-shadow: ${shadow}`\n }\n\n private renderBGColorAlpha(theme: Theme): string {\n const { color } = theme.bg\n return Object.keys(color)\n .map((type) => `--u-bg-color-${type}-alpha: ${color[type as keyof typeof color]}aa`)\n .join(';')\n }\n\n private renderBGFilter(theme: Theme): string {\n const { filter } = theme.bg\n const value = filter.blur === 'none' ? 'none' : `${filter.blur} ${filter.saturate}`\n return `--u-bg-filter: ${value}`\n }\n\n /** 主题变量声明列表,均为 `--u-` 前缀的 CSS 自定义属性 */\n themeToDeclarationList(theme: Theme): string[] {\n const raw = theme as unknown as Record<string, unknown>\n const lines: string[] = [...this.renderBase(raw)]\n const chunks = [\n this.renderTypeColor(theme),\n this.renderShadow(theme),\n this.renderBGColorAlpha(theme),\n this.renderBGFilter(theme),\n this.renderBorder(theme)\n ]\n for (const c of chunks) {\n lines.push(\n ...c\n .split(';')\n .map((s) => s.trim())\n .filter(Boolean)\n )\n }\n return lines\n }\n\n private static declarationBlock(decls: string[]): string {\n return decls.join(';')\n }\n\n private static removeExistingStyleTag(doc: Document): void {\n const el = doc.getElementById(UITheme.themeID)\n if (el?.parentNode) {\n el.parentNode.removeChild(el)\n }\n }\n\n private static applyGlobalCSS(css: string): void {\n const doc = typeof document !== 'undefined' ? document : undefined\n if (!doc) return\n\n const canAdopt =\n typeof CSSStyleSheet !== 'undefined' && 'adoptedStyleSheets' in Document.prototype\n\n if (canAdopt) {\n UITheme.removeExistingStyleTag(doc)\n if (!UITheme.adoptedSheet) {\n UITheme.adoptedSheet = new CSSStyleSheet()\n doc.adoptedStyleSheets = [...doc.adoptedStyleSheets, UITheme.adoptedSheet]\n }\n UITheme.adoptedSheet.replaceSync(css)\n } else {\n if (UITheme.adoptedSheet) {\n UITheme.adoptedSheet = null\n }\n let style = doc.getElementById(UITheme.themeID)\n if (!style) {\n style = doc.createElement('style')\n style.id = UITheme.themeID\n doc.head.appendChild(style)\n }\n style.textContent = css\n }\n }\n\n /** 内置 light/dark:支持 data-theme 与 prefers-color-scheme */\n static injectBuiltInThemes(light: UITheme, dark: UITheme): void {\n const lightDecls = [\n ...light.themeToDeclarationList(toRaw(light.theme)),\n ...componentCssVarsLightDecls\n ]\n const darkDecls = [\n ...dark.themeToDeclarationList(toRaw(dark.theme)),\n ...componentCssVarsDarkDecls\n ]\n const lightBlock = UITheme.declarationBlock(lightDecls)\n const darkBlock = UITheme.declarationBlock(darkDecls)\n\n const css = [\n `html { ${lightBlock} }`,\n `@media (prefers-color-scheme: dark) {`,\n ` html:not([data-theme=\"light\"]) { ${darkBlock} }`,\n `}`,\n `html[data-theme=\"light\"] { ${lightBlock} }`,\n `html[data-theme=\"dark\"] { ${darkBlock} }`\n ].join('\\n')\n\n UITheme.applyGlobalCSS(css)\n }\n\n render(): void {\n const decls = [...this.themeToDeclarationList(toRaw(this.theme)), ...componentCssVarsLightDecls]\n const block = UITheme.declarationBlock(decls)\n const css = `html { ${block} }`\n UITheme.applyGlobalCSS(css)\n }\n\n new(customTheme: RecursivePartial<Theme> = {}): UITheme {\n function delEmpty(obj: Record<string, unknown>) {\n Object.keys(obj).forEach((key) => {\n const value = obj[key]\n if (isObj(value)) {\n return delEmpty(value as Record<string, unknown>)\n }\n if (!value && value !== 0) {\n delete obj[key]\n }\n })\n }\n\n delEmpty(customTheme as Record<string, unknown>)\n\n const base = JSON.parse(JSON.stringify(toRaw(this.theme))) as Record<string, any>\n o(base).deepExtend(customTheme as Record<string, any>)\n return new UITheme(base as Theme, { reactive: this.reactiveEnabled })\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ui-theme.js","names":[],"sources":["../../src/theme/ui-theme.ts"],"sourcesContent":["import { isObj, str } from '@cat-kit/core'\nimport { withUnit } from '@veltra/utils'\nimport { reactive, toRaw, watch } from 'vue'\n\nimport { componentCssVarsDarkDecls, componentCssVarsLightDecls } from './component-css-vars'\nimport { mixColor } from './helper'\nimport type { Theme } from './type'\n\ntype RecursivePartial<T> = {\n [P in keyof T]?: T[P] extends object ? RecursivePartial<T[P]> : T[P]\n}\n\nexport class UITheme {\n static themeID = 'ultra-ui-theme'\n\n private static adoptedSheet: CSSStyleSheet | null = null\n\n readonly theme: Theme\n\n private readonly reactiveEnabled: boolean\n\n constructor(theme: Theme, options?: { reactive?: boolean }) {\n this.reactiveEnabled = options?.reactive !== false\n this.theme = reactive(theme) as Theme\n if (this.reactiveEnabled) {\n watch(this.theme, () => this.render(), { deep: true })\n }\n }\n\n static setTheme(mode: 'light' | 'dark' | 'auto'): void {\n if (typeof document === 'undefined') return\n const el = document.documentElement\n if (mode === 'auto') {\n delete el.dataset.theme\n } else {\n el.dataset.theme = mode\n }\n }\n\n private renderBase(\n theme: Record<string, unknown>,\n themeRules: string[] = [],\n parentKey = '--u'\n ): string[] {\n Object.keys(theme).forEach((key) => {\n const value = theme[key]\n const varKey = `${parentKey.startsWith('-') ? parentKey : str(parentKey).kebabCase()}-${str(key).kebabCase()}`\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n this.renderBase(value as Record<string, unknown>, themeRules, varKey)\n } else {\n if (value || value === 0) {\n const v = withUnit(value as number | string, 'px')\n if (v !== undefined) {\n themeRules.push(`${varKey}: ${v}`)\n }\n }\n }\n })\n\n return themeRules\n }\n\n private renderBorder(theme: Theme): string {\n const shorthandKeys = (Object.keys(theme.border) as Array<keyof typeof theme.border>).filter(\n (key) => key !== 'mutedColor'\n )\n const border = shorthandKeys.map((key) => `var(--u-border-${key})`).join(' ')\n\n return [\n `--u-border: ${border}`,\n `--u-border-muted: var(--u-border-muted-color) var(--u-border-width) var(--u-border-style)`\n ].join(';')\n }\n\n private renderTypeColor(theme: Theme): string {\n const { color } = theme\n\n const types = Object.keys(color)\n const rates = [1, 3, 5, 7, 9]\n\n return types\n .map((type) => {\n const colorValue = color[type as keyof typeof color]! as `#${string}`\n\n return rates\n .map((rate) => {\n const light = `--u-color-${type}-light-${rate}: ${mixColor(\n colorValue,\n '#fff',\n rate / 10\n )}`\n const dark = `--u-color-${type}-dark-${rate}: ${mixColor(\n colorValue,\n '#000',\n rate / 10\n )}`\n return `${light};${dark}`\n })\n .join(';')\n })\n .join(';')\n }\n\n private renderShadow(_theme: Theme): string {\n const shadow = ['x', 'y', 'blur', 'spread', 'color']\n .map((k) => `var(--u-shadow-${k})`)\n .join(' ')\n\n return `--u-shadow: ${shadow}`\n }\n\n private renderBGColorAlpha(theme: Theme): string {\n const { color } = theme.bg\n return Object.keys(color)\n .map((type) => `--u-bg-color-${type}-alpha: ${color[type as keyof typeof color]}aa`)\n .join(';')\n }\n\n private renderBGFilter(theme: Theme): string {\n const { filter } = theme.bg\n const value = filter.blur === 'none' ? 'none' : `${filter.blur} ${filter.saturate}`\n return `--u-bg-filter: ${value}`\n }\n\n /** 主题变量声明列表,均为 `--u-` 前缀的 CSS 自定义属性 */\n themeToDeclarationList(theme: Theme): string[] {\n const raw = theme as unknown as Record<string, unknown>\n const lines: string[] = [...this.renderBase(raw)]\n const chunks = [\n this.renderTypeColor(theme),\n this.renderShadow(theme),\n this.renderBGColorAlpha(theme),\n this.renderBGFilter(theme),\n this.renderBorder(theme)\n ]\n for (const c of chunks) {\n lines.push(\n ...c\n .split(';')\n .map((s) => s.trim())\n .filter(Boolean)\n )\n }\n return lines\n }\n\n private static declarationBlock(decls: string[]): string {\n return decls.join(';')\n }\n\n private static removeExistingStyleTag(doc: Document): void {\n const el = doc.getElementById(UITheme.themeID)\n if (el?.parentNode) {\n el.parentNode.removeChild(el)\n }\n }\n\n private static applyGlobalCSS(css: string): void {\n const doc = typeof document !== 'undefined' ? document : undefined\n if (!doc) return\n\n const canAdopt =\n typeof CSSStyleSheet !== 'undefined' && 'adoptedStyleSheets' in Document.prototype\n\n if (canAdopt) {\n UITheme.removeExistingStyleTag(doc)\n if (!UITheme.adoptedSheet) {\n UITheme.adoptedSheet = new CSSStyleSheet()\n doc.adoptedStyleSheets = [...doc.adoptedStyleSheets, UITheme.adoptedSheet]\n }\n UITheme.adoptedSheet.replaceSync(css)\n } else {\n if (UITheme.adoptedSheet) {\n UITheme.adoptedSheet = null\n }\n let style = doc.getElementById(UITheme.themeID)\n if (!style) {\n style = doc.createElement('style')\n style.id = UITheme.themeID\n doc.head.appendChild(style)\n }\n style.textContent = css\n }\n }\n\n /** 内置 light/dark:支持 data-theme 与 prefers-color-scheme */\n static injectBuiltInThemes(light: UITheme, dark: UITheme): void {\n const lightDecls = [\n ...light.themeToDeclarationList(toRaw(light.theme)),\n ...componentCssVarsLightDecls\n ]\n const darkDecls = [\n ...dark.themeToDeclarationList(toRaw(dark.theme)),\n ...componentCssVarsDarkDecls\n ]\n const lightBlock = UITheme.declarationBlock(lightDecls)\n const darkBlock = UITheme.declarationBlock(darkDecls)\n\n const css = [\n `html { ${lightBlock} }`,\n `@media (prefers-color-scheme: dark) {`,\n ` html:not([data-theme=\"light\"]) { ${darkBlock} }`,\n `}`,\n `html[data-theme=\"light\"] { ${lightBlock} }`,\n `html[data-theme=\"dark\"] { ${darkBlock} }`\n ].join('\\n')\n\n UITheme.applyGlobalCSS(css)\n }\n\n render(): void {\n const isDark =\n typeof document !== 'undefined' && document.documentElement.dataset.theme === 'dark'\n const componentDecls = isDark ? componentCssVarsDarkDecls : componentCssVarsLightDecls\n const decls = [...this.themeToDeclarationList(toRaw(this.theme)), ...componentDecls]\n const block = UITheme.declarationBlock(decls)\n const css = `html { ${block} }`\n UITheme.applyGlobalCSS(css)\n }\n\n new(customTheme: RecursivePartial<Theme> = {}): UITheme {\n function delEmpty(obj: Record<string, unknown>) {\n Object.keys(obj).forEach((key) => {\n const value = obj[key]\n if (isObj(value)) {\n return delEmpty(value as Record<string, unknown>)\n }\n if (!value && value !== 0) {\n delete obj[key]\n }\n })\n }\n\n delEmpty(customTheme as Record<string, unknown>)\n\n const base = JSON.parse(JSON.stringify(toRaw(this.theme))) as Record<string, any>\n\n function deepMerge(target: any, source: any) {\n if (typeof source !== 'object' || source === null) return\n Object.keys(source).forEach((key) => {\n const sourceVal = source[key]\n if (typeof sourceVal === 'object' && sourceVal !== null && !Array.isArray(sourceVal)) {\n if (typeof target[key] !== 'object' || target[key] === null) {\n target[key] = {}\n }\n deepMerge(target[key], sourceVal)\n } else {\n target[key] = sourceVal\n }\n })\n }\n\n deepMerge(base, customTheme)\n return new UITheme(base as Theme, { reactive: this.reactiveEnabled })\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veltra/styles",
3
- "version": "1.1.5",
3
+ "version": "1.1.7",
4
4
  "files": [
5
5
  "dist",
6
6
  "src"
@@ -61,8 +61,8 @@
61
61
  },
62
62
  "dependencies": {
63
63
  "@cat-kit/core": "^1.1.3",
64
- "@veltra/compositions": "1.1.5",
65
- "@veltra/utils": "1.1.5"
64
+ "@veltra/compositions": "1.1.7",
65
+ "@veltra/utils": "1.1.7"
66
66
  },
67
67
  "peerDependencies": {
68
68
  "vue": "^3.5.33"
@@ -44,7 +44,66 @@ export const componentCssVarsLight: Record<string, string> = {
44
44
  '--u-switch-height-large': '24px',
45
45
  '--u-breadcrumb-small': '20px',
46
46
  '--u-breadcrumb-default': '22px',
47
- '--u-breadcrumb-large': '24px'
47
+ '--u-breadcrumb-large': '24px',
48
+
49
+ // ─── Button (default & plain states) ───
50
+ '--u-button-default-bg': T('bg-color', 'top'),
51
+ '--u-button-default-border': T('border', 'color'),
52
+ '--u-button-default-color': T('text-color', 'main'),
53
+ '--u-button-default-hover-bg': T('bg-color', 'hover'),
54
+ '--u-button-default-hover-border': T('border', 'color'),
55
+ '--u-button-primary-plain-bg': T('color', 'primary', 'light', '9'),
56
+ '--u-button-primary-plain-shadow': T('color', 'primary', 'light', '5'),
57
+ '--u-button-success-plain-bg': T('color', 'success', 'light', '9'),
58
+ '--u-button-success-plain-shadow': T('color', 'success', 'light', '5'),
59
+ '--u-button-warning-plain-bg': T('color', 'warning', 'light', '9'),
60
+ '--u-button-warning-plain-shadow': T('color', 'warning', 'light', '5'),
61
+ '--u-button-danger-plain-bg': T('color', 'danger', 'light', '9'),
62
+ '--u-button-danger-plain-shadow': T('color', 'danger', 'light', '5'),
63
+ '--u-button-info-plain-bg': T('color', 'info', 'light', '9'),
64
+ '--u-button-info-plain-shadow': T('color', 'info', 'light', '5'),
65
+
66
+ // ─── Tree selection ───
67
+ '--u-tree-node-selected-bg': T('color', 'primary', 'light', '9'),
68
+ '--u-tree-node-selected-color': T('color', 'primary'),
69
+
70
+ // ─── Cascade option active ───
71
+ '--u-cascade-node-active-bg': T('color', 'primary', 'light', '9'),
72
+ '--u-cascade-node-active-color': T('color', 'primary'),
73
+
74
+ // ─── Expression Editor Chip ───
75
+ '--u-expression-editor-chip-bg': T('color', 'primary', 'light', '9'),
76
+ '--u-expression-editor-chip-color': T('color', 'primary'),
77
+
78
+ // ─── Paginator active buttons ───
79
+ '--u-paginator-btn-hover-bg': T('color', 'primary', 'light', '9'),
80
+ '--u-paginator-btn-hover-color': T('text-color', 'title'),
81
+ '--u-paginator-btn-active-bg': T('color', 'primary', 'light', '9'),
82
+ '--u-paginator-btn-active-color': T('color', 'primary'),
83
+
84
+ // ─── Tabs List background ───
85
+ '--u-tabs-bar-bg': T('bg-color', 'hover'),
86
+ '--u-tabs-active-bg': T('bg-color', 'top'),
87
+
88
+ // ─── Tag Component Colors ───
89
+ '--u-tag-primary-bg': T('color', 'primary', 'light', '9'),
90
+ '--u-tag-primary-color': T('color', 'primary'),
91
+ '--u-tag-primary-border': T('color', 'primary'),
92
+ '--u-tag-success-bg': T('color', 'success', 'light', '9'),
93
+ '--u-tag-success-color': T('color', 'success'),
94
+ '--u-tag-success-border': T('color', 'success'),
95
+ '--u-tag-warning-bg': T('color', 'warning', 'light', '9'),
96
+ '--u-tag-warning-color': T('color', 'warning'),
97
+ '--u-tag-warning-border': T('color', 'warning'),
98
+ '--u-tag-danger-bg': T('color', 'danger', 'light', '9'),
99
+ '--u-tag-danger-color': T('color', 'danger'),
100
+ '--u-tag-danger-border': T('color', 'danger'),
101
+ '--u-tag-info-bg': T('color', 'info', 'light', '9'),
102
+ '--u-tag-info-color': T('color', 'info'),
103
+ '--u-tag-info-border': T('color', 'info'),
104
+
105
+ // ─── File Picker Colors ───
106
+ '--u-file-picker-hover-bg': T('color', 'primary', 'light', '9')
48
107
  }
49
108
 
50
109
  /** 暗色下组件 token(含与亮色相同的尺寸项,保证暗色 html 块自洽) */
@@ -68,7 +127,61 @@ export const componentCssVarsDark: Record<string, string> = {
68
127
  '--u-menu-active-color': T('text-color', 'white'),
69
128
  '--u-menu-bg-color': T('bg-color', 'middle'),
70
129
  '--u-radio-border': '#595959',
71
- '--u-checkbox-border': '#595959'
130
+ '--u-checkbox-border': '#595959',
131
+
132
+ // ─── Button (plain & text colors in dark mode) ───
133
+ '--u-button-primary-plain-bg': T('color', 'primary', 'dark', '9'),
134
+ '--u-button-primary-plain-shadow': T('color', 'primary', 'dark', '7'),
135
+ '--u-button-success-plain-bg': T('color', 'success', 'dark', '9'),
136
+ '--u-button-success-plain-shadow': T('color', 'success', 'dark', '7'),
137
+ '--u-button-warning-plain-bg': T('color', 'warning', 'dark', '9'),
138
+ '--u-button-warning-plain-shadow': T('color', 'warning', 'dark', '7'),
139
+ '--u-button-danger-plain-bg': T('color', 'danger', 'dark', '9'),
140
+ '--u-button-danger-plain-shadow': T('color', 'danger', 'dark', '7'),
141
+ '--u-button-info-plain-bg': T('color', 'info', 'dark', '9'),
142
+ '--u-button-info-plain-shadow': T('color', 'info', 'dark', '7'),
143
+
144
+ // ─── Tree selection ───
145
+ '--u-tree-node-selected-bg': T('color', 'primary', 'dark', '9'),
146
+ '--u-tree-node-selected-color': T('color', 'primary'),
147
+
148
+ // ─── Cascade option active ───
149
+ '--u-cascade-node-active-bg': T('color', 'primary', 'dark', '9'),
150
+ '--u-cascade-node-active-color': T('color', 'primary'),
151
+
152
+ // ─── Expression Editor Chip ───
153
+ '--u-expression-editor-chip-bg': T('color', 'primary', 'dark', '9'),
154
+ '--u-expression-editor-chip-color': T('color', 'primary'),
155
+
156
+ // ─── Paginator active buttons ───
157
+ '--u-paginator-btn-hover-bg': T('color', 'primary', 'dark', '9'),
158
+ '--u-paginator-btn-hover-color': T('color', 'primary'),
159
+ '--u-paginator-btn-active-bg': T('color', 'primary', 'dark', '9'),
160
+ '--u-paginator-btn-active-color': T('color', 'primary'),
161
+
162
+ // ─── Tabs List background (improved dark contrast) ───
163
+ '--u-tabs-bar-bg': T('bg-color', 'bottom'),
164
+ '--u-tabs-active-bg': T('bg-color', 'top'),
165
+
166
+ // ─── Tag Component Colors ───
167
+ '--u-tag-primary-bg': T('color', 'primary', 'dark', '9'),
168
+ '--u-tag-primary-color': T('color', 'primary'),
169
+ '--u-tag-primary-border': T('color', 'primary'),
170
+ '--u-tag-success-bg': T('color', 'success', 'dark', '9'),
171
+ '--u-tag-success-color': T('color', 'success'),
172
+ '--u-tag-success-border': T('color', 'success'),
173
+ '--u-tag-warning-bg': T('color', 'warning', 'dark', '9'),
174
+ '--u-tag-warning-color': T('color', 'warning'),
175
+ '--u-tag-warning-border': T('color', 'warning'),
176
+ '--u-tag-danger-bg': T('color', 'danger', 'dark', '9'),
177
+ '--u-tag-danger-color': T('color', 'danger'),
178
+ '--u-tag-danger-border': T('color', 'danger'),
179
+ '--u-tag-info-bg': T('color', 'info', 'dark', '9'),
180
+ '--u-tag-info-color': T('color', 'info'),
181
+ '--u-tag-info-border': T('color', 'info'),
182
+
183
+ // ─── File Picker Colors ───
184
+ '--u-file-picker-hover-bg': T('color', 'primary', 'dark', '9')
72
185
  }
73
186
 
74
187
  function recordToDeclList(record: Record<string, string>): string[] {
package/src/theme/hero.ts CHANGED
@@ -50,7 +50,7 @@ export const heroDarkTheme = heroLightTheme.new({
50
50
  placeholder: '#71717A',
51
51
  assist: '#71717A',
52
52
  disabled: '#71717A',
53
- white: '#000000'
53
+ white: '#FFFFFF'
54
54
  },
55
55
  shadow: {
56
56
  color: 'rgba(0, 0, 0, 0.2)',
@@ -30,7 +30,12 @@ export const shadcnLightTheme = lightTheme.new({
30
30
  white: '#ffffff'
31
31
  },
32
32
  radius: { small: 4, default: 6, large: 8 },
33
- shadow: { color: 'rgba(0, 0, 0, 0.05)', x: 0, y: 1, blur: 2, spread: 0, emboss: 'none' }
33
+ shadow: { color: 'rgba(0, 0, 0, 0.05)', x: 0, y: 1, blur: 2, spread: 0, emboss: 'none' },
34
+ button: {
35
+ 'primary-text-color': '#ffffff',
36
+ 'primary-hover-bg': '#27272a',
37
+ 'primary-hover-color': '#ffffff'
38
+ }
34
39
  })
35
40
 
36
41
  export const shadcnDarkTheme = shadcnLightTheme.new({
@@ -48,7 +53,7 @@ export const shadcnDarkTheme = shadcnLightTheme.new({
48
53
  black: '#000000'
49
54
  }
50
55
  },
51
- border: { color: '#27272a', mutedColor: '#27272a' },
56
+ border: { color: '#3f3f46', mutedColor: '#27272a' },
52
57
  'text-color': {
53
58
  title: '#fafafa',
54
59
  main: '#fafafa',
@@ -56,6 +61,15 @@ export const shadcnDarkTheme = shadcnLightTheme.new({
56
61
  placeholder: '#71717a',
57
62
  assist: '#71717a',
58
63
  disabled: '#71717a',
59
- white: '#000000'
60
- }
64
+ white: '#ffffff'
65
+ },
66
+ shadow: { color: 'rgba(0, 0, 0, 0.4)', x: 0, y: 1, blur: 2, spread: 0, emboss: 'none' },
67
+ button: {
68
+ 'primary-text-color': '#000000',
69
+ 'primary-hover-bg': '#e4e4e7',
70
+ 'primary-hover-color': '#000000',
71
+ 'primary-plain-color': '#fafafa'
72
+ },
73
+ checkbox: { color: '#000000' },
74
+ tag: { 'primary-dark-color': '#000000' }
61
75
  })
package/src/theme/type.ts CHANGED
@@ -157,4 +157,5 @@ export type Theme = {
157
157
  /** 大屏幕断点 */
158
158
  lg: number
159
159
  }
160
+ [key: string]: any
160
161
  }
@@ -1,4 +1,4 @@
1
- import { isObj, o, str } from '@cat-kit/core'
1
+ import { isObj, str } from '@cat-kit/core'
2
2
  import { withUnit } from '@veltra/utils'
3
3
  import { reactive, toRaw, watch } from 'vue'
4
4
 
@@ -209,7 +209,10 @@ export class UITheme {
209
209
  }
210
210
 
211
211
  render(): void {
212
- const decls = [...this.themeToDeclarationList(toRaw(this.theme)), ...componentCssVarsLightDecls]
212
+ const isDark =
213
+ typeof document !== 'undefined' && document.documentElement.dataset.theme === 'dark'
214
+ const componentDecls = isDark ? componentCssVarsDarkDecls : componentCssVarsLightDecls
215
+ const decls = [...this.themeToDeclarationList(toRaw(this.theme)), ...componentDecls]
213
216
  const block = UITheme.declarationBlock(decls)
214
217
  const css = `html { ${block} }`
215
218
  UITheme.applyGlobalCSS(css)
@@ -231,7 +234,23 @@ export class UITheme {
231
234
  delEmpty(customTheme as Record<string, unknown>)
232
235
 
233
236
  const base = JSON.parse(JSON.stringify(toRaw(this.theme))) as Record<string, any>
234
- o(base).deepExtend(customTheme as Record<string, any>)
237
+
238
+ function deepMerge(target: any, source: any) {
239
+ if (typeof source !== 'object' || source === null) return
240
+ Object.keys(source).forEach((key) => {
241
+ const sourceVal = source[key]
242
+ if (typeof sourceVal === 'object' && sourceVal !== null && !Array.isArray(sourceVal)) {
243
+ if (typeof target[key] !== 'object' || target[key] === null) {
244
+ target[key] = {}
245
+ }
246
+ deepMerge(target[key], sourceVal)
247
+ } else {
248
+ target[key] = sourceVal
249
+ }
250
+ })
251
+ }
252
+
253
+ deepMerge(base, customTheme)
235
254
  return new UITheme(base as Theme, { reactive: this.reactiveEnabled })
236
255
  }
237
256
  }