sky-ui-kit 0.1.7 → 0.1.8

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/llms-full.txt CHANGED
@@ -1,12 +1,13 @@
1
1
  # sky-ui-kit
2
2
 
3
- > Vue 3 components compatible with Element Plus, project menus, timeline and map tools. Version 0.1.7. AI tools must explicitly load these files.
3
+ > Vue 3 components compatible with Element Plus, project menus, timeline and map tools. Version 0.1.8. AI tools must explicitly load these files.
4
4
 
5
5
  ## Documentation
6
6
 
7
7
  - [Consumers](docs/CONSUMERS.md): shared project convention and local integration.
8
8
  - [AI guide](docs/AI-GUIDE.md): setup, examples, icon/event bindings and limits.
9
9
  - [Component API](docs/COMPONENT-API.md): props, defaults, events, slots and types.
10
+ - [Model workspace](docs/MODEL-WORKSPACE.md): shared theme and native control migration.
10
11
  - [On-demand imports](docs/ON-DEMAND.md): per-component entries and remaining CSS/icon limits.
11
12
  - [AI module changes](docs/AI-CHANGELOG.md): module updates and integration impact.
12
13
  - [Project usage](docs/COMPONENT-USAGE.md): current source usage counts and call sites.
@@ -26,6 +27,33 @@ Import element-plus/dist/index.css then sky-ui-kit/style.css once in main.ts. Im
26
27
 
27
28
  # sky-ui-kit:AI 使用指南
28
29
 
