dsh-plugin-core 0.1.0 → 0.1.3

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.
Files changed (62) hide show
  1. package/README.md +28 -23
  2. package/dist/design/tokens-css.d.ts +1 -1
  3. package/dist/design/tokens-css.d.ts.map +1 -1
  4. package/dist/design/tokens-css.js +2 -0
  5. package/dist/design/tokens-css.js.map +1 -1
  6. package/dist/explorer/ExplorerPanel.d.ts.map +1 -1
  7. package/dist/explorer/ExplorerPanel.js +1 -1
  8. package/dist/explorer/ExplorerPanel.js.map +1 -1
  9. package/dist/explorer/index.d.ts +1 -1
  10. package/dist/explorer/index.d.ts.map +1 -1
  11. package/dist/explorer/index.js +1 -1
  12. package/dist/explorer/index.js.map +1 -1
  13. package/dist/explorer/preview/index.d.ts.map +1 -1
  14. package/dist/explorer/preview/index.js +2 -1
  15. package/dist/explorer/preview/index.js.map +1 -1
  16. package/dist/explorer/types.d.ts +0 -8
  17. package/dist/explorer/types.d.ts.map +1 -1
  18. package/dist/explorer/types.js +1 -32
  19. package/dist/explorer/types.js.map +1 -1
  20. package/dist/ui/Modal.js +1 -1
  21. package/dist/ui/Modal.js.map +1 -1
  22. package/dist/ui/Toast.d.ts.map +1 -1
  23. package/dist/ui/Toast.js +1 -3
  24. package/dist/ui/Toast.js.map +1 -1
  25. package/dist/ui/card-css.d.ts +0 -1
  26. package/dist/ui/card-css.d.ts.map +1 -1
  27. package/dist/ui/card-css.js +2 -12
  28. package/dist/ui/card-css.js.map +1 -1
  29. package/dist/ui/chip-css.d.ts +2 -0
  30. package/dist/ui/chip-css.d.ts.map +1 -0
  31. package/dist/ui/chip-css.js +28 -0
  32. package/dist/ui/chip-css.js.map +1 -0
  33. package/dist/ui/controls-css.d.ts +1 -1
  34. package/dist/ui/controls-css.d.ts.map +1 -1
  35. package/dist/ui/controls-css.js +1 -21
  36. package/dist/ui/controls-css.js.map +1 -1
  37. package/dist/ui/css.d.ts.map +1 -1
  38. package/dist/ui/css.js +2 -1
  39. package/dist/ui/css.js.map +1 -1
  40. package/dist/ui/feedback-css.d.ts +1 -1
  41. package/dist/ui/feedback-css.d.ts.map +1 -1
  42. package/dist/ui/feedback-css.js +9 -0
  43. package/dist/ui/feedback-css.js.map +1 -1
  44. package/dist/ui/official.d.ts +31 -0
  45. package/dist/ui/official.d.ts.map +1 -0
  46. package/dist/ui/official.js +42 -0
  47. package/dist/ui/official.js.map +1 -0
  48. package/dist/utils/index.d.ts +1 -0
  49. package/dist/utils/index.d.ts.map +1 -1
  50. package/dist/utils/index.js +1 -0
  51. package/dist/utils/index.js.map +1 -1
  52. package/dist/utils/path.d.ts +17 -0
  53. package/dist/utils/path.d.ts.map +1 -0
  54. package/dist/utils/path.js +41 -0
  55. package/dist/utils/path.js.map +1 -0
  56. package/docs/README.md +1 -0
  57. package/docs/design/architecture.md +10 -8
  58. package/docs/design/features/explorer.md +6 -3
  59. package/docs/design/features/ui.md +4 -0
  60. package/docs/design/structure.md +152 -0
  61. package/docs/requirements.md +13 -12
  62. package/package.json +2 -2
