dsh-plugin-core 0.1.4 → 0.2.1
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 +162 -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.d.ts +16 -5
- package/dist/ui/Button.d.ts.map +1 -1
- package/dist/ui/Button.js +53 -14
- 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 +261 -203
- 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 +27 -9
- package/docs/design/features.md +1 -1
- package/docs/design/structure.md +1 -1
- package/docs/design/style.md +34 -17
- package/docs/examples/integration.md +3 -5
- package/docs/requirements.md +8 -12
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controls-css.js","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"controls-css.js","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuE5B,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsHzB,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2DxB,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6C3B,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;CAmBzB,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;CAQ1B,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B9B,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;CAkBvB,CAAA"}
|
package/dist/ui/css.d.ts
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
import { type StyleKit } from '../design/index.js';
|
|
2
2
|
export declare const CONTROLS_DOMAIN = "controls";
|
|
3
|
-
/**
|
|
4
|
-
* 把 CSS 模板里的 **变量前缀** `--tdt-` 换成当前插件的。
|
|
5
|
-
*
|
|
6
|
-
* ⚠️ 类名 `dsh-tdt-` **故意不换**:搬来的控件里 className 是硬编码的 `dsh-tdt-btn` 这类字面量
|
|
7
|
-
* (模板字符串里也拼接了),只换 CSS 侧会让选择器与 className 对不上、样式整片失效。
|
|
8
|
-
* 要连类名一起隔离,必须同步改造每个控件的 className —— 那是另一个任务。
|
|
9
|
-
*
|
|
10
|
-
* 已知限制:两个插件若引的 core 版本不同,`.dsh-tdt-*` 规则会互相覆盖(内容相同时无害)。
|
|
11
|
-
* 主防线是 style 标签 id(`createStyleKit({ id })`)与变量前缀隔离。
|
|
12
|
-
*/
|
|
13
|
-
export declare function buildCss(template: string, prefix: string): string;
|
|
14
3
|
export declare function setStyleKit(kit: StyleKit): void;
|
|
15
4
|
export declare function getStyleKit(): StyleKit;
|
|
16
5
|
/** 登记 token + 控件样式并确保挂载(幂等)。 */
|
package/dist/ui/css.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/ui/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAkBlE,eAAO,MAAM,eAAe,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/ui/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAkBlE,eAAO,MAAM,eAAe,aAAa,CAAA;AA4BzC,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAE/C;AAED,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED,gCAAgC;AAChC,wBAAgB,cAAc,CAAC,GAAG,GAAE,QAAkB,GAAG,IAAI,CAG5D"}
|
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
|
|
|
@@ -23,15 +23,30 @@ ensureControls()
|
|
|
23
23
|
|
|
24
24
|
### Button / IconButton
|
|
25
25
|
|
|
26
|
+
10 档外观(2026-10-19 扩充,对齐主流 UI 框架的分类口径):
|
|
27
|
+
|
|
28
|
+
| 类别 | `variant` 档 |
|
|
29
|
+
|---|---|
|
|
30
|
+
| 实心(语义色底) | `primary`(黑)/ `secondary`(灰)/ `danger`(红)/ `success`(绿)/ `warning`(黄)/ `info`(蓝) |
|
|
31
|
+
| 线框 | `outline`(中性描边)/ `danger-outline`(红字描边,旧别名 `danger-ink` 仍可用) |
|
|
32
|
+
| 无底 | `ghost`(灰字,hover 起底)/ `link`(行内链接) |
|
|
33
|
+
|
|
26
34
|
| 参数 | 类型 | 默认 | 说明 |
|
|
27
35
|
|---|---|---|---|
|
|
28
|
-
| `variant` |
|
|
29
|
-
| `size` | `'sm' \| 'md' \| 'lg'` | `
|
|
30
|
-
| `icon` | `ReactNode` | — |
|
|
31
|
-
| `
|
|
36
|
+
| `variant` | 上表 10 档 | `outline` | 外观档 |
|
|
37
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `lg` | 高度档(24 / 28 / 32,有边无边同高) |
|
|
38
|
+
| `icon` | `ReactNode` | — | 前置图标(官方图标组件 / 字符串均可) |
|
|
39
|
+
| `iconRight` | `ReactNode` | — | 后置图标(展开箭头、外链) |
|
|
40
|
+
| `color` | `string` | — | 自定义主色(任意 CSS 色值):实心档作底色,线框 / 无底档作主色 |
|
|
41
|
+
| `loading` | `boolean` | `false` | 文案前显示同色小圈,并自动 `disabled` |
|
|
42
|
+
| `block` | `boolean` | `false` | 撑满父宽 |
|
|
43
|
+
| `children` | `ReactNode` | — | 文案(由调用方按语言给:中文出中文、英文出英文,中英混排也支持) |
|
|
32
44
|
| `…rest` | 原生 button 属性 | — | `type` / `disabled` / `title` / `aria-*` / `onClick` 原样透传 |
|
|
33
45
|
|
|
34
|
-
|
|
46
|
+
hover / active 走 token 派生色(**不用 opacity**),幅度见 `docs/design/style.md` §交互态颜色。
|
|
47
|
+
|
|
48
|
+
`IconButton`:`variant: 'plain' | 'outline' | 'danger'`(默认 `plain`)、`size`(默认 `lg`)、`icon`(必填)、
|
|
49
|
+
`label`(必填,无障碍名兼 title)。
|
|
35
50
|
|
|
36
51
|
### Segmented
|
|
37
52
|
|
|
@@ -39,6 +54,9 @@ ensureControls()
|
|
|
39
54
|
或多选(`multiple: true` + `value: T[]`)。另有 `size`(默认 `lg`)、`variant: 'default' | 'inset'`、
|
|
40
55
|
`block`(撑满等分)、`label`(无障碍组名)、`id`、`disabled`。
|
|
41
56
|
|
|
57
|
+
选中片 = `--dshpc-surface-raised`(与兄弟项目同取法)+ 1px 描边 + 浮起阴影:两种主题下都比轨道亮一档,
|
|
58
|
+
在卡片面上靠描边与阴影分界。未选中项 hover 起浅底(inset 用深一档,避免与轨道同色)。
|
|
59
|
+
|
|
42
60
|
### Input 家族(`Field.ts`)
|
|
43
61
|
|
|
44
62
|
| 组件 | 关键参数 | 说明 |
|
|
@@ -153,9 +171,9 @@ h(StripCard, {
|
|
|
153
171
|
}, h('div', null, '标题 + 元信息'))
|
|
154
172
|
```
|
|
155
173
|
|
|
156
|
-
`Chip`:小标签,token 用现成的 `--
|
|
174
|
+
`Chip`:小标签,token 用现成的 `--dshpc-chip-bg`;传 `onClick` 才是可点的。
|
|
157
175
|
|
|
158
|
-
**语义边界**:`Chip` 只管「胶囊标签」这一件事。**只给图标的小按钮请用 `IconButton`**(`.
|
|
176
|
+
**语义边界**:`Chip` 只管「胶囊标签」这一件事。**只给图标的小按钮请用 `IconButton`**(`.dshpc-iconbtn`),
|
|
159
177
|
不要拿 `Chip` 当图标底板——同一个类名两套皮肤(28px 定宽 vs 胶囊形)会互相覆盖、把文字挤成一列。
|
|
160
178
|
现在一套皮肤只允许出现一次,由 `test/css-contract.test.mjs` 盯着。
|
|
161
179
|
|
|
@@ -179,7 +197,7 @@ h(StripCard, {
|
|
|
179
197
|
| 组件 / 函数 | 说明 |
|
|
180
198
|
|---|---|
|
|
181
199
|
| `showToast(message, opts?)` | **命令式**,不要求挂组件。`opts: { variant?: 'info' \| 'success' \| 'error', durationMs? }`(默认 2600ms)。无 `document` 静默跳过 |
|
|
182
|
-
| `Loading({ anchorId? })` | 贴到主内容容器右下角的加载指示;`anchorId` 默认 `
|
|
200
|
+
| `Loading({ anchorId? })` | 贴到主内容容器右下角的加载指示;`anchorId` 默认 `dshpc-main` |
|
|
183
201
|
| `RunningBlocks()` | 运行中的占位块 |
|
|
184
202
|
| `EmptyState({ text?, icon?, action?, translate? })` | 统一空态 |
|
|
185
203
|
| `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)
|