30
+ MapPageLayout 沿用参考项目 D:/Work/01-项目code/一体化平台/webv1/src/components/layout/TemplateLayout.vue 的 1/2/3/4/5/6 层级约定,并补齐底部时间轴和右侧面板。层级按区域统一管理:鼠标移入 left/top/toolbar/right/legend/timeline 时提升整个区域到 hover 层,优先于 focus-within;子展开面板随所属区域一起提升,移出后恢复。普通 content 限定在底层独立堆叠上下文,透明工具间隙穿透地图。图例和时间轴外层不再 overflow:auto 裁剪浮层;长内容滚动由内部业务组件负责。Teleport 到 body 的浮层仍由组件自身管理层级。预览“模拟模块遮挡”可核对重叠交互;完全被覆盖的部分不接收鼠标,应从模块可见区域移入。
31
+
32
+ ## 新地图布局行为(源码待预览,尚未发布)
33
+
34
+ 预览入口:开发指南 → MapPageLayout 地图布局(#project-template-layout);基础组件 → 布局容器下也显示“地图布局 · MapPageLayout”,支持按组件名搜索。
35
+
36
+ 新页面优先用 MapPageLayout;旧 TemplateLayout 保持接口及业务样式兼容,并非两者 API 的别名。MapPageLayout 不携带任何依赖 rainfall-process、地图标题或分析面板类名的定位规则。消费方使用 topOffset / bottomOffset / toolbarTop / timelineLeft / timelineRight / timelineBottom / edge 配置位置。
37
+
38
+ rightOpen 与 rightPanelEnabled、right 插槽共同决定右栏显示。区域关系固定,右栏打开时工具栏、图例及时间轴始终避让。按用户约定移除 compactBreakpoint / compactRightMode / compact-change:不按 720px 容器宽度切抽屉或重排。尺寸由消费项目注册的 VFit 写入 --cp-vfit-scale,再经 --cp-font-1 等变量传入;库不重复注册 VFit,不额外 transform 缩放。
39
+
40
+ 默认区域层级 2、图例 3、工具栏 4;键盘 focus-within 为 5,鼠标 hover 为 6。时间轴高度通过 timeline-height 通知,图例自动避让;监听在卸载释放。
41
+
42
+ DefenseMapLayout 默认 structured=false 保留原样式壳。structured=true 提供 toolbar 与网格内容,columns 为 1 或 2,保持指定列数,均分剩余高度,不设 260px 最小行高或内部滚动条。间距和 topOffset 继承 VFit 尺寸变量;地图、联动、路由及持久挂载由应用负责。
43
+
44
+ ## 布局怎么选:平台外壳 → 页面分区 → 局部面板
45
+
46
+ 预览站“开发指南 → 布局怎么选”可直接进入说明(#layout-guide);“基础组件 → 布局容器”也会展示。说明先展示通俗选型说明与三层嵌套示意,再展示地图区域和组合示例。说明源文件为 src/LayoutGuide.vue;本次只调整说明,不改变组件 API 或运行行为。
47
+
48
+ - WorkbenchShell 是整个平台的外壳,提供 header / workspace;management 模式才提供内置左侧分组菜单,路由仍由应用接入。
49
+ - TemplateLayout 是地图页面的摆放架,提供 left、top、toolbar、right、legend、timeline、content 和默认插槽。应用先提供有明确宽高、position: relative 的地图容器。rightOpen、rightPanelEnabled 与 right 插槽共同决定右栏显示;没有默认工具、图例或地图实例。
50
+ - ManagementResourceLayout 用于管理页的概览、筛选、标题、操作及内容区域。
51
+ - WorkbenchPanel 是局部外观容器;MapWorkspacePanel 是带标题、actions、default、footer 的业务面板。两者不负责路由和地图生命周期。
52
+ - DefenseMapLayout 是会商样式外壳,默认插槽由应用提供地图内容和联动;ModelWorkspace 面向模型编辑,不是通用平台外壳。
53
+ - UiContainer / UiHeader / UiAside / UiMain / UiFooter 是自定义普通布局的基础积木。
54
+
55
+ 项目内 TemplateLayout 与库组件同名但接口不同,不能只换 import。原 right-toggle、map-toolbar-info 和 rightPanelDefaultOpen 需要应用适配层衔接。公共布局稳定挂载、地图是否重建、容器改变后的地图与图表 resize 均由消费项目负责;替换布局组件不自动消除菜单切换闪烁。
56
+
29
57
  适用于 Vue 3 + TypeScript。此文件描述包的真实 API 和约束,不是自动执行的代理指令。AI 工具需要主动读取这些文档;安装包不会自动改变其上下文。
30
58
 
31
59
  管理布局:使用 WorkbenchShell management 模式与内容插槽,详见本文末尾最新说明。账号、菜单路由和数据由消费方提供,库不提供认证。
@@ -56,6 +84,8 @@ UiAutocomplete 提供独立站点搜索示例:fetch-suggestions 回调、聚
56
84
 
57
85
  ## 文档读取顺序
58
86
 
87
+ 依赖维护:库的 package.json 与 package-lock.json 不应记录消费项目的本地目录或历史 vendor 安装包。已清除一体机项目遗留的 extraneous 锁记录;消费项目自行管理其安装依赖。
88
+
59
89
  安装或升级最新正式版使用 `npm install sky-ui-kit@latest`。latest 指向 npm 的正式发布标签,尚未发布的源码修改不在安装包内;依据当前已安装包的版本和文档使用组件。
60
90
 
61
91
  团队先读取 llms.txt,并结合 AI-CHANGELOG.md 了解模块变更及接入影响。后续所有代码、预览页面、样式和接入说明修改均同步相关 AI 文档,并运行 npm run docs:ai;快速开始代码与页面使用同一份源文件生成。
@@ -971,20 +1001,42 @@ const items = [{ key: 'overview', label: '运行概览' }, { key: 'data', label:
971
1001
  ```vue
972
1002
  <script setup lang="ts">
973
1003
  import { ref } from 'vue'
974
- import { TemplateLayout, UiButton, MapTools, WorkbenchPanel } from 'sky-ui-kit'
1004
+ import { MapPageLayout, DefenseMapLayout, UiButton, MapTools, WorkbenchPanel } from 'sky-ui-kit'
975
1005
  const rightOpen = ref(true)
1006
+ const showTimeline = ref(true)
1007
+ const overlap = ref(false)
976
1008
  </script>
977
1009
  <template>
978
- <div style="position: relative; height: 460px">
979
- <TemplateLayout :right-open="rightOpen">
980
- <template #top><UiButton @click="rightOpen = !rightOpen">{{ rightOpen ? '收起右栏' : '展开右栏' }}</UiButton></template>
981
- <template #toolbar><MapTools :items="[{ key: 'layers', label: '图层' }]" /></template>
982
- <template #right><WorkbenchPanel style="height: 100%">right · 业务面板</WorkbenchPanel></template>
983
- <template #legend>legend · 图例</template>
984
- <template #timeline>timeline · 时间轴</template>
985
- </TemplateLayout>
1010
+ <div class="layout-demo-controls">
1011
+ <UiButton @click="rightOpen = !rightOpen">{{ rightOpen ? '收起右栏' : '展开右栏' }}</UiButton>
1012
+ <UiButton @click="showTimeline = !showTimeline">{{ showTimeline ? '隐藏时间轴' : '显示时间轴' }}</UiButton>
1013
+ <UiButton @click="overlap = !overlap">{{ overlap ? '恢复正常避让' : '模拟模块遮挡' }}</UiButton>
1014
+ </div>
1015
+ <div class="layout-demo-map" >
1016
+ <MapPageLayout v-model:right-open="rightOpen" :timeline-right="overlap ? 'var(--map-layout-edge)' : ''">
1017
+ <template #top><span>地图标题 / 查询区域</span></template>
1018
+ <template #toolbar><MapTools :items="[{ key: 'layers', label: '图层' }]" /><WorkbenchPanel v-if="overlap" class="layout-demo-expanded">右上展开面板<br>鼠标移入时整个工具区域置顶</WorkbenchPanel></template>
1019
+ <template #right><WorkbenchPanel style="height: 100%">右栏 · 放参数表单或业务列表<br>鼠标移入当前区域时置顶</WorkbenchPanel></template>
1020
+ <template #legend><WorkbenchPanel :class="{ 'layout-demo-overlap-legend': overlap }">图例 · 鼠标移入置顶</WorkbenchPanel></template>
1021
+ <template v-if="showTimeline" #timeline><WorkbenchPanel class="layout-demo-timeline">时间轴 / 过程图区域 · 鼠标移入置顶</WorkbenchPanel></template>
1022
+ </MapPageLayout>
1023
+ </div>
1024
+ <h3>会商布局 · 顶部操作区 + 四个地图位置</h3>
1025
+ <p>以下仅展示区域,不创建地图。保持两列布局,尺寸沿用 VFit 缩放变量;四个地图位置均分剩余高度,不产生内部滚动条。</p>
1026
+ <div class="layout-demo-map" >
1027
+ <DefenseMapLayout structured top-offset="0" :columns="2">
1028
+ <template #toolbar>时次选择 / 设置按钮放在这里</template>
1029
+ <WorkbenchPanel v-for="index in 4" :key="index">地图位置 {{ index }} · 由页面提供地图宿主</WorkbenchPanel>
1030
+ </DefenseMapLayout>
986
1031
  </div>
987
1032
  </template>
1033
+ <style scoped>
1034
+ .layout-demo-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 12px; }
1035
+ .layout-demo-map { position: relative; height: calc(var(--cp-font-1, 1px) * 460); border: 1px dashed var(--color-soft-border); background: var(--surface-control); }
1036
+ .layout-demo-expanded { position: absolute; right: 0; top: calc(var(--cp-font-1, 1px) * 40); width: calc(var(--cp-font-1, 1px) * 260); height: calc(var(--cp-font-1, 1px) * 300); box-sizing: border-box; border: 1px solid var(--color-soft-border); background: var(--color-panel); }
1037
+ .layout-demo-overlap-legend { transform: translateY(calc(var(--cp-font-1, 1px) * 50)); background: var(--color-panel); border: 1px solid var(--color-soft-border); }
1038
+ .layout-demo-timeline { min-height: calc(var(--cp-font-1, 1px) * 90); background: var(--color-panel); border: 1px solid var(--color-soft-border); }
1039
+ </style>
988
1040
 
989
1041
  ```
990
1042
 
@@ -2965,10 +3017,74 @@ const items = [{ key: 'rain', label: '降水', icon: Pouring }, { key: 'water',
2965
3017
 
2966
3018
  ```
2967
3019
 
3020
+ ### 模型工作区统一主题示例
3021
+
3022
+ ```vue
3023
+ <script setup lang="ts">
3024
+ import { ref } from 'vue'
3025
+ import { ModelWorkspace, ModelWorkspaceHeader, ModelWorkspacePanel, UiButton, UiInput } from 'sky-ui-kit'
3026
+ const theme = ref<'light' | 'dark'>('light')
3027
+ const name = ref('汉口站')
3028
+ const message = ref('等待配置')
3029
+ </script>
3030
+ <template>
3031
+ <ModelWorkspace :theme="theme" native-controls>
3032
+ <template #header><ModelWorkspaceHeader title="模型计算工作区" description="分布式水文 / 水资源配置 / 新安江 / LSTM 共用主题">
3033
+ <template #actions><UiButton @click="theme = theme === 'light' ? 'dark' : 'light'">切换主题</UiButton></template>
3034
+ </ModelWorkspaceHeader></template>
3035
+ <ModelWorkspacePanel title="模型配置">
3036
+ <UiInput v-model="name" placeholder="测站名称" />
3037
+ <p>原生控件逐步迁移时,可显式启用 native-controls。</p>
3038
+ <button type="button" class="primary" @click="message = '执行配置:' + name">原生操作示例</button>
3039
+ <template #footer><span role="status">{{ message }}</span><UiButton @click="message = '保存配置由使用方接入'">保存配置</UiButton></template>
3040
+ </ModelWorkspacePanel>
3041
+ </ModelWorkspace>
3042
+ </template>
3043
+
3044
+ ```
3045
+
2968
3046
  # 团队 AI 模块变更记录
2969
3047
 
3048
+ ## 2026-11-02 · 沿用原平台浮动区域层级
3049
+
3050
+ - MapPageLayout 对齐 metrics/TemplateLayout.vue 的聚焦 5、移入 6;沿用内容 1、普通区域 2、图例 3、工具栏 4,统一覆盖时间轴与右栏,保持透明工具间隙穿透与子面板随区域置顶。
3051
+ - 同步文档与生成 API;未发包,未修改参考项目。
3052
+
3053
+ ## 2026-11-02 · 模块移入置顶
3054
+
3055
+ - 统一区域层级变量,区域子展开面板随模块置顶;限定普通内容层,透明工具间隙不拦截地图。
3056
+ - 图例及底部外层移除滚动裁剪,预览新增模拟遮挡开关;未发布或修改消费项目。
3057
+
3058
+ ## 2026-11-02 · 按用户约定改用 VFit 缩放
3059
+
3060
+ - 撤回新增的 720px 容器断点、右侧抽屉、compact 属性/事件及会商单列重排;保持区域与列数,使用应用 VFit 尺寸变量。
3061
+ - 会商网格移除 260px 最小行高,均分顶部操作区之外的剩余高度,消除该最小行高引起的内部滚动条;删除外壳固定 1px 尺寸覆盖。
3062
+ - 同步预览说明、示例和行为检查。未构建、发包或修改消费项目布局。
3063
+
3064
+ ## 2026-11-02 · 完善地图布局行为(源码待用户预览)
3065
+
3066
+ - 导航直接显示 MapPageLayout 名称,开发指南增加地图布局直达入口,避免新组件沿用旧名称而难以查找。
3067
+
3068
+ - 新增 MapPageLayout,与旧 TemplateLayout 并行,旧接口不变;新布局仅负责区域排列,位置参数独立于业务类名。
3069
+ - 增加实际容器宽度检测、非模态右侧覆盖面板、关闭事件、区域 hover / focus 层级和时间轴避让。
3070
+ - DefenseMapLayout 新增可选 structured 模式、toolbar、列数与窄容器单列;默认保持原样式外壳。
3071
+ - 预览支持宽窄容器、右栏和时间轴开关;同步接入、样式、组件指南与生成 API。未发布,未更新消费项目布局。
3072
+
3073
+ ## 2026-11-02 · 布局说明按三层重写(待用户预览确认)
3074
+
3075
+ - 开发指南新增“布局怎么选”直达入口(#layout-guide),避免说明藏在基础组件深层目录。
3076
+
3077
+ - 布局容器页新增“平台外壳 → 页面分区 → 局部面板”示意及按场景选择组件的说明,区分 WorkbenchShell、TemplateLayout、管理布局、面板与基础容器。
3078
+ - 修正地图布局说明中的默认工具栏、遗漏 left 插槽及项目同名组件 API 混用;明确右栏受控条件和应用的地图生命周期责任。
3079
+ - 同步 AI 指南并生成 AI 文档;未发布 npm,未更新消费项目布局。由用户在预览站确认文案后再安排发布。
3080
+
2970
3081
  本文件记录源码模块调整与接入影响,不作为 npm 发布完成的依据。团队使用安装包时以包内文档及 package.json 版本为准;使用当前源码时读取仓库中的同名文档。
2971
3082
 
3083
+ ## 2026-11-02 · 清理历史本地联调锁记录
3084
+
3085
+ - 删除 package-lock.json 中一体机消费项目的 extraneous 记录及其中旧 vendor tgz 引用;现有库依赖版本保持不变,未修改消费项目。
3086
+ - 同步 AI 指南并重新生成 AI 文档;未构建、打包、发布或提交 Git。
3087
+
2972
3088
  ## 2026-10-13 · 0.1.2 发布准备
2973
3089
 
2974
3090
  - 核对并重新生成组件 API、AI 指南、llms 索引和完整文档,包含项目图标、全局适配、独立常驻示例和导航调整。
@@ -3356,6 +3472,21 @@ SVG 图库从主入口移到可选 icons 入口,SvgIcon 不再自动注册;
3356
3472
  ## 2026-10-29 · 0.1.7 发布准备
3357
3473
 
3358
3474
  正式发布按需入口与可选图库,默认主题和组件 CSS 随 npm 包分发,无开发机样式依赖。构建前清理 dist 防止旧 chunk 混入;图标注册迁移见 ON-DEMAND.md。
3475
+
3476
+
3477
+ ## 2026-10-30 · 四项目模型主题
3478
+
3479
+ 读取四个项目最终覆盖主题,提取蓝白/深蓝青绿 token、渐变标题与面板。新增三个隔离主题组件、显式原生表单适配和可复制示例。公共 CSS 合入 style.css;未构建、未发布。
3480
+
3481
+
3482
+ ## 2026-10-30 · HTML / Vue 双接入文档
3483
+
3484
+ 新增独立 model-workspace.css 发布出口,原生 HTML 用 CSS 和结构类,Vue 用主题组件与公共 CSS。补齐两套完整示例、主题切换、事件绑定和部署路径说明,未构建发布。
3485
+
3486
+ ## 2026-11-02 · 0.1.8 发布准备
3487
+
3488
+ - 发布当前组件源码、按需入口及模型工作区主题;HTML 使用 model-workspace.css,Vue 使用组件与 style.css。清除旧消费项目锁记录。发布状态以 npm 注册表为准。
3489
+
3359
3490
 
3360
3491
  # Component API reference
3361
3492
 
@@ -3796,6 +3927,31 @@ export interface MapLayerNode { id: string; name: string; visible?: boolean; opa
3796
3927
 
3797
3928
  Slots: left, top, toolbar, right, legend, timeline, content, default
3798
3929
 
3930
+ ## MapPageLayout
3931
+
3932
+ ### Props
3933
+
3934
+ | Name | Type | Required | Default expression |
3935
+ |---|---|---|---|
3936
+ | rightOpen | boolean | false | false |
3937
+ | rightPanelEnabled | boolean | false | true |
3938
+ | rightPanelWidth | string | false | 'calc(var(--cp-font-1, 1px) * 328)' |
3939
+ | leftPanelWidth | string | false | 'calc(var(--cp-font-1, 1px) * 320)' |
3940
+ | edge | string | false | 'calc(var(--cp-font-1, 1px) * 12)' |
3941
+ | topOffset | string | false | '' |
3942
+ | bottomOffset | string | false | '' |
3943
+ | toolbarTop | string | false | '' |
3944
+ | timelineLeft | string | false | '' |
3945
+ | timelineRight | string | false | '' |
3946
+ | timelineBottom | string | false | '' |
3947
+
3948
+ ### Events
3949
+
3950
+ - `update:rightOpen` — `[open: boolean]`
3951
+ - `timeline-height` — `[height: number]`
3952
+
3953
+ Slots: left, top, toolbar, right, legend, timeline, content, default
3954
+
3799
3955
  ## RainfallRankingTable
3800
3956
 
3801
3957
  ### Props
@@ -4303,12 +4459,59 @@ Slots: No declared content slots.
4303
4459
 
4304
4460
  | Name | Type | Required | Default expression |
4305
4461
  |---|---|---|---|
4462
+ | structured | boolean | false | false |
4463
+ | columns | 1 &#124; 2 | false | 2 |
4464
+ | topOffset | string | false | 'calc(var(--cp-font-1, 1px) * 64)' |
4306
4465
 
4307
4466
  ### Events
4308
4467
 
4309
4468
  No declared events.
4310
4469
 
4311
- Slots: default
4470
+ Slots: toolbar, default
4471
+
4472
+ ## ModelWorkspace
4473
+
4474
+ ### Props
4475
+
4476
+ | Name | Type | Required | Default expression |
4477
+ |---|---|---|---|
4478
+ | theme | 'light' &#124; 'dark' | false | 'light' |
4479
+ | nativeControls | boolean | false | false |
4480
+
4481
+ ### Events
4482
+
4483
+ No declared events.
4484
+
4485
+ Slots: header, default, footer
4486
+
4487
+ ## ModelWorkspaceHeader
4488
+
4489
+ ### Props
4490
+
4491
+ | Name | Type | Required | Default expression |
4492
+ |---|---|---|---|
4493
+ | title | string | true | undefined / no declared default |
4494
+ | description | string | false | undefined / no declared default |
4495
+
4496
+ ### Events
4497
+
4498
+ No declared events.
4499
+
4500
+ Slots: title, actions
4501
+
4502
+ ## ModelWorkspacePanel
4503
+
4504
+ ### Props
4505
+
4506
+ | Name | Type | Required | Default expression |
4507
+ |---|---|---|---|
4508
+ | title | string | false | undefined / no declared default |
4509
+
4510
+ ### Events
4511
+
4512
+ No declared events.
4513
+
4514
+ Slots: header, actions, default, footer
4312
4515
 
4313
4516
  ## UiAffix
4314
4517
 
@@ -5025,7 +5228,7 @@ SvgIcon 仅引用 sprite,不自动加载内置图库。自有 sprite 通过 pr
5025
5228
 
5026
5229
  # Element Plus 完整组件目录
5027
5230
 
5028
- 基准版本:2.14.7。共 111 个主 / 子组件、4 个服务出口、3 个指令出口。另保留 38 个项目特色组件。
5231
+ 基准版本:2.14.7。共 111 个主 / 子组件、4 个服务出口、3 个指令出口。另保留 42 个项目特色组件。
5029
5232
 
5030
5233
  清单覆盖官方组件注册表及服务 / 指令,不包含内部工具函数。出口覆盖不代表所有组件的交互、独立示例和视觉状态均已验证。网站每项均提供导入和官方 API 索引,新增组合示例见 AI-GUIDE.md。
5031
5234
 
@@ -5444,6 +5647,10 @@ UiContainer 展示系统顶部/侧栏/内容和地图浮动区域示例。原 Ma
5444
5647
 
5445
5648
  # CSS 变量主题与样式隔离
5446
5649
 
5650
+ MapPageLayout 使用 --map-layout-layer-content/panel/legend/toolbar/focus/hover 统一区域层级。与原平台一致:content=1、panel=2、legend=3、toolbar=4、focus=5、hover=6,时间轴和右栏同样参与;hover 高于 focus;content 内部即使使用较大 z-index 也不跨越区域堆叠上下文。图例和底部外层允许内容溢出,避免浮层被父区域裁剪;内部滚动由业务组件负责。
5651
+
5652
+ MapPageLayout 是新增独立区域布局,读取现有主题变量及库作用域默认变量,不改写全局颜色。所有面板的 hover 层级高于 focus-within;右栏始终按固定区域关系避让。旧 TemplateLayout 的业务选择器保留以兼容已有消费者,新布局不继承这些选择器。MapPageLayout 与 DefenseMapLayout structured 模式继承 VFit 尺寸变量,不在 720px 以下切换布局;会商网格按 minmax(0, 1fr) 均分剩余高度,默认模式保留兼容。
5653
+
5447
5654
  库不导出 useThemeStore,也不依赖使用方 Pinia。根入口和 /components 导出相同组件。
5448
5655
 
5449
5656
  ## 默认:隔离模式
@@ -5682,6 +5889,12 @@ import { DefenseMapLayout, UiButton } from 'sky-ui-kit'
5682
5889
 
5683
5890
 
5684
5891
  按需 JS 入口不改变 CSS 约定,style.css 仍为整体公共样式,不是逐组件 CSS。
5892
+
5893
+
5894
+ 模型工作区主题限定 .sky-model-workspace,theme 属性控制明暗,原生控件适配显式开启;变量与边界见 MODEL-WORKSPACE.md。
5895
+
5896
+
5897
+ 独立 model-workspace.css 面向原生 HTML,无 Vue/Element Plus 样式依赖;与 style.css 的模型主题来自同一源文件,Vue 无需重复导入。
5685
5898
 
5686
5899
  # 按需引入
5687
5900
 
@@ -5722,6 +5935,123 @@ import { MapSideMenu } from 'sky-ui-kit/components/MapSideMenu'
5722
5935
 
5723
5936
  主入口文件从约 1161 KB 降到 178 KB,但还有共享 chunk;不能只看入口文件判断网站下载量。上表已包含各示例引用的库共享代码。可选 icons.js 约 980 KB,npm 安装包仍包含它;网站不导入即可不进入组件依赖链。
5724
5937
 
5938
+ # 模型工作区统一主题
5939
+
5940
+ 参考四个项目实际样式:分布式水文模型 hydrogrid/frontend/src/styles/workspace-theme.css;水资源配置 app/static/workspace-theme.css;新安江 static/style.css 后段覆盖;LSTM前端预报模型Git/web_ui_prototype.html 的 light/dark token。新安江前段旧深色规则不是最终主题。
5941
+
5942
+ 共同浅色:背景 #f3f7fb,面板 #fff,主色 #1677ff,文字 #172b4d,边框 #dce5ef,蓝色渐变标题。深色:背景 #0d1420,面板 #151f2e,主色 #36cbb7,文字 #e3ecf5,边框 #35485f。
5943
+
5944
+ ModelWorkspace(theme=light|dark, nativeControls=false) 提供显式主题边界及 header/default/footer 插槽;ModelWorkspaceHeader(title, description) 提供 title/actions 插槽;ModelWorkspacePanel(title) 提供 header/actions/default/footer。theme 由应用控制,不写 localStorage 或 document 根节点。未设置应用变量也有完整默认效果,应用可在容器 class/style 覆盖变量。
5945
+
5946
+ 公共 CSS 仍仅在 main.ts 引入 element-plus/dist/index.css 和 sky-ui-kit/style.css 一次。组件包构建脚本把 model-workspace.css 合入 style.css。范围仅 sky-model-workspace,不修改原生 Element Plus 或容器外 body。body 自身仍由应用设置,容器高度由应用布局提供。
5947
+
5948
+ native-controls 是渐进迁移适配,仅在显式容器中覆盖原生按钮/表单外观,保留原 DOM、事件、disabled 及表单语义,不自动重写业务。优先用 UiButton/UiInput 等库组件。body 上的浮层不能继承局部主题,使用默认局部浮层或显式传递主题。地图色带、图表配色和业务阈值不在该主题替换范围。
5949
+
5950
+ 四个参考项目本次只读。它们并非全部 Vue 应用:原生 HTML 项目不能直接使用 Vue 组件,使用独立 model-workspace.css 并显式添加 sky-model-workspace / data-theme 边界和对应结构类;只升级 npm 不会自动改写已有原生页面。下一版本发布后按上述方式接入。
5951
+
5952
+
5953
+ ## 按项目技术栈选择
5954
+
5955
+ | 项目 | 使用方式 | 依赖 |
5956
+ |---|---|---|
5957
+ | 原生 HTML / 服务端模板 | model-workspace.css + 原生 HTML 结构类 | 无 Vue / Element Plus 运行时要求 |
5958
+ | Vue 3 | ModelWorkspace / Header / Panel 组件 + style.css | Vue 和组件包声明的 peerDependencies |
5959
+
5960
+ 以下能力为当前源码新增,需等待包含该能力的新版本发布;已发布的 0.1.7 不包含独立 model-workspace.css 或三个 ModelWorkspace 组件。
5961
+
5962
+ ## 原生 HTML:直接引入主题
5963
+
5964
+ 从新发布包的 dist/model-workspace.css 复制到网站静态资源目录,例如 /static/vendor/sky-ui-kit/model-workspace.css,随网站一起部署。不要将 node_modules 路径或开发者磁盘路径写进线上 HTML。不需要引入组件 JS、Vue 或 Element Plus CSS。
5965
+
5966
+ ```html
5967
+ <!doctype html>
5968
+ <html lang="zh-CN">
5969
+ <head>
5970
+ <meta charset="utf-8">
5971
+ <meta name="viewport" content="width=device-width, initial-scale=1">
5972
+ <title>模型工作区</title>
5973
+ <link rel="stylesheet" href="/static/vendor/sky-ui-kit/model-workspace.css">
5974
+ <style>body { margin: 0; } #workspace { min-height: 100vh; }</style>
5975
+ </head>
5976
+ <body>
5977
+ <div id="workspace" class="sky-model-workspace" data-theme="light" data-native-controls>
5978
+ <header class="sky-model-header">
5979
+ <div>
5980
+ <h1 class="sky-model-header__title">模型计算工作区</h1>
5981
+ <p class="sky-model-header__description">统一背景、面板和原生表单主题</p>
5982
+ </div>
5983
+ <button id="toggle-theme" type="button">切换主题</button>
5984
+ </header>
5985
+ <main class="sky-model-workspace__content">
5986
+ <section class="sky-model-panel">
5987
+ <header class="sky-model-panel__header"><h2>模型配置</h2></header>
5988
+ <div class="sky-model-panel__body">
5989
+ <label>测站名称 <input id="station" value="汉口站"></label>
5990
+ </div>
5991
+ <footer class="sky-model-panel__footer">
5992
+ <span id="status" role="status">等待配置</span>
5993
+ <button id="save" type="button" class="primary">保存配置</button>
5994
+ </footer>
5995
+ </section>
5996
+ </main>
5997
+ </div>
5998
+ <script>
5999
+ const workspace = document.getElementById('workspace');
6000
+ document.getElementById('toggle-theme').addEventListener('click', () => {
6001
+ workspace.dataset.theme = workspace.dataset.theme === 'dark' ? 'light' : 'dark';
6002
+ });
6003
+ document.getElementById('save').addEventListener('click', () => {
6004
+ document.getElementById('status').textContent = '当前测站:' + document.getElementById('station').value;
6005
+ // 真实保存请求沿用应用现有逻辑。
6006
+ });
6007
+ </script>
6008
+ </body>
6009
+ </html>
6010
+ ```
6011
+
6012
+ 带 Vite 等构建工具的原生页面也可以在其唯一公共入口 `import 'sky-ui-kit/model-workspace.css'`。HTML 结构类负责外观,原有表单提交、事件和业务逻辑仍由页面维护;data-native-controls 显式开启原生控件外观。
6013
+
6014
+ ## Vue 3:使用组件
6015
+
6016
+ main.ts 只引入一次公共 CSS:
6017
+
6018
+ ```ts
6019
+ import 'element-plus/dist/index.css'
6020
+ import 'sky-ui-kit/style.css'
6021
+ ```
6022
+
6023
+ 不再额外引入 model-workspace.css,style.css 已包含同一主题。页面示例:
6024
+
6025
+ ```vue
6026
+ <script setup lang="ts">
6027
+ import { ref } from 'vue'
6028
+ import { ModelWorkspace, ModelWorkspaceHeader, ModelWorkspacePanel, UiButton, UiInput } from 'sky-ui-kit'
6029
+ const theme = ref<'light' | 'dark'>('light')
6030
+ const station = ref('汉口站')
6031
+ const message = ref('等待配置')
6032
+ </script>
6033
+ <template>
6034
+ <ModelWorkspace :theme="theme" style="min-height: 100vh">
6035
+ <template #header>
6036
+ <ModelWorkspaceHeader title="模型计算工作区" description="统一模型页面主题">
6037
+ <template #actions>
6038
+ <UiButton @click="theme = theme === 'light' ? 'dark' : 'light'">切换主题</UiButton>
6039
+ </template>
6040
+ </ModelWorkspaceHeader>
6041
+ </template>
6042
+ <ModelWorkspacePanel title="模型配置">
6043
+ <UiInput v-model="station" placeholder="测站名称" />
6044
+ <template #footer>
6045
+ <span role="status">{{ message }}</span>
6046
+ <UiButton type="primary" @click="message = '当前测站:' + station">保存配置</UiButton>
6047
+ </template>
6048
+ </ModelWorkspacePanel>
6049
+ </ModelWorkspace>
6050
+ </template>
6051
+ ```
6052
+
6053
+ HTML 与 Vue 共用同一份 token 和结构样式,切换方式分别为 data-theme 和 theme 属性;两种方式均不需要原项目本地样式文件。新增颜色和布局规则应修改组件库,使用方只绑定业务数据和事件。
6054
+
5725
6055
  # 一体机组件库接入约定
5726
6056
 
5727
6057
  用户要求:一体机 Web 的通用组件全部使用 sky-ui-kit,缺失能力先补充库,再由应用消费。
package/llms.txt CHANGED
@@ -1,12 +1,13 @@
1
1
  # sky-ui-kit
2
2
 
3
- > Vue 3 components compatible with Element Plus, project menus, timeline and map tools. Version 0.1.7. AI tools must explicitly load these files.
3
+ > Vue 3 components compatible with Element Plus, project menus, timeline and map tools. Version 0.1.8. AI tools must explicitly load these files.
4
4
 
5
5
  ## Documentation
6
6
 
7
7
  - [Consumers](docs/CONSUMERS.md): shared project convention and local integration.
8
8
  - [AI guide](docs/AI-GUIDE.md): setup, examples, icon/event bindings and limits.
9
9
  - [Component API](docs/COMPONENT-API.md): props, defaults, events, slots and types.
10
+ - [Model workspace](docs/MODEL-WORKSPACE.md): shared theme and native control migration.
10
11
  - [On-demand imports](docs/ON-DEMAND.md): per-component entries and remaining CSS/icon limits.
11
12
  - [AI module changes](docs/AI-CHANGELOG.md): module updates and integration impact.
12
13
  - [Project usage](docs/COMPONENT-USAGE.md): current source usage counts and call sites.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sky-ui-kit",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Vue UI components compatible with Element Plus and the project theme",
5
5
  "type": "module",
6
6
  "files": [
@@ -24,7 +24,8 @@
24
24
  "docs/AI-CHANGELOG.md",
25
25
  "docs/COMPONENT-API.md",
26
26
  "docs/CONSUMERS.md",
27
- "docs/ON-DEMAND.md"
27
+ "docs/ON-DEMAND.md",
28
+ "docs/MODEL-WORKSPACE.md"
28
29
  ],
29
30
  "exports": {
30
31
  ".": {
@@ -48,7 +49,8 @@
48
49
  "./icons": {
49
50
  "types": "./dist/components/icons.d.ts",
50
51
  "import": "./dist/icons.js"
51
- }
52
+ },
53
+ "./model-workspace.css": "./dist/model-workspace.css"
52
54
  },
53
55
  "sideEffects": [
54
56
  "**/*.css"