@@ -0,0 +1,152 @@
1
+ # 结构规范
2
+
3
+ 本文件回答两个问题:
4
+
5
+ 1. **代码怎么分** —— 每个目录放什么、谁依赖谁。
6
+ 2. **预览插件(packages/demo)左侧怎么分** —— 组件预览的分区,跟代码结构对齐。
7
+
8
+ > 本文是**目标态**(2026-10-19 用户拍板)。哪些已在、哪些暂缓,用状态标注区分;
9
+ > 现状与目标的差异见文末「未落地项」。
10
+ > 运行逻辑(样式注入机制、数据流、触发关系)的真源在 `docs/design/architecture.md`,本文不重复。
11
+
12
+ ## 命名约定
13
+
14
+ - **`ui`** = 基础能力:纯零件 + 可复用的基础容器(`Modal`、侧边栏/拉栏、选工作区/选文件),不碰业务成品。
15
+ - **`adv.`** = advanced,高级空间:**成品**——拿 `ui` 的基础能力拼出来、与业务对象相关的共享件。
16
+ - 高级空间统一加 `adv.` 前缀:`adv.explorer`、`adv.session`。
17
+ - npm 子路径允许带点,引用写法就是 `dsh-plugin-core/adv.explorer`。
18
+
19
+ ## 状态图例
20
+
21
+ | 标记 | 含义 |
22
+ |---|---|
23
+ | ✅ | 代码已在(质量待逐个重审) |
24
+ | 🟡 | 缺口 / 待迁:需要补或需要挪位置的 |
25
+ | ⚪ | 暂缓:先标着,不做 |
26
+
27
+ ---
28
+
29
+ ## 一、代码分层
30
+
31
+ ```
32
+ dsh-plugin-core/
33
+ │
34
+ ├── design/ ① 设计层 —— 只放「值」和「注入机制」,零 React
35
+ │ ├── tokens ✅ 颜色 / 字号 / 间距 / 圆角 / 层级(别名官方 --dsw-alias-*)
36
+ │ └── style-kit ✅ 运行时注入 <style>,createStyleKit({ id, prefix })
37
+ │
38
+ ├── ui/ ② 基础控件 —— 纯零件 + 可复用基础能力(依赖 design)
39
+ │ ├── official.ts ✅ 全仓唯一 import 官方 primitives 的入口(L1)
40
+ │ ├── 表单 ✅ Input / NumberInput / PrefixedInput / Textarea /
41
+ │ │ Checkbox / Segmented / Picker(下拉选择)
42
+ │ ├── 动作 ✅ Button / IconButton
43
+ │ ├── 反馈 ✅ Modal / Toast / EmptyState / ErrorBoundary
44
+ │ │ └── Loading ⚪ 暂缓
45
+ │ ├── 展示 ✅ Card / StripCard / Chip / MarqueeText /
46
+ │ │ SectionHead / FieldHint / LiveText / BackToTop
47
+ │ ├── 选择 ✅ WorkspacePicker(选工作区)/ FilePicker(选文件)
48
+ │ │ 数据由调用方给,只是选择器,不含浏览逻辑
49
+ │ └── 布局 🟡 SidebarLayout / SplitPane(侧边栏 + 拖拽拉栏)
50
+ │ 现在只有底层函数 resizer(startResizeLayoutWidth),组件待补
51
+ │
52
+ ├── utils/ ③ 纯方法 —— 零 React / 零 DOM(谁都能用,它不依赖谁)
53
+ │ ├── date ✅ 日期 / 相对时间 / 时间区间
54
+ │ ├── i18n ✅ 内置中英字典
55
+ │ ├── string ⚪ 暂缓
56
+ │ ├── number ⚪ 暂缓(注:formatBytes 已被 adv.session 附件卡使用,只「不对外承诺」,不删)
57
+ │ ├── http ⚪ 暂缓
58
+ │ └── path 🟡 纯路径方法(无 UI):joinPath / parentOf / crumbsOf / extOf / mimeOf
59
+ │ 现在散在 explorer/types.ts,建议迁入这里(待你确认)
60
+ │
61
+ ├── adv.explorer/ ④ 高级空间①:文件浏览(依赖 ui + utils)
62
+ │ └── ExplorerPanel ✅ 成品:目录树 + 面包屑 + 文件预览
63
+ │ (内部组合 ui 的侧栏/拉栏与 Picker;不对外暴露它们)
64
+ │ `previewKindOf`(决定用哪种预览器)是业务判断,留内部
65
+ │
66
+ └── adv.session/ ⑤ 高级空间②:会话记录(依赖 ui + utils)
67
+ └── SessionPreview ✅ 成品:ui.Modal 承载会话消息(modal / sidebar / page)
68
+ ```
69
+
70
+ ### 组合关系(成品 = 基础能力 + 定制)
71
+
72
+ | 成品 | 用到的 `ui` 基础能力 | 定制了什么 |
73
+ |---|---|---|
74
+ | `adv.session` · `SessionPreview` | `Modal` | 把会话消息放进弹窗 |
75
+ | `adv.explorer` · `ExplorerPanel` | `SidebarLayout` / `SplitPane` + `WorkspacePicker` / `FilePicker` | 目录树 + 面包屑 + 文件预览 |
76
+
77
+ `adv.*` 只做「拼装 + 业务定制」,不重新实现按钮 / 下拉 / 弹窗 / 侧栏。
78
+
79
+ ### 依赖方向(单向,不许反向)
80
+
81
+ ```
82
+ design ──▶ ui ──▶ adv.explorer / adv.session
83
+ utils(谁都不依赖,谁都可以用)
84
+ ```
85
+
86
+ - `utils` 不得 import `ui` / `design` / React / DOM / 宿主 API —— 将来要能整体剥出去复用。
87
+ - `design` 不得依赖 `ui`(否则「只想要 token 的插件」被迫拖进 React)。
88
+ - `ui` 不得依赖 `adv.*`(反向依赖成环)。
89
+ - `adv.*` 只从 `ui` / `utils` 的公开导出消费,不直接 import 官方平台模块(要包先过 `ui/official.ts`)。
90
+
91
+ ### 立包判据
92
+
93
+ **有实质内容、会持续长大的功能模块才独立成子包;只是一个控件就进 `ui`。**
94
+ 统一到「控件」粒度,不提整个页面。
95
+
96
+ ---
97
+
98
+ ## 二、demo 展示分区(左侧导航)
99
+
100
+ ```
101
+ 组件预览
102
+ │
103
+ ├─ ① 设计
104
+ │ 色板 / 字号 / 间距 / 圆角 / 阴影 / 明暗
105
+ │ (只摆值,不点交互)
106
+ │
107
+ ├─ ② 基础控件
108
+ │ ├─ 表单 Input / NumberInput / PrefixedInput / Textarea / Checkbox / Segmented / Picker
109
+ │ ├─ 动作 Button / IconButton
110
+ │ ├─ 反馈 Modal / Toast / EmptyState / ErrorBoundary
111
+ │ ├─ 展示 Card / StripCard / Chip / MarqueeText / SectionHead / FieldHint / LiveText / BackToTop
112
+ │ └─ 布局 侧边栏 / 拉栏
113
+ │
114
+ ├─ ③ 高级空间
115
+ │ ├─ 文件浏览 ExplorerPanel(点文件夹、点文件看预览)
116
+ │ └─ 会话预览 SessionPreview(弹窗里放会话记录)
117
+ │
118
+ └─ ④ 工具方法
119
+ 日期格式化 / 相对时间(拿真实值演示,不是控件)
120
+ ```
121
+
122
+ ### 现有分区 → 新分组映射(全部是重排,不用新写内容)
123
+
124
+ | 现有 `demo/sections/` | 归到 |
125
+ |---|---|
126
+ | `design.tsx` | ① 设计 |
127
+ | `buttons.tsx` | ② 基础控件 · 动作 |
128
+ | `pickers.tsx` | ② 基础控件 · 表单 |
129
+ | `display.tsx` | ② 基础控件 · 展示 |
130
+ | `feedback.tsx` | ② 基础控件 · 反馈 |
131
+ | `explorer.tsx` | ③ 高级空间 · 文件浏览 |
132
+ | `session.tsx` | ③ 高级空间 · 会话预览 |
133
+ | `utils.tsx` | ④ 工具方法 |
134
+
135
+ ---
136
+
137
+ ## 三、未落地项(等调整)
138
+
139
+ - **目录改名**:`src/explorer` → `src/adv.explorer`、`src/session` → `src/adv.session`;同步改
140
+ `package.json` 的 `exports`、各 `index.ts`、`packages/demo` 的 import、`docs/design/architecture.md` 的树。
141
+ 代码现在仍是旧名。
142
+ - **收窄导出**:`adv.explorer` 只暴露 `ExplorerPanel`;`WorkspacePicker` / `FilePicker` 留在 `ui`(已在那)。
143
+ - **路径方法归基础**:`joinPath` / `parentOf` / `crumbsOf` / `extOf` / `mimeOf` 是纯方法(无 UI),
144
+ 建议迁入 `utils/`(`path` 域);`previewKindOf`(选哪种预览器)是文件浏览的业务判断,留在 `ExplorerPanel` 内部。
145
+ 待你确认。
146
+ - **补基础组件**:`ui` 目前只有拖拽函数 `resizer`(`startResizeLayoutWidth`),需补 `SidebarLayout` / `SplitPane`
147
+ 组件,供 `ExplorerPanel` 组合使用。
148
+ - **暂缓项**:`utils/string`、`utils/number`、`utils/http`、`ui/feedback/Loading` —— 只标注,未删代码。
149
+ - **库里没有的**:
150
+ - 表格 Table —— 待真实需求再定,不预造;
151
+ - Switch 开关 —— 官方 primitives 有,归「包官方」批次;
152
+ - Select 下拉 —— 用 `Picker` 代替(`SelectField` 曾因依赖官方 Menu 被删,属待反转的旧决策)。
@@ -26,14 +26,14 @@
26
26
 
