sky-ui-kit 0.1.9 → 0.1.11
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/README.md +17 -20
- package/components.json +1 -1
- package/dist/html/button.css +12 -0
- package/dist/html/input.css +39 -0
- package/dist/html/number.css +8 -0
- package/dist/html/number.js +31 -0
- package/dist/html/panel.css +12 -0
- package/dist/html/theme.css +218 -0
- package/dist/model-workspace.css +252 -15
- package/dist/style.css +254 -17
- package/docs/AI-CHANGELOG.md +46 -0
- package/docs/AI-GUIDE.md +15 -2
- package/docs/CSS-THEME.md +32 -0
- package/docs/HTML-FORM-CATALOG.md +225 -0
- package/docs/HTML-INTEGRATION.md +121 -0
- package/docs/INTEGRATION.md +12 -0
- package/docs/ON-DEMAND.md +8 -0
- package/docs/RELEASE-HISTORY.md +12 -0
- package/examples/html/index.html +41 -0
- package/examples/html/migration/after.html +38 -0
- package/examples/html/migration/before.html +34 -0
- package/examples/html/migration/business.js +18 -0
- package/examples/html/migration/layout.css +9 -0
- package/examples/html/migration/legacy-controls.css +8 -0
- package/llms-full.txt +639 -6
- package/llms.txt +6 -2
- package/package.json +104 -93
package/README.md
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
# sky-ui-kit 组件与样式库
|
|
2
|
+
|
|
3
|
+
## AI 接入入口:先选择使用方式
|
|
4
|
+
|
|
5
|
+
当用户要求引入 sky-ui-kit 时,先读取当前安装包的 llms.txt 和 [原生 HTML 接入与迁移](docs/HTML-INTEGRATION.md),检查项目和真实 exports。原生 HTML 路线统一库支持的控件样式,保留原 DOM、事件和表单行为,无需 Vue。仅在用户明确需要真实 Vue 组件时,才选择 Vue 直接接入或局部挂载。目标不明确时询问;接入后合并项目 AGENTS.md 规则,按实际视觉状态和业务行为验收,不能只以安装成功或 CSS 已加载作为完成依据。
|
|
6
|
+
|
|
7
|
+
HTML 按需入口从 0.1.10 提供;0.1.9 使用完整 model-workspace.css。示例网站快速开始下方提供“HTML 按需样式接入”演示和完整可复制代码。
|
|
2
8
|
|
|
3
9
|
组件用途、数据约定、事件语义和限制见 [组件使用说明](docs/COMPONENT-GUIDE.md);完整类型与默认值见 [组件 API](docs/COMPONENT-API.md)。
|
|
4
10
|
|
|
@@ -12,10 +18,10 @@
|
|
|
12
18
|
|
|
13
19
|
当前实际使用清单见 [COMPONENT-USAGE.md](docs/COMPONENT-USAGE.md),逐模块替换、图标 Vite 配置、路由/地图薄适配、主题与验证方案见 [ADAPTATION.md](docs/ADAPTATION.md)。图标页面与 AI 文档共用 src/icon-setup-examples.ts。更新参考项目后在库目录运行 `node scripts/audit-project.mjs "D:\Work\01-项目code\一体化平台\webv1"` 与 `node scripts/scan-component-usage.mjs "D:\Work\01-项目code\一体化平台\webv1"`,再生成 AI 文档;这些脚本只读取原项目。
|
|
14
20
|
|
|
15
|
-
##
|
|
21
|
+
## 库维护者本地运行
|
|
16
22
|
|
|
17
23
|
```powershell
|
|
18
|
-
cd
|
|
24
|
+
cd <组件库检出目录>
|
|
19
25
|
npm install
|
|
20
26
|
npm run dev
|
|
21
27
|
```
|
|
@@ -63,7 +69,7 @@ ProjectMenu 从原 Header 和 SideMenu 提取独立菜单样式,仅展示横
|
|
|
63
69
|
|
|
64
70
|
## 接入其他项目
|
|
65
71
|
|
|
66
|
-
|
|
72
|
+
以下为 Vue 组件路线;原生 HTML 使用 [HTML 接入指南](docs/HTML-INTEGRATION.md),不需要 Element Plus CSS 或 Vue。Vue 路线无需导入 useThemeStore,也无需安装 Pinia,按顺序引入 Element Plus CSS 与库 CSS,项目已有的同名变量优先;未定义的变量采用库默认值。详细优先级及暗色规则见 [CSS-THEME.md](docs/CSS-THEME.md)。
|
|
67
73
|
|
|
68
74
|
```ts
|
|
69
75
|
import 'element-plus/dist/index.css'
|
|
@@ -81,21 +87,14 @@ npm run build
|
|
|
81
87
|
npm pack --dry-run
|
|
82
88
|
```
|
|
83
89
|
|
|
84
|
-
`site-dist/` 是可部署的预览网站,`dist/` 是 npm 库产物。npm
|
|
85
|
-
|
|
86
|
-
## 核对完成后发布
|
|
87
|
-
|
|
88
|
-
当前 `private: true` 用于防止未审核主题发布。包名已确定为 `sky-ui-kit`,尚未核验 npm 名称可用性。发布前确认包名或 npm scope、版本、代码及字体授权、许可证,并将 `private` 删除或改为 false。若使用 scope,保持接入示例与最终包名一致。
|
|
89
|
-
|
|
90
|
-
```sh
|
|
91
|
-
npm login
|
|
92
|
-
npm run typecheck
|
|
93
|
-
npm pack --dry-run
|
|
94
|
-
npm publish --access public
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
`prepack` 会自动构建。不要把 npm token 写入此目录。本次仅准备预览及包结构,等待样式核对后再发布。
|
|
90
|
+
`site-dist/` 是可部署的预览网站,`dist/` 是 npm 库产物。npm 包包含 dist 库产物、包内 AI/API/迁移文档、HTML 示例及 README;不包含预览网站、主题 store 运行时或原业务代码。
|
|
98
91
|
|
|
92
|
+
## 当前发布状态与维护发布流程
|
|
93
|
+
|
|
94
|
+
当前发布版本为 0.1.11,package.json 未设置 private 限制。HTML 按需样式和数字增强入口从 0.1.10 提供;0.1.11 包含相对链接修复、透明地图覆盖层及旧页面迁移文档和示例。已安装的 0.1.10 需升级后获得修订。
|
|
95
|
+
|
|
96
|
+
消费项目无需执行库构建或发布操作。维护者仅在明确获得发布授权后,更新版本、运行 npm run docs:ai、类型检查和构建,核对包内文件后再发布。prepack 会生成文档并构建,不应把它当成纯检查命令。早期未发布状态见 [开发历史归档](docs/RELEASE-HISTORY.md)。
|
|
97
|
+
|
|
99
98
|
## 样式隔离
|
|
100
99
|
|
|
101
100
|
默认 style.css 只给库组件作用域设置样式,作用域之外的原生 Element Plus 不受库 CSS 覆盖。主动整站换肤才额外导入 global.css。浮层、局部变量和默认 teleported 差异见 [CSS-THEME.md](docs/CSS-THEME.md)。开发验证页:[样式隔离验证](http://127.0.0.1:5180/isolation.html)。
|
|
@@ -107,6 +106,4 @@ npm publish --access public
|
|
|
107
106
|
包内提供 llms.txt、llms-full.txt、components.json 和 docs/AI-GUIDE.md、docs/COMPONENT-API.md。让 AI 工具读取 node_modules/sky-ui-kit/llms.txt 开始,再按链接读取详细 API。文档不会随 npm install 自动进入 AI 上下文。项目组件 API 根据源码生成,Ui 基础组件关联 Element Plus 官方 API 和类型声明。
|
|
108
107
|
|
|
109
108
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
通过 npm 安装 sky-ui-kit,main.ts 依次引入 element-plus/dist/index.css 和 sky-ui-kit/style.css,包内已包含默认主题和组件样式,不依赖开发者电脑、原业务项目或远程样式服务。CSS 变量允许运行时主题覆盖。图标资源可从 sky-ui-kit/icons 显式注册,或由应用提供 sprite;SvgIcon 不再自动携带图库。按组件入口见 docs/ON-DEMAND.md。
|
|
109
|
+
早期 0.1.7 安装说明已移至 [开发历史归档](docs/RELEASE-HISTORY.md)。
|
package/components.json
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* 原生按钮,显式 opt-in;不提供业务交互。保留旧工作区入口。 */
|
|
2
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(button, input[type="button"], input[type="submit"], input[type="reset"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)) { box-sizing: border-box; font-family:var(--userssite-font-family-sans); font-size:var(--userssite-font-size-body); line-height:1; color: var(--userssite-color-text); background: var(--userssite-color-panel); border: 1px solid var(--userssite-color-border); border-radius: var(--userssite-radius-s); height:var(--userssite-control-height-m); padding:8px 15px; font-weight:500; cursor: pointer; }
|
|
3
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(button, input[type="button"], input[type="submit"], input[type="reset"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):where(.primary, .accent, [data-variant="primary"]) { background: var(--userssite-color-primary); border-color: var(--userssite-color-primary); color: var(--userssite-color-on-primary); }
|
|
4
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(button, input[type="button"], input[type="submit"], input[type="reset"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *))[data-variant="danger"] { background: var(--userssite-color-danger); color: var(--userssite-color-white); border-color: var(--userssite-color-danger); }
|
|
5
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(button, input[type="button"], input[type="submit"], input[type="reset"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):hover:not(:disabled) { color:var(--userssite-color-primary); background:color-mix(in oklab,var(--userssite-color-primary) 10%,var(--userssite-color-panel)); border-color:color-mix(in oklab,var(--userssite-color-primary) 30%,var(--userssite-color-panel)); }
|
|
6
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(button, input[type="button"], input[type="submit"], input[type="reset"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):active:not(:disabled) { filter: brightness(.94); }
|
|
7
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(button, input[type="button"], input[type="submit"], input[type="reset"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):disabled { color:var(--userssite-color-subtle); background:var(--userssite-surface-subtle); border-color:var(--userssite-color-soft-border); cursor:not-allowed; }
|
|
8
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(button, input[type="button"], input[type="submit"], input[type="reset"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):focus-visible { outline: 2px solid var(--userssite-color-primary); outline-offset: 2px; }
|
|
9
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(button, input[type="button"], input[type="submit"], input[type="reset"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):where([data-variant="primary"],.primary,.accent):hover:not(:disabled) { background:color-mix(in oklab,var(--userssite-color-primary) 70%,var(--userssite-color-panel)); border-color:color-mix(in oklab,var(--userssite-color-primary) 70%,var(--userssite-color-panel)); color:var(--userssite-color-on-primary); }
|
|
10
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(button, input[type="button"], input[type="submit"], input[type="reset"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):where([data-variant="primary"],.primary,.accent):disabled { background:color-mix(in oklab,var(--userssite-color-primary) 50%,var(--userssite-color-panel)); border-color:color-mix(in oklab,var(--userssite-color-primary) 50%,var(--userssite-color-panel)); color:var(--userssite-color-white); }
|
|
11
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(button, input[type="button"], input[type="submit"], input[type="reset"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *))[data-variant="danger"]:hover:not(:disabled) { background:color-mix(in oklab,var(--userssite-color-danger) 70%,var(--userssite-color-panel)); border-color:color-mix(in oklab,var(--userssite-color-danger) 70%,var(--userssite-color-panel)); color:var(--userssite-color-white); }
|
|
12
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(button, input[type="button"], input[type="submit"], input[type="reset"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *))[data-variant="danger"]:disabled { background:color-mix(in oklab,var(--userssite-color-danger) 50%,var(--userssite-color-panel)); border-color:color-mix(in oklab,var(--userssite-color-danger) 50%,var(--userssite-color-panel)); color:var(--userssite-color-white); }
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* 文本输入、select、textarea;复选框、单选、滑块、文件沿用浏览器。 */
|
|
2
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="color"]):not([type="image"]), select, textarea):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)) { box-sizing: border-box; max-width: 100%; font-family:var(--userssite-font-family-sans); font-size:var(--userssite-font-size-body); line-height:1; color: var(--userssite-color-text); background: var(--userssite-input-bg); border: 1px solid var(--userssite-color-border); border-radius: var(--userssite-radius-s); height:var(--userssite-control-height-m); padding:1px 11px; }
|
|
3
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="color"]):not([type="image"]), select, textarea):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *))::placeholder { color: var(--userssite-input-placeholder); opacity: 1; }
|
|
4
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="color"]):not([type="image"]), select, textarea):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):hover:not(:disabled):not([readonly]):not(:where([aria-invalid="true"], :user-invalid)) { border-color: var(--userssite-color-primary); }
|
|
5
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="color"]):not([type="image"]), select, textarea):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):focus { outline: none; outline-offset: 0; box-shadow: none; border-color: var(--userssite-color-primary); }
|
|
6
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="color"]):not([type="image"]), select, textarea):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):disabled { color:var(--userssite-color-subtle); background:var(--userssite-surface-subtle); border-color:var(--userssite-color-soft-border); cursor:not-allowed; }
|
|
7
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="color"]):not([type="image"]), select, textarea):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *))[readonly] { background: var(--userssite-color-surface); }
|
|
8
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="color"]):not([type="image"]), select, textarea):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):is([aria-invalid="true"], :user-invalid) { border-color: var(--userssite-color-danger); }
|
|
9
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) :where(input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="color"]):not([type="image"]), select, textarea):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):where(textarea) { height:auto; min-height:var(--userssite-control-height-m); padding:5px 11px; line-height:1.5; }
|
|
10
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) :where(input[type="checkbox"],input[type="radio"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)) { appearance:none; box-sizing:border-box; display:inline-grid; place-content:center; vertical-align:middle; width:14px; height:14px; margin:0 6px 0 0; border:1px solid var(--userssite-color-border); border-radius:2px; background:var(--userssite-input-bg); cursor:pointer; }
|
|
11
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) :where(input[type="checkbox"],input[type="radio"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):checked { background:var(--userssite-color-primary); border-color:var(--userssite-color-primary); }
|
|
12
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) :where(input[type="checkbox"],input[type="radio"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *))::after { content:''; width:3px; height:7px; border:solid var(--userssite-color-on-primary); border-width:0 1px 1px 0; transform:rotate(45deg) scale(0); }
|
|
13
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) :where(input[type="checkbox"],input[type="radio"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):checked::after { transform:rotate(45deg) scale(1); }
|
|
14
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) :where(input[type="checkbox"],input[type="radio"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *))[type="radio"] { border-radius:50%; }
|
|
15
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) :where(input[type="checkbox"],input[type="radio"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *))[type="radio"]::after { width:4px; height:4px; border:0; border-radius:50%; background:var(--userssite-color-on-primary); }
|
|
16
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) :where(input[type="checkbox"],input[type="radio"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):disabled { cursor:not-allowed; opacity:.5; }
|
|
17
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) :where(input[type="checkbox"],input[type="radio"]):not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):focus-visible { outline:2px solid var(--userssite-color-primary); outline-offset:2px; }
|
|
18
|
+
|
|
19
|
+
:where(.sky-html) [data-sky-error]:not([data-sky-native="off"]):not([data-sky-native="off"] *) { color:var(--userssite-color-danger); font-size:12px; line-height:1; }
|
|
20
|
+
|
|
21
|
+
/* 多选列表使用原生 size 行数,不继承单行输入高度。 */
|
|
22
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) select:not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):where([multiple], [size]:not([size="1"]):not([size="0"])) { appearance:none; box-sizing:border-box; width:var(--sky-select-list-width, 220px); max-width:100%; height:auto; min-height:calc(var(--userssite-control-height-m) * 3 + 12px); padding:6px; line-height:1.5; vertical-align:top; overflow:auto; background:var(--userssite-input-bg); scrollbar-width:thin; scrollbar-color:var(--userssite-scrollbar-thumb) transparent; }
|
|
23
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) select:not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):where([multiple], [size]:not([size="1"]):not([size="0"])) option { box-sizing:border-box; min-height:var(--userssite-control-height-m); padding:7px 10px; margin:2px 0; border-radius:var(--userssite-radius-s); color:var(--userssite-color-text); cursor:pointer; }
|
|
24
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) input[type="file"]:not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)) { max-width:100%; font-family:var(--userssite-font-family-sans); font-size:var(--userssite-font-size-body); color:var(--userssite-color-text); line-height:1.5; }
|
|
25
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) input[type="file"]:not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *))::file-selector-button { box-sizing:border-box; height:var(--userssite-control-height-m); margin-inline-end:10px; padding:8px 15px; font:inherit; font-weight:500; line-height:1; border:1px solid var(--userssite-color-border); border-radius:var(--userssite-radius-s); background:var(--userssite-color-panel); color:var(--userssite-color-text); cursor:pointer; }
|
|
26
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) input[type="file"]:not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):hover:not(:disabled)::file-selector-button { color:var(--userssite-color-primary); border-color:var(--userssite-color-primary); background:var(--userssite-surface-control-hover); }
|
|
27
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) input[type="file"]:not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):disabled { color:var(--userssite-color-subtle); cursor:not-allowed; }
|
|
28
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) input[type="file"]:not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):disabled::file-selector-button { color:var(--userssite-color-subtle); border-color:var(--userssite-color-soft-border); background:var(--userssite-surface-subtle); cursor:not-allowed; }
|
|
29
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) input[type="file"]:not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):focus-visible { outline:2px solid var(--userssite-color-primary); outline-offset:2px; border-radius:var(--userssite-radius-s); }
|
|
30
|
+
|
|
31
|
+
/* 保留原生多选语义,仅统一列表表面;不触碰单选系统弹层。 */
|
|
32
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) select:not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):where([multiple], [size]:not([size="1"]):not([size="0"])):not(:disabled) option:hover:not(:disabled):not(:checked) { background:var(--userssite-surface-control-hover); }
|
|
33
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) select:not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):where([multiple], [size]:not([size="1"]):not([size="0"])) option:checked { color:var(--userssite-color-primary); background:linear-gradient(var(--userssite-surface-control-active),var(--userssite-surface-control-active)); font-weight:600; }
|
|
34
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) select:not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):where([multiple], [size]:not([size="1"]):not([size="0"])) option:disabled { color:var(--userssite-color-subtle); cursor:not-allowed; }
|
|
35
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) select:not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):where([multiple], [size]:not([size="1"]):not([size="0"])):disabled { color:var(--userssite-color-subtle); background:var(--userssite-surface-subtle); cursor:not-allowed; }
|
|
36
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) select:not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):where([multiple], [size]:not([size="1"]):not([size="0"])):disabled option { color:var(--userssite-color-subtle); cursor:not-allowed; }
|
|
37
|
+
@media (forced-colors: active) {
|
|
38
|
+
:where(.sky-html,.sky-model-workspace[data-native-controls]) select:not(:where([data-sky-native="off"], [data-sky-native="off"] *, [class^="el-"], [class^="el-"] *, [class*=" el-"], [class*=" el-"] *, .maplibregl-map *, .mapboxgl-map *)):where([multiple], [size]:not([size="1"]):not([size="0"])) option:checked { background:Highlight; color:HighlightText; }
|
|
39
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/* Optional number enhancer: only mounted controls hide native spinners. */
|
|
2
|
+
.sky-html [data-sky-number] { display:inline-flex; position:relative; vertical-align:middle; }
|
|
3
|
+
.sky-html [data-sky-number] input { appearance:textfield; padding-right:34px; }
|
|
4
|
+
.sky-html [data-sky-number] input::-webkit-inner-spin-button,
|
|
5
|
+
.sky-html [data-sky-number] input::-webkit-outer-spin-button { appearance:none; margin:0; }
|
|
6
|
+
.sky-html [data-sky-number] button { position:absolute; right:1px; width:30px; height:calc((var(--userssite-control-height-m) - 2px) / 2); padding:0; border:0; border-left:1px solid var(--userssite-color-border); border-radius:0; background:var(--userssite-surface-subtle); font-size:12px; }
|
|
7
|
+
.sky-html [data-sky-number] button:last-child { top:1px; border-radius:0 var(--userssite-radius-s) 0 0; }
|
|
8
|
+
.sky-html [data-sky-number] button:nth-child(2) { bottom:1px; border-top:1px solid var(--userssite-color-border); border-radius:0 0 var(--userssite-radius-s) 0; }
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** Enhance existing native number inputs. Returns a cleanup function; call again for newly added fields. */
|
|
2
|
+
export function enhanceNumbers(root = document) {
|
|
3
|
+
const disposers = [];
|
|
4
|
+
for (const input of root.querySelectorAll('.sky-html input[type="number"]')) {
|
|
5
|
+
if (input.closest('[data-sky-native="off"], [data-sky-number], [class^="el-"], [class*=" el-"]')) continue;
|
|
6
|
+
const doc = input.ownerDocument, view = doc.defaultView;
|
|
7
|
+
const wrapper = doc.createElement('span'); wrapper.dataset.skyNumber = '';
|
|
8
|
+
input.before(wrapper); wrapper.append(input);
|
|
9
|
+
const buttons = [-1, 1].map(direction => {
|
|
10
|
+
const button = doc.createElement('button'); button.type = 'button'; button.textContent = direction < 0 ? '−' : '+';
|
|
11
|
+
button.setAttribute('aria-label', direction < 0 ? '减少数值' : '增加数值');
|
|
12
|
+
button.addEventListener('click', () => {
|
|
13
|
+
if (input.disabled || input.readOnly || input.matches(':disabled')) return;
|
|
14
|
+
const before = input.value;
|
|
15
|
+
try { direction > 0 ? input.stepUp() : input.stepDown(); } catch { return; }
|
|
16
|
+
if (input.value !== before) { input.dispatchEvent(new view.Event('input', { bubbles:true })); input.dispatchEvent(new view.Event('change', { bubbles:true })); }
|
|
17
|
+
sync(); input.focus();
|
|
18
|
+
});
|
|
19
|
+
wrapper.append(button); return button;
|
|
20
|
+
});
|
|
21
|
+
function sync() {
|
|
22
|
+
buttons.forEach(button => { button.disabled = input.disabled || input.readOnly || input.matches(':disabled') || input.step === 'any'; });
|
|
23
|
+
}
|
|
24
|
+
const observer = new view.MutationObserver(sync);
|
|
25
|
+
observer.observe(input, { attributes:true });
|
|
26
|
+
const fieldset = input.closest('fieldset'); if (fieldset) observer.observe(fieldset, { attributes:true, attributeFilter:['disabled'] });
|
|
27
|
+
sync();
|
|
28
|
+
disposers.push(() => { observer.disconnect(); wrapper.before(input); wrapper.remove(); });
|
|
29
|
+
}
|
|
30
|
+
return () => disposers.forEach(dispose => dispose());
|
|
31
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
.sky-model-workspace__content { padding: var(--workspace-padding, 20px); min-width: 0; }
|
|
2
|
+
.sky-model-header { padding: 24px 28px; background: var(--workspace-hero, var(--userssite-color-panel)); border-bottom: 1px solid var(--color-border, var(--userssite-color-border)); display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
|
|
3
|
+
.sky-model-header__title { margin: 0; display: flex; align-items: center; gap: 12px; color: var(--workspace-title, var(--userssite-color-text)); font-size: 22px; font-weight: 650; }
|
|
4
|
+
.sky-model-header__title::before { content: ''; width: 7px; height: 25px; border-radius: 4px; background: var(--color-primary, var(--userssite-color-primary)); flex-shrink: 0; }
|
|
5
|
+
.sky-model-header__description { margin: 8px 0 0; color: var(--color-muted, var(--userssite-color-muted)); }
|
|
6
|
+
.sky-model-panel { min-width: 0; border: 1px solid var(--color-border, var(--userssite-color-border)); border-radius: 8px; background: var(--color-panel, var(--userssite-color-panel)); box-shadow: var(--shadow-panel, var(--userssite-shadow-panel)); overflow: hidden; }
|
|
7
|
+
.sky-model-panel__header, .sky-model-panel__footer { padding: var(--panel-header-padding, calc(var(--cp-font-1, 1px) * 12) calc(var(--cp-font-1, 1px) * 16)); display: flex; align-items: center; justify-content: space-between; gap: var(--panel-gap, calc(var(--cp-font-1, 1px) * 12)); flex-wrap: wrap; }
|
|
8
|
+
.sky-model-panel__header { border-bottom: 1px solid var(--color-border, var(--userssite-color-border)); }
|
|
9
|
+
.sky-model-panel__header h2 { margin: 0; font-size: 15px; color: var(--workspace-title, var(--userssite-color-text)); }
|
|
10
|
+
.sky-model-panel__body { padding: var(--panel-body-padding, calc(var(--cp-font-1, 1px) * 16)); min-width: 0; }
|
|
11
|
+
.sky-model-panel__footer { padding: var(--panel-footer-padding, calc(var(--cp-font-1, 1px) * 12) calc(var(--cp-font-1, 1px) * 16)); border-top: 1px solid var(--color-border, var(--userssite-color-border)); }
|
|
12
|
+
@media(max-width:768px) { .sky-model-header { padding: 18px 16px; } .sky-model-workspace__content { padding: 12px; } }
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
/* 库默认主题放在低优先级层,项目未分层的变量声明始终优先。 */
|
|
4
|
+
@layer userssite-defaults {
|
|
5
|
+
|
|
6
|
+
:where(.userssite-theme, .sky-html, .sky-model-workspace[data-native-controls]) {
|
|
7
|
+
--userssite-color-bg: var(--color-bg, #ffffff);
|
|
8
|
+
--userssite-color-text: var(--color-text, #1f2937);
|
|
9
|
+
--userssite-color-primary: var(--color-primary, #1677ff);
|
|
10
|
+
--userssite-color-on-primary: var(--color-on-primary, #ffffff);
|
|
11
|
+
--userssite-color-border: var(--color-border, #dbe3ef99);
|
|
12
|
+
--userssite-color-hover: var(--color-hover, color-mix(in oklab, var(--userssite-color-primary) 9%, transparent));
|
|
13
|
+
--userssite-color-surface: var(--color-surface, #ffffffd9);
|
|
14
|
+
--userssite-color-surface-strong: var(--color-surface-strong, color-mix(in oklab, var(--userssite-color-surface) 72%, var(--userssite-color-bg)));
|
|
15
|
+
--userssite-color-panel: var(--color-panel, #ffffff);
|
|
16
|
+
--userssite-shadow-color: var(--shadow-color, color-mix(in oklab, var(--userssite-color-text) 10%, transparent));
|
|
17
|
+
--userssite-color-white: var(--color-white, #ffffff);
|
|
18
|
+
--userssite-color-danger: var(--color-danger, #e5484d);
|
|
19
|
+
--userssite-map-empty-bg: var(--map-empty-bg, #d7e2ea);
|
|
20
|
+
--userssite-timeline-observed: var(--timeline-observed, #b8e7ff);
|
|
21
|
+
--userssite-timeline-observed-strong: var(--timeline-observed-strong, #4aa3df);
|
|
22
|
+
--userssite-timeline-forecast: var(--timeline-forecast, #60a5fa);
|
|
23
|
+
--userssite-timeline-forecast-strong: var(--timeline-forecast-strong, #2f8bd6);
|
|
24
|
+
--userssite-timeline-forecast-text: var(--timeline-forecast-text, #2563a7);
|
|
25
|
+
--userssite-color-muted: var(--color-muted, color-mix(in oklab, var(--userssite-color-text) 62%, transparent));
|
|
26
|
+
--userssite-color-subtle: var(--color-subtle, color-mix(in oklab, var(--userssite-color-text) 48%, transparent));
|
|
27
|
+
--userssite-color-soft-border: var(--color-soft-border, color-mix(in oklab, var(--userssite-color-border) 78%, transparent));
|
|
28
|
+
--userssite-color-inset-highlight: var(--color-inset-highlight, color-mix(in oklab, var(--userssite-color-white) 64%, transparent));
|
|
29
|
+
--userssite-surface-glass: var(--surface-glass, color-mix(in oklab, var(--userssite-color-bg) 86%, transparent));
|
|
30
|
+
--userssite-surface-raised: var(--surface-raised, color-mix(in oklab, var(--userssite-color-surface) 86%, transparent));
|
|
31
|
+
--userssite-surface-subtle: var(--surface-subtle, color-mix(in oklab, var(--userssite-color-bg) 92%, var(--userssite-color-primary)));
|
|
32
|
+
--userssite-surface-control: var(--surface-control, color-mix(in oklab, var(--userssite-color-panel) 88%, transparent));
|
|
33
|
+
--userssite-surface-control-hover: var(--surface-control-hover, color-mix(in oklab, var(--userssite-color-primary) 12%, transparent));
|
|
34
|
+
--userssite-surface-control-active: var(--surface-control-active, color-mix(in oklab, var(--userssite-color-primary) 18%, transparent));
|
|
35
|
+
--userssite-focus-ring: var(--focus-ring, color-mix(in oklab, var(--userssite-color-primary) 14%, transparent));
|
|
36
|
+
--userssite-shadow-header: var(--shadow-header, 0 calc(var(--cp-font-1) * 10) calc(var(--cp-font-1) * 28) var(--userssite-shadow-color));
|
|
37
|
+
--userssite-shadow-panel: var(--shadow-panel, 0 calc(var(--cp-font-1) * 8) calc(var(--cp-font-1) * 22) var(--userssite-shadow-color));
|
|
38
|
+
--userssite-shadow-dropdown: var(--shadow-dropdown, 0 calc(var(--cp-font-1) * 18) calc(var(--cp-font-1) * 42) var(--userssite-shadow-color));
|
|
39
|
+
--userssite-app-shell-bg: var(--app-shell-bg, linear-gradient(180deg, color-mix(in oklab, var(--userssite-color-primary) 7%, var(--userssite-surface-subtle)), transparent 34%), var(--userssite-color-bg));
|
|
40
|
+
--userssite-app-header-bg: var(--app-header-bg, var(--userssite-surface-glass));
|
|
41
|
+
--userssite-app-content-bg: var(--app-content-bg, linear-gradient(90deg, color-mix(in oklab, var(--userssite-color-text) 4%, transparent) 0, transparent calc(var(--cp-font-1) * 16)), color-mix(in oklab, var(--userssite-color-bg) 96%, var(--userssite-surface-subtle)));
|
|
42
|
+
--userssite-app-sidebar-bg: var(--app-sidebar-bg, linear-gradient(180deg, color-mix(in oklab, var(--userssite-color-panel) 78%, transparent), color-mix(in oklab, var(--userssite-color-bg) 88%, var(--userssite-color-white))));
|
|
43
|
+
--userssite-app-rightpanel-bg: var(--app-rightpanel-bg, color-mix(in oklab, var(--userssite-color-bg) 94%, var(--userssite-color-white)));
|
|
44
|
+
--userssite-map-title-text: var(--map-title-text, color-mix(in oklab, var(--userssite-color-text) 86%, transparent));
|
|
45
|
+
--userssite-ranking-header-bg: var(--ranking-header-bg, #2f8bd6);
|
|
46
|
+
--userssite-brand-mark-bg: var(--brand-mark-bg, color-mix(in oklab, var(--userssite-color-panel) 86%, transparent));
|
|
47
|
+
--userssite-nav-bg: var(--nav-bg, color-mix(in oklab, var(--userssite-color-bg) 72%, var(--userssite-color-white)));
|
|
48
|
+
--userssite-nav-highlight-bg: var(--nav-highlight-bg, linear-gradient(180deg, var(--userssite-color-panel), color-mix(in oklab, var(--userssite-color-primary) 10%, var(--userssite-color-panel))));
|
|
49
|
+
--userssite-nav-highlight-shadow: var(--nav-highlight-shadow, 0 calc(var(--cp-font-1) * 10) calc(var(--cp-font-1) * 24) color-mix(in oklab, var(--userssite-color-primary) 18%, transparent), inset 0 calc(var(--cp-font-1) * 1) 0 color-mix(in oklab, var(--userssite-color-panel) 92%, transparent));
|
|
50
|
+
--userssite-dropdown-bg: var(--dropdown-bg, color-mix(in oklab, var(--userssite-color-bg) 94%, var(--userssite-color-white)));
|
|
51
|
+
--userssite-input-bg: var(--input-bg, color-mix(in oklab, var(--userssite-color-bg) 88%, var(--userssite-color-white)));
|
|
52
|
+
--userssite-input-placeholder: var(--input-placeholder, var(--userssite-color-subtle));
|
|
53
|
+
--userssite-scrollbar-track: var(--scrollbar-track, transparent);
|
|
54
|
+
--userssite-scrollbar-thumb: var(--scrollbar-thumb, color-mix(in oklab, var(--userssite-color-primary) 34%, var(--userssite-color-border)));
|
|
55
|
+
--userssite-scrollbar-thumb-hover: var(--scrollbar-thumb-hover, color-mix(in oklab, var(--userssite-color-primary) 52%, var(--userssite-color-border)));
|
|
56
|
+
--userssite-tree-trigger-bg: var(--tree-trigger-bg, color-mix(in oklab, var(--userssite-color-panel) 96%, var(--userssite-color-primary) 4%));
|
|
57
|
+
--userssite-tree-trigger-hover-bg: var(--tree-trigger-hover-bg, var(--userssite-color-panel));
|
|
58
|
+
--userssite-tree-type-bg: var(--tree-type-bg, linear-gradient(180deg, color-mix(in oklab, var(--userssite-color-primary) 18%, var(--userssite-color-panel)), color-mix(in oklab, var(--userssite-color-primary) 10%, var(--userssite-color-panel))));
|
|
59
|
+
--userssite-tree-panel-bg: var(--tree-panel-bg, color-mix(in oklab, var(--userssite-color-bg) 96%, transparent));
|
|
60
|
+
--userssite-tree-tabs-bg: var(--tree-tabs-bg, color-mix(in oklab, var(--userssite-color-hover) 58%, transparent));
|
|
61
|
+
--userssite-map-menu-parent-bg: var(--map-menu-parent-bg, #00000080);
|
|
62
|
+
--userssite-map-menu-parent-active: var(--map-menu-parent-active, #f6a313);
|
|
63
|
+
--userssite-map-menu-child-bg: var(--map-menu-child-bg, color-mix(in oklab, #ffffff 86%, #d7f6ff));
|
|
64
|
+
--userssite-map-menu-child-border: var(--map-menu-child-border, #26b6ef);
|
|
65
|
+
--userssite-map-menu-child-text: var(--map-menu-child-text, #148cc8);
|
|
66
|
+
--userssite-map-menu-child-active: var(--map-menu-child-active, #2d9cf0);
|
|
67
|
+
--userssite-right-panel-header-bg: var(--right-panel-header-bg, #2f8bd6);
|
|
68
|
+
--userssite-right-panel-header-text: var(--right-panel-header-text, #ffffff);
|
|
69
|
+
--userssite-map-float-bg: var(--map-float-bg, color-mix(in oklab, var(--userssite-color-panel) 96%, var(--userssite-color-bg)));
|
|
70
|
+
--userssite-map-float-border: var(--map-float-border, color-mix(in oklab, var(--userssite-color-border) 82%, transparent));
|
|
71
|
+
--userssite-map-float-control-bg: var(--map-float-control-bg, color-mix(in oklab, var(--userssite-color-panel) 94%, var(--userssite-color-bg)));
|
|
72
|
+
--userssite-map-float-control-hover-bg: var(--map-float-control-hover-bg, color-mix(in oklab, var(--userssite-color-primary) 12%, var(--userssite-color-panel)));
|
|
73
|
+
--userssite-map-float-shadow: var(--map-float-shadow, 0 calc(var(--cp-font-1) * 12) calc(var(--cp-font-1) * 28) var(--userssite-shadow-color));
|
|
74
|
+
--userssite-header-height: var(--header-height, calc(var(--cp-font-1) * 58));
|
|
75
|
+
--userssite-sidebar-width: var(--sidebar-width, calc(var(--cp-font-1) * 244));
|
|
76
|
+
--userssite-rightpanel-width: var(--rightpanel-width, calc(var(--cp-font-1) * 320));
|
|
77
|
+
--userssite-layout-gutter: var(--layout-gutter, calc(var(--cp-font-1) * 10));
|
|
78
|
+
--userssite-font-family-sans: var(--font-family-sans, "HarmonyOS Sans SC", "Noto Sans SC", "Source Han Sans SC", "Microsoft YaHei", "PingFang SC", Arial, sans-serif);
|
|
79
|
+
--userssite-font-size-micro: var(--font-size-micro, var(--cp-font-10));
|
|
80
|
+
--userssite-font-size-caption: var(--font-size-caption, var(--cp-font-13));
|
|
81
|
+
--userssite-font-size-body: var(--font-size-body, var(--cp-font-14));
|
|
82
|
+
--userssite-font-size-title: var(--font-size-title, var(--cp-font-16));
|
|
83
|
+
--userssite-font-size-heading: var(--font-size-heading, var(--cp-font-18));
|
|
84
|
+
--userssite-radius-s: var(--radius-s, var(--cp-font-4));
|
|
85
|
+
--userssite-radius-m: var(--radius-m, var(--cp-font-8));
|
|
86
|
+
--userssite-radius-l: var(--radius-l, var(--cp-font-12));
|
|
87
|
+
--userssite-radius-pill: var(--radius-pill, calc(var(--cp-font-1) * 999));
|
|
88
|
+
--userssite-space-s: var(--space-s, var(--cp-font-6));
|
|
89
|
+
--userssite-space-m: var(--space-m, var(--cp-font-10));
|
|
90
|
+
--userssite-space-l: var(--space-l, var(--cp-font-16));
|
|
91
|
+
--userssite-control-height-s: var(--control-height-s, var(--cp-font-28));
|
|
92
|
+
--userssite-control-height-m: var(--control-height-m, var(--cp-font-32));
|
|
93
|
+
--userssite-control-height-l: var(--control-height-l, var(--cp-font-36));
|
|
94
|
+
--userssite-font-size-l1: var(--font-size-l1, var(--cp-font-16));
|
|
95
|
+
--userssite-font-size-l2: var(--font-size-l2, var(--cp-font-14));
|
|
96
|
+
--userssite-font-size-l3: var(--font-size-l3, var(--cp-font-13));
|
|
97
|
+
--userssite-menu-level-1-color: var(--menu-level-1-color, var(--userssite-color-text));
|
|
98
|
+
--userssite-menu-level-2-color: var(--menu-level-2-color, color-mix(in oklab, var(--userssite-color-text) 82%, transparent));
|
|
99
|
+
--userssite-menu-level-3-color: var(--menu-level-3-color, color-mix(in oklab, var(--userssite-color-text) 68%, transparent));
|
|
100
|
+
--userssite-button-primary-bg: var(--button-primary-bg, var(--userssite-color-primary));
|
|
101
|
+
--userssite-button-primary-text: var(--button-primary-text, var(--userssite-color-on-primary));
|
|
102
|
+
--userssite-button-secondary-bg: var(--button-secondary-bg, var(--userssite-surface-control));
|
|
103
|
+
--userssite-button-secondary-text: var(--button-secondary-text, var(--userssite-color-text));
|
|
104
|
+
--userssite-button-ghost-bg: var(--button-ghost-bg, transparent);
|
|
105
|
+
--userssite-button-ghost-text: var(--button-ghost-text, var(--userssite-color-primary));
|
|
106
|
+
--userssite-button-danger-bg: var(--button-danger-bg, var(--userssite-color-danger));
|
|
107
|
+
--userssite-button-danger-text: var(--button-danger-text, var(--userssite-color-white));
|
|
108
|
+
--userssite-motion-fast: var(--motion-fast, 160ms);
|
|
109
|
+
--userssite-motion-base: var(--motion-base, 240ms);
|
|
110
|
+
--userssite-motion-ease: var(--motion-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
|
|
111
|
+
--el-color-primary: var(--userssite-color-primary);
|
|
112
|
+
--el-bg-color: var(--userssite-color-bg);
|
|
113
|
+
--el-bg-color-overlay: var(--userssite-color-panel);
|
|
114
|
+
--el-fill-color-blank: var(--userssite-color-panel);
|
|
115
|
+
--el-text-color-primary: var(--userssite-color-text);
|
|
116
|
+
--el-text-color-regular: var(--userssite-color-muted);
|
|
117
|
+
--el-border-color: var(--userssite-color-border);
|
|
118
|
+
--el-border-radius-base: var(--userssite-radius-s);
|
|
119
|
+
--el-component-size: var(--userssite-control-height-m);
|
|
120
|
+
--el-font-size-base: var(--userssite-font-size-body);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
:where(.theme-dark .userssite-theme, .userssite-theme.theme-dark, .sky-html[data-theme="dark"], .sky-model-workspace[data-native-controls][data-theme="dark"]) {
|
|
124
|
+
--userssite-color-bg: var(--color-bg, #08111f);
|
|
125
|
+
--userssite-color-text: var(--color-text, #e6edf7);
|
|
126
|
+
--userssite-color-primary: var(--color-primary, #4da3ff);
|
|
127
|
+
--userssite-color-on-primary: var(--color-on-primary, #ffffff);
|
|
128
|
+
--userssite-color-border: var(--color-border, #39506f99);
|
|
129
|
+
--userssite-color-hover: var(--color-hover, color-mix(in oklab, var(--userssite-color-primary) 18%, transparent));
|
|
130
|
+
--userssite-color-surface: var(--color-surface, #101b2dee);
|
|
131
|
+
--userssite-color-surface-strong: var(--color-surface-strong, color-mix(in oklab, var(--userssite-color-surface) 70%, var(--userssite-color-bg)));
|
|
132
|
+
--userssite-color-panel: var(--color-panel, #0c1525);
|
|
133
|
+
--userssite-shadow-color: var(--shadow-color, color-mix(in oklab, #020617 62%, transparent));
|
|
134
|
+
--userssite-color-inset-highlight: var(--color-inset-highlight, color-mix(in oklab, var(--userssite-color-white) 12%, transparent));
|
|
135
|
+
--userssite-surface-subtle: var(--surface-subtle, color-mix(in oklab, var(--userssite-color-surface-strong) 76%, var(--userssite-color-bg)));
|
|
136
|
+
--userssite-surface-glass: var(--surface-glass, color-mix(in oklab, var(--userssite-color-surface-strong) 84%, transparent));
|
|
137
|
+
--userssite-surface-control: var(--surface-control, color-mix(in oklab, var(--userssite-color-surface-strong) 84%, transparent));
|
|
138
|
+
--userssite-surface-control-hover: var(--surface-control-hover, color-mix(in oklab, var(--userssite-color-primary) 18%, transparent));
|
|
139
|
+
--userssite-surface-control-active: var(--surface-control-active, color-mix(in oklab, var(--userssite-color-primary) 26%, transparent));
|
|
140
|
+
--userssite-focus-ring: var(--focus-ring, color-mix(in oklab, var(--userssite-color-primary) 20%, transparent));
|
|
141
|
+
--userssite-shadow-header: var(--shadow-header, 0 calc(var(--cp-font-1) * 12) calc(var(--cp-font-1) * 30) var(--userssite-shadow-color), inset 0 calc(var(--cp-font-1) * 1) 0 var(--userssite-color-inset-highlight));
|
|
142
|
+
--userssite-shadow-panel: var(--shadow-panel, 0 calc(var(--cp-font-1) * 10) calc(var(--cp-font-1) * 24) var(--userssite-shadow-color));
|
|
143
|
+
--userssite-shadow-dropdown: var(--shadow-dropdown, 0 calc(var(--cp-font-1) * 18) calc(var(--cp-font-1) * 42) var(--userssite-shadow-color));
|
|
144
|
+
--userssite-app-shell-bg: var(--app-shell-bg, radial-gradient(circle at 18% 0, color-mix(in oklab, var(--userssite-color-primary) 18%, transparent), transparent 30%), linear-gradient(180deg, color-mix(in oklab, var(--userssite-color-primary) 8%, var(--userssite-color-bg)) 0, var(--userssite-color-bg) 42%));
|
|
145
|
+
--userssite-app-header-bg: var(--app-header-bg, linear-gradient(180deg, color-mix(in oklab, var(--userssite-color-surface-strong) 86%, transparent), color-mix(in oklab, var(--userssite-color-surface) 86%, transparent)));
|
|
146
|
+
--userssite-app-content-bg: var(--app-content-bg, linear-gradient(90deg, color-mix(in oklab, var(--userssite-shadow-color) 58%, transparent) 0, transparent calc(var(--cp-font-1) * 18)), radial-gradient(circle at 64% 0, color-mix(in oklab, var(--userssite-color-primary) 12%, transparent), transparent 34%), var(--userssite-color-bg));
|
|
147
|
+
--userssite-app-sidebar-bg: var(--app-sidebar-bg, linear-gradient(180deg, color-mix(in oklab, var(--userssite-color-surface) 92%, transparent), color-mix(in oklab, var(--userssite-color-bg) 92%, transparent)));
|
|
148
|
+
--userssite-app-rightpanel-bg: var(--app-rightpanel-bg, linear-gradient(180deg, color-mix(in oklab, var(--userssite-color-surface) 92%, transparent), color-mix(in oklab, var(--userssite-color-bg) 92%, transparent)));
|
|
149
|
+
--userssite-map-title-text: var(--map-title-text, #1f2937);
|
|
150
|
+
--userssite-ranking-header-bg: var(--ranking-header-bg, transparent);
|
|
151
|
+
--userssite-brand-mark-bg: var(--brand-mark-bg, color-mix(in oklab, var(--userssite-color-white) 92%, var(--userssite-color-primary)));
|
|
152
|
+
--userssite-nav-bg: var(--nav-bg, color-mix(in oklab, var(--userssite-color-panel) 76%, transparent));
|
|
153
|
+
--userssite-nav-highlight-bg: var(--nav-highlight-bg, linear-gradient(180deg, color-mix(in oklab, var(--userssite-color-primary) 36%, var(--userssite-color-inset-highlight)), color-mix(in oklab, var(--userssite-color-primary) 18%, var(--userssite-color-bg))));
|
|
154
|
+
--userssite-nav-highlight-shadow: var(--nav-highlight-shadow, 0 calc(var(--cp-font-1) * 8) calc(var(--cp-font-1) * 24) color-mix(in oklab, var(--userssite-color-primary) 26%, transparent), inset 0 calc(var(--cp-font-1) * 1) 0 var(--userssite-color-inset-highlight));
|
|
155
|
+
--userssite-dropdown-bg: var(--dropdown-bg, color-mix(in oklab, var(--userssite-color-surface) 94%, transparent));
|
|
156
|
+
--userssite-input-bg: var(--input-bg, color-mix(in oklab, var(--userssite-color-surface-strong) 88%, transparent));
|
|
157
|
+
--userssite-input-placeholder: var(--input-placeholder, color-mix(in oklab, var(--userssite-color-text) 44%, transparent));
|
|
158
|
+
--userssite-scrollbar-thumb: var(--scrollbar-thumb, color-mix(in oklab, var(--userssite-color-primary) 46%, var(--userssite-color-border)));
|
|
159
|
+
--userssite-scrollbar-thumb-hover: var(--scrollbar-thumb-hover, color-mix(in oklab, var(--userssite-color-primary) 64%, var(--userssite-color-border)));
|
|
160
|
+
--userssite-tree-trigger-bg: var(--tree-trigger-bg, linear-gradient(180deg, color-mix(in oklab, var(--userssite-color-surface-strong) 84%, var(--userssite-color-primary) 16%), var(--userssite-color-panel)));
|
|
161
|
+
--userssite-tree-trigger-hover-bg: var(--tree-trigger-hover-bg, linear-gradient(180deg, color-mix(in oklab, var(--userssite-color-surface-strong) 80%, var(--userssite-color-primary) 20%), color-mix(in oklab, var(--userssite-color-panel) 82%, var(--userssite-color-primary) 18%)));
|
|
162
|
+
--userssite-tree-type-bg: var(--tree-type-bg, linear-gradient(180deg, color-mix(in oklab, var(--userssite-color-primary) 28%, var(--userssite-color-inset-highlight)), color-mix(in oklab, var(--userssite-color-primary) 12%, transparent)));
|
|
163
|
+
--userssite-tree-panel-bg: var(--tree-panel-bg, color-mix(in oklab, var(--userssite-color-panel) 94%, transparent));
|
|
164
|
+
--userssite-tree-tabs-bg: var(--tree-tabs-bg, color-mix(in oklab, var(--userssite-color-surface-strong) 78%, transparent));
|
|
165
|
+
--userssite-map-float-bg: var(--map-float-bg, linear-gradient(180deg, color-mix(in oklab, var(--userssite-color-surface) 82%, var(--userssite-color-panel)), color-mix(in oklab, var(--userssite-color-panel) 88%, #020617)));
|
|
166
|
+
--userssite-map-float-border: var(--map-float-border, color-mix(in oklab, var(--userssite-color-primary) 24%, var(--userssite-color-border)));
|
|
167
|
+
--userssite-map-float-control-bg: var(--map-float-control-bg, color-mix(in oklab, var(--userssite-color-panel) 86%, #020617));
|
|
168
|
+
--userssite-map-float-control-hover-bg: var(--map-float-control-hover-bg, color-mix(in oklab, var(--userssite-color-primary) 18%, var(--userssite-color-panel)));
|
|
169
|
+
--userssite-map-float-shadow: var(--map-float-shadow, 0 calc(var(--cp-font-1) * 14) calc(var(--cp-font-1) * 30) color-mix(in oklab, #020617 64%, transparent));
|
|
170
|
+
--userssite-menu-level-1-color: var(--menu-level-1-color, #e6edf7);
|
|
171
|
+
--userssite-menu-level-2-color: var(--menu-level-2-color, #c8d4e4);
|
|
172
|
+
--userssite-menu-level-3-color: var(--menu-level-3-color, #aebed2);
|
|
173
|
+
--userssite-right-panel-header-bg: var(--right-panel-header-bg, transparent);
|
|
174
|
+
--userssite-right-panel-header-text: var(--right-panel-header-text, #e6edf7);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* 四个模型工作区的共同主题,仅在显式容器内生效。 */
|
|
181
|
+
.sky-model-workspace {
|
|
182
|
+
--color-bg: #f3f7fb; --color-panel: #fff; --color-surface: #f7f9fc;
|
|
183
|
+
--color-primary: #1677ff; --color-on-primary: #fff; --color-text: #172b4d;
|
|
184
|
+
--color-muted: #66758a; --color-border: #dce5ef; --color-soft-border: #e6effa;
|
|
185
|
+
--color-hover: #e8f2ff; --color-danger: #d9363e; --surface-subtle: #f3f7fb;
|
|
186
|
+
--surface-control: #fff; --surface-control-hover: #e8f2ff; --surface-control-active: #e8f2ff;
|
|
187
|
+
--input-bg: #fff; --dropdown-bg: #fff; --input-placeholder: #8c9bae;
|
|
188
|
+
--focus-ring: #1677ff26; --workspace-title: #0c2559;
|
|
189
|
+
--workspace-hero: linear-gradient(110deg,#edf6ff,#e1efff 56%,#f5faff);
|
|
190
|
+
--shadow-panel: 0 8px 28px #15375b0d; --radius-s: 6px; --radius-m: 7px; --radius-l: 8px;
|
|
191
|
+
--scrollbar-thumb: #bdccdf;
|
|
192
|
+
color-scheme: light; color: var(--color-text); background: var(--color-bg);
|
|
193
|
+
font-family: "Segoe UI","Microsoft YaHei",sans-serif; font-size: 14px; line-height: 1.65;
|
|
194
|
+
min-width: 0;
|
|
195
|
+
}
|
|
196
|
+
.sky-model-workspace[data-theme="dark"] {
|
|
197
|
+
--color-bg: #0d1420; --color-panel: #151f2e; --color-surface: #101a28;
|
|
198
|
+
--color-primary: #36cbb7; --color-on-primary: #072b2b; --color-text: #e3ecf5;
|
|
199
|
+
--color-muted: #99abc0; --color-border: #35485f; --color-soft-border: #2b3c50;
|
|
200
|
+
--color-hover: #193a3f; --color-danger: #f3a2ad; --surface-subtle: #0d1420;
|
|
201
|
+
--surface-control: #151f2e; --surface-control-hover: #193a3f; --surface-control-active: #193a3f;
|
|
202
|
+
--input-bg: #151f2e; --dropdown-bg: #1b293b; --input-placeholder: #99abc0;
|
|
203
|
+
--focus-ring: #36cbb726; --workspace-title: #f1f6fc;
|
|
204
|
+
--workspace-hero: linear-gradient(110deg,#172b40,#17363f 56%,#142333);
|
|
205
|
+
--shadow-panel: 0 8px 28px #00000030; --scrollbar-thumb: #425a72; color-scheme: dark;
|
|
206
|
+
}
|
|
207
|
+
.sky-model-workspace *, .sky-model-workspace *::before, .sky-model-workspace *::after { box-sizing: border-box; }
|
|
208
|
+
|
|
209
|
+
/* HTML 与 Vue 控件直接消费同一 userssite 主题,不再维护另一套控件色值。 */
|
|
210
|
+
.sky-html { color:var(--userssite-color-text); background:var(--userssite-color-bg); font-family:var(--userssite-font-family-sans); font-size:var(--font-size-body,14px); line-height:1.5; }
|
|
211
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) { --cp-font-1:calc(var(--cp-vfit-scale,1) * 1px); }
|
|
212
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) { --cp-font-4:calc(var(--cp-vfit-scale,1) * 4px); }
|
|
213
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) { --cp-font-8:calc(var(--cp-vfit-scale,1) * 8px); }
|
|
214
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) { --cp-font-12:calc(var(--cp-vfit-scale,1) * 12px); }
|
|
215
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) { --cp-font-14:calc(var(--cp-vfit-scale,1) * 14px); }
|
|
216
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) { --cp-font-28:calc(var(--cp-vfit-scale,1) * 28px); }
|
|
217
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) { --cp-font-32:calc(var(--cp-vfit-scale,1) * 32px); }
|
|
218
|
+
:where(.sky-html, .sky-model-workspace[data-native-controls]) { --cp-font-36:calc(var(--cp-vfit-scale,1) * 36px); }
|