@veltra/styles 1.1.6 → 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.
- package/dist/theme/component-css-vars.js +83 -2
- package/dist/theme/component-css-vars.js.map +1 -1
- package/dist/theme/hero.js +1 -1
- package/dist/theme/hero.js.map +1 -1
- package/dist/theme/shadcn.js +24 -3
- package/dist/theme/shadcn.js.map +1 -1
- package/dist/theme/type.d.ts +1 -0
- package/dist/theme/ui-theme.js +14 -3
- package/dist/theme/ui-theme.js.map +1 -1
- package/package.json +3 -3
- package/src/theme/component-css-vars.ts +115 -2
- package/src/theme/hero.ts +1 -1
- package/src/theme/shadcn.ts +18 -4
- package/src/theme/type.ts +1 -0
- package/src/theme/ui-theme.ts +22 -3
|
@@ -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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"}
|
package/dist/theme/hero.js
CHANGED
package/dist/theme/hero.js.map
CHANGED
|
@@ -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: '#
|
|
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"}
|
package/dist/theme/shadcn.js
CHANGED
|
@@ -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: "#
|
|
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: "#
|
|
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 };
|
package/dist/theme/shadcn.js.map
CHANGED
|
@@ -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: '#
|
|
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"}
|
package/dist/theme/type.d.ts
CHANGED
package/dist/theme/ui-theme.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { componentCssVarsDarkDecls, componentCssVarsLightDecls } from "./component-css-vars.js";
|
|
2
2
|
import { mixColor } from "./helper.js";
|
|
3
|
-
import { isObj,
|
|
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
|
|
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
|
-
|
|
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.
|
|
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.
|
|
65
|
-
"@veltra/utils": "1.1.
|
|
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
package/src/theme/shadcn.ts
CHANGED
|
@@ -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: '#
|
|
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: '#
|
|
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
package/src/theme/ui-theme.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isObj,
|
|
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
|
|
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
|
-
|
|
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
|
}
|