27
27
  ```
28
28
  dsh-plugin-core/
29
- ├── design/ token(含深色段)+ 样式注入器工厂 + 主题判据
30
- ├── ui/ 控件(零件 + 选择器 + 反馈件)
31
- ├── utils/ 纯方法(日期 / 字符串 / 字节 / 时间区间 / HTTP 骨架)
32
- ├── explorer/ 工作区浏览 + 预览 + 选工作区 + 选文件
33
- └── session/ 会话预览
29
+ ├── design/ token(含深色段)+ 样式注入器工厂 + 主题判据
30
+ ├── ui/ 基础控件(零件 + 选择器 + 反馈件 + 侧栏/拉栏 + 选工作区/选文件)
31
+ ├── utils/ 纯方法(日期 / 字符串 / 字节 / 时间区间 / HTTP 骨架 / 路径)
32
+ ├── adv.explorer/ 文件浏览成品(目录树 + 面包屑 + 预览)
33
+ └── adv.session/ 会话记录预览成品
34
34
  ```
35
35
 
36
- 依赖方向**单向**:`design` ← `ui` ← `explorer` / `session`;
36
+ 依赖方向**单向**:`design` ← `ui` ← `adv.explorer` / `adv.session`;
37
37
  `utils` 与 `design` **互不依赖**;`ui` 不反向依赖任何人。
