dsh-plugin-core 0.1.4 → 0.2.0
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 +6 -8
- package/dist/design/index.d.ts +1 -1
- package/dist/design/index.d.ts.map +1 -1
- package/dist/design/index.js +1 -1
- package/dist/design/index.js.map +1 -1
- package/dist/design/style-kit.d.ts +4 -9
- package/dist/design/style-kit.d.ts.map +1 -1
- package/dist/design/style-kit.js +11 -24
- package/dist/design/style-kit.js.map +1 -1
- package/dist/design/tokens-css.d.ts +1 -1
- package/dist/design/tokens-css.d.ts.map +1 -1
- package/dist/design/tokens-css.js +130 -132
- package/dist/design/tokens-css.js.map +1 -1
- package/dist/explorer/ExplorerPanel.js +14 -14
- package/dist/explorer/ExplorerPanel.js.map +1 -1
- package/dist/explorer/explorer-css.d.ts +1 -1
- package/dist/explorer/explorer-css.d.ts.map +1 -1
- package/dist/explorer/explorer-css.js +23 -23
- package/dist/explorer/explorer-css.js.map +1 -1
- package/dist/explorer/preview/index.js +4 -4
- package/dist/explorer/preview/index.js.map +1 -1
- package/dist/session/index.js +9 -9
- package/dist/session/index.js.map +1 -1
- package/dist/session/session-css.d.ts +1 -1
- package/dist/session/session-css.js +14 -14
- package/dist/session/session-css.js.map +1 -1
- package/dist/ui/BackToTop.d.ts +1 -1
- package/dist/ui/BackToTop.d.ts.map +1 -1
- package/dist/ui/BackToTop.js +5 -5
- package/dist/ui/BackToTop.js.map +1 -1
- package/dist/ui/Button.js +5 -5
- package/dist/ui/Button.js.map +1 -1
- package/dist/ui/Card.js +8 -8
- package/dist/ui/Card.js.map +1 -1
- package/dist/ui/Checkbox.d.ts +2 -2
- package/dist/ui/Checkbox.d.ts.map +1 -1
- package/dist/ui/Checkbox.js +4 -4
- package/dist/ui/Checkbox.js.map +1 -1
- package/dist/ui/Chip.d.ts +1 -1
- package/dist/ui/Chip.d.ts.map +1 -1
- package/dist/ui/Chip.js +2 -2
- package/dist/ui/Chip.js.map +1 -1
- package/dist/ui/EmptyState.js +1 -1
- package/dist/ui/EmptyState.js.map +1 -1
- package/dist/ui/ErrorBoundary.js +1 -1
- package/dist/ui/ErrorBoundary.js.map +1 -1
- package/dist/ui/Field.d.ts +1 -1
- package/dist/ui/Field.d.ts.map +1 -1
- package/dist/ui/Field.js +19 -19
- package/dist/ui/Field.js.map +1 -1
- package/dist/ui/FieldHint.js +2 -2
- package/dist/ui/FieldHint.js.map +1 -1
- package/dist/ui/Loading.d.ts +1 -1
- package/dist/ui/Loading.d.ts.map +1 -1
- package/dist/ui/Loading.js +9 -9
- package/dist/ui/Loading.js.map +1 -1
- package/dist/ui/MarqueeText.d.ts +3 -3
- package/dist/ui/MarqueeText.js +5 -5
- package/dist/ui/MarqueeText.js.map +1 -1
- package/dist/ui/Modal.js +5 -5
- package/dist/ui/Modal.js.map +1 -1
- package/dist/ui/ModelPicker.js +1 -1
- package/dist/ui/ModelPicker.js.map +1 -1
- package/dist/ui/Picker.js +16 -16
- package/dist/ui/Picker.js.map +1 -1
- package/dist/ui/SectionHead.d.ts +1 -1
- package/dist/ui/SectionHead.js +4 -4
- package/dist/ui/SectionHead.js.map +1 -1
- package/dist/ui/Segmented.js +5 -5
- package/dist/ui/Segmented.js.map +1 -1
- package/dist/ui/Textarea.d.ts +2 -2
- package/dist/ui/Textarea.js +3 -3
- package/dist/ui/Textarea.js.map +1 -1
- package/dist/ui/Toast.js +3 -3
- package/dist/ui/Toast.js.map +1 -1
- package/dist/ui/card-css.d.ts +1 -1
- package/dist/ui/card-css.d.ts.map +1 -1
- package/dist/ui/card-css.js +22 -22
- package/dist/ui/card-css.js.map +1 -1
- package/dist/ui/chip-css.d.ts +1 -1
- package/dist/ui/chip-css.d.ts.map +1 -1
- package/dist/ui/chip-css.js +10 -10
- package/dist/ui/chip-css.js.map +1 -1
- package/dist/ui/controls-css.d.ts +8 -8
- package/dist/ui/controls-css.d.ts.map +1 -1
- package/dist/ui/controls-css.js +198 -200
- package/dist/ui/controls-css.js.map +1 -1
- package/dist/ui/css.d.ts +0 -11
- package/dist/ui/css.d.ts.map +1 -1
- package/dist/ui/css.js +3 -16
- package/dist/ui/css.js.map +1 -1
- package/dist/ui/feedback-css.d.ts +1 -1
- package/dist/ui/feedback-css.d.ts.map +1 -1
- package/dist/ui/feedback-css.js +30 -31
- package/dist/ui/feedback-css.js.map +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +2 -2
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/picker-css.d.ts +1 -1
- package/dist/ui/picker-css.d.ts.map +1 -1
- package/dist/ui/picker-css.js +32 -33
- package/dist/ui/picker-css.js.map +1 -1
- package/dist/ui/resizer.d.ts +1 -1
- package/dist/ui/resizer.d.ts.map +1 -1
- package/dist/ui/resizer.js +1 -1
- package/dist/ui/resizer.js.map +1 -1
- package/docs/design/architecture.md +3 -3
- package/docs/design/features/design.md +5 -7
- package/docs/design/features/ui.md +4 -4
- package/docs/design/features.md +1 -1
- package/docs/design/structure.md +1 -1
- package/docs/design/style.md +18 -17
- package/docs/examples/integration.md +3 -5
- package/docs/requirements.md +8 -12
- package/package.json +1 -1
package/dist/ui/css.js
CHANGED
|
@@ -7,19 +7,6 @@ import { CHIP_CSS } from './chip-css.js';
|
|
|
7
7
|
import { EXPLORER_CSS } from '../explorer/explorer-css.js';
|
|
8
8
|
import { SESSION_CSS } from '../session/session-css.js';
|
|
9
9
|
export const CONTROLS_DOMAIN = 'controls';
|
|
10
|
-
/**
|
|
11
|
-
* 把 CSS 模板里的 **变量前缀** `--tdt-` 换成当前插件的。
|
|
12
|
-
*
|
|
13
|
-
* ⚠️ 类名 `dsh-tdt-` **故意不换**:搬来的控件里 className 是硬编码的 `dsh-tdt-btn` 这类字面量
|
|
14
|
-
* (模板字符串里也拼接了),只换 CSS 侧会让选择器与 className 对不上、样式整片失效。
|
|
15
|
-
* 要连类名一起隔离,必须同步改造每个控件的 className —— 那是另一个任务。
|
|
16
|
-
*
|
|
17
|
-
* 已知限制:两个插件若引的 core 版本不同,`.dsh-tdt-*` 规则会互相覆盖(内容相同时无害)。
|
|
18
|
-
* 主防线是 style 标签 id(`createStyleKit({ id })`)与变量前缀隔离。
|
|
19
|
-
*/
|
|
20
|
-
export function buildCss(template, prefix) {
|
|
21
|
-
return template.split('--tdt-').join(`--${prefix}-`);
|
|
22
|
-
}
|
|
23
10
|
const CONTROLS_CSS = [
|
|
24
11
|
SEGMENTED_CSS,
|
|
25
12
|
BUTTON_CSS,
|
|
@@ -41,9 +28,9 @@ const CONTROLS_CSS = [
|
|
|
41
28
|
*
|
|
42
29
|
* 为什么是模块级而不是 React Context:core 会被**内联进每个插件各自的 bundle**,
|
|
43
30
|
* 模块级变量天然按插件隔离(不像共享运行时那样会互相踩)。
|
|
44
|
-
* 插件启动时 `setStyleKit(createStyleKit({ id
|
|
31
|
+
* 插件启动时 `setStyleKit(createStyleKit({ id }))` 一次即可;不设就走默认 kit。
|
|
45
32
|
*/
|
|
46
|
-
let current = createStyleKit({ id: 'dsh-plugin-core-ui'
|
|
33
|
+
let current = createStyleKit({ id: 'dsh-plugin-core-ui' });
|
|
47
34
|
export function setStyleKit(kit) {
|
|
48
35
|
current = kit;
|
|
49
36
|
}
|
|
@@ -53,6 +40,6 @@ export function getStyleKit() {
|
|
|
53
40
|
/** 登记 token + 控件样式并确保挂载(幂等)。 */
|
|
54
41
|
export function ensureControls(kit = current) {
|
|
55
42
|
kit.registerStyle('tokens', kit.tokensCss);
|
|
56
|
-
kit.applyStyle(CONTROLS_DOMAIN,
|
|
43
|
+
kit.applyStyle(CONTROLS_DOMAIN, CONTROLS_CSS);
|
|
57
44
|
}
|
|
58
45
|
//# sourceMappingURL=css.js.map
|
package/dist/ui/css.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/ui/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,oBAAoB,CAAA;AAClE,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAA;AAEzC
|
|
1
|
+
{"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/ui/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,oBAAoB,CAAA;AAClE,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAA;AAEzC,MAAM,YAAY,GAAG;IACnB,aAAa;IACb,UAAU;IACV,SAAS;IACT,YAAY;IACZ,UAAU;IACV,WAAW;IACX,eAAe;IACf,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,QAAQ;CACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ;;;;;;GAMG;AACH,IAAI,OAAO,GAAa,cAAc,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAA;AAEpE,MAAM,UAAU,WAAW,CAAC,GAAa;IACvC,OAAO,GAAG,GAAG,CAAA;AACf,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,cAAc,CAAC,MAAgB,OAAO;IACpD,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;IAC1C,GAAG,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,CAAC,CAAA;AAC/C,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const FEEDBACK_CSS = "\n.
|
|
1
|
+
export declare const FEEDBACK_CSS = "\n.dshpc-modal-mask{\n position:fixed;inset:0;z-index:1070;display:flex;align-items:center;justify-content:center;\n background:rgba(15,23,42,.45);\n}\n.dshpc-modal{\n display:flex;flex-direction:column;max-width:min(960px,92vw);max-height:86vh;\n background:var(--dshpc-surface-base);border:1px solid var(--dshpc-border);\n border-radius:10px;box-shadow:0 16px 48px rgba(15,23,42,.24);overflow:hidden;\n}\n.dshpc-modal__head{\n display:flex;align-items:center;gap:8px;padding:12px 14px;\n border-bottom:1px solid var(--dshpc-border-faint);color:var(--dshpc-fg);font-size:14px;\n}\n.dshpc-modal__title{flex:1;min-width:0}\n/* \u5173\u95ED\u6309\u94AE\uFF1A24\u00D724 \u65B9\u89D2\u56FE\u6807\u4F4D\uFF0C\u4E0D\u501F\u7528 Picker \u7684\u89E6\u53D1\u5668\u76AE\u80A4\uFF08\u90A3\u4EFD\u5E26 min-width:120px\uFF09\u3002 */\n.dshpc-modal__close{\n display:inline-flex;align-items:center;justify-content:center;flex:none;\n width:24px;height:24px;padding:0;border:none;border-radius:var(--dshpc-radius-sm);\n background:transparent;color:var(--dshpc-fg-3);font-family:inherit;font-size:12px;line-height:1;cursor:pointer;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);\n}\n.dshpc-modal__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}\n.dshpc-modal__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n.dshpc-modal__body{flex:1;min-height:0;overflow:auto;padding:12px 14px}\n.dshpc-modal__foot{\n display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;\n border-top:1px solid var(--dshpc-border-faint);\n}\n.dshpc-toast-host{\n position:fixed;z-index:1090;left:50%;bottom:32px;transform:translateX(-50%);\n display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;\n}\n.dshpc-toast{\n padding:8px 14px;border-radius:8px;font-size:13px;color:var(--dshpc-fg);\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);\n box-shadow:0 8px 24px rgba(15,23,42,.16);\n}\n.dshpc-toast--success{color:var(--dshpc-success);border-color:color-mix(in srgb,var(--dshpc-success) 40%,transparent)}\n.dshpc-toast--error{color:var(--dshpc-danger);border-color:color-mix(in srgb,var(--dshpc-danger) 40%,transparent)}\n.dshpc-empty{\n display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;\n padding:24px;color:var(--dshpc-fg-3);font-size:13px;text-align:center;\n}\n.dshpc-error{\n padding:12px 14px;border-radius:8px;font-size:13px;\n color:var(--dshpc-danger);background:color-mix(in srgb,var(--dshpc-danger) 10%,transparent);\n border:1px solid color-mix(in srgb,var(--dshpc-danger) 30%,transparent);\n}\n.dshpc-error__retry{\n margin-top:8px;color:var(--dshpc-link);cursor:pointer;background:none;border:none;padding:0;\n}\n";
|
|
2
2
|
//# sourceMappingURL=feedback-css.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedback-css.d.ts","sourceRoot":"","sources":["../../src/ui/feedback-css.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"feedback-css.d.ts","sourceRoot":"","sources":["../../src/ui/feedback-css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,+wFAoDxB,CAAA"}
|
package/dist/ui/feedback-css.js
CHANGED
|
@@ -1,57 +1,56 @@
|
|
|
1
1
|
// 反馈件(Modal / toast / 空态 / 错误边界)样式。
|
|
2
|
-
//
|
|
3
|
-
// 颜色尺寸吃 token 变量(--tdt-*),运行时按插件前缀替换。
|
|
2
|
+
// 类名与 token 变量统一 dshpc 前缀。
|
|
4
3
|
export const FEEDBACK_CSS = `
|
|
5
|
-
.
|
|
4
|
+
.dshpc-modal-mask{
|
|
6
5
|
position:fixed;inset:0;z-index:1070;display:flex;align-items:center;justify-content:center;
|
|
7
6
|
background:rgba(15,23,42,.45);
|
|
8
7
|
}
|
|
9
|
-
.
|
|
8
|
+
.dshpc-modal{
|
|
10
9
|
display:flex;flex-direction:column;max-width:min(960px,92vw);max-height:86vh;
|
|
11
|
-
background:var(--
|
|
10
|
+
background:var(--dshpc-surface-base);border:1px solid var(--dshpc-border);
|
|
12
11
|
border-radius:10px;box-shadow:0 16px 48px rgba(15,23,42,.24);overflow:hidden;
|
|
13
12
|
}
|
|
14
|
-
.
|
|
13
|
+
.dshpc-modal__head{
|
|
15
14
|
display:flex;align-items:center;gap:8px;padding:12px 14px;
|
|
16
|
-
border-bottom:1px solid var(--
|
|
15
|
+
border-bottom:1px solid var(--dshpc-border-faint);color:var(--dshpc-fg);font-size:14px;
|
|
17
16
|
}
|
|
18
|
-
.
|
|
17
|
+
.dshpc-modal__title{flex:1;min-width:0}
|
|
19
18
|
/* 关闭按钮:24×24 方角图标位,不借用 Picker 的触发器皮肤(那份带 min-width:120px)。 */
|
|
20
|
-
.
|
|
19
|
+
.dshpc-modal__close{
|
|
21
20
|
display:inline-flex;align-items:center;justify-content:center;flex:none;
|
|
22
|
-
width:24px;height:24px;padding:0;border:none;border-radius:var(--
|
|
23
|
-
background:transparent;color:var(--
|
|
24
|
-
transition:background-color var(--
|
|
25
|
-
}
|
|
26
|
-
.
|
|
27
|
-
.
|
|
28
|
-
.
|
|
29
|
-
.
|
|
21
|
+
width:24px;height:24px;padding:0;border:none;border-radius:var(--dshpc-radius-sm);
|
|
22
|
+
background:transparent;color:var(--dshpc-fg-3);font-family:inherit;font-size:12px;line-height:1;cursor:pointer;
|
|
23
|
+
transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);
|
|
24
|
+
}
|
|
25
|
+
.dshpc-modal__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}
|
|
26
|
+
.dshpc-modal__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}
|
|
27
|
+
.dshpc-modal__body{flex:1;min-height:0;overflow:auto;padding:12px 14px}
|
|
28
|
+
.dshpc-modal__foot{
|
|
30
29
|
display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;
|
|
31
|
-
border-top:1px solid var(--
|
|
30
|
+
border-top:1px solid var(--dshpc-border-faint);
|
|
32
31
|
}
|
|
33
|
-
.
|
|
32
|
+
.dshpc-toast-host{
|
|
34
33
|
position:fixed;z-index:1090;left:50%;bottom:32px;transform:translateX(-50%);
|
|
35
34
|
display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;
|
|
36
35
|
}
|
|
37
|
-
.
|
|
38
|
-
padding:8px 14px;border-radius:8px;font-size:13px;color:var(--
|
|
39
|
-
background:var(--
|
|
36
|
+
.dshpc-toast{
|
|
37
|
+
padding:8px 14px;border-radius:8px;font-size:13px;color:var(--dshpc-fg);
|
|
38
|
+
background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);
|
|
40
39
|
box-shadow:0 8px 24px rgba(15,23,42,.16);
|
|
41
40
|
}
|
|
42
|
-
.
|
|
43
|
-
.
|
|
44
|
-
.
|
|
41
|
+
.dshpc-toast--success{color:var(--dshpc-success);border-color:color-mix(in srgb,var(--dshpc-success) 40%,transparent)}
|
|
42
|
+
.dshpc-toast--error{color:var(--dshpc-danger);border-color:color-mix(in srgb,var(--dshpc-danger) 40%,transparent)}
|
|
43
|
+
.dshpc-empty{
|
|
45
44
|
display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
|
|
46
|
-
padding:24px;color:var(--
|
|
45
|
+
padding:24px;color:var(--dshpc-fg-3);font-size:13px;text-align:center;
|
|
47
46
|
}
|
|
48
|
-
.
|
|
47
|
+
.dshpc-error{
|
|
49
48
|
padding:12px 14px;border-radius:8px;font-size:13px;
|
|
50
|
-
color:var(--
|
|
51
|
-
border:1px solid color-mix(in srgb,var(--
|
|
49
|
+
color:var(--dshpc-danger);background:color-mix(in srgb,var(--dshpc-danger) 10%,transparent);
|
|
50
|
+
border:1px solid color-mix(in srgb,var(--dshpc-danger) 30%,transparent);
|
|
52
51
|
}
|
|
53
|
-
.
|
|
54
|
-
margin-top:8px;color:var(--
|
|
52
|
+
.dshpc-error__retry{
|
|
53
|
+
margin-top:8px;color:var(--dshpc-link);cursor:pointer;background:none;border:none;padding:0;
|
|
55
54
|
}
|
|
56
55
|
`;
|
|
57
56
|
//# sourceMappingURL=feedback-css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedback-css.js","sourceRoot":"","sources":["../../src/ui/feedback-css.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"feedback-css.js","sourceRoot":"","sources":["../../src/ui/feedback-css.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,2BAA2B;AAC3B,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoD3B,CAAA"}
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { CONTROLS_DOMAIN,
|
|
1
|
+
export { CONTROLS_DOMAIN, ensureControls, getStyleKit, setStyleKit } from './css.js';
|
|
2
2
|
export { filterGroups, flattenOptions, groupOf, labelsOf, toGroups, toggleValue, type PickerGroup, type PickerOption, } from './picker-logic.js';
|
|
3
3
|
export { Picker, type PickerProps, type PickerSize } from './Picker.js';
|
|
4
4
|
export { ModelPicker, type ModelPickerProps, type ModelPickerVariant } from './ModelPicker.js';
|
package/dist/ui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACpF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EACL,UAAU,EACV,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE3E,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7H,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAA"}
|
package/dist/ui/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ui —— 基础控件(依赖 design)。
|
|
2
|
-
// 使用前:插件启动时 `setStyleKit(createStyleKit({ id
|
|
2
|
+
// 使用前:插件启动时 `setStyleKit(createStyleKit({ id }))` 一次,
|
|
3
3
|
// 再调一次 `ensureControls()` 把 token + 控件样式挂上(幂等)。
|
|
4
|
-
export { CONTROLS_DOMAIN,
|
|
4
|
+
export { CONTROLS_DOMAIN, ensureControls, getStyleKit, setStyleKit } from './css.js';
|
|
5
5
|
export { filterGroups, flattenOptions, groupOf, labelsOf, toGroups, toggleValue, } from './picker-logic.js';
|
|
6
6
|
export { Picker } from './Picker.js';
|
|
7
7
|
export { ModelPicker } from './ModelPicker.js';
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,sDAAsD;AACtD,gDAAgD;AAChD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACpF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,GAGZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAqC,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,WAAW,EAAkD,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EACL,UAAU,EACV,eAAe,GAGhB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAmB,MAAM,YAAY,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,SAAS,GAGV,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,IAAI,EAAkB,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAA;AAE3E,OAAO,EAAE,MAAM,EAAE,UAAU,EAA+E,MAAM,aAAa,CAAA;AAC7H,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAqB,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAsB,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,aAAa,EACb,cAAc,GAMf,MAAM,YAAY,CAAA"}
|
package/dist/ui/picker-css.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PICKER_CSS = "\n.
|
|
1
|
+
export declare const PICKER_CSS = "\n.dshpc-picker{position:relative;display:inline-block;font-size:13px;line-height:20px}\n.dshpc-picker__trigger{\n display:inline-flex;align-items:center;justify-content:space-between;gap:6px;\n min-width:120px;max-width:100%;height:28px;padding:0 8px;\n color:var(--dshpc-fg);background:var(--dshpc-surface-1);\n border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);cursor:pointer;\n}\n.dshpc-picker__trigger:disabled{color:var(--dshpc-fg-dim);cursor:not-allowed;opacity:.7}\n.dshpc-picker__caret{color:var(--dshpc-fg-3);font-size:10px}\n.dshpc-picker__menu{\n position:absolute;z-index:60;top:calc(100% + 4px);left:0;min-width:100%;\n max-height:280px;overflow:auto;padding:4px;\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);\n border-radius:var(--dshpc-radius-md);box-shadow:0 8px 24px rgba(15,23,42,.12);\n}\n/* \u5411\u4E0A\u5C55\u5F00\uFF08\u89E6\u53D1\u5668\u9760\u8FD1\u89C6\u53E3\u5E95\u90E8\u65F6\u7528 placement=\"up\"\uFF09\u3002 */\n.dshpc-picker__menu--up{top:auto;bottom:calc(100% + 4px)}\n/* \u5C3A\u5BF8\u6863\uFF08\u4E0E Field \u7684 sm/md/lg \u5BF9\u5E94\uFF09\u3002 */\n.dshpc-picker__trigger--sm{height:24px;font-size:12px}\n.dshpc-picker__trigger--lg{height:32px}\n/* \u952E\u76D8\u6E38\u6807\u6240\u5728\u9879\uFF08\u65E0 hover \u4E5F\u8981\u770B\u5F97\u89C1\uFF09\u3002 */\n.dshpc-picker__option[data-active='true']{background:var(--dshpc-surface-sunken);outline:1px solid var(--dshpc-border)}\n.dshpc-picker__option--clear{color:var(--dshpc-fg-3)}\n.dshpc-picker__search{\n width:100%;height:28px;margin-bottom:4px;padding:0 8px;box-sizing:border-box;\n color:var(--dshpc-fg);background:var(--dshpc-surface-sunken);\n border:1px solid var(--dshpc-border-faint);border-radius:var(--dshpc-radius-md);outline:none;\n}\n.dshpc-picker__group-label{\n padding:6px 8px 2px;color:var(--dshpc-fg-3);font-size:11px;\n}\n.dshpc-picker__option{\n display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--dshpc-radius-sm);cursor:pointer;\n color:var(--dshpc-fg);white-space:nowrap;\n}\n.dshpc-picker__option:hover{background:var(--dshpc-surface-sunken)}\n.dshpc-picker__option--active{background:var(--dshpc-open-bg);color:var(--dshpc-business)}\n.dshpc-picker__option--disabled{color:var(--dshpc-fg-dim);cursor:not-allowed}\n.dshpc-picker__tick{width:12px;color:var(--dshpc-business)}\n.dshpc-picker__empty{padding:8px;color:var(--dshpc-fg-3);text-align:center}\n.dshpc-picker__degraded{\n padding:6px 8px;margin-bottom:4px;border-radius:var(--dshpc-radius-sm);\n color:var(--dshpc-warning-label);background:color-mix(in srgb,var(--dshpc-warning) 12%,transparent);\n font-size:11px;\n}\n.dshpc-picker__row{display:flex;align-items:center;gap:8px}\n";
|
|
2
2
|
//# sourceMappingURL=picker-css.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker-css.d.ts","sourceRoot":"","sources":["../../src/ui/picker-css.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"picker-css.d.ts","sourceRoot":"","sources":["../../src/ui/picker-css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,isFA+CtB,CAAA"}
|
package/dist/ui/picker-css.js
CHANGED
|
@@ -1,52 +1,51 @@
|
|
|
1
1
|
// 选择器(Picker / ModelPicker)样式。
|
|
2
|
-
//
|
|
3
|
-
// 颜色尺寸一律吃 token 变量(--tdt-*),运行时按插件前缀替换。
|
|
2
|
+
// 类名与 token 变量统一 dshpc 前缀。
|
|
4
3
|
export const PICKER_CSS = `
|
|
5
|
-
.
|
|
6
|
-
.
|
|
4
|
+
.dshpc-picker{position:relative;display:inline-block;font-size:13px;line-height:20px}
|
|
5
|
+
.dshpc-picker__trigger{
|
|
7
6
|
display:inline-flex;align-items:center;justify-content:space-between;gap:6px;
|
|
8
7
|
min-width:120px;max-width:100%;height:28px;padding:0 8px;
|
|
9
|
-
color:var(--
|
|
10
|
-
border:1px solid var(--
|
|
8
|
+
color:var(--dshpc-fg);background:var(--dshpc-surface-1);
|
|
9
|
+
border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);cursor:pointer;
|
|
11
10
|
}
|
|
12
|
-
.
|
|
13
|
-
.
|
|
14
|
-
.
|
|
11
|
+
.dshpc-picker__trigger:disabled{color:var(--dshpc-fg-dim);cursor:not-allowed;opacity:.7}
|
|
12
|
+
.dshpc-picker__caret{color:var(--dshpc-fg-3);font-size:10px}
|
|
13
|
+
.dshpc-picker__menu{
|
|
15
14
|
position:absolute;z-index:60;top:calc(100% + 4px);left:0;min-width:100%;
|
|
16
15
|
max-height:280px;overflow:auto;padding:4px;
|
|
17
|
-
background:var(--
|
|
18
|
-
border-radius:var(--
|
|
16
|
+
background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);
|
|
17
|
+
border-radius:var(--dshpc-radius-md);box-shadow:0 8px 24px rgba(15,23,42,.12);
|
|
19
18
|
}
|
|
20
19
|
/* 向上展开(触发器靠近视口底部时用 placement="up")。 */
|
|
21
|
-
.
|
|
20
|
+
.dshpc-picker__menu--up{top:auto;bottom:calc(100% + 4px)}
|
|
22
21
|
/* 尺寸档(与 Field 的 sm/md/lg 对应)。 */
|
|
23
|
-
.
|
|
24
|
-
.
|
|
22
|
+
.dshpc-picker__trigger--sm{height:24px;font-size:12px}
|
|
23
|
+
.dshpc-picker__trigger--lg{height:32px}
|
|
25
24
|
/* 键盘游标所在项(无 hover 也要看得见)。 */
|
|
26
|
-
.
|
|
27
|
-
.
|
|
28
|
-
.
|
|
25
|
+
.dshpc-picker__option[data-active='true']{background:var(--dshpc-surface-sunken);outline:1px solid var(--dshpc-border)}
|
|
26
|
+
.dshpc-picker__option--clear{color:var(--dshpc-fg-3)}
|
|
27
|
+
.dshpc-picker__search{
|
|
29
28
|
width:100%;height:28px;margin-bottom:4px;padding:0 8px;box-sizing:border-box;
|
|
30
|
-
color:var(--
|
|
31
|
-
border:1px solid var(--
|
|
29
|
+
color:var(--dshpc-fg);background:var(--dshpc-surface-sunken);
|
|
30
|
+
border:1px solid var(--dshpc-border-faint);border-radius:var(--dshpc-radius-md);outline:none;
|
|
32
31
|
}
|
|
33
|
-
.
|
|
34
|
-
padding:6px 8px 2px;color:var(--
|
|
32
|
+
.dshpc-picker__group-label{
|
|
33
|
+
padding:6px 8px 2px;color:var(--dshpc-fg-3);font-size:11px;
|
|
35
34
|
}
|
|
36
|
-
.
|
|
37
|
-
display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--
|
|
38
|
-
color:var(--
|
|
35
|
+
.dshpc-picker__option{
|
|
36
|
+
display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--dshpc-radius-sm);cursor:pointer;
|
|
37
|
+
color:var(--dshpc-fg);white-space:nowrap;
|
|
39
38
|
}
|
|
40
|
-
.
|
|
41
|
-
.
|
|
42
|
-
.
|
|
43
|
-
.
|
|
44
|
-
.
|
|
45
|
-
.
|
|
46
|
-
padding:6px 8px;margin-bottom:4px;border-radius:var(--
|
|
47
|
-
color:var(--
|
|
39
|
+
.dshpc-picker__option:hover{background:var(--dshpc-surface-sunken)}
|
|
40
|
+
.dshpc-picker__option--active{background:var(--dshpc-open-bg);color:var(--dshpc-business)}
|
|
41
|
+
.dshpc-picker__option--disabled{color:var(--dshpc-fg-dim);cursor:not-allowed}
|
|
42
|
+
.dshpc-picker__tick{width:12px;color:var(--dshpc-business)}
|
|
43
|
+
.dshpc-picker__empty{padding:8px;color:var(--dshpc-fg-3);text-align:center}
|
|
44
|
+
.dshpc-picker__degraded{
|
|
45
|
+
padding:6px 8px;margin-bottom:4px;border-radius:var(--dshpc-radius-sm);
|
|
46
|
+
color:var(--dshpc-warning-label);background:color-mix(in srgb,var(--dshpc-warning) 12%,transparent);
|
|
48
47
|
font-size:11px;
|
|
49
48
|
}
|
|
50
|
-
.
|
|
49
|
+
.dshpc-picker__row{display:flex;align-items:center;gap:8px}
|
|
51
50
|
`;
|
|
52
51
|
//# sourceMappingURL=picker-css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker-css.js","sourceRoot":"","sources":["../../src/ui/picker-css.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,
|
|
1
|
+
{"version":3,"file":"picker-css.js","sourceRoot":"","sources":["../../src/ui/picker-css.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,2BAA2B;AAC3B,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CzB,CAAA"}
|
package/dist/ui/resizer.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export interface ResizeOptions {
|
|
|
17
17
|
onMove: (width: number) => void;
|
|
18
18
|
/** 松手:提交最终宽度(落 state / 持久化)。 */
|
|
19
19
|
onCommit: (width: number) => void;
|
|
20
|
-
/** 拖拽期间挂到 #
|
|
20
|
+
/** 拖拽期间挂到 #dshpc-root 的类(如预览 dock 的 `dshpc-resizing` 令 iframe pointer-events:none);松手移除。 */
|
|
21
21
|
rootClass?: string;
|
|
22
22
|
/** rAF 节流(预览 dock 用,避免每帧整页重排)。 */
|
|
23
23
|
rafThrottle?: boolean;
|
package/dist/ui/resizer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resizer.d.ts","sourceRoot":"","sources":["../../src/ui/resizer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;IAC5D,wEAAwE;IACxE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IACpC,yCAAyC;IACzC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,gCAAgC;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,
|
|
1
|
+
{"version":3,"file":"resizer.d.ts","sourceRoot":"","sources":["../../src/ui/resizer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;IAC5D,wEAAwE;IACxE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IACpC,yCAAyC;IACzC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,gCAAgC;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kCAAkC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,4DAA4D;AAC5D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAkChE"}
|
package/dist/ui/resizer.js
CHANGED
|
@@ -5,7 +5,7 @@ export function startResizeLayoutWidth(opts) {
|
|
|
5
5
|
const prevUserSelect = body.style.userSelect;
|
|
6
6
|
body.style.userSelect = 'none';
|
|
7
7
|
window.getSelection()?.removeAllRanges();
|
|
8
|
-
const rootEl = document.getElementById('
|
|
8
|
+
const rootEl = document.getElementById('dshpc-root');
|
|
9
9
|
if (opts.rootClass !== undefined)
|
|
10
10
|
rootEl?.classList.add(opts.rootClass);
|
|
11
11
|
let frame = 0;
|
package/dist/ui/resizer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resizer.js","sourceRoot":"","sources":["../../src/ui/resizer.ts"],"names":[],"mappings":"AAsBA,4DAA4D;AAC5D,MAAM,UAAU,sBAAsB,CAAC,IAAmB;IACxD,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAA;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAA;IAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAA;IAC9B,MAAM,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,CAAA;IACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"resizer.js","sourceRoot":"","sources":["../../src/ui/resizer.ts"],"names":[],"mappings":"AAsBA,4DAA4D;AAC5D,MAAM,UAAU,sBAAsB,CAAC,IAAmB;IACxD,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAA;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAA;IAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAA;IAC9B,MAAM,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,CAAA;IACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;IACpD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACvE,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,MAAM,IAAI,GAAG,CAAC,OAAe,EAAU,EAAE;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACd,OAAO,CAAC,CAAA;IACV,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,CAAC,KAAmB,EAAQ,EAAE;QAC3C,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC9B,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAA;YACxB,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAM;YACvB,KAAK,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACrB,CAAC;IACH,CAAC,CAAA;IACD,MAAM,IAAI,GAAG,CAAC,KAAmB,EAAQ,EAAE;QACzC,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;QACjD,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAC7C,IAAI,KAAK,KAAK,CAAC;YAAE,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAA;QACtC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAA;IACD,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAC5C,CAAC"}
|
|
@@ -41,7 +41,7 @@ utils(谁都不依赖,谁都可以用)
|
|
|
41
41
|
## 样式注入(本包最特殊的机制)
|
|
42
42
|
|
|
43
43
|
```
|
|
44
|
-
插件启动 ──▶ setStyleKit(createStyleKit({ id
|
|
44
|
+
插件启动 ──▶ setStyleKit(createStyleKit({ id }))
|
|
45
45
|
│
|
|
46
46
|
▼
|
|
47
47
|
ensureControls() ──▶ 往 <head> 插一个 <style id="{id}">
|
|
@@ -51,8 +51,8 @@ utils(谁都不依赖,谁都可以用)
|
|
|
51
51
|
为什么必须运行时注入:DSH 客户端产物是 `window.__ModuleLoader__.load({ id, factory })` 的
|
|
52
52
|
CJS 闭包,`import './x.css'` 只会产出独立 css 资源、**内核不加载它** ⇒ CSS 只能以字符串在运行时注入。
|
|
53
53
|
|
|
54
|
-
为什么是工厂而不是模块级单例:单例只有一个固定 style id
|
|
55
|
-
|
|
54
|
+
为什么是工厂而不是模块级单例:单例只有一个固定 style id,多个插件同处一页时会抢同一个 `<style>` 标签、
|
|
55
|
+
后挂载的覆盖先挂载的。每个插件领一套自己的(`id` 按插件唯一);变量前缀全生态统一 `dshpc`。
|
|
56
56
|
|
|
57
57
|
为什么 core 可以用模块级变量存「当前 kit」:core 会被**内联进每个插件各自的 bundle**(不是共享运行时),
|
|
58
58
|
模块级变量天然按插件隔离,不像共享模块那样会互相踩。
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
| 符号 | 说明 |
|
|
10
10
|
|---|---|
|
|
11
11
|
| `createStyleKit(options)` | 领一套本插件专属的样式设施(**必调**) |
|
|
12
|
-
| `buildTokensCss(prefix)` | 只生成替换过前缀的 token CSS(一般不用直接调) |
|
|
13
12
|
| `DARK_THEME_SELECTOR` | 明暗判据选择器常量 `body[data-ds-dark-theme]` |
|
|
14
13
|
| `type StyleKit` / `StyleKitOptions` | 类型 |
|
|
15
14
|
|
|
@@ -18,13 +17,12 @@
|
|
|
18
17
|
| 参数 | 类型 | 必填 | 默认 | 说明 |
|
|
19
18
|
|---|---|---|---|---|
|
|
20
19
|
| `id` | `string` | 是 | — | `<style>` 标签 id,**多插件同页靠它互不覆盖**,必须插件内唯一。空串抛错 |
|
|
21
|
-
| `prefix` | `string` | 是 | — | CSS 变量前缀,如 `acme` ⇒ `--acme-fg`。必须字母开头、只含字母数字与连字符,否则抛错 |
|
|
22
20
|
|
|
23
21
|
返回的 `StyleKit`:
|
|
24
22
|
|
|
25
23
|
| 成员 | 说明 |
|
|
26
24
|
|---|---|
|
|
27
|
-
| `id`
|
|
25
|
+
| `id` | 回显 |
|
|
28
26
|
| `tokensCss` | 已替换前缀的 token CSS 文本 |
|
|
29
27
|
| `cssVar(name)` | 拼变量名:`cssVar('fg')` ⇒ `--acme-fg` |
|
|
30
28
|
| `registerStyle(domain, css)` | 登记一个域的 CSS;同名重复登记 = 覆盖 |
|
|
@@ -37,10 +35,10 @@
|
|
|
37
35
|
```ts
|
|
38
36
|
import { createStyleKit } from 'dsh-plugin-core/design'
|
|
39
37
|
|
|
40
|
-
const kit = createStyleKit({ id: 'dsh-task-reminder-ui'
|
|
38
|
+
const kit = createStyleKit({ id: 'dsh-task-reminder-ui' })
|
|
41
39
|
kit.applyStyle('tokens', kit.tokensCss)
|
|
42
40
|
// 之后自己的样式域:
|
|
43
|
-
kit.applyStyle('
|
|
41
|
+
kit.applyStyle('widget', '.widget{color:var(--dshpc-fg)}')
|
|
44
42
|
```
|
|
45
43
|
|
|
46
44
|
## token 口径
|
|
@@ -52,6 +50,6 @@ token 来自 `dsh-task-dispatch-table/src/client/ui/tokens.ts` 的整段提取
|
|
|
52
50
|
|
|
53
51
|
## 定制边界
|
|
54
52
|
|
|
55
|
-
- token
|
|
56
|
-
|
|
53
|
+
- token 的**前缀固定 `dshpc`**(不参数化、不按插件改名);token 的**内容**(有哪些变量、值是什么)
|
|
54
|
+
是本包定的审美标准,消费方通过覆盖变量值来适配,不要改本包源码。
|
|
57
55
|
- 要整套换肤:给同一批变量名赋新值即可,不需要 fork。
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
import { createStyleKit } from 'dsh-plugin-core/design'
|
|
11
11
|
import { ensureControls, setStyleKit } from 'dsh-plugin-core/ui'
|
|
12
12
|
|
|
13
|
-
setStyleKit(createStyleKit({ id: 'dsh-task-reminder-ui'
|
|
13
|
+
setStyleKit(createStyleKit({ id: 'dsh-task-reminder-ui' }))
|
|
14
14
|
ensureControls()
|
|
15
15
|
```
|
|
16
16
|
|
|
@@ -153,9 +153,9 @@ h(StripCard, {
|
|
|
153
153
|
}, h('div', null, '标题 + 元信息'))
|
|
154
154
|
```
|
|
155
155
|
|
|
156
|
-
`Chip`:小标签,token 用现成的 `--
|
|
156
|
+
`Chip`:小标签,token 用现成的 `--dshpc-chip-bg`;传 `onClick` 才是可点的。
|
|
157
157
|
|
|
158
|
-
**语义边界**:`Chip` 只管「胶囊标签」这一件事。**只给图标的小按钮请用 `IconButton`**(`.
|
|
158
|
+
**语义边界**:`Chip` 只管「胶囊标签」这一件事。**只给图标的小按钮请用 `IconButton`**(`.dshpc-iconbtn`),
|
|
159
159
|
不要拿 `Chip` 当图标底板——同一个类名两套皮肤(28px 定宽 vs 胶囊形)会互相覆盖、把文字挤成一列。
|
|
160
160
|
现在一套皮肤只允许出现一次,由 `test/css-contract.test.mjs` 盯着。
|
|
161
161
|
|
|
@@ -179,7 +179,7 @@ h(StripCard, {
|
|
|
179
179
|
| 组件 / 函数 | 说明 |
|
|
180
180
|
|---|---|
|
|
181
181
|
| `showToast(message, opts?)` | **命令式**,不要求挂组件。`opts: { variant?: 'info' \| 'success' \| 'error', durationMs? }`(默认 2600ms)。无 `document` 静默跳过 |
|
|
182
|
-
| `Loading({ anchorId? })` | 贴到主内容容器右下角的加载指示;`anchorId` 默认 `
|
|
182
|
+
| `Loading({ anchorId? })` | 贴到主内容容器右下角的加载指示;`anchorId` 默认 `dshpc-main` |
|
|
183
183
|
| `RunningBlocks()` | 运行中的占位块 |
|
|
184
184
|
| `EmptyState({ text?, icon?, action?, translate? })` | 统一空态 |
|
|
185
185
|
| `ErrorBoundary({ fallback?, onError?, translate? })` | class 组件;子组件抛错不让整个插件白屏,默认给「出错了 + 重试」 |
|
package/docs/design/features.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
| 子路径 | 提供什么 | 详细文档 |
|
|
6
6
|
|---|---|---|
|
|
7
|
-
| `dsh-plugin-core/design` | token 变量表(含深色段)、`createStyleKit` 注入器工厂、`DARK_THEME_SELECTOR
|
|
7
|
+
| `dsh-plugin-core/design` | token 变量表(含深色段)、`createStyleKit` 注入器工厂、`DARK_THEME_SELECTOR` | [`features/design.md`](features/design.md) |
|
|
8
8
|
| `dsh-plugin-core/ui` | 控件:Button / IconButton / Segmented / Textarea / Checkbox / Input 家族 / Picker / ModelPicker / WorkspacePicker / FilePicker / **Card** / **StripCard** / **Chip** / Modal / toast / Loading / SectionHead / MarqueeText / LiveText / BackToTop / resizer / EmptyState / ErrorBoundary | [`features/ui.md`](features/ui.md) |
|
|
9
9
|
| `dsh-plugin-core/utils` | 日期(含相对时间过去/未来)、字符串、字节/计数、时间区间、HTTP 取数、内置中英多语言 | [`features/utils.md`](features/utils.md) |
|
|
10
10
|
| `dsh-plugin-core/explorer` | `ExplorerPanel`(面包屑 + 目录树 + 预览)、`WorkspaceFilesFace` 契约与路径工具(**不含选择器**——选工作区/选文件在 ui) | [`features/explorer.md`](features/explorer.md) |
|
package/docs/design/structure.md
CHANGED
|
@@ -33,7 +33,7 @@ dsh-plugin-core/
|
|
|
33
33
|
│
|
|
34
34
|
├── design/ ① 设计层 —— 只放「值」和「注入机制」,零 React
|
|
35
35
|
│ ├── tokens ✅ 颜色 / 字号 / 间距 / 圆角 / 层级(别名官方 --dsw-alias-*)
|
|
36
|
-
│ └── style-kit ✅ 运行时注入 <style>,createStyleKit({ id
|
|
36
|
+
│ └── style-kit ✅ 运行时注入 <style>,createStyleKit({ id })
|
|
37
37
|
│
|
|
38
38
|
├── ui/ ② 基础控件 —— 纯零件 + 可复用基础能力(依赖 design)
|
|
39
39
|
│ ├── official.ts ✅ 全仓唯一 import 官方 primitives 的入口(L1)
|
package/docs/design/style.md
CHANGED
|
@@ -7,16 +7,17 @@ token 口径、注入器、明暗判据、定制边界。规则依据见 `docs/d
|
|
|
7
7
|
客户端产物是 `window.__ModuleLoader__.load({ id, factory })` 的 CJS 闭包,
|
|
8
8
|
`import './x.css'` 只会产出独立 css 资源、**内核不加载它** ⇒ CSS 只能以 TS 字符串在运行时打进 `<style>`。
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## 前缀规则
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|---|---|---|
|
|
14
|
-
| 变量 `--tdt-` | **换**成 `--<插件前缀>-` | 多插件同页必须隔离,否则变量互相覆盖 |
|
|
15
|
-
| 类名 `dsh-tdt-` | **保持原样** | 控件里的 className 是硬编码字面量,只换 CSS 侧会让选择器与 className 对不上、样式整片失效 |
|
|
12
|
+
变量与类名**全生态统一 `dshpc`**,代码里直接写死,不存在按插件替换这回事。
|
|
16
13
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
| 名称 | 规则 |
|
|
15
|
+
|---|---|
|
|
16
|
+
| 变量 `--dshpc-*` | 直接使用;token 定义与控件样式都写这个前缀 |
|
|
17
|
+
| 类名 `dshpc-*` | 必须与控件里硬编码的 className 逐字一致,改一处就得全改 |
|
|
18
|
+
|
|
19
|
+
> **已知限制**:两个插件若引的 core 版本不同,`.dshpc-*` 规则会互相覆盖(同版本内容一致、无害)。
|
|
20
|
+
> 隔离靠 style 标签 id(`createStyleKit({ id })`)。
|
|
20
21
|
|
|
21
22
|
## 明暗判据(硬约束)
|
|
22
23
|
|
|
@@ -35,13 +36,13 @@ token 原文提取自 `dsh-task-dispatch-table/src/client/ui/tokens.ts`,含深
|
|
|
35
36
|
|
|
36
37
|
| 类别 | 例 |
|
|
37
38
|
|---|---|
|
|
38
|
-
| 前景 / 背景面 | `--
|
|
39
|
-
| 边框 | `--
|
|
40
|
-
| 间距 | `--
|
|
41
|
-
| 字号 / 行高 | `--
|
|
42
|
-
| 语义色 | `--
|
|
43
|
-
| 语义面 | `--
|
|
44
|
-
| 代码 | `--
|
|
39
|
+
| 前景 / 背景面 | `--dshpc-fg` `--dshpc-fg-3` `--dshpc-fg-4` `--dshpc-surface-1` `--dshpc-surface-2` `--dshpc-surface-sunken` `--dshpc-surface-menu` `--dshpc-surface-base` |
|
|
40
|
+
| 边框 | `--dshpc-border` `--dshpc-border-faint` |
|
|
41
|
+
| 间距 | `--dshpc-space-1` … `--dshpc-space-3` |
|
|
42
|
+
| 字号 / 行高 | `--dshpc-font-sm` `--dshpc-font-lg` `--dshpc-line-sm` `--dshpc-line-md` `--dshpc-line-lg` |
|
|
43
|
+
| 语义色 | `--dshpc-business` `--dshpc-success` `--dshpc-danger` `--dshpc-warning` `--dshpc-link` |
|
|
44
|
+
| 语义面 | `--dshpc-open-bg` `--dshpc-open-bg-soft` `--dshpc-chip-bg` `--dshpc-chip-bg-hover` |
|
|
45
|
+
| 代码 | `--dshpc-code-surface` `--dshpc-code-font` |
|
|
45
46
|
|
|
46
47
|
完整清单以 `src/design/tokens-css.ts` 为准(**真源在代码,不在这里抄第二份**)。
|
|
47
48
|
消费方查某个变量叫什么:`kit.cssVar('fg')` 或直接 grep `tokens-css.ts`。
|
|
@@ -50,11 +51,11 @@ token 原文提取自 `dsh-task-dispatch-table/src/client/ui/tokens.ts`,含深
|
|
|
50
51
|
|
|
51
52
|
1. 不许再有第二处 `document.createElement('style')` —— 一律走 kit。
|
|
52
53
|
2. 不许再出现第二套 style 标签 id —— 一个插件一套 kit。
|
|
53
|
-
3. 域内的规则只能消费 `var(
|
|
54
|
+
3. 域内的规则只能消费 `var(--dshpc-*)`,颜色 / 尺寸 / 字号一律来自 token 层,不写死值。
|
|
54
55
|
|
|
55
56
|
## 定制边界
|
|
56
57
|
|
|
57
58
|
- **换肤**:给同一批变量名赋新值(在插件自己的样式域里覆盖),不需要 fork。
|
|
58
|
-
- **加域**:`kit.registerStyle('
|
|
59
|
+
- **加域**:`kit.registerStyle('widget', css)`,同一域重复登记 = 覆盖。
|
|
59
60
|
- **`tokens` 域恒排最前**(变量定义必须先于消费它的规则),kit 内部已保证。
|
|
60
61
|
- 皮肤写在调用方自己的样式域里;组件只认 token,不认调用方的具体颜色。
|
|
@@ -19,14 +19,12 @@ pnpm add dsh-plugin-core
|
|
|
19
19
|
import { createStyleKit } from 'dsh-plugin-core/design'
|
|
20
20
|
import { ensureControls, setStyleKit } from 'dsh-plugin-core/ui'
|
|
21
21
|
|
|
22
|
-
const kit = createStyleKit({ id: 'dsh-task-reminder-ui'
|
|
22
|
+
const kit = createStyleKit({ id: 'dsh-task-reminder-ui' })
|
|
23
23
|
setStyleKit(kit)
|
|
24
24
|
ensureControls()
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
`id`
|
|
28
|
-
两者取值按**项目规范**定(多插件同页必须互不冲突)——示例里的 `dsh-task-reminder` / `reminder`
|
|
29
|
-
只是演示命名规律(前缀取插件名缩写),不是可用值的枚举。
|
|
27
|
+
`id` 必须插件内唯一(多插件同页靠它互不覆盖);变量与类名统一使用 `dshpc` 前缀,不需要传参。
|
|
30
28
|
|
|
31
29
|
## 2. 用一个控件
|
|
32
30
|
|
|
@@ -97,7 +95,7 @@ kit.dispose() // 撤掉 <style> 标签并清空登记域(插件卸载 / HMR
|
|
|
97
95
|
|
|
98
96
|
| 坑 | 现象 | 解法 |
|
|
99
97
|
|---|---|---|
|
|
100
|
-
| 忘了 `setStyleKit` 就渲染控件 |
|
|
98
|
+
| 忘了 `setStyleKit` 就渲染控件 | 样式晚一帧或落到默认 style id | 入口处先调,再渲染 |
|
|
101
99
|
| 直接 `import` 官方 `@deepseek-ai/*` 并指望本包帮你引 | Node 下 `ERR_MODULE_NOT_FOUND` | 本包 `ui` 已零官方依赖;你要用官方件就在插件侧自己处理平台模块 |
|
|
102
100
|
| 给 `read` 少传第三参 `range` | 远端拒:`expected 3 business argument(s) … got 2` | 一律显式传 `{}` |
|
|
103
101
|
| 用 `relativePast` 显示未来时间 | 「3 分钟后」显示成「刚刚」 | 用 `relativeFuture` |
|