38
38
 
39
39
  ### 2.1 design
@@ -47,9 +47,11 @@ dsh-plugin-core/
47
47
 
48
48
  - 零件:Button / Input 家族 / Textarea / Checkbox / Segmented / 下拉框 / 搜索框 / 滑轨 /
49
49
  MarqueeText / LiveText / Field(含错误提示)/ resizer / DateTime / TimeRange
50
- - 选择器:`Picker`(通用:单选/多选/上限/搜索/分组/空态/降级)、`ModelPicker`
50
+ - 选择器:`Picker`(通用:单选/多选/上限/搜索/分组/空态/降级)、`ModelPicker`、
51
+ `WorkspacePicker`(选工作区)、`FilePicker`(选文件)
51
52
  - 「统一某类元素」的控件:`SectionHead` 等
52
53
  - 反馈件:`Modal` / `Loading` / `toast` / 空态 / 错误边界
54
+ - 布局基础:`SidebarLayout` / `SplitPane`(侧栏 + 拖拽拉栏;现只有 `resizer` 函数,组件待补)
53
55
  - **纯零件,不自己取数** —— 数据由调用方传入
54
56
 
55
57
  ### 2.3 utils
@@ -58,13 +60,12 @@ dsh-plugin-core/
58
60
  - **硬约束**:不得 import `utils` 以外的任何子包,不得依赖 React / DOM / 宿主 API,
59
61
  只能用标准库 + 注入的参数(为的是将来能整体剥出去复用)
60
62
 
61
- ### 2.4 explorer
63
+ ### 2.4 adv.explorer
62
64
 
63
- - `ExplorerPanel`:工作区浏览(目录树 + 面包屑)+ 文件预览
64
- - `WorkspacePicker`:选工作区
65
- - `FilePicker`:选文件
65
+ - `ExplorerPanel`:文件浏览成品(目录树 + 面包屑 + 文件预览),内部组合 `ui` 的侧栏/拉栏与 Picker
66
+ - 选工作区 / 选文件(`WorkspacePicker` / `FilePicker`)在 `ui`,不在这里
66
67
 
67
- ### 2.5 session
68
+ ### 2.5 adv.session
68
69
 
69
70
  - 会话预览:整体封装(连会话渲染一起),调用方注入取数能力
70
71
  - `variant` 决定承载方式:弹窗 / 侧栏 / 整页(**承载可换**是硬要求)
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "dsh-plugin-core",
3
- "version": "0.1.0",
3
+ "version": "0.1.3",
4
+ "packageManager": "pnpm@12.3.4",
4
5
  "description": "Shared base for DSH plugins: design tokens, UI controls, utils, workspace explorer, session preview",
5
6
  "keywords": [
6
7
  "deepseek",
@@ -52,7 +53,6 @@
52
53
  "build": "tsc -p tsconfig.json",
53
54
  "typecheck": "tsc -p tsconfig.json --noEmit",
54
55
  "test": "node --test test/*.test.mjs",
55
- "demo:build": "node demo/build.mjs",
56
56
  "build:demo": "node packages/demo/build.mjs"
57
57
  },
58
58
  "peerDependencies": {