dsh-plugin-core 0.11.0 → 0.12.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/dist/ui/Button.d.ts.map +1 -1
- package/dist/ui/Button.js +4 -14
- package/dist/ui/Button.js.map +1 -1
- package/dist/ui/Loader.d.ts +49 -0
- package/dist/ui/Loader.d.ts.map +1 -0
- package/dist/ui/Loader.js +75 -0
- package/dist/ui/Loader.js.map +1 -0
- package/dist/ui/LoaderBar.d.ts +38 -0
- package/dist/ui/LoaderBar.d.ts.map +1 -0
- package/dist/ui/LoaderBar.js +73 -0
- package/dist/ui/LoaderBar.js.map +1 -0
- package/dist/ui/Loading.d.ts +5 -0
- package/dist/ui/Loading.d.ts.map +1 -1
- package/dist/ui/Loading.js +8 -11
- package/dist/ui/Loading.js.map +1 -1
- package/dist/ui/controls/button-css.generated.d.ts +1 -1
- package/dist/ui/controls/button-css.generated.d.ts.map +1 -1
- package/dist/ui/controls/button-css.generated.js +1 -1
- package/dist/ui/controls/button-css.generated.js.map +1 -1
- package/dist/ui/controls/loader-bar-css.generated.d.ts +2 -0
- package/dist/ui/controls/loader-bar-css.generated.d.ts.map +1 -0
- package/dist/ui/controls/loader-bar-css.generated.js +4 -0
- package/dist/ui/controls/loader-bar-css.generated.js.map +1 -0
- package/dist/ui/controls/loader-css.generated.d.ts +2 -0
- package/dist/ui/controls/loader-css.generated.d.ts.map +1 -0
- package/dist/ui/controls/loader-css.generated.js +4 -0
- package/dist/ui/controls/loader-css.generated.js.map +1 -0
- package/dist/ui/controls/loading-css.generated.d.ts +1 -1
- package/dist/ui/controls/loading-css.generated.d.ts.map +1 -1
- package/dist/ui/controls/loading-css.generated.js +1 -1
- package/dist/ui/controls/loading-css.generated.js.map +1 -1
- package/dist/ui/controls-css.d.ts +2 -0
- package/dist/ui/controls-css.d.ts.map +1 -1
- package/dist/ui/controls-css.js +2 -0
- package/dist/ui/controls-css.js.map +1 -1
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +2 -0
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/loader-bar-art.d.ts +6 -0
- package/dist/ui/loader-bar-art.d.ts.map +1 -0
- package/dist/ui/loader-bar-art.js +6 -0
- package/dist/ui/loader-bar-art.js.map +1 -0
- package/docs/design/structure.md +4 -2
- package/docs/help/ui.doc.ts +11 -1
- package/docs/help/ui.md +11 -1
- package/docs/requirements.md +13 -1
- package/package.json +1 -1
package/dist/ui/Button.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/ui/Button.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/ui/Button.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAI9E,aAAa;AACb,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,WAAW,GACX,SAAS,GACT,OAAO,GACP,QAAQ,GACR,SAAS,GACT,SAAS,GACT,MAAM,GACN,gBAAgB,GAChB,MAAM,GACN,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAEhF,oCAAoC;AACpC,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAQ3C,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,kBAAkB;IAClB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,gCAAgC;IAChC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,YAAY;IACZ,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,eAAe;IACf,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,wEAAwE;IACxE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAA;IACxC,kBAAkB;IAClB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,cAAc;IACd,IAAI,EAAE,SAAS,CAAA;IACf,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY;IACZ,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,0BAA0B;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AA+BD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAqC/D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAYvE"}
|
package/dist/ui/Button.js
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
* ⚠️ 不许在任何使用点就地写按钮样式;要多一档外观 ⇒ 改基础层(一处改全站生效)。
|
|
22
22
|
*/
|
|
23
23
|
import { MarqueeText } from './MarqueeText.js';
|
|
24
|
+
import { Loader } from './Loader.js';
|
|
24
25
|
import { createElement as h } from 'react';
|
|
25
26
|
import { ensureComponentStyles } from './css.js';
|
|
26
27
|
import { BUTTON_CSS } from './controls-css.js';
|
|
@@ -87,20 +88,9 @@ export function Button(props) {
|
|
|
87
88
|
style: { ...colorVars(variant, color), ...widthStyle, ...style },
|
|
88
89
|
};
|
|
89
90
|
return h('button', attrs, loading
|
|
90
|
-
//
|
|
91
|
-
//
|
|
92
|
-
? h('
|
|
93
|
-
className: 'dshpc-btn__spinner',
|
|
94
|
-
viewBox: '0 0 12 12',
|
|
95
|
-
width: 12,
|
|
96
|
-
height: 12,
|
|
97
|
-
'aria-hidden': true,
|
|
98
|
-
}, h('circle', {
|
|
99
|
-
cx: 6, cy: 6, r: 4.75, fill: 'none',
|
|
100
|
-
stroke: 'currentColor', strokeWidth: 1.5, strokeLinecap: 'round',
|
|
101
|
-
// 周长 ≈ 29.85,画 22 的弧 + 足够长的空缺 ⇒ 一个约 270° 的开口环
|
|
102
|
-
strokeDasharray: '22 30',
|
|
103
|
-
}))
|
|
91
|
+
// 转圈统一走 Loader(12px 档):全仓只有一套环画法与一套 keyframes,
|
|
92
|
+
// 不再在 button.css 里维护第二份 SVG 弧(旧类名 dshpc-btn__spinner 已删)。
|
|
93
|
+
? h(Loader, { size: 'xs' })
|
|
104
94
|
: icon !== undefined && icon !== null
|
|
105
95
|
? h('span', { className: 'dshpc-btn__icon' }, icon)
|
|
106
96
|
: null, marqueeLabel
|
package/dist/ui/Button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/ui/Button.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,aAAa,IAAI,CAAC,EAAsC,MAAM,OAAO,CAAA;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAmB9C,6CAA6C;AAC7C,MAAM,cAAc,GAA6B;IAC/C,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM;IAC9D,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO;CACtE,CAAA;AAyDD,0CAA0C;AAC1C,SAAS,SAAS,CAAC,OAAsB,EAAE,KAAyB;IAClE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,SAAS,CAAA;IACzD,IAAI,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,UAAU,EAAE,KAAK;YACjB,kDAAkD;YAClD,gBAAgB,EAAE,sBAAsB,KAAK,wBAAwB;YACrE,iBAAiB,EAAE,sBAAsB,KAAK,wBAAwB;SACtD,CAAA;IACpB,CAAC;IACD,OAAO;QACL,UAAU,EAAE,KAAK;QACjB,gBAAgB,EAAE,KAAK;QACvB,cAAc,EAAE,KAAK;QACrB,gBAAgB,EAAE,sBAAsB,KAAK,oBAAoB;QACjE,iBAAiB,EAAE,sBAAsB,KAAK,oBAAoB;KAClD,CAAA;AACpB,CAAC;AAED,6BAA6B;AAC7B,SAAS,WAAW,CAAC,OAAsB,EAAE,IAAgB,EAAE,KAAc,EAAE,OAAgB,EAAE,KAAc;IAC7G,OAAO,wBAAwB,OAAO,eAAe,IAAI,EAAE;UACvD,GAAG,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE;QACvC,8DAA8D;UAC5D,GAAG,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,EAAE;UAC5C,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,KAAkB;IACvC,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAC3C,MAAM,EACJ,OAAO,GAAG,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,EACzE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAC9E,GAAG,KAAK,CAAA;IACT,6CAA6C;IAC7C,MAAM,UAAU,GAAkB,EAAE,CAAA;IACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,UAAU,CAAC,KAAK,GAAG,KAAK,CAAA;IAC1B,CAAC;SAAM,CAAC;QACN,IAAI,QAAQ,KAAK,SAAS;YAAE,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAC1D,IAAI,QAAQ,KAAK,SAAS;YAAE,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC5D,CAAC;IACD,qDAAqD;IACrD,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,QAAQ,KAAK,QAAQ,CAAA;IAClG,MAAM,KAAK,GAAG;QACZ,GAAG,IAAI;QACP,IAAI,EAAG,IAAI,CAAC,IAA2B,IAAI,QAAQ;QACnD,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO;QAC3C,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;QACxG,KAAK,EAAE,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK,EAAE;KACjE,CAAA;IACD,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAc,EAC/B,OAAO;QACL
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/ui/Button.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loader —— 统一的加载动画图标(UI 基础层 · 反馈族)。
|
|
3
|
+
*
|
|
4
|
+
* 一句话边界:**只画图标本身**。没有背景、没有内距、没有圆角、没有定位。
|
|
5
|
+
* 要圆角底就外面套 `Chip` / `Card`,要浮在屏幕上就自己包一层 fixed 容器 ——
|
|
6
|
+
* 背景与位置属于调用方,不属于这个控件。
|
|
7
|
+
*
|
|
8
|
+
* 两轴正交(不是两个组件,也不是 N×M 份样式):
|
|
9
|
+
* - `variant`:`ring` 开口弧旋转(默认)/ `blocks` 三块脉动
|
|
10
|
+
* - `size`:`xs` 12 / `sm` 16 / `md` 24(默认)/ `lg` 32 / `xl` 48
|
|
11
|
+
*
|
|
12
|
+
* 几何统一画在 `viewBox="0 0 24 24"` 里,尺寸档只改 `width` / `height` ⇒ 等比缩放,
|
|
13
|
+
* 描边与方块的视觉重量在各档一致(12px 下描边 1.5px,48px 下 6px)。
|
|
14
|
+
*
|
|
15
|
+
* 颜色:全程 `currentColor`,自动跟随所在按钮 / 标签的文字色,不给 color 轴
|
|
16
|
+
* (要换色在调用点给 `style={{ color }}` 即可,不必新增参数)。
|
|
17
|
+
*
|
|
18
|
+
* 无障碍:默认 `aria-hidden`(图标本身是装饰,语义由所在按钮的文字 / 卡片的
|
|
19
|
+
* `role="status"` 承担);要让它自己承担语义时传 `label`,此时输出 `role="status"`。
|
|
20
|
+
*
|
|
21
|
+
* 扩展新形态:在 `LoaderVariant` 加一个值 + 本文件加一支几何 + `loader.css` 加一段规则,
|
|
22
|
+
* 不新增导出(形态由数据决定时直接传字符串即可,见 docs/help/ui.md)。
|
|
23
|
+
*/
|
|
24
|
+
import { createElement as h } from 'react';
|
|
25
|
+
/** 尺寸档:只影响 width / height,几何等比缩放。 */
|
|
26
|
+
export type LoaderSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
27
|
+
/** 形态档。 */
|
|
28
|
+
export type LoaderVariant = 'ring' | 'blocks';
|
|
29
|
+
export interface LoaderProps {
|
|
30
|
+
/** 形态,默认 `ring`。 */
|
|
31
|
+
variant?: LoaderVariant;
|
|
32
|
+
/** 尺寸档,默认 `md`。 */
|
|
33
|
+
size?: LoaderSize;
|
|
34
|
+
/**
|
|
35
|
+
* 无障碍文案。不传 = 纯装饰(`aria-hidden`);传了 = 输出 `role="status"` 并由它播报。
|
|
36
|
+
* 按钮里、加载卡里这类**旁边已有文字**的场景不要传。
|
|
37
|
+
*/
|
|
38
|
+
label?: string;
|
|
39
|
+
/** 追加 class(只允许补布局,不许覆盖外观)。 */
|
|
40
|
+
className?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 渲染一个加载动画图标。
|
|
44
|
+
*
|
|
45
|
+
* @param props 见 {@link LoaderProps}。
|
|
46
|
+
* @returns `<svg>` 元素(inline,不占额外行高)。
|
|
47
|
+
*/
|
|
48
|
+
export declare function Loader(props: LoaderProps): ReturnType<typeof h>;
|
|
49
|
+
//# sourceMappingURL=Loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Loader.d.ts","sourceRoot":"","sources":["../../src/ui/Loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,MAAM,OAAO,CAAA;AAI1C,qCAAqC;AACrC,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAEzD,WAAW;AACX,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE7C,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,mBAAmB;IACnB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAiCD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAiB/D"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loader —— 统一的加载动画图标(UI 基础层 · 反馈族)。
|
|
3
|
+
*
|
|
4
|
+
* 一句话边界:**只画图标本身**。没有背景、没有内距、没有圆角、没有定位。
|
|
5
|
+
* 要圆角底就外面套 `Chip` / `Card`,要浮在屏幕上就自己包一层 fixed 容器 ——
|
|
6
|
+
* 背景与位置属于调用方,不属于这个控件。
|
|
7
|
+
*
|
|
8
|
+
* 两轴正交(不是两个组件,也不是 N×M 份样式):
|
|
9
|
+
* - `variant`:`ring` 开口弧旋转(默认)/ `blocks` 三块脉动
|
|
10
|
+
* - `size`:`xs` 12 / `sm` 16 / `md` 24(默认)/ `lg` 32 / `xl` 48
|
|
11
|
+
*
|
|
12
|
+
* 几何统一画在 `viewBox="0 0 24 24"` 里,尺寸档只改 `width` / `height` ⇒ 等比缩放,
|
|
13
|
+
* 描边与方块的视觉重量在各档一致(12px 下描边 1.5px,48px 下 6px)。
|
|
14
|
+
*
|
|
15
|
+
* 颜色:全程 `currentColor`,自动跟随所在按钮 / 标签的文字色,不给 color 轴
|
|
16
|
+
* (要换色在调用点给 `style={{ color }}` 即可,不必新增参数)。
|
|
17
|
+
*
|
|
18
|
+
* 无障碍:默认 `aria-hidden`(图标本身是装饰,语义由所在按钮的文字 / 卡片的
|
|
19
|
+
* `role="status"` 承担);要让它自己承担语义时传 `label`,此时输出 `role="status"`。
|
|
20
|
+
*
|
|
21
|
+
* 扩展新形态:在 `LoaderVariant` 加一个值 + 本文件加一支几何 + `loader.css` 加一段规则,
|
|
22
|
+
* 不新增导出(形态由数据决定时直接传字符串即可,见 docs/help/ui.md)。
|
|
23
|
+
*/
|
|
24
|
+
import { createElement as h } from 'react';
|
|
25
|
+
import { ensureComponentStyles } from './css.js';
|
|
26
|
+
import { LOADER_CSS } from './controls-css.js';
|
|
27
|
+
/** 形态一:约 265° 的开口弧(周长 59.7,画 44 的空缺留 15.7)。 */
|
|
28
|
+
function ringNode() {
|
|
29
|
+
return h('circle', {
|
|
30
|
+
cx: 12,
|
|
31
|
+
cy: 12,
|
|
32
|
+
r: 9.5,
|
|
33
|
+
fill: 'none',
|
|
34
|
+
stroke: 'currentColor',
|
|
35
|
+
strokeWidth: 3,
|
|
36
|
+
strokeLinecap: 'round',
|
|
37
|
+
strokeDasharray: '44 15.7',
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/** 形态二:三个圆角方块,横向三等分(6.4 + 1.1 间隔,左右各留 1.3)。 */
|
|
41
|
+
function blockNodes() {
|
|
42
|
+
const cells = [0, 1, 2];
|
|
43
|
+
return cells.map((i) => h('rect', {
|
|
44
|
+
key: i,
|
|
45
|
+
className: 'dshpc-loader__node',
|
|
46
|
+
x: 1.3 + i * 7.5,
|
|
47
|
+
y: 8.8,
|
|
48
|
+
width: 6.4,
|
|
49
|
+
height: 6.4,
|
|
50
|
+
rx: 1.4,
|
|
51
|
+
fill: 'currentColor',
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 渲染一个加载动画图标。
|
|
56
|
+
*
|
|
57
|
+
* @param props 见 {@link LoaderProps}。
|
|
58
|
+
* @returns `<svg>` 元素(inline,不占额外行高)。
|
|
59
|
+
*/
|
|
60
|
+
export function Loader(props) {
|
|
61
|
+
ensureComponentStyles('loader', LOADER_CSS);
|
|
62
|
+
const { variant = 'ring', size = 'md', label, className } = props;
|
|
63
|
+
const classes = ['dshpc-loader', `dshpc-loader--${variant}`, `dshpc-loader--${size}`];
|
|
64
|
+
if (className !== undefined && className !== '')
|
|
65
|
+
classes.push(className);
|
|
66
|
+
return h('svg', {
|
|
67
|
+
className: classes.join(' '),
|
|
68
|
+
viewBox: '0 0 24 24',
|
|
69
|
+
role: label === undefined ? undefined : 'status',
|
|
70
|
+
'aria-label': label,
|
|
71
|
+
'aria-hidden': label === undefined ? true : undefined,
|
|
72
|
+
focusable: 'false',
|
|
73
|
+
}, variant === 'ring' ? ringNode() : blockNodes());
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=Loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Loader.js","sourceRoot":"","sources":["../../src/ui/Loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAsB9C,+CAA+C;AAC/C,SAAS,QAAQ;IACf,OAAO,CAAC,CAAC,QAAQ,EAAE;QACjB,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,CAAC,EAAE,GAAG;QACN,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,cAAc;QACtB,WAAW,EAAE,CAAC;QACd,aAAa,EAAE,OAAO;QACtB,eAAe,EAAE,SAAS;KAC3B,CAAC,CAAA;AACJ,CAAC;AAED,+CAA+C;AAC/C,SAAS,UAAU;IACjB,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,CAAC,CAAC,MAAM,EAAE;QACR,GAAG,EAAE,CAAC;QACN,SAAS,EAAE,oBAAoB;QAC/B,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG;QAChB,CAAC,EAAE,GAAG;QACN,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,EAAE,EAAE,GAAG;QACP,IAAI,EAAE,cAAc;KACrB,CAAC,CACH,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,KAAkB;IACvC,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAC3C,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IACjE,MAAM,OAAO,GAAG,CAAC,cAAc,EAAE,iBAAiB,OAAO,EAAE,EAAE,iBAAiB,IAAI,EAAE,CAAC,CAAA;IACrF,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACxE,OAAO,CAAC,CACN,KAAK,EACL;QACE,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5B,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAChD,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACrD,SAAS,EAAE,OAAO;KACnB,EACD,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAC/C,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LoaderBar —— 胶囊不定进度 loading(Loader 家族成员)。
|
|
3
|
+
*
|
|
4
|
+
* 图形来源:设计出的「轨道 + 蓝色段 + 斜纹」胶囊条。动画是**不定进度**语义:
|
|
5
|
+
* 蓝色那半截**固定不动**,只有它上面的一道道细斜纹单向流动(0.55 秒走一个条纹周期),
|
|
6
|
+
* 看着像条纹在转,不表示任何百分比。要「确定进度」别改这个控件 —— 它是固定加载态,
|
|
7
|
+
* 不是进度条 API。
|
|
8
|
+
*
|
|
9
|
+
* 尺寸轴按**高度**给(宽固定 4:1):图形本身是横条,套方形的尺寸轴没意义。
|
|
10
|
+
*
|
|
11
|
+
* 实现要点:外层 `<g clip-path>` 静止、只让内层的蓝色段动。若把 `clip-path` 与
|
|
12
|
+
* `transform` 放在同一层,裁剪框会跟着平移,等于没裁,蓝段会跑出胶囊外。
|
|
13
|
+
* clipPath 的 id 由 `useId` 生成(同一页面可能有多个实例,写死 id 会互相抢)。
|
|
14
|
+
*
|
|
15
|
+
* 边界同 `Loader`:不带背景、不带内距、不带定位。
|
|
16
|
+
*
|
|
17
|
+
* ⚠️ 图形数据在 `loader-bar-art.ts`(源 SVG 一次性转录),别手改坐标。
|
|
18
|
+
*/
|
|
19
|
+
import { createElement as h } from 'react';
|
|
20
|
+
import type { LoaderSize } from './Loader.js';
|
|
21
|
+
export interface LoaderBarProps {
|
|
22
|
+
/** 尺寸档(按高度),默认 `md`(96×24)。 */
|
|
23
|
+
size?: LoaderSize;
|
|
24
|
+
/** 是否播放动画,默认 `true`;`false` 时蓝段停在左侧原位。 */
|
|
25
|
+
animated?: boolean;
|
|
26
|
+
/** 无障碍文案。不传 = 纯装饰(`aria-hidden`);传了 = `role="status"` 由它播报。 */
|
|
27
|
+
label?: string;
|
|
28
|
+
/** 追加 class(只允许补布局,不许覆盖外观)。 */
|
|
29
|
+
className?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 渲染胶囊不定进度 loading。
|
|
33
|
+
*
|
|
34
|
+
* @param props 见 {@link LoaderBarProps}。
|
|
35
|
+
* @returns `<svg>` 元素。
|
|
36
|
+
*/
|
|
37
|
+
export declare function LoaderBar(props: LoaderBarProps): ReturnType<typeof h>;
|
|
38
|
+
//# sourceMappingURL=LoaderBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoaderBar.d.ts","sourceRoot":"","sources":["../../src/ui/LoaderBar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAS,MAAM,OAAO,CAAA;AAIjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAuB7C,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAiDrE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LoaderBar —— 胶囊不定进度 loading(Loader 家族成员)。
|
|
3
|
+
*
|
|
4
|
+
* 图形来源:设计出的「轨道 + 蓝色段 + 斜纹」胶囊条。动画是**不定进度**语义:
|
|
5
|
+
* 蓝色那半截**固定不动**,只有它上面的一道道细斜纹单向流动(0.55 秒走一个条纹周期),
|
|
6
|
+
* 看着像条纹在转,不表示任何百分比。要「确定进度」别改这个控件 —— 它是固定加载态,
|
|
7
|
+
* 不是进度条 API。
|
|
8
|
+
*
|
|
9
|
+
* 尺寸轴按**高度**给(宽固定 4:1):图形本身是横条,套方形的尺寸轴没意义。
|
|
10
|
+
*
|
|
11
|
+
* 实现要点:外层 `<g clip-path>` 静止、只让内层的蓝色段动。若把 `clip-path` 与
|
|
12
|
+
* `transform` 放在同一层,裁剪框会跟着平移,等于没裁,蓝段会跑出胶囊外。
|
|
13
|
+
* clipPath 的 id 由 `useId` 生成(同一页面可能有多个实例,写死 id 会互相抢)。
|
|
14
|
+
*
|
|
15
|
+
* 边界同 `Loader`:不带背景、不带内距、不带定位。
|
|
16
|
+
*
|
|
17
|
+
* ⚠️ 图形数据在 `loader-bar-art.ts`(源 SVG 一次性转录),别手改坐标。
|
|
18
|
+
*/
|
|
19
|
+
import { createElement as h, useId } from 'react';
|
|
20
|
+
import { ensureComponentStyles } from './css.js';
|
|
21
|
+
import { LOADER_BAR_CSS } from './controls-css.js';
|
|
22
|
+
import { BAR_PATHS } from './loader-bar-art.js';
|
|
23
|
+
/** 源图三条路径的固定顺序:轨道 / 蓝色段 / 斜纹。 */
|
|
24
|
+
const TRACK_INDEX = 0;
|
|
25
|
+
const FILL_INDEX = 1;
|
|
26
|
+
const STRIPE_INDEX = 2;
|
|
27
|
+
/**
|
|
28
|
+
* 斜纹的横向重复周期(用户单位):源图相邻斜线的间距。
|
|
29
|
+
* 平移整整一个周期后与原图重合 ⇒ 循环无缝。
|
|
30
|
+
* ⚠️ 必须与 `loader-bar.css` 里 `translateX(85.333px)` 保持一致。
|
|
31
|
+
*/
|
|
32
|
+
const STRIPE_PERIOD = 85.333;
|
|
33
|
+
/** 取第 index 条路径:转录不全就当场抛,别静默少画一块。 */
|
|
34
|
+
function pathAt(paths, index) {
|
|
35
|
+
const path = paths[index];
|
|
36
|
+
if (path === undefined) {
|
|
37
|
+
throw new Error(`loader-bar-art 缺少第 ${String(index)} 条路径`);
|
|
38
|
+
}
|
|
39
|
+
return path;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 渲染胶囊不定进度 loading。
|
|
43
|
+
*
|
|
44
|
+
* @param props 见 {@link LoaderBarProps}。
|
|
45
|
+
* @returns `<svg>` 元素。
|
|
46
|
+
*/
|
|
47
|
+
export function LoaderBar(props) {
|
|
48
|
+
ensureComponentStyles('loader-bar', LOADER_BAR_CSS);
|
|
49
|
+
const { size = 'md', animated = true, label, className } = props;
|
|
50
|
+
// useId 返回形如 `:r0:` 的串,冒号放进 url(#…) 需要转义,这里直接剔掉。
|
|
51
|
+
const clipId = `dshpc-loader-bar-clip-${useId().replace(/[^a-zA-Z0-9_-]/g, '')}`;
|
|
52
|
+
const track = pathAt(BAR_PATHS, TRACK_INDEX);
|
|
53
|
+
const fill = pathAt(BAR_PATHS, FILL_INDEX);
|
|
54
|
+
const stripe = pathAt(BAR_PATHS, STRIPE_INDEX);
|
|
55
|
+
const classes = ['dshpc-loader-bar', `dshpc-loader-bar--${size}`];
|
|
56
|
+
if (animated === false)
|
|
57
|
+
classes.push('dshpc-loader-bar--still');
|
|
58
|
+
if (className !== undefined && className !== '')
|
|
59
|
+
classes.push(className);
|
|
60
|
+
return h('svg', {
|
|
61
|
+
className: classes.join(' '),
|
|
62
|
+
viewBox: '0 384 1024 256',
|
|
63
|
+
role: label === undefined ? undefined : 'status',
|
|
64
|
+
'aria-label': label,
|
|
65
|
+
'aria-hidden': label === undefined ? true : undefined,
|
|
66
|
+
focusable: 'false',
|
|
67
|
+
}, h('defs', null,
|
|
68
|
+
// 裁到「蓝色段」本身:条纹平移时不会跑到灰色轨道上
|
|
69
|
+
h('clipPath', { id: clipId }, h('rect', { x: 128, y: 426.667, width: 554.667, height: 170.667, rx: 85.333 }))), h('path', { d: track.d, fill: track.fill }), h('path', { d: fill.d, fill: fill.fill }), h('g', { clipPath: `url(#${clipId})` }, h('g', { className: 'dshpc-loader-bar__stripe' }, h('path', { d: stripe.d, fill: stripe.fill }),
|
|
70
|
+
// 往左再画一份同样的条纹:平移一个周期时左边界不会露空
|
|
71
|
+
h('g', { transform: `translate(${String(-STRIPE_PERIOD)} 0)` }, h('path', { d: stripe.d, fill: stripe.fill })))));
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=LoaderBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoaderBar.js","sourceRoot":"","sources":["../../src/ui/LoaderBar.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/Loading.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 全局浮动 Loading 指示器(UI 基础层 · P1)。
|
|
3
3
|
*
|
|
4
|
+
* @deprecated 这是「自带定位 + 自带 pill 背景」的复合件,不属于通用加载图标。
|
|
5
|
+
* 只要图标请用 {@link Loader}(无背景、无定位,背景与位置归调用方);
|
|
6
|
+
* 要居中 / 带文案的整卡请继续用 {@link LoadingToast} / {@link LoadingBlock}。
|
|
7
|
+
* 本组件保留不删(消费方可能还在用),但新代码不要再用。
|
|
8
|
+
*
|
|
4
9
|
* 用法:
|
|
5
10
|
* <Loading />
|
|
6
11
|
*
|
package/dist/ui/Loading.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Loading.d.ts","sourceRoot":"","sources":["../../src/ui/Loading.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"Loading.d.ts","sourceRoot":"","sources":["../../src/ui/Loading.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAuB,MAAM,OAAO,CAAA;AAE/D,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAIL,KAAK,aAAa,EAElB,KAAK,eAAe,EAEpB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAA;AA6C1B,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,4CAA4C;AAC5C,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAOjE;AAED,8CAA8C;AAC9C,wBAAgB,aAAa,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAGpD;AAMD,uBAAuB;AACvB,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sBAAsB;IACtB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,uCAAuC;IACvC,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,wCAAwC;IACxC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAMD,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAQ1E;AAED,2CAA2C;AAC3C,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAQ1E;AAyDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,aAAa,CAUhE"}
|
package/dist/ui/Loading.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 全局浮动 Loading 指示器(UI 基础层 · P1)。
|
|
3
3
|
*
|
|
4
|
+
* @deprecated 这是「自带定位 + 自带 pill 背景」的复合件,不属于通用加载图标。
|
|
5
|
+
* 只要图标请用 {@link Loader}(无背景、无定位,背景与位置归调用方);
|
|
6
|
+
* 要居中 / 带文案的整卡请继续用 {@link LoadingToast} / {@link LoadingBlock}。
|
|
7
|
+
* 本组件保留不删(消费方可能还在用),但新代码不要再用。
|
|
8
|
+
*
|
|
4
9
|
* 用法:
|
|
5
10
|
* <Loading />
|
|
6
11
|
*
|
|
@@ -21,6 +26,7 @@ import { t } from '../utils/i18n.js';
|
|
|
21
26
|
import { claimLoadingHost, createLoadingSlot, loadingOverlayClass, } from './loading-host.js';
|
|
22
27
|
import { ensureComponentStyles, getStyleKit } from './css.js';
|
|
23
28
|
import { LOADING_CSS } from './controls-css.js';
|
|
29
|
+
import { Loader } from './Loader.js';
|
|
24
30
|
const pillStyle = {
|
|
25
31
|
position: 'fixed',
|
|
26
32
|
bottom: '16px',
|
|
@@ -72,27 +78,18 @@ export function RunningBlocks() {
|
|
|
72
78
|
ensureComponentStyles('loading', LOADING_CSS);
|
|
73
79
|
return h('span', { className: 'dshpc-run-blocks' }, h('i', null), h('i', null), h('i', null));
|
|
74
80
|
}
|
|
75
|
-
// 转圈同样走 SVG 矢量弧(border 圆在次像素下会被抗锯齿拉毛,见 Button.ts)。
|
|
76
|
-
function spin(size) {
|
|
77
|
-
return h('svg', { className: 'dshpc-loading-spin', viewBox: '0 0 16 16', width: size, height: size, 'aria-hidden': true }, h('circle', {
|
|
78
|
-
cx: 8, cy: 8, r: 6.5, fill: 'none',
|
|
79
|
-
stroke: 'currentColor', strokeWidth: 2, strokeLinecap: 'round',
|
|
80
|
-
// 周长 ≈ 40.8,画 30 的弧 ⇒ 约 265° 的开口环
|
|
81
|
-
strokeDasharray: '30 41',
|
|
82
|
-
}));
|
|
83
|
-
}
|
|
84
81
|
function textOf(props) {
|
|
85
82
|
return props.text ?? (props.translate ?? t)('loadingDefault');
|
|
86
83
|
}
|
|
87
84
|
/** 样式一:横排提示卡(转圈在左、文字在右),灰色底与 notify 的 info 卡同色。就地渲染,位置随调用方。 */
|
|
88
85
|
export function LoadingToast(props) {
|
|
89
86
|
ensureComponentStyles('loading', LOADING_CSS);
|
|
90
|
-
return h('div', { className: 'dshpc-loading-toast', role: 'status', 'aria-live': 'polite' },
|
|
87
|
+
return h('div', { className: 'dshpc-loading-toast', role: 'status', 'aria-live': 'polite' }, h(Loader, { size: 'sm' }), h('span', null, textOf(props)));
|
|
91
88
|
}
|
|
92
89
|
/** 样式二:方块卡(转圈在上、文字在下,内距更大)。就地渲染,位置随调用方。 */
|
|
93
90
|
export function LoadingBlock(props) {
|
|
94
91
|
ensureComponentStyles('loading', LOADING_CSS);
|
|
95
|
-
return h('div', { className: 'dshpc-loading-block', role: 'status', 'aria-live': 'polite' },
|
|
92
|
+
return h('div', { className: 'dshpc-loading-block', role: 'status', 'aria-live': 'polite' }, h(Loader, { size: 'md' }), h('span', null, textOf(props)));
|
|
96
93
|
}
|
|
97
94
|
// 宿主实现:唯一浮层根 + 唯一槽位(`createLoadingSlot`)。屏幕上永远最多一张卡。
|
|
98
95
|
function createLoadingHost() {
|
package/dist/ui/Loading.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Loading.js","sourceRoot":"","sources":["../../src/ui/Loading.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"Loading.js","sourceRoot":"","sources":["../../src/ui/Loading.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const BUTTON_CSS = "\n/* \u2500\u2500 \u6309\u94AE / \u56FE\u6807\u94AE P2 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n \u4E0E Segmented \u540C\u4E00\u6761\u9AD8\u5EA6\u7EAA\u5F8B\uFF1A--dshpc-control-h-sm(24) / -md(28) / -lg(32)\uFF0C\n \u6709\u8FB9\u6846\u7684 variant \u7528 1px \u771F\u8FB9\u6846 + \u5185\u90E8 padding \u8865\u56DE\uFF0C**\u6709\u8FB9 / \u65E0\u8FB9\u540C\u9AD8**\u3002\n\n \u4E09\u6761\u53D7\u63A7\u8F74\uFF082026-10-19 \u91CD\u5199\uFF0C\u5BF9\u9F50\u4E3B\u6D41 UI \u6846\u67B6\u7684\u5206\u7C7B\u53E3\u5F84\uFF09\uFF1A\n \u00B7 variant \u2014\u2014 \u5916\u89C2\u6863 = \u5F62\u6001 + \u8BED\u4E49\u8272\uFF0C\u5171 10 \u6863\uFF1A\n primary / secondary / outline / ghost / danger / success / warning / info /\n danger-outline\uFF08\u7EA2\u5B57\u63CF\u8FB9\uFF09/ link\uFF08\u884C\u5185\u94FE\u63A5\uFF09\n \u00B7 size \u2014\u2014 sm / md / lg\n \u00B7 block \u2014\u2014 \u6491\u6EE1\u7236\u5BBD\n \u6BCF\u4E00\u6863**\u53EA\u586B 5 \u4E2A\u5C40\u90E8\u53D8\u91CF**\uFF08--btn-bg / -fg / -border / -bg-hover / -bg-active\uFF09\uFF0C\n \u7ED3\u6784\u4E0E\u4EA4\u4E92\u53EA\u6709\u4E0A\u9762\u8FD9\u4E00\u4EFD\uFF1B\u4EFB\u4F55\u6863\u4F4D\u90FD\u4E0D\u8BB8\u518D\u5199\u4E00\u904D display/height/padding\u3002\n \u81EA\u5B9A\u4E49\u989C\u8272\uFF08Button \u7684 color \u53C2\u6570\uFF09\u540C\u6837\u53EA\u8986\u76D6\u8FD9 5 \u4E2A\u53D8\u91CF\uFF08token \u8986\u76D6\uFF0C\u4E0D\u662F\u65B0\u76AE\u80A4\uFF09\u3002\n\n \u26A0\uFE0F hover \u4E0D\u518D\u7528 opacity \u538B\u4E00\u5C42\uFF08\u7528\u6237 2026-10-19\uFF1A\u300C\u9ED1\u8272\u548C\u7EA2\u8272\u7684\u6309\u94AE\u79FB\u4E0A\u53BB\u53D8\u5316\u592A\u5C0F\uFF0C\n \u5B8C\u5168\u611F\u89C9\u4E0D\u5230\u989C\u8272\u53D8\u4E86\u300D\uFF09\u21D2 \u8D70 --dshpc-*-hover / -active \u7684\u660E\u786E\u6DF7\u8272\uFF0C\u89C1 tokens-css.ts\u3002 */\n.dshpc-btn{--btn-bg:transparent;--btn-fg:var(--dshpc-fg);--btn-border:transparent;--btn-pad:12px;\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);--btn-fg-hover:var(--btn-fg);\n appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;\n box-sizing:border-box;border:1px solid var(--btn-border);border-radius:var(--dshpc-radius-md);\n background-color:var(--btn-bg);color:var(--btn-fg);font-family:inherit;font-weight:500;white-space:nowrap;cursor:pointer;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),border-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease),box-shadow var(--dshpc-dur-fast) var(--dshpc-ease),transform var(--dshpc-dur-fast) var(--dshpc-ease);}\n.dshpc-btn--sm{--btn-pad:10px;height:var(--dshpc-control-h-sm);padding:0 var(--btn-pad);font-size:var(--dshpc-font-sm);line-height:1;}\n.dshpc-btn--md{--btn-pad:12px;height:var(--dshpc-control-h-md);padding:0 var(--btn-pad);font-size:var(--dshpc-font-md);line-height:1;}\n.dshpc-btn--lg{--btn-pad:14px;height:var(--dshpc-control-h-lg);padding:0 var(--btn-pad);font-size:var(--dshpc-font-md);line-height:1;}\n/* block\uFF1A\u6491\u6EE1\u7236\u5BBD\uFF08\u8868\u5355\u5E95\u680F / \u62BD\u5C49\u5E95\u90E8\u7684\u4E3B\u64CD\u4F5C\uFF09 */\n.dshpc-btn--block{display:flex;width:100%;}\n/* block + \u524D\u7F6E\u56FE\u6807 \u21D2 \u6587\u5B57\u89C6\u89C9\u5C45\u4E2D\uFF082026-10-19 \u7528\u6237\u70B9\u540D\uFF09\uFF1A\n \u5185\u5BB9\u7EC4 [\u56FE\u6807 + \u95F4\u8DDD + \u6587\u5B57] \u6574\u4F53\u5728\u76D2\u5185\u5C45\u4E2D\u65F6\uFF0C**\u6587\u5B57**\u7684\u4E2D\u5FC3\u4F1A\u88AB\u56FE\u6807\u63A8\u53F3\u534A\u683C\u3002\n \u628A\u53F3\u5185\u8FB9\u8DDD\u8865\u4E0A\u300C\u56FE\u6807\u5BBD + \u95F4\u8DDD\u300D\uFF0C\u53EF\u7528\u76D2\u968F\u4E4B\u5DE6\u79FB\u540C\u91CF \u21D2 \u6587\u5B57\u843D\u56DE\u89C6\u89C9\u4E2D\u5FC3\uFF0C\u56FE\u6807\u8D34\u5DE6\u4FA7\u3002\n \u56FE\u6807\u5BBD\u6309 1.2em \u4F30\uFF08\u5B98\u65B9\u56FE\u6807 14/16px vs \u5B57\u53F7 12/13px\uFF09\uFF0Cem \u968F\u5B57\u53F7\u6863\u81EA\u52A8\u7F29\u653E\u3002 */\n.dshpc-btn--block.dshpc-btn--icon-start{padding-right:calc(var(--btn-pad) + 1.2em + 6px);}\n.dshpc-btn__icon,.dshpc-btn__icon-end{display:inline-flex;align-items:center;justify-content:center;flex:none;line-height:0;}\n.dshpc-btn__icon svg,.dshpc-btn__icon-end svg{display:block;margin:0;}\n/* maxWidth \u5305 MarqueeText \u65F6\uFF1A\u6807\u7B7E\u4F5C\u4E3A flex \u5B50\u9879\u5FC5\u987B\u80FD\u6536\u7F29\u5230\u5185\u5BB9\u4EE5\u4E0B\uFF0C\u5426\u5219\u7701\u7565\u53F7 / \u8DD1\u9A6C\u706F\u6D4B\u4E0D\u51C6 */\n.dshpc-btn .dshpc-btn__label{min-width:0;}\n/* loading\uFF1A\u4E0D\u6362 DOM \u7ED3\u6784\uFF0C\u53EA\u5728\u6587\u6848\u524D\u63D2\u4E00\u4E2A\u540C\u8272\u5C0F\u5708\u3002\n \u26A0\uFE0F 2026-10-20 \u6539\u753B\u6CD5\uFF1A\u539F\u6765\u662F border:1.5px \u52A0 border-radius:999px \u753B\u7684\u73AF \u2014\u2014 \u771F\u673A\u5B9E\u6D4B computed\n radius \u5C31\u662F 999px\u3001\u5BBD\u9AD8\u90FD\u662F 12px\uFF08\u6CA1\u88AB\u4EFB\u4F55\u6837\u5F0F\u8986\u76D6\uFF09\uFF0C\u770B\u7740\u5374\"\u50CF\u5706\u89D2\u65B9\"\uFF0C\u539F\u56E0\u662F**\u6B21\u50CF\u7D20\u8FB9\u6846\n \uFF081.5px\uFF09\u5728 12px \u8FD9\u4E48\u5C0F\u7684\u5706\u4E0A\u88AB\u6297\u952F\u9F7F\u63D2\u503C\u62C9\u6BDB**\u3002\u6539\u7528 SVG \u77E2\u91CF\u5F27\uFF1A\u4EFB\u610F DPR \u4E0B\u90FD\u662F\u771F\u5706\u3002 */\n.dshpc-btn__spinner{display:block;flex:none;width:12px;height:12px;\n animation:dshpc-btn-spin .7s linear infinite;}\n/* shortcut: 12px \u662F\u56FA\u5B9A\u503C\uFF0C\u4E0D\u968F\u6309\u94AE\u5B57\u53F7\u7F29\u653E\uFF1B\u8981\u66F4\u5927\u5C31\u6539\u8FD9\u4E00\u5904\u3002 */\n@keyframes dshpc-btn-spin{to{transform:rotate(360deg)}}\n\n/* \u4EA4\u4E92\u6001\uFF1A\u989C\u8272\u53D8\u5316\u5199\u5728\u53D8\u91CF\u4E0A \u21D2 \u6240\u6709\u6863\u4F4D\u4E00\u6B21\u751F\u6548\uFF0C\u4E14\u53D8\u5316\u5E45\u5EA6\u7531 token \u51B3\u5B9A\uFF08\u591F\u660E\u663E\uFF09 */\n.dshpc-btn:hover:not(:disabled){background-color:var(--btn-bg-hover);color:var(--btn-fg-hover);}\n.dshpc-btn:active:not(:disabled){background-color:var(--btn-bg-active);transform:translateY(1px);}\n.dshpc-btn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}\n.dshpc-btn:disabled{cursor:default;opacity:.5;}\n\n.dshpc-btn--primary{--btn-bg:var(--dshpc-accent);--btn-fg:var(--dshpc-fg-inverse);\n --btn-bg-hover:var(--dshpc-accent-hover);--btn-bg-active:var(--dshpc-accent-active);}\n/* secondary\uFF1A\u4E2D\u6027\u5B9E\u5FC3\uFF08\u7070\u9762\uFF09\uFF0C\u7528\u4E8E\u300C\u53D6\u6D88 / \u6B21\u8981\u300D\u8FD9\u7C7B\u4E0E\u4E3B\u64CD\u4F5C\u5E76\u6392\u7684\u6309\u94AE */\n.dshpc-btn--secondary{--btn-bg:var(--dshpc-hover);--btn-fg:var(--dshpc-fg);\n --btn-bg-hover:var(--dshpc-active);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--outline{--btn-bg:var(--dshpc-surface-1);--btn-border:var(--dshpc-border-strong);\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--ghost{--btn-fg:var(--dshpc-fg-2);--btn-fg-hover:var(--dshpc-fg);\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--danger{--btn-bg:var(--dshpc-danger);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-danger-hover);--btn-bg-active:var(--dshpc-danger-active);}\n.dshpc-btn--success{--btn-bg:var(--dshpc-success);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-success-hover);--btn-bg-active:var(--dshpc-success-active);}\n.dshpc-btn--warning{--btn-bg:var(--dshpc-warning);--btn-fg:var(--dshpc-on-warning);\n --btn-bg-hover:var(--dshpc-warning-hover);--btn-bg-active:var(--dshpc-warning-active);}\n.dshpc-btn--info{--btn-bg:var(--dshpc-business);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-business-hover);--btn-bg-active:var(--dshpc-business-active);}\n/* \u6269\u5C55\u516B\u8272\u5B9E\u5FC3\uFF082026-10-29\uFF09\uFF1A\u767D\u5B57\u4E24\u4E3B\u9898\u5747 \u22654.5:1\uFF1Bhover/active \u8D70\u5404\u81EA token \u6D3E\u751F\u3002 */\n.dshpc-btn--purple{--btn-bg:var(--dshpc-purple);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-purple-hover);--btn-bg-active:var(--dshpc-purple-active);}\n.dshpc-btn--pink{--btn-bg:var(--dshpc-pink);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-pink-hover);--btn-bg-active:var(--dshpc-pink-active);}\n.dshpc-btn--cyan{--btn-bg:var(--dshpc-cyan);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-cyan-hover);--btn-bg-active:var(--dshpc-cyan-active);}\n.dshpc-btn--teal{--btn-bg:var(--dshpc-teal);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-teal-hover);--btn-bg-active:var(--dshpc-teal-active);}\n.dshpc-btn--orange{--btn-bg:var(--dshpc-orange);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-orange-hover);--btn-bg-active:var(--dshpc-orange-active);}\n.dshpc-btn--indigo{--btn-bg:var(--dshpc-indigo);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-indigo-hover);--btn-bg-active:var(--dshpc-indigo-active);}\n.dshpc-btn--rose{--btn-bg:var(--dshpc-rose);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-rose-hover);--btn-bg-active:var(--dshpc-rose-active);}\n.dshpc-btn--slate{--btn-bg:var(--dshpc-slate);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-slate-hover);--btn-bg-active:var(--dshpc-slate-active);}\n/* danger-outline\uFF1A\u7EA2\u5B57\u63CF\u8FB9\uFF08\u7834\u574F\u6027\u6B21\u8981\u64CD\u4F5C\uFF0C\u5982\u5361\u7247\u4E0A\u7684\u300C\u5220\u9664\u300D\uFF09\u3002\n \u26A0\uFE0F \u65E7\u4FEE\u9970\u7C7B danger-ink \u4FDD\u7559\u4E3A\u522B\u540D\uFF08\u6D88\u8D39\u65B9\u53EF\u80FD\u8FD8\u5728\u6302\uFF09\uFF0C\u4E24\u8005\u540C\u4E00\u5957\u76AE\u80A4\u3002 */\n.dshpc-btn--danger-outline,.dshpc-btn--danger-ink{--btn-border:var(--dshpc-danger);--btn-fg:var(--dshpc-danger);\n --btn-fg-hover:var(--dshpc-danger);--btn-bg-hover:var(--dshpc-danger-soft);--btn-bg-active:var(--dshpc-danger-soft);}\n/* link\uFF1A\u884C\u5185\u6587\u5B57\u94FE\u63A5\u578B\uFF08\u4F1A\u8BDD / \u4EA7\u51FA\u6587\u4EF6\u540D\uFF09\uFF0C\u65E0\u5E95\u65E0\u8FB9\u3001\u54C1\u724C\u84DD\u3001hover \u4E0B\u5212\u7EBF */\n.dshpc-btn--link{--btn-fg:var(--dshpc-link);--btn-fg-hover:var(--dshpc-link);\n --btn-bg-hover:transparent;--btn-bg-active:transparent;\n height:auto;padding:0;border:0;background:none;font-weight:400;text-align:left;}\n.dshpc-btn--link:hover:not(:disabled){text-decoration:underline;}\n\n/* \u56FE\u6807\u94AE\uFF1A\u7EAF\u56FE\u6807\uFF0C\u65B9\u5F62\uFF1B\u5C3A\u5BF8\u6863\u7684\u5BBD\u9AD8\u4E0E\u540C\u6863\u6587\u5B57\u6309\u94AE\u7B49\u9AD8\u3001\u5706\u89D2\u7EDF\u4E00\u5403 md\uFF08\u4E0E .dshpc-btn \u540C\u6B3E\uFF0C2026-10-28 \u62CD\u677F\uFF09 */\n.dshpc-iconbtn{appearance:none;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;\n border:1px solid transparent;border-radius:var(--dshpc-radius-md);background:transparent;color:var(--dshpc-fg-2);\n font-family:inherit;cursor:pointer;flex:none;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),border-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease),opacity var(--dshpc-dur-fast) var(--dshpc-ease);}\n.dshpc-iconbtn--sm{width:var(--dshpc-control-h-sm);height:var(--dshpc-control-h-sm);font-size:var(--dshpc-font-sm);}\n.dshpc-iconbtn--md{width:var(--dshpc-control-h-md);height:var(--dshpc-control-h-md);font-size:var(--dshpc-font-md);}\n.dshpc-iconbtn--lg{width:var(--dshpc-control-h-lg);height:var(--dshpc-control-h-lg);font-size:var(--dshpc-font-md);}\n.dshpc-iconbtn--plain{color:var(--dshpc-fg-2);}\n.dshpc-iconbtn--outline{background:var(--dshpc-surface-1);border-color:var(--dshpc-border);color:var(--dshpc-fg-2);}\n.dshpc-iconbtn--danger{color:var(--dshpc-danger);}\n.dshpc-iconbtn:hover:not(:disabled){background:var(--dshpc-hover);color:var(--dshpc-fg);}\n.dshpc-iconbtn--danger:hover:not(:disabled){background:var(--dshpc-danger-soft);color:var(--dshpc-danger);}\n.dshpc-iconbtn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}\n.dshpc-iconbtn:disabled{cursor:default;opacity:.4;}\n\n/* \u2500\u2500 \u884C\u5F0F\u6587\u4EF6\u6309\u94AE\uFF08\u56FE\u6807 + \u6587\u4EF6\u540D\uFF09P2\uFF1A**\u5168\u7AD9\u552F\u4E00\u5B9E\u73B0**\uFF082026-10-04 \u6536\u7F16\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n \u7528\u9014\uFF1A\u300C\u4EA7\u51FA\u7269 / \u9644\u4EF6\u300D\u90A3\u79CD**\u4E00\u884C\u4E00\u4E2A\u6587\u4EF6**\u7684\u6E05\u5355\u9879\uFF08\u57FA\u7840\u4FE1\u606F\u53F3\u680F\u4EA7\u51FA\u7269\u6E05\u5355\u3001\u9644\u4EF6\u533A\u3001\n \u6267\u884C\u8BB0\u5F55\u9875\u7684\u5C55\u5F00\u533A\uFF09\u3002\u5E73\u65F6\u900F\u660E\u3001**\u9F20\u6807\u79FB\u4E0A\u53BB\u624D\u51FA\u6D45\u5E95**\uFF08\u6CBF\u7528\u7528\u6237 2026-10-03 \u5B9A\u7684\u89C2\u611F\uFF09\u3002\n \u4E24\u4E2A\u5F62\u6001\u4FEE\u9970\u7C7B\uFF1A\n --block \u6491\u6EE1\u7236\u5BBD\uFF08\u6E05\u5355\u91CC\u4E00\u9879\u4E00\u884C\uFF09\n --inline \u5185\u5BB9\u5BBD\uFF08\u8DDF\u5728\u6587\u5B57\u540E\u5934\uFF0C\u5982\u9644\u4EF6\u884C\uFF09\n \u6536\u7F16\u539F\u56E0\uFF1A\u8FD9\u4EFD\u76AE\u80A4\u6B64\u524D\u53EA\u5199\u5728 task-list.tsx \u7684 TASK_LIST_CSS \u91CC\uFF08\u65E7\u540D .dshpc-info-out\uFF09\uFF0C\n \u6267\u884C\u8BB0\u5F55\u9875\u5C55\u5F00\u533A\u8981\u7528\u540C\u4E00\u79CD\u89C2\u611F \u21D2 \u4E0A\u63D0\u57FA\u7840\u5C42\uFF0C\u907F\u514D\u518D\u51FA\u73B0\u300C\u5404\u5199\u4E00\u4EFD\u5916\u89C2\u300D\uFF08\u540C\u540D\u4E0D\u540C\u76AE\u7684\u5751\u521A\u8E29\u8FC7\uFF09\u3002 */\n.dshpc-filechip{appearance:none;-webkit-appearance:none;border:0;border-radius:var(--dshpc-radius-xs);\n background:transparent;color:var(--dshpc-fg);font:inherit;text-align:left;cursor:pointer;min-width:0;\n transition:background-color var(--dshpc-dur) var(--dshpc-ease);}\n.dshpc-filechip:hover:not(:disabled){background:var(--dshpc-chip-bg);}\n.dshpc-filechip:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px;}\n.dshpc-filechip:disabled{cursor:default;background:transparent;color:var(--dshpc-fg-3);}\n.dshpc-filechip--block{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;\n padding:4px 6px;font-size:var(--dshpc-font-xs);}\n.dshpc-filechip--inline{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;font-size:var(--dshpc-font-sm);}\n\n@media (prefers-reduced-motion: reduce){.dshpc-btn,.dshpc-iconbtn,.dshpc-filechip{transition:none;}}\n";
|
|
1
|
+
export declare const BUTTON_CSS = "\n/* \u2500\u2500 \u6309\u94AE / \u56FE\u6807\u94AE P2 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n \u4E0E Segmented \u540C\u4E00\u6761\u9AD8\u5EA6\u7EAA\u5F8B\uFF1A--dshpc-control-h-sm(24) / -md(28) / -lg(32)\uFF0C\n \u6709\u8FB9\u6846\u7684 variant \u7528 1px \u771F\u8FB9\u6846 + \u5185\u90E8 padding \u8865\u56DE\uFF0C**\u6709\u8FB9 / \u65E0\u8FB9\u540C\u9AD8**\u3002\n\n \u4E09\u6761\u53D7\u63A7\u8F74\uFF082026-10-19 \u91CD\u5199\uFF0C\u5BF9\u9F50\u4E3B\u6D41 UI \u6846\u67B6\u7684\u5206\u7C7B\u53E3\u5F84\uFF09\uFF1A\n \u00B7 variant \u2014\u2014 \u5916\u89C2\u6863 = \u5F62\u6001 + \u8BED\u4E49\u8272\uFF0C\u5171 10 \u6863\uFF1A\n primary / secondary / outline / ghost / danger / success / warning / info /\n danger-outline\uFF08\u7EA2\u5B57\u63CF\u8FB9\uFF09/ link\uFF08\u884C\u5185\u94FE\u63A5\uFF09\n \u00B7 size \u2014\u2014 sm / md / lg\n \u00B7 block \u2014\u2014 \u6491\u6EE1\u7236\u5BBD\n \u6BCF\u4E00\u6863**\u53EA\u586B 5 \u4E2A\u5C40\u90E8\u53D8\u91CF**\uFF08--btn-bg / -fg / -border / -bg-hover / -bg-active\uFF09\uFF0C\n \u7ED3\u6784\u4E0E\u4EA4\u4E92\u53EA\u6709\u4E0A\u9762\u8FD9\u4E00\u4EFD\uFF1B\u4EFB\u4F55\u6863\u4F4D\u90FD\u4E0D\u8BB8\u518D\u5199\u4E00\u904D display/height/padding\u3002\n \u81EA\u5B9A\u4E49\u989C\u8272\uFF08Button \u7684 color \u53C2\u6570\uFF09\u540C\u6837\u53EA\u8986\u76D6\u8FD9 5 \u4E2A\u53D8\u91CF\uFF08token \u8986\u76D6\uFF0C\u4E0D\u662F\u65B0\u76AE\u80A4\uFF09\u3002\n\n \u26A0\uFE0F hover \u4E0D\u518D\u7528 opacity \u538B\u4E00\u5C42\uFF08\u7528\u6237 2026-10-19\uFF1A\u300C\u9ED1\u8272\u548C\u7EA2\u8272\u7684\u6309\u94AE\u79FB\u4E0A\u53BB\u53D8\u5316\u592A\u5C0F\uFF0C\n \u5B8C\u5168\u611F\u89C9\u4E0D\u5230\u989C\u8272\u53D8\u4E86\u300D\uFF09\u21D2 \u8D70 --dshpc-*-hover / -active \u7684\u660E\u786E\u6DF7\u8272\uFF0C\u89C1 tokens-css.ts\u3002 */\n.dshpc-btn{--btn-bg:transparent;--btn-fg:var(--dshpc-fg);--btn-border:transparent;--btn-pad:12px;\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);--btn-fg-hover:var(--btn-fg);\n appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;\n box-sizing:border-box;border:1px solid var(--btn-border);border-radius:var(--dshpc-radius-md);\n background-color:var(--btn-bg);color:var(--btn-fg);font-family:inherit;font-weight:500;white-space:nowrap;cursor:pointer;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),border-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease),box-shadow var(--dshpc-dur-fast) var(--dshpc-ease),transform var(--dshpc-dur-fast) var(--dshpc-ease);}\n.dshpc-btn--sm{--btn-pad:10px;height:var(--dshpc-control-h-sm);padding:0 var(--btn-pad);font-size:var(--dshpc-font-sm);line-height:1;}\n.dshpc-btn--md{--btn-pad:12px;height:var(--dshpc-control-h-md);padding:0 var(--btn-pad);font-size:var(--dshpc-font-md);line-height:1;}\n.dshpc-btn--lg{--btn-pad:14px;height:var(--dshpc-control-h-lg);padding:0 var(--btn-pad);font-size:var(--dshpc-font-md);line-height:1;}\n/* block\uFF1A\u6491\u6EE1\u7236\u5BBD\uFF08\u8868\u5355\u5E95\u680F / \u62BD\u5C49\u5E95\u90E8\u7684\u4E3B\u64CD\u4F5C\uFF09 */\n.dshpc-btn--block{display:flex;width:100%;}\n/* block + \u524D\u7F6E\u56FE\u6807 \u21D2 \u6587\u5B57\u89C6\u89C9\u5C45\u4E2D\uFF082026-10-19 \u7528\u6237\u70B9\u540D\uFF09\uFF1A\n \u5185\u5BB9\u7EC4 [\u56FE\u6807 + \u95F4\u8DDD + \u6587\u5B57] \u6574\u4F53\u5728\u76D2\u5185\u5C45\u4E2D\u65F6\uFF0C**\u6587\u5B57**\u7684\u4E2D\u5FC3\u4F1A\u88AB\u56FE\u6807\u63A8\u53F3\u534A\u683C\u3002\n \u628A\u53F3\u5185\u8FB9\u8DDD\u8865\u4E0A\u300C\u56FE\u6807\u5BBD + \u95F4\u8DDD\u300D\uFF0C\u53EF\u7528\u76D2\u968F\u4E4B\u5DE6\u79FB\u540C\u91CF \u21D2 \u6587\u5B57\u843D\u56DE\u89C6\u89C9\u4E2D\u5FC3\uFF0C\u56FE\u6807\u8D34\u5DE6\u4FA7\u3002\n \u56FE\u6807\u5BBD\u6309 1.2em \u4F30\uFF08\u5B98\u65B9\u56FE\u6807 14/16px vs \u5B57\u53F7 12/13px\uFF09\uFF0Cem \u968F\u5B57\u53F7\u6863\u81EA\u52A8\u7F29\u653E\u3002 */\n.dshpc-btn--block.dshpc-btn--icon-start{padding-right:calc(var(--btn-pad) + 1.2em + 6px);}\n.dshpc-btn__icon,.dshpc-btn__icon-end{display:inline-flex;align-items:center;justify-content:center;flex:none;line-height:0;}\n.dshpc-btn__icon svg,.dshpc-btn__icon-end svg{display:block;margin:0;}\n/* maxWidth \u5305 MarqueeText \u65F6\uFF1A\u6807\u7B7E\u4F5C\u4E3A flex \u5B50\u9879\u5FC5\u987B\u80FD\u6536\u7F29\u5230\u5185\u5BB9\u4EE5\u4E0B\uFF0C\u5426\u5219\u7701\u7565\u53F7 / \u8DD1\u9A6C\u706F\u6D4B\u4E0D\u51C6 */\n.dshpc-btn .dshpc-btn__label{min-width:0;}\n/* loading\uFF1A\u4E0D\u6362 DOM \u7ED3\u6784\uFF0C\u53EA\u5728\u6587\u6848\u524D\u63D2\u4E00\u679A Loader\uFF08size=xs\uFF0C12px\uFF09\u3002\n \u73AF\u7684\u753B\u6CD5\u4E0E\u52A8\u753B\u7EDF\u4E00\u5728 controls/loader.css\uFF08\u672C\u6587\u4EF6\u4E0D\u518D\u7EF4\u62A4\u7B2C\u4E8C\u4EFD SVG \u5F27 / keyframes\uFF09\u3002 */\n\n/* \u4EA4\u4E92\u6001\uFF1A\u989C\u8272\u53D8\u5316\u5199\u5728\u53D8\u91CF\u4E0A \u21D2 \u6240\u6709\u6863\u4F4D\u4E00\u6B21\u751F\u6548\uFF0C\u4E14\u53D8\u5316\u5E45\u5EA6\u7531 token \u51B3\u5B9A\uFF08\u591F\u660E\u663E\uFF09 */\n.dshpc-btn:hover:not(:disabled){background-color:var(--btn-bg-hover);color:var(--btn-fg-hover);}\n.dshpc-btn:active:not(:disabled){background-color:var(--btn-bg-active);transform:translateY(1px);}\n.dshpc-btn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}\n.dshpc-btn:disabled{cursor:default;opacity:.5;}\n\n.dshpc-btn--primary{--btn-bg:var(--dshpc-accent);--btn-fg:var(--dshpc-fg-inverse);\n --btn-bg-hover:var(--dshpc-accent-hover);--btn-bg-active:var(--dshpc-accent-active);}\n/* secondary\uFF1A\u4E2D\u6027\u5B9E\u5FC3\uFF08\u7070\u9762\uFF09\uFF0C\u7528\u4E8E\u300C\u53D6\u6D88 / \u6B21\u8981\u300D\u8FD9\u7C7B\u4E0E\u4E3B\u64CD\u4F5C\u5E76\u6392\u7684\u6309\u94AE */\n.dshpc-btn--secondary{--btn-bg:var(--dshpc-hover);--btn-fg:var(--dshpc-fg);\n --btn-bg-hover:var(--dshpc-active);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--outline{--btn-bg:var(--dshpc-surface-1);--btn-border:var(--dshpc-border-strong);\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--ghost{--btn-fg:var(--dshpc-fg-2);--btn-fg-hover:var(--dshpc-fg);\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--danger{--btn-bg:var(--dshpc-danger);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-danger-hover);--btn-bg-active:var(--dshpc-danger-active);}\n.dshpc-btn--success{--btn-bg:var(--dshpc-success);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-success-hover);--btn-bg-active:var(--dshpc-success-active);}\n.dshpc-btn--warning{--btn-bg:var(--dshpc-warning);--btn-fg:var(--dshpc-on-warning);\n --btn-bg-hover:var(--dshpc-warning-hover);--btn-bg-active:var(--dshpc-warning-active);}\n.dshpc-btn--info{--btn-bg:var(--dshpc-business);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-business-hover);--btn-bg-active:var(--dshpc-business-active);}\n/* \u6269\u5C55\u516B\u8272\u5B9E\u5FC3\uFF082026-10-29\uFF09\uFF1A\u767D\u5B57\u4E24\u4E3B\u9898\u5747 \u22654.5:1\uFF1Bhover/active \u8D70\u5404\u81EA token \u6D3E\u751F\u3002 */\n.dshpc-btn--purple{--btn-bg:var(--dshpc-purple);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-purple-hover);--btn-bg-active:var(--dshpc-purple-active);}\n.dshpc-btn--pink{--btn-bg:var(--dshpc-pink);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-pink-hover);--btn-bg-active:var(--dshpc-pink-active);}\n.dshpc-btn--cyan{--btn-bg:var(--dshpc-cyan);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-cyan-hover);--btn-bg-active:var(--dshpc-cyan-active);}\n.dshpc-btn--teal{--btn-bg:var(--dshpc-teal);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-teal-hover);--btn-bg-active:var(--dshpc-teal-active);}\n.dshpc-btn--orange{--btn-bg:var(--dshpc-orange);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-orange-hover);--btn-bg-active:var(--dshpc-orange-active);}\n.dshpc-btn--indigo{--btn-bg:var(--dshpc-indigo);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-indigo-hover);--btn-bg-active:var(--dshpc-indigo-active);}\n.dshpc-btn--rose{--btn-bg:var(--dshpc-rose);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-rose-hover);--btn-bg-active:var(--dshpc-rose-active);}\n.dshpc-btn--slate{--btn-bg:var(--dshpc-slate);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-slate-hover);--btn-bg-active:var(--dshpc-slate-active);}\n/* danger-outline\uFF1A\u7EA2\u5B57\u63CF\u8FB9\uFF08\u7834\u574F\u6027\u6B21\u8981\u64CD\u4F5C\uFF0C\u5982\u5361\u7247\u4E0A\u7684\u300C\u5220\u9664\u300D\uFF09\u3002\n \u26A0\uFE0F \u65E7\u4FEE\u9970\u7C7B danger-ink \u4FDD\u7559\u4E3A\u522B\u540D\uFF08\u6D88\u8D39\u65B9\u53EF\u80FD\u8FD8\u5728\u6302\uFF09\uFF0C\u4E24\u8005\u540C\u4E00\u5957\u76AE\u80A4\u3002 */\n.dshpc-btn--danger-outline,.dshpc-btn--danger-ink{--btn-border:var(--dshpc-danger);--btn-fg:var(--dshpc-danger);\n --btn-fg-hover:var(--dshpc-danger);--btn-bg-hover:var(--dshpc-danger-soft);--btn-bg-active:var(--dshpc-danger-soft);}\n/* link\uFF1A\u884C\u5185\u6587\u5B57\u94FE\u63A5\u578B\uFF08\u4F1A\u8BDD / \u4EA7\u51FA\u6587\u4EF6\u540D\uFF09\uFF0C\u65E0\u5E95\u65E0\u8FB9\u3001\u54C1\u724C\u84DD\u3001hover \u4E0B\u5212\u7EBF */\n.dshpc-btn--link{--btn-fg:var(--dshpc-link);--btn-fg-hover:var(--dshpc-link);\n --btn-bg-hover:transparent;--btn-bg-active:transparent;\n height:auto;padding:0;border:0;background:none;font-weight:400;text-align:left;}\n.dshpc-btn--link:hover:not(:disabled){text-decoration:underline;}\n\n/* \u56FE\u6807\u94AE\uFF1A\u7EAF\u56FE\u6807\uFF0C\u65B9\u5F62\uFF1B\u5C3A\u5BF8\u6863\u7684\u5BBD\u9AD8\u4E0E\u540C\u6863\u6587\u5B57\u6309\u94AE\u7B49\u9AD8\u3001\u5706\u89D2\u7EDF\u4E00\u5403 md\uFF08\u4E0E .dshpc-btn \u540C\u6B3E\uFF0C2026-10-28 \u62CD\u677F\uFF09 */\n.dshpc-iconbtn{appearance:none;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;\n border:1px solid transparent;border-radius:var(--dshpc-radius-md);background:transparent;color:var(--dshpc-fg-2);\n font-family:inherit;cursor:pointer;flex:none;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),border-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease),opacity var(--dshpc-dur-fast) var(--dshpc-ease);}\n.dshpc-iconbtn--sm{width:var(--dshpc-control-h-sm);height:var(--dshpc-control-h-sm);font-size:var(--dshpc-font-sm);}\n.dshpc-iconbtn--md{width:var(--dshpc-control-h-md);height:var(--dshpc-control-h-md);font-size:var(--dshpc-font-md);}\n.dshpc-iconbtn--lg{width:var(--dshpc-control-h-lg);height:var(--dshpc-control-h-lg);font-size:var(--dshpc-font-md);}\n.dshpc-iconbtn--plain{color:var(--dshpc-fg-2);}\n.dshpc-iconbtn--outline{background:var(--dshpc-surface-1);border-color:var(--dshpc-border);color:var(--dshpc-fg-2);}\n.dshpc-iconbtn--danger{color:var(--dshpc-danger);}\n.dshpc-iconbtn:hover:not(:disabled){background:var(--dshpc-hover);color:var(--dshpc-fg);}\n.dshpc-iconbtn--danger:hover:not(:disabled){background:var(--dshpc-danger-soft);color:var(--dshpc-danger);}\n.dshpc-iconbtn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}\n.dshpc-iconbtn:disabled{cursor:default;opacity:.4;}\n\n/* \u2500\u2500 \u884C\u5F0F\u6587\u4EF6\u6309\u94AE\uFF08\u56FE\u6807 + \u6587\u4EF6\u540D\uFF09P2\uFF1A**\u5168\u7AD9\u552F\u4E00\u5B9E\u73B0**\uFF082026-10-04 \u6536\u7F16\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n \u7528\u9014\uFF1A\u300C\u4EA7\u51FA\u7269 / \u9644\u4EF6\u300D\u90A3\u79CD**\u4E00\u884C\u4E00\u4E2A\u6587\u4EF6**\u7684\u6E05\u5355\u9879\uFF08\u57FA\u7840\u4FE1\u606F\u53F3\u680F\u4EA7\u51FA\u7269\u6E05\u5355\u3001\u9644\u4EF6\u533A\u3001\n \u6267\u884C\u8BB0\u5F55\u9875\u7684\u5C55\u5F00\u533A\uFF09\u3002\u5E73\u65F6\u900F\u660E\u3001**\u9F20\u6807\u79FB\u4E0A\u53BB\u624D\u51FA\u6D45\u5E95**\uFF08\u6CBF\u7528\u7528\u6237 2026-10-03 \u5B9A\u7684\u89C2\u611F\uFF09\u3002\n \u4E24\u4E2A\u5F62\u6001\u4FEE\u9970\u7C7B\uFF1A\n --block \u6491\u6EE1\u7236\u5BBD\uFF08\u6E05\u5355\u91CC\u4E00\u9879\u4E00\u884C\uFF09\n --inline \u5185\u5BB9\u5BBD\uFF08\u8DDF\u5728\u6587\u5B57\u540E\u5934\uFF0C\u5982\u9644\u4EF6\u884C\uFF09\n \u6536\u7F16\u539F\u56E0\uFF1A\u8FD9\u4EFD\u76AE\u80A4\u6B64\u524D\u53EA\u5199\u5728 task-list.tsx \u7684 TASK_LIST_CSS \u91CC\uFF08\u65E7\u540D .dshpc-info-out\uFF09\uFF0C\n \u6267\u884C\u8BB0\u5F55\u9875\u5C55\u5F00\u533A\u8981\u7528\u540C\u4E00\u79CD\u89C2\u611F \u21D2 \u4E0A\u63D0\u57FA\u7840\u5C42\uFF0C\u907F\u514D\u518D\u51FA\u73B0\u300C\u5404\u5199\u4E00\u4EFD\u5916\u89C2\u300D\uFF08\u540C\u540D\u4E0D\u540C\u76AE\u7684\u5751\u521A\u8E29\u8FC7\uFF09\u3002 */\n.dshpc-filechip{appearance:none;-webkit-appearance:none;border:0;border-radius:var(--dshpc-radius-xs);\n background:transparent;color:var(--dshpc-fg);font:inherit;text-align:left;cursor:pointer;min-width:0;\n transition:background-color var(--dshpc-dur) var(--dshpc-ease);}\n.dshpc-filechip:hover:not(:disabled){background:var(--dshpc-chip-bg);}\n.dshpc-filechip:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px;}\n.dshpc-filechip:disabled{cursor:default;background:transparent;color:var(--dshpc-fg-3);}\n.dshpc-filechip--block{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;\n padding:4px 6px;font-size:var(--dshpc-font-xs);}\n.dshpc-filechip--inline{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;font-size:var(--dshpc-font-sm);}\n\n@media (prefers-reduced-motion: reduce){.dshpc-btn,.dshpc-iconbtn,.dshpc-filechip{transition:none;}}\n";
|
|
2
2
|
//# sourceMappingURL=button-css.generated.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/button-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"button-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/button-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,2mbAAktS,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// ⚠️ 生成物,勿手改。真源 = src/ui/controls/button.css
|
|
2
2
|
// 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
|
|
3
|
-
export const BUTTON_CSS = "\n/* ── 按钮 / 图标钮 P2 ───────────────────────────────────────────────────\n 与 Segmented 同一条高度纪律:--dshpc-control-h-sm(24) / -md(28) / -lg(32),\n 有边框的 variant 用 1px 真边框 + 内部 padding 补回,**有边 / 无边同高**。\n\n 三条受控轴(2026-10-19 重写,对齐主流 UI 框架的分类口径):\n · variant —— 外观档 = 形态 + 语义色,共 10 档:\n primary / secondary / outline / ghost / danger / success / warning / info /\n danger-outline(红字描边)/ link(行内链接)\n · size —— sm / md / lg\n · block —— 撑满父宽\n 每一档**只填 5 个局部变量**(--btn-bg / -fg / -border / -bg-hover / -bg-active),\n 结构与交互只有上面这一份;任何档位都不许再写一遍 display/height/padding。\n 自定义颜色(Button 的 color 参数)同样只覆盖这 5 个变量(token 覆盖,不是新皮肤)。\n\n ⚠️ hover 不再用 opacity 压一层(用户 2026-10-19:「黑色和红色的按钮移上去变化太小,\n 完全感觉不到颜色变了」)⇒ 走 --dshpc-*-hover / -active 的明确混色,见 tokens-css.ts。 */\n.dshpc-btn{--btn-bg:transparent;--btn-fg:var(--dshpc-fg);--btn-border:transparent;--btn-pad:12px;\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);--btn-fg-hover:var(--btn-fg);\n appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;\n box-sizing:border-box;border:1px solid var(--btn-border);border-radius:var(--dshpc-radius-md);\n background-color:var(--btn-bg);color:var(--btn-fg);font-family:inherit;font-weight:500;white-space:nowrap;cursor:pointer;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),border-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease),box-shadow var(--dshpc-dur-fast) var(--dshpc-ease),transform var(--dshpc-dur-fast) var(--dshpc-ease);}\n.dshpc-btn--sm{--btn-pad:10px;height:var(--dshpc-control-h-sm);padding:0 var(--btn-pad);font-size:var(--dshpc-font-sm);line-height:1;}\n.dshpc-btn--md{--btn-pad:12px;height:var(--dshpc-control-h-md);padding:0 var(--btn-pad);font-size:var(--dshpc-font-md);line-height:1;}\n.dshpc-btn--lg{--btn-pad:14px;height:var(--dshpc-control-h-lg);padding:0 var(--btn-pad);font-size:var(--dshpc-font-md);line-height:1;}\n/* block:撑满父宽(表单底栏 / 抽屉底部的主操作) */\n.dshpc-btn--block{display:flex;width:100%;}\n/* block + 前置图标 ⇒ 文字视觉居中(2026-10-19 用户点名):\n 内容组 [图标 + 间距 + 文字] 整体在盒内居中时,**文字**的中心会被图标推右半格。\n 把右内边距补上「图标宽 + 间距」,可用盒随之左移同量 ⇒ 文字落回视觉中心,图标贴左侧。\n 图标宽按 1.2em 估(官方图标 14/16px vs 字号 12/13px),em 随字号档自动缩放。 */\n.dshpc-btn--block.dshpc-btn--icon-start{padding-right:calc(var(--btn-pad) + 1.2em + 6px);}\n.dshpc-btn__icon,.dshpc-btn__icon-end{display:inline-flex;align-items:center;justify-content:center;flex:none;line-height:0;}\n.dshpc-btn__icon svg,.dshpc-btn__icon-end svg{display:block;margin:0;}\n/* maxWidth 包 MarqueeText 时:标签作为 flex 子项必须能收缩到内容以下,否则省略号 / 跑马灯测不准 */\n.dshpc-btn .dshpc-btn__label{min-width:0;}\n/* loading:不换 DOM
|
|
3
|
+
export const BUTTON_CSS = "\n/* ── 按钮 / 图标钮 P2 ───────────────────────────────────────────────────\n 与 Segmented 同一条高度纪律:--dshpc-control-h-sm(24) / -md(28) / -lg(32),\n 有边框的 variant 用 1px 真边框 + 内部 padding 补回,**有边 / 无边同高**。\n\n 三条受控轴(2026-10-19 重写,对齐主流 UI 框架的分类口径):\n · variant —— 外观档 = 形态 + 语义色,共 10 档:\n primary / secondary / outline / ghost / danger / success / warning / info /\n danger-outline(红字描边)/ link(行内链接)\n · size —— sm / md / lg\n · block —— 撑满父宽\n 每一档**只填 5 个局部变量**(--btn-bg / -fg / -border / -bg-hover / -bg-active),\n 结构与交互只有上面这一份;任何档位都不许再写一遍 display/height/padding。\n 自定义颜色(Button 的 color 参数)同样只覆盖这 5 个变量(token 覆盖,不是新皮肤)。\n\n ⚠️ hover 不再用 opacity 压一层(用户 2026-10-19:「黑色和红色的按钮移上去变化太小,\n 完全感觉不到颜色变了」)⇒ 走 --dshpc-*-hover / -active 的明确混色,见 tokens-css.ts。 */\n.dshpc-btn{--btn-bg:transparent;--btn-fg:var(--dshpc-fg);--btn-border:transparent;--btn-pad:12px;\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);--btn-fg-hover:var(--btn-fg);\n appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;\n box-sizing:border-box;border:1px solid var(--btn-border);border-radius:var(--dshpc-radius-md);\n background-color:var(--btn-bg);color:var(--btn-fg);font-family:inherit;font-weight:500;white-space:nowrap;cursor:pointer;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),border-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease),box-shadow var(--dshpc-dur-fast) var(--dshpc-ease),transform var(--dshpc-dur-fast) var(--dshpc-ease);}\n.dshpc-btn--sm{--btn-pad:10px;height:var(--dshpc-control-h-sm);padding:0 var(--btn-pad);font-size:var(--dshpc-font-sm);line-height:1;}\n.dshpc-btn--md{--btn-pad:12px;height:var(--dshpc-control-h-md);padding:0 var(--btn-pad);font-size:var(--dshpc-font-md);line-height:1;}\n.dshpc-btn--lg{--btn-pad:14px;height:var(--dshpc-control-h-lg);padding:0 var(--btn-pad);font-size:var(--dshpc-font-md);line-height:1;}\n/* block:撑满父宽(表单底栏 / 抽屉底部的主操作) */\n.dshpc-btn--block{display:flex;width:100%;}\n/* block + 前置图标 ⇒ 文字视觉居中(2026-10-19 用户点名):\n 内容组 [图标 + 间距 + 文字] 整体在盒内居中时,**文字**的中心会被图标推右半格。\n 把右内边距补上「图标宽 + 间距」,可用盒随之左移同量 ⇒ 文字落回视觉中心,图标贴左侧。\n 图标宽按 1.2em 估(官方图标 14/16px vs 字号 12/13px),em 随字号档自动缩放。 */\n.dshpc-btn--block.dshpc-btn--icon-start{padding-right:calc(var(--btn-pad) + 1.2em + 6px);}\n.dshpc-btn__icon,.dshpc-btn__icon-end{display:inline-flex;align-items:center;justify-content:center;flex:none;line-height:0;}\n.dshpc-btn__icon svg,.dshpc-btn__icon-end svg{display:block;margin:0;}\n/* maxWidth 包 MarqueeText 时:标签作为 flex 子项必须能收缩到内容以下,否则省略号 / 跑马灯测不准 */\n.dshpc-btn .dshpc-btn__label{min-width:0;}\n/* loading:不换 DOM 结构,只在文案前插一枚 Loader(size=xs,12px)。\n 环的画法与动画统一在 controls/loader.css(本文件不再维护第二份 SVG 弧 / keyframes)。 */\n\n/* 交互态:颜色变化写在变量上 ⇒ 所有档位一次生效,且变化幅度由 token 决定(够明显) */\n.dshpc-btn:hover:not(:disabled){background-color:var(--btn-bg-hover);color:var(--btn-fg-hover);}\n.dshpc-btn:active:not(:disabled){background-color:var(--btn-bg-active);transform:translateY(1px);}\n.dshpc-btn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}\n.dshpc-btn:disabled{cursor:default;opacity:.5;}\n\n.dshpc-btn--primary{--btn-bg:var(--dshpc-accent);--btn-fg:var(--dshpc-fg-inverse);\n --btn-bg-hover:var(--dshpc-accent-hover);--btn-bg-active:var(--dshpc-accent-active);}\n/* secondary:中性实心(灰面),用于「取消 / 次要」这类与主操作并排的按钮 */\n.dshpc-btn--secondary{--btn-bg:var(--dshpc-hover);--btn-fg:var(--dshpc-fg);\n --btn-bg-hover:var(--dshpc-active);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--outline{--btn-bg:var(--dshpc-surface-1);--btn-border:var(--dshpc-border-strong);\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--ghost{--btn-fg:var(--dshpc-fg-2);--btn-fg-hover:var(--dshpc-fg);\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--danger{--btn-bg:var(--dshpc-danger);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-danger-hover);--btn-bg-active:var(--dshpc-danger-active);}\n.dshpc-btn--success{--btn-bg:var(--dshpc-success);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-success-hover);--btn-bg-active:var(--dshpc-success-active);}\n.dshpc-btn--warning{--btn-bg:var(--dshpc-warning);--btn-fg:var(--dshpc-on-warning);\n --btn-bg-hover:var(--dshpc-warning-hover);--btn-bg-active:var(--dshpc-warning-active);}\n.dshpc-btn--info{--btn-bg:var(--dshpc-business);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-business-hover);--btn-bg-active:var(--dshpc-business-active);}\n/* 扩展八色实心(2026-10-29):白字两主题均 ≥4.5:1;hover/active 走各自 token 派生。 */\n.dshpc-btn--purple{--btn-bg:var(--dshpc-purple);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-purple-hover);--btn-bg-active:var(--dshpc-purple-active);}\n.dshpc-btn--pink{--btn-bg:var(--dshpc-pink);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-pink-hover);--btn-bg-active:var(--dshpc-pink-active);}\n.dshpc-btn--cyan{--btn-bg:var(--dshpc-cyan);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-cyan-hover);--btn-bg-active:var(--dshpc-cyan-active);}\n.dshpc-btn--teal{--btn-bg:var(--dshpc-teal);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-teal-hover);--btn-bg-active:var(--dshpc-teal-active);}\n.dshpc-btn--orange{--btn-bg:var(--dshpc-orange);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-orange-hover);--btn-bg-active:var(--dshpc-orange-active);}\n.dshpc-btn--indigo{--btn-bg:var(--dshpc-indigo);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-indigo-hover);--btn-bg-active:var(--dshpc-indigo-active);}\n.dshpc-btn--rose{--btn-bg:var(--dshpc-rose);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-rose-hover);--btn-bg-active:var(--dshpc-rose-active);}\n.dshpc-btn--slate{--btn-bg:var(--dshpc-slate);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-slate-hover);--btn-bg-active:var(--dshpc-slate-active);}\n/* danger-outline:红字描边(破坏性次要操作,如卡片上的「删除」)。\n ⚠️ 旧修饰类 danger-ink 保留为别名(消费方可能还在挂),两者同一套皮肤。 */\n.dshpc-btn--danger-outline,.dshpc-btn--danger-ink{--btn-border:var(--dshpc-danger);--btn-fg:var(--dshpc-danger);\n --btn-fg-hover:var(--dshpc-danger);--btn-bg-hover:var(--dshpc-danger-soft);--btn-bg-active:var(--dshpc-danger-soft);}\n/* link:行内文字链接型(会话 / 产出文件名),无底无边、品牌蓝、hover 下划线 */\n.dshpc-btn--link{--btn-fg:var(--dshpc-link);--btn-fg-hover:var(--dshpc-link);\n --btn-bg-hover:transparent;--btn-bg-active:transparent;\n height:auto;padding:0;border:0;background:none;font-weight:400;text-align:left;}\n.dshpc-btn--link:hover:not(:disabled){text-decoration:underline;}\n\n/* 图标钮:纯图标,方形;尺寸档的宽高与同档文字按钮等高、圆角统一吃 md(与 .dshpc-btn 同款,2026-10-28 拍板) */\n.dshpc-iconbtn{appearance:none;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;\n border:1px solid transparent;border-radius:var(--dshpc-radius-md);background:transparent;color:var(--dshpc-fg-2);\n font-family:inherit;cursor:pointer;flex:none;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),border-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease),opacity var(--dshpc-dur-fast) var(--dshpc-ease);}\n.dshpc-iconbtn--sm{width:var(--dshpc-control-h-sm);height:var(--dshpc-control-h-sm);font-size:var(--dshpc-font-sm);}\n.dshpc-iconbtn--md{width:var(--dshpc-control-h-md);height:var(--dshpc-control-h-md);font-size:var(--dshpc-font-md);}\n.dshpc-iconbtn--lg{width:var(--dshpc-control-h-lg);height:var(--dshpc-control-h-lg);font-size:var(--dshpc-font-md);}\n.dshpc-iconbtn--plain{color:var(--dshpc-fg-2);}\n.dshpc-iconbtn--outline{background:var(--dshpc-surface-1);border-color:var(--dshpc-border);color:var(--dshpc-fg-2);}\n.dshpc-iconbtn--danger{color:var(--dshpc-danger);}\n.dshpc-iconbtn:hover:not(:disabled){background:var(--dshpc-hover);color:var(--dshpc-fg);}\n.dshpc-iconbtn--danger:hover:not(:disabled){background:var(--dshpc-danger-soft);color:var(--dshpc-danger);}\n.dshpc-iconbtn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}\n.dshpc-iconbtn:disabled{cursor:default;opacity:.4;}\n\n/* ── 行式文件按钮(图标 + 文件名)P2:**全站唯一实现**(2026-10-04 收编)──────────\n 用途:「产出物 / 附件」那种**一行一个文件**的清单项(基础信息右栏产出物清单、附件区、\n 执行记录页的展开区)。平时透明、**鼠标移上去才出浅底**(沿用用户 2026-10-03 定的观感)。\n 两个形态修饰类:\n --block 撑满父宽(清单里一项一行)\n --inline 内容宽(跟在文字后头,如附件行)\n 收编原因:这份皮肤此前只写在 task-list.tsx 的 TASK_LIST_CSS 里(旧名 .dshpc-info-out),\n 执行记录页展开区要用同一种观感 ⇒ 上提基础层,避免再出现「各写一份外观」(同名不同皮的坑刚踩过)。 */\n.dshpc-filechip{appearance:none;-webkit-appearance:none;border:0;border-radius:var(--dshpc-radius-xs);\n background:transparent;color:var(--dshpc-fg);font:inherit;text-align:left;cursor:pointer;min-width:0;\n transition:background-color var(--dshpc-dur) var(--dshpc-ease);}\n.dshpc-filechip:hover:not(:disabled){background:var(--dshpc-chip-bg);}\n.dshpc-filechip:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px;}\n.dshpc-filechip:disabled{cursor:default;background:transparent;color:var(--dshpc-fg-3);}\n.dshpc-filechip--block{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;\n padding:4px 6px;font-size:var(--dshpc-font-xs);}\n.dshpc-filechip--inline{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;font-size:var(--dshpc-font-sm);}\n\n@media (prefers-reduced-motion: reduce){.dshpc-btn,.dshpc-iconbtn,.dshpc-filechip{transition:none;}}\n";
|
|
4
4
|
//# sourceMappingURL=button-css.generated.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/button-css.generated.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qEAAqE;AACrE,MAAM,CAAC,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"button-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/button-css.generated.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qEAAqE;AACrE,MAAM,CAAC,MAAM,UAAU,GAAG,+sSAA+sS,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const LOADER_BAR_CSS = "/* \u2500\u2500 LoaderBar\uFF1A\u80F6\u56CA\u4E0D\u5B9A\u8FDB\u5EA6 loading \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n \u6E90\u56FE\u5F62\u662F\u300C\u8F68\u9053 + \u84DD\u8272\u6BB5 + \u659C\u7EB9\u300D\u7684\u80F6\u56CA\u6761\u3002\u4E0E Loader \u540C\u65CF\uFF08Loader \u5BB6\u65CF\uFF1A\n Loader \u901A\u7528\u56FE\u6807 / LoaderBar \u80F6\u56CA\u4E0D\u5B9A\u8FDB\u5EA6\uFF09\uFF0C\u540C\u6837\u53EA\u753B\u56FE\u5F62\uFF1A\u4E0D\u5E26\u80CC\u666F\u3001\u4E0D\u5E26\u5B9A\u4F4D\u3002\n\n \u52A8\u7684\u662F**\u659C\u7EB9**\uFF0C\u4E0D\u662F\u84DD\u8272\u6BB5\uFF1A\u84DD\u8272\u90A3\u534A\u622A\u56FA\u5B9A\u4E0D\u52A8\uFF0C\u53EA\u6709\u5B83\u4E0A\u9762\u7684\u4E00\u9053\u9053\u7EC6\u659C\u6761\n \u5728\u8D70\uFF0C\u770B\u7740\u50CF\u6761\u7EB9\u5728\u6D41\u52A8 / \u8F6C\u3002\u8FD9\u7B26\u5408\u6E90\u56FE\u610F\u56FE \u2014\u2014 \u659C\u7EB9\u672C\u6765\u5C31\u662F\u8868\u793A\u300C\u8FDB\u884C\u4E2D\u300D\u3002\n\n \u5C3A\u5BF8\u6863\u6309**\u9AD8\u5EA6**\u7ED9\uFF08\u5BBD\u56FA\u5B9A 4:1\uFF09\uFF0C\u56E0\u4E3A\u56FE\u5F62\u672C\u8EAB\u662F\u6A2A\u6761\uFF0C\u65B9\u5F62\u5C3A\u5BF8\u8F74\u6CA1\u610F\u4E49\u3002 */\n\n.dshpc-loader-bar { display: inline-block; flex: none; vertical-align: middle; line-height: 0; }\n\n.dshpc-loader-bar--xs { width: 48px; height: 12px; }\n.dshpc-loader-bar--sm { width: 64px; height: 16px; }\n.dshpc-loader-bar--md { width: 96px; height: 24px; }\n.dshpc-loader-bar--lg { width: 128px; height: 32px; }\n.dshpc-loader-bar--xl { width: 192px; height: 48px; }\n\n/* \u659C\u7EB9\u5355\u5411\u5FAA\u73AF\u5E73\u79FB\u300285.333 \u662F\u4E00\u4E2A\u6761\u7EB9\u5468\u671F\uFF08\u6E90\u56FE\u76F8\u90BB\u659C\u7EBF\u7684\u95F4\u8DDD\uFF0C\u7528\u6237\u5355\u4F4D\uFF09\uFF1A\n \u5E73\u79FB\u6574\u6574\u4E00\u4E2A\u5468\u671F\u540E\u4E0E\u539F\u56FE\u91CD\u5408 \u21D2 \u5FAA\u73AF\u5904\u770B\u4E0D\u51FA\u63A5\u7F1D\u3002\n \u26A0\uFE0F \u8FD9\u4E2A\u6570\u5B57\u5FC5\u987B\u4E0E LoaderBar.ts \u91CC\u7684 STRIPE_PERIOD \u4E00\u81F4\uFF08\u7EC4\u4EF6\u9760\u5B83\u590D\u5236\u4E00\u4EFD\u5DE6\u4FA7\u8865\u56FE\uFF09\u3002\n \u5916\u5C42 <g clip-path> \u9759\u6B62\u3001\u53EA\u52A8\u8FD9\u4E00\u5C42 \u2014\u2014 \u82E5\u628A clip \u4E0E transform \u653E\u540C\u4E00\u5C42\uFF0C\n \u88C1\u526A\u6846\u4F1A\u8DDF\u7740\u4E00\u8D77\u79FB\uFF0C\u7B49\u4E8E\u6CA1\u88C1\uFF0C\u6761\u7EB9\u4F1A\u9732\u5230\u84DD\u8272\u6BB5\u5916\u9762\u3002 */\n.dshpc-loader-bar__stripe { animation: dshpc-loader-bar-flow .55s linear infinite; }\n@keyframes dshpc-loader-bar-flow {\n from { transform: translateX(0) }\n to { transform: translateX(85.333px) }\n}\n\n/* animated={false}\uFF1A\u6761\u7EB9\u505C\u5728\u539F\u4F4D\u3002 */\n.dshpc-loader-bar--still .dshpc-loader-bar__stripe { animation: none; }\n\n@media (prefers-reduced-motion: reduce) {\n .dshpc-loader-bar__stripe { animation: none; }\n}\n";
|
|
2
|
+
//# sourceMappingURL=loader-bar-css.generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-bar-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/loader-bar-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,++FAA4zC,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// ⚠️ 生成物,勿手改。真源 = src/ui/controls/loader-bar.css
|
|
2
|
+
// 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
|
|
3
|
+
export const LOADER_BAR_CSS = "/* ── LoaderBar:胶囊不定进度 loading ───────────────────────────────────────\n 源图形是「轨道 + 蓝色段 + 斜纹」的胶囊条。与 Loader 同族(Loader 家族:\n Loader 通用图标 / LoaderBar 胶囊不定进度),同样只画图形:不带背景、不带定位。\n\n 动的是**斜纹**,不是蓝色段:蓝色那半截固定不动,只有它上面的一道道细斜条\n 在走,看着像条纹在流动 / 转。这符合源图意图 —— 斜纹本来就是表示「进行中」。\n\n 尺寸档按**高度**给(宽固定 4:1),因为图形本身是横条,方形尺寸轴没意义。 */\n\n.dshpc-loader-bar { display: inline-block; flex: none; vertical-align: middle; line-height: 0; }\n\n.dshpc-loader-bar--xs { width: 48px; height: 12px; }\n.dshpc-loader-bar--sm { width: 64px; height: 16px; }\n.dshpc-loader-bar--md { width: 96px; height: 24px; }\n.dshpc-loader-bar--lg { width: 128px; height: 32px; }\n.dshpc-loader-bar--xl { width: 192px; height: 48px; }\n\n/* 斜纹单向循环平移。85.333 是一个条纹周期(源图相邻斜线的间距,用户单位):\n 平移整整一个周期后与原图重合 ⇒ 循环处看不出接缝。\n ⚠️ 这个数字必须与 LoaderBar.ts 里的 STRIPE_PERIOD 一致(组件靠它复制一份左侧补图)。\n 外层 <g clip-path> 静止、只动这一层 —— 若把 clip 与 transform 放同一层,\n 裁剪框会跟着一起移,等于没裁,条纹会露到蓝色段外面。 */\n.dshpc-loader-bar__stripe { animation: dshpc-loader-bar-flow .55s linear infinite; }\n@keyframes dshpc-loader-bar-flow {\n from { transform: translateX(0) }\n to { transform: translateX(85.333px) }\n}\n\n/* animated={false}:条纹停在原位。 */\n.dshpc-loader-bar--still .dshpc-loader-bar__stripe { animation: none; }\n\n@media (prefers-reduced-motion: reduce) {\n .dshpc-loader-bar__stripe { animation: none; }\n}\n";
|
|
4
|
+
//# sourceMappingURL=loader-bar-css.generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-bar-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/loader-bar-css.generated.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,yzCAAyzC,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const LOADER_CSS = "/* \u2500\u2500 Loader\uFF1A\u7EDF\u4E00\u7684\u52A0\u8F7D\u52A8\u753B\u56FE\u6807\uFF08\u65E0\u80CC\u666F / \u65E0\u5B9A\u4F4D / \u989C\u8272\u8DDF\u968F currentColor\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n \u5F62\u6001 \u00D7 \u5C3A\u5BF8\u4E24\u8F74\u6B63\u4EA4\uFF1A\u5F62\u6001\u7BA1\u51E0\u4F55\u4E0E\u52A8\u753B\uFF1B\u5C3A\u5BF8\u6863\u53EA\u6539 width / height\uFF0C\u51E0\u4F55\u6309\n viewBox=\"0 0 24 24\" \u7B49\u6BD4\u7F29\u653E \u2014\u2014 \u4E00\u5957\u51E0\u4F55\u5403\u4E94\u6863\uFF0C12px \u65F6\u63CF\u8FB9\u5373 1.5px\u300148px \u65F6 6px\uFF0C\n \u89C6\u89C9\u91CD\u91CF\u4E00\u81F4\uFF0C\u4E0D\u7528\u9010\u4E2A\u5C3A\u5BF8\u6362\u7B97 calc\u3002\n\n \u8FB9\u754C\uFF1A\u672C\u63A7\u4EF6**\u53EA\u7BA1\u56FE\u6807\u672C\u8EAB**\u3002\u80CC\u666F / \u5706\u89D2 / \u5185\u8DDD / \u9634\u5F71 / \u5B9A\u4F4D\uFF08fixed\u3001\u5C45\u4E2D\u3001\u6F02\u6D6E\uFF09\n \u4E00\u5F8B\u5F52\u8C03\u7528\u65B9 \u2014\u2014 \u5957 Chip\u3001\u5957 Card\uFF0C\u6216\u81EA\u5DF1\u5305\u4E00\u4E2A div\u3002 */\n\n.dshpc-loader { display: inline-block; flex: none; vertical-align: middle; line-height: 0; color: inherit; }\n\n.dshpc-loader--xs { width: 12px; height: 12px; }\n.dshpc-loader--sm { width: 16px; height: 16px; }\n.dshpc-loader--md { width: 24px; height: 24px; }\n.dshpc-loader--lg { width: 32px; height: 32px; }\n.dshpc-loader--xl { width: 48px; height: 48px; }\n\n/* \u5F62\u6001\u4E00 ring\uFF1A\u5F00\u53E3\u5F27\u6574\u4F53\u65CB\u8F6C\u3002\u5FC5\u987B\u8D70 SVG \u77E2\u91CF\u5F27 \u2014\u2014 \u6B21\u50CF\u7D20\u8FB9\u6846\u753B\u5706\u5728 12px \u4E0B\u4F1A\u88AB\n \u6297\u952F\u9F7F\u62C9\u6BDB\u3001\u770B\u7740\u50CF\u5706\u89D2\u65B9\uFF082026-10-20 \u771F\u673A\u5B9E\u6D4B\uFF0C\u66FE\u88AB\u8BEF\u5224\u6210 border-radius \u88AB\u8986\u76D6\uFF09\u3002 */\n.dshpc-loader--ring { animation: dshpc-loader-rotate .8s linear infinite; }\n@keyframes dshpc-loader-rotate { to { transform: rotate(360deg) } }\n\n/* \u5F62\u6001\u4E8C blocks\uFF1A\u4E09\u4E2A\u65B9\u5757\u4F9D\u6B21\u8109\u52A8\u653E\u5927\u3002\n transform-box: fill-box \u662F SVG \u5B50\u5143\u7D20\u505A CSS transform \u7684\u5FC5\u8981\u6761\u4EF6 \u2014\u2014 \u5426\u5219 origin\n \u843D\u5728 viewBox \u539F\u70B9\uFF0C\u8282\u70B9\u4F1A\u7ED5\u7740\u5DE6\u4E0A\u89D2\u98DE\u51FA\u53BB\u3002 */\n.dshpc-loader__node { transform-box: fill-box; transform-origin: center; }\n.dshpc-loader--blocks .dshpc-loader__node { animation: dshpc-loader-blink 1.2s ease-in-out infinite; }\n.dshpc-loader__node:nth-child(2) { animation-delay: .15s; }\n.dshpc-loader__node:nth-child(3) { animation-delay: .3s; }\n@keyframes dshpc-loader-blink {\n 0%, 80%, 100% { opacity: .25; transform: scale(.8) }\n 40% { opacity: 1; transform: scale(1) }\n}\n\n/* \u964D\u4F4E\u52A8\u6548\uFF1A\u505C\u5728\u300C\u5168\u90E8\u53EF\u89C1\u3001\u5B9E\u4F53\u5927\u5C0F\u300D\uFF0C\u800C\u4E0D\u662F\u505C\u5728\u52A8\u753B\u4E2D\u9014\u7684\u534A\u900F\u660E\u5C0F\u70B9\u3002 */\n@media (prefers-reduced-motion: reduce) {\n .dshpc-loader--ring { animation: none; }\n .dshpc-loader__node { animation: none; opacity: 1; transform: none; }\n}\n";
|
|
2
|
+
//# sourceMappingURL=loader-css.generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/loader-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,slGAA2rD,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// ⚠️ 生成物,勿手改。真源 = src/ui/controls/loader.css
|
|
2
|
+
// 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
|
|
3
|
+
export const LOADER_CSS = "/* ── Loader:统一的加载动画图标(无背景 / 无定位 / 颜色跟随 currentColor)────────\n 形态 × 尺寸两轴正交:形态管几何与动画;尺寸档只改 width / height,几何按\n viewBox=\"0 0 24 24\" 等比缩放 —— 一套几何吃五档,12px 时描边即 1.5px、48px 时 6px,\n 视觉重量一致,不用逐个尺寸换算 calc。\n\n 边界:本控件**只管图标本身**。背景 / 圆角 / 内距 / 阴影 / 定位(fixed、居中、漂浮)\n 一律归调用方 —— 套 Chip、套 Card,或自己包一个 div。 */\n\n.dshpc-loader { display: inline-block; flex: none; vertical-align: middle; line-height: 0; color: inherit; }\n\n.dshpc-loader--xs { width: 12px; height: 12px; }\n.dshpc-loader--sm { width: 16px; height: 16px; }\n.dshpc-loader--md { width: 24px; height: 24px; }\n.dshpc-loader--lg { width: 32px; height: 32px; }\n.dshpc-loader--xl { width: 48px; height: 48px; }\n\n/* 形态一 ring:开口弧整体旋转。必须走 SVG 矢量弧 —— 次像素边框画圆在 12px 下会被\n 抗锯齿拉毛、看着像圆角方(2026-10-20 真机实测,曾被误判成 border-radius 被覆盖)。 */\n.dshpc-loader--ring { animation: dshpc-loader-rotate .8s linear infinite; }\n@keyframes dshpc-loader-rotate { to { transform: rotate(360deg) } }\n\n/* 形态二 blocks:三个方块依次脉动放大。\n transform-box: fill-box 是 SVG 子元素做 CSS transform 的必要条件 —— 否则 origin\n 落在 viewBox 原点,节点会绕着左上角飞出去。 */\n.dshpc-loader__node { transform-box: fill-box; transform-origin: center; }\n.dshpc-loader--blocks .dshpc-loader__node { animation: dshpc-loader-blink 1.2s ease-in-out infinite; }\n.dshpc-loader__node:nth-child(2) { animation-delay: .15s; }\n.dshpc-loader__node:nth-child(3) { animation-delay: .3s; }\n@keyframes dshpc-loader-blink {\n 0%, 80%, 100% { opacity: .25; transform: scale(.8) }\n 40% { opacity: 1; transform: scale(1) }\n}\n\n/* 降低动效:停在「全部可见、实体大小」,而不是停在动画中途的半透明小点。 */\n@media (prefers-reduced-motion: reduce) {\n .dshpc-loader--ring { animation: none; }\n .dshpc-loader__node { animation: none; opacity: 1; transform: none; }\n}\n";
|
|
4
|
+
//# sourceMappingURL=loader-css.generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/loader-css.generated.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qEAAqE;AACrE,MAAM,CAAC,MAAM,UAAU,GAAG,wrDAAwrD,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const LOADING_CSS = "\n/* \u8FD0\u884C\u4E2D / loading \u7684\u6D3B\u52A8\u6307\u793A\uFF1A\u4E09\u4E2A\u5C0F\u65B9\u5757\u4F9D\u6B21\u8109\u52A8\u3002 */\n@keyframes dshpc-run-block { 0%, 80%, 100% { opacity: 0.25; transform: scale(0.8) } 40% { opacity: 1; transform: scale(1) } }\n.dshpc-run-blocks { display: inline-flex; align-items: center; gap: 3px; }\n.dshpc-run-blocks > i { width: 5px; height: 5px; border-radius: 1px; background: currentColor; animation: dshpc-run-block 1.2s ease-in-out infinite; }\n.dshpc-run-blocks > i:nth-child(2) { animation-delay: 0.15s; }\n.dshpc-run-blocks > i:nth-child(3) { animation-delay: 0.3s; }\n@media (prefers-reduced-motion: reduce) { .dshpc-run-blocks > i { animation: none; opacity: 1; } }\n\n/* \u2500\u2500 \u52A0\u8F7D\u63D0\u793A\uFF08LoadingToast / LoadingBlock / showLoading\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n \u4E24\u79CD\u6837\u5F0F\u5171\u7528\u4E00\u4E2A\u7070\u8272\u9762\uFF08\u4E0E notify \u7684 info \u5361\u540C\u8272\uFF09\uFF0C\u6697\u8272\u8D70 body[data-ds-dark-theme]\u3002
|
|
1
|
+
export declare const LOADING_CSS = "\n/* \u8FD0\u884C\u4E2D / loading \u7684\u6D3B\u52A8\u6307\u793A\uFF1A\u4E09\u4E2A\u5C0F\u65B9\u5757\u4F9D\u6B21\u8109\u52A8\u3002 */\n@keyframes dshpc-run-block { 0%, 80%, 100% { opacity: 0.25; transform: scale(0.8) } 40% { opacity: 1; transform: scale(1) } }\n.dshpc-run-blocks { display: inline-flex; align-items: center; gap: 3px; }\n.dshpc-run-blocks > i { width: 5px; height: 5px; border-radius: 1px; background: currentColor; animation: dshpc-run-block 1.2s ease-in-out infinite; }\n.dshpc-run-blocks > i:nth-child(2) { animation-delay: 0.15s; }\n.dshpc-run-blocks > i:nth-child(3) { animation-delay: 0.3s; }\n@media (prefers-reduced-motion: reduce) { .dshpc-run-blocks > i { animation: none; opacity: 1; } }\n\n/* \u2500\u2500 \u52A0\u8F7D\u63D0\u793A\uFF08LoadingToast / LoadingBlock / showLoading\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n \u4E24\u79CD\u6837\u5F0F\u5171\u7528\u4E00\u4E2A\u7070\u8272\u9762\uFF08\u4E0E notify \u7684 info \u5361\u540C\u8272\uFF09\uFF0C\u6697\u8272\u8D70 body[data-ds-dark-theme]\u3002\n \u5361\u91CC\u7684\u8F6C\u5708\u56FE\u6807\u4E0D\u81EA\u7ED8\uFF1A\u590D\u7528 Loader\uFF08size sm / md\uFF09\uFF0C\u73AF\u7684\u753B\u6CD5\u4E0E\u52A8\u753B\u53EA\u6709 controls/loader.css \u4E00\u4EFD\u3002 */\n\n/* \u6837\u5F0F\u4E00\uFF1A\u6A2A\u6392 toast \u5361\uFF08\u56FE\u6807\u5728\u5DE6\u3001\u6587\u5B57\u5728\u53F3\uFF09\uFF0C\u4E0E notify \u7684 info \u5361\u540C\u5C3A\u5BF8\u540C\u8272\u3002 */\n.dshpc-loading-toast {\n display: inline-flex; align-items: center; gap: 10px;\n /* \u4E0D\u5B66 notify \u56FA\u5B9A 320 \u5BBD\uFF1A\u8FD9\u5F20\u5361\u4E5F\u5E38\u88AB\u585E\u8FDB\u8868\u683C / \u7A84\u680F\u91CC\uFF0C\u5BBD\u5EA6\u968F\u5185\u5BB9\u8D70\u3002\n shortcut: \u4E0B\u9650 250px\uFF0C\u8981\u66F4\u5BBD / \u66F4\u7A84\u5C31\u6539\u8FD9\u4E00\u5904\u3002 */\n min-width: 250px; min-height: 48px; padding: 12px 16px; box-sizing: border-box;\n border-radius: 10px; box-shadow: 0 6px 16px rgba(0, 0, 0, .18);\n background: #f4f4f5; color: #18181b;\n font-size: var(--dshpc-font-lg); line-height: var(--dshpc-line-lg);\n}\n\n/* \u6837\u5F0F\u4E8C\uFF1A\u65B9\u5757\u5361\uFF08\u8F6C\u5708\u5728\u4E0A\u3001\u6587\u5B57\u5728\u4E0B\uFF09\uFF0C\u5185\u8DDD\u66F4\u5927\u3002 */\n.dshpc-loading-block {\n display: inline-flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px;\n min-width: 132px; min-height: 132px; padding: 24px; box-sizing: border-box;\n border-radius: var(--dshpc-radius-md); box-shadow: 0 6px 16px rgba(0, 0, 0, .18);\n background: #f4f4f5; color: #18181b;\n font-size: var(--dshpc-font-md); line-height: var(--dshpc-line-md);\n}\nbody[data-ds-dark-theme] .dshpc-loading-toast,\nbody[data-ds-dark-theme] .dshpc-loading-block { background: #3f3f46; color: #fafafa; }\n\n/* \u5168\u5C40\u6D6E\u5C42\uFF1A\u5C45\u4E2D\u3001\u4E0D\u6321\u70B9\u51FB\uFF08\u906E\u7F69\u5C42\u5355\u72EC\u4E00\u4E2A div \u624D\u6321\uFF09\u3002\n \u4E0E Modal \u906E\u7F69\u540C\u4E00\u5957\u8BA9\u4F4D\u53E3\u5F84\uFF1A\u53F3\u8FB9\u754C\u8BFB --dshpc-page-inset-right\u3002 */\n.dshpc-loading-overlay {\n position: fixed; inset: 0 var(--dshpc-page-inset-right, 0px) 0 0; z-index: var(--dshpc-z-modal);\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px;\n padding: 24px; box-sizing: border-box; pointer-events: none;\n}\n/* \u4E03\u5411\u5B9A\u4F4D\uFF08\u4E0E Toast \u7684\u516D\u5411\u540C\u540D + \u6B63\u4E2D\uFF09\uFF1A\u9ED8\u8BA4 bottom-center\uFF0C\u4E0E Sonner \u63D0\u793A\u540C\u5C4F\u4F4D\u3002 */\n.dshpc-loading-overlay--top-left { align-items: flex-start; justify-content: flex-start; }\n.dshpc-loading-overlay--top-center { justify-content: flex-start; }\n.dshpc-loading-overlay--top-right { align-items: flex-end; justify-content: flex-start; }\n.dshpc-loading-overlay--bottom-left { align-items: flex-start; justify-content: flex-end; }\n.dshpc-loading-overlay--bottom-center { justify-content: flex-end; }\n.dshpc-loading-overlay--bottom-right { align-items: flex-end; justify-content: flex-end; }\n.dshpc-loading-overlay__mask { position: absolute; inset: 0; pointer-events: auto; }\n";
|
|
2
2
|
//# sourceMappingURL=loading-css.generated.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loading-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/loading-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"loading-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/loading-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,6oIAAk5F,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// ⚠️ 生成物,勿手改。真源 = src/ui/controls/loading.css
|
|
2
2
|
// 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
|
|
3
|
-
export const LOADING_CSS = "\n/* 运行中 / loading 的活动指示:三个小方块依次脉动。 */\n@keyframes dshpc-run-block { 0%, 80%, 100% { opacity: 0.25; transform: scale(0.8) } 40% { opacity: 1; transform: scale(1) } }\n.dshpc-run-blocks { display: inline-flex; align-items: center; gap: 3px; }\n.dshpc-run-blocks > i { width: 5px; height: 5px; border-radius: 1px; background: currentColor; animation: dshpc-run-block 1.2s ease-in-out infinite; }\n.dshpc-run-blocks > i:nth-child(2) { animation-delay: 0.15s; }\n.dshpc-run-blocks > i:nth-child(3) { animation-delay: 0.3s; }\n@media (prefers-reduced-motion: reduce) { .dshpc-run-blocks > i { animation: none; opacity: 1; } }\n\n/* ── 加载提示(LoadingToast / LoadingBlock / showLoading)───────────────────\n 两种样式共用一个灰色面(与 notify 的 info 卡同色),暗色走 body[data-ds-dark-theme]
|
|
3
|
+
export const LOADING_CSS = "\n/* 运行中 / loading 的活动指示:三个小方块依次脉动。 */\n@keyframes dshpc-run-block { 0%, 80%, 100% { opacity: 0.25; transform: scale(0.8) } 40% { opacity: 1; transform: scale(1) } }\n.dshpc-run-blocks { display: inline-flex; align-items: center; gap: 3px; }\n.dshpc-run-blocks > i { width: 5px; height: 5px; border-radius: 1px; background: currentColor; animation: dshpc-run-block 1.2s ease-in-out infinite; }\n.dshpc-run-blocks > i:nth-child(2) { animation-delay: 0.15s; }\n.dshpc-run-blocks > i:nth-child(3) { animation-delay: 0.3s; }\n@media (prefers-reduced-motion: reduce) { .dshpc-run-blocks > i { animation: none; opacity: 1; } }\n\n/* ── 加载提示(LoadingToast / LoadingBlock / showLoading)───────────────────\n 两种样式共用一个灰色面(与 notify 的 info 卡同色),暗色走 body[data-ds-dark-theme]。\n 卡里的转圈图标不自绘:复用 Loader(size sm / md),环的画法与动画只有 controls/loader.css 一份。 */\n\n/* 样式一:横排 toast 卡(图标在左、文字在右),与 notify 的 info 卡同尺寸同色。 */\n.dshpc-loading-toast {\n display: inline-flex; align-items: center; gap: 10px;\n /* 不学 notify 固定 320 宽:这张卡也常被塞进表格 / 窄栏里,宽度随内容走。\n shortcut: 下限 250px,要更宽 / 更窄就改这一处。 */\n min-width: 250px; min-height: 48px; padding: 12px 16px; box-sizing: border-box;\n border-radius: 10px; box-shadow: 0 6px 16px rgba(0, 0, 0, .18);\n background: #f4f4f5; color: #18181b;\n font-size: var(--dshpc-font-lg); line-height: var(--dshpc-line-lg);\n}\n\n/* 样式二:方块卡(转圈在上、文字在下),内距更大。 */\n.dshpc-loading-block {\n display: inline-flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px;\n min-width: 132px; min-height: 132px; padding: 24px; box-sizing: border-box;\n border-radius: var(--dshpc-radius-md); box-shadow: 0 6px 16px rgba(0, 0, 0, .18);\n background: #f4f4f5; color: #18181b;\n font-size: var(--dshpc-font-md); line-height: var(--dshpc-line-md);\n}\nbody[data-ds-dark-theme] .dshpc-loading-toast,\nbody[data-ds-dark-theme] .dshpc-loading-block { background: #3f3f46; color: #fafafa; }\n\n/* 全局浮层:居中、不挡点击(遮罩层单独一个 div 才挡)。\n 与 Modal 遮罩同一套让位口径:右边界读 --dshpc-page-inset-right。 */\n.dshpc-loading-overlay {\n position: fixed; inset: 0 var(--dshpc-page-inset-right, 0px) 0 0; z-index: var(--dshpc-z-modal);\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px;\n padding: 24px; box-sizing: border-box; pointer-events: none;\n}\n/* 七向定位(与 Toast 的六向同名 + 正中):默认 bottom-center,与 Sonner 提示同屏位。 */\n.dshpc-loading-overlay--top-left { align-items: flex-start; justify-content: flex-start; }\n.dshpc-loading-overlay--top-center { justify-content: flex-start; }\n.dshpc-loading-overlay--top-right { align-items: flex-end; justify-content: flex-start; }\n.dshpc-loading-overlay--bottom-left { align-items: flex-start; justify-content: flex-end; }\n.dshpc-loading-overlay--bottom-center { justify-content: flex-end; }\n.dshpc-loading-overlay--bottom-right { align-items: flex-end; justify-content: flex-end; }\n.dshpc-loading-overlay__mask { position: absolute; inset: 0; pointer-events: auto; }\n";
|
|
4
4
|
//# sourceMappingURL=loading-css.generated.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loading-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/loading-css.generated.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"loading-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/loading-css.generated.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,+4FAA+4F,CAAA"}
|
|
@@ -2,6 +2,8 @@ export { SEGMENTED_CSS } from './controls/segmented-css.generated.js';
|
|
|
2
2
|
export { BUTTON_CSS } from './controls/button-css.generated.js';
|
|
3
3
|
export { FIELD_CSS } from './controls/field-css.generated.js';
|
|
4
4
|
export { LOADING_CSS } from './controls/loading-css.generated.js';
|
|
5
|
+
export { LOADER_CSS } from './controls/loader-css.generated.js';
|
|
6
|
+
export { LOADER_BAR_CSS } from './controls/loader-bar-css.generated.js';
|
|
5
7
|
export { BACK_TO_TOP_CSS } from './controls/back-to-top-css.generated.js';
|
|
6
8
|
export { HINT_CSS } from './controls/hint-css.generated.js';
|
|
7
9
|
export { DATETIME_CSS } from './controls/datetime-css.generated.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controls-css.d.ts","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA"}
|
|
1
|
+
{"version":3,"file":"controls-css.d.ts","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA"}
|
package/dist/ui/controls-css.js
CHANGED
|
@@ -9,6 +9,8 @@ export { SEGMENTED_CSS } from './controls/segmented-css.generated.js';
|
|
|
9
9
|
export { BUTTON_CSS } from './controls/button-css.generated.js';
|
|
10
10
|
export { FIELD_CSS } from './controls/field-css.generated.js';
|
|
11
11
|
export { LOADING_CSS } from './controls/loading-css.generated.js';
|
|
12
|
+
export { LOADER_CSS } from './controls/loader-css.generated.js';
|
|
13
|
+
export { LOADER_BAR_CSS } from './controls/loader-bar-css.generated.js';
|
|
12
14
|
export { BACK_TO_TOP_CSS } from './controls/back-to-top-css.generated.js';
|
|
13
15
|
export { HINT_CSS } from './controls/hint-css.generated.js';
|
|
14
16
|
export { DATETIME_CSS } from './controls/datetime-css.generated.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controls-css.js","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,mCAAmC;AACnC,8DAA8D;AAC9D,kEAAkE;AAClE,gDAAgD;AAChD,kDAAkD;AAClD,4DAA4D;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA"}
|
|
1
|
+
{"version":3,"file":"controls-css.js","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,mCAAmC;AACnC,8DAA8D;AAC9D,kEAAkE;AAClE,gDAAgD;AAChD,kDAAkD;AAClD,4DAA4D;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA"}
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export { SplitGroup, type SplitGroupProps } from './SplitGroup.js';
|
|
|
19
19
|
export { Textarea, type TextareaProps } from './Textarea.js';
|
|
20
20
|
export { Checkbox, type CheckboxProps } from './Checkbox.js';
|
|
21
21
|
export { MarqueeText } from './MarqueeText.js';
|
|
22
|
+
export { Loader, type LoaderProps, type LoaderSize, type LoaderVariant } from './Loader.js';
|
|
23
|
+
export { LoaderBar, type LoaderBarProps } from './LoaderBar.js';
|
|
22
24
|
export { Loading, LoadingBlock, LoadingToast, RunningBlocks, showLoading, type LoadingOptions, type LoadingProps, type LoadingViewProps, } from './Loading.js';
|
|
23
25
|
export { claimLoadingHost, createLoadingSlot, loadingOverlayClass, LOADING_HOST_KEY, type LoadingHandle, type LoadingPosition, type LoadingSlotState, type LoadingVariant, } from './loading-host.js';
|
|
24
26
|
export { SectionHead } from './SectionHead.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":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACpF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,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,EACL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,eAAe,EACf,eAAe,EACf,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,UAAU,EACV,aAAa,EACb,OAAO,EACP,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,SAAS,GACf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AACjF,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,UAAU,GAChB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAA;AACxB,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,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC9E,OAAO,EACL,SAAS,EACT,MAAM,EACN,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAA;AAEnB,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,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnF,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,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,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3F,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EACL,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAA;AACrB,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,SAAS,EACT,SAAS,EACT,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,WAAW,EACX,MAAM,EACN,SAAS,EACT,WAAW,EACX,aAAa,EACb,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,uBAAuB,CAAA;AAC9B,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
|
@@ -23,6 +23,8 @@ export { SplitGroup } from './SplitGroup.js';
|
|
|
23
23
|
export { Textarea } from './Textarea.js';
|
|
24
24
|
export { Checkbox } from './Checkbox.js';
|
|
25
25
|
export { MarqueeText } from './MarqueeText.js';
|
|
26
|
+
export { Loader } from './Loader.js';
|
|
27
|
+
export { LoaderBar } from './LoaderBar.js';
|
|
26
28
|
export { Loading, LoadingBlock, LoadingToast, RunningBlocks, showLoading, } from './Loading.js';
|
|
27
29
|
export { claimLoadingHost, createLoadingSlot, loadingOverlayClass, LOADING_HOST_KEY, } from './loading-host.js';
|
|
28
30
|
export { SectionHead } from './SectionHead.js';
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-bar-art.d.ts","sourceRoot":"","sources":["../../src/ui/loader-bar-art.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAA;IACT,IAAI,EAAE,MAAM,CAAA;CACb;AAED,eAAO,MAAM,SAAS,EAAE,SAAS,QAAQ,EAIxC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export const BAR_PATHS = [
|
|
2
|
+
{ d: "M0 384m128 0l768 0q128 0 128 128l0 0q0 128-128 128l-768 0q-128 0-128-128l0 0q0-128 128-128Z", fill: "#455A64" },
|
|
3
|
+
{ d: "M128 426.666667h554.666667v170.666666H128a85.333333 85.333333 0 0 1-85.333333-85.333333 85.333333 85.333333 0 0 1 85.333333-85.333333z", fill: "#2196F3" },
|
|
4
|
+
{ d: "M256 426.666667l-42.666667 170.666666h42.666667l42.666667-170.666666h-42.666667zM170.666667 426.666667l-42.666667 170.666666h42.666667l42.666666-170.666666H170.666667zM53.76 553.173333a83.84 83.84 0 0 0 34.133333 33.706667L128 426.666667a85.333333 85.333333 0 0 0-46.08 13.653333zM341.333333 426.666667l-42.666666 170.666666h42.666666l42.666667-170.666666h-42.666667zM640 597.333333h42.666667v-170.666666l-42.666667 170.666666zM426.666667 426.666667l-42.666667 170.666666h42.666667l42.666666-170.666666h-42.666666zM597.333333 426.666667l-42.666666 170.666666h42.666666l42.666667-170.666666h-42.666667zM512 426.666667l-42.666667 170.666666h42.666667l42.666667-170.666666h-42.666667z", fill: "#42A5F5" },
|
|
5
|
+
];
|
|
6
|
+
//# sourceMappingURL=loader-bar-art.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-bar-art.js","sourceRoot":"","sources":["../../src/ui/loader-bar-art.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,SAAS,GAAwB;IAC5C,EAAE,CAAC,EAAE,6FAA6F,EAAE,IAAI,EAAE,SAAS,EAAE;IACrH,EAAE,CAAC,EAAE,wIAAwI,EAAE,IAAI,EAAE,SAAS,EAAE;IAChK,EAAE,CAAC,EAAE,2qBAA2qB,EAAE,IAAI,EAAE,SAAS,EAAE;CACpsB,CAAA"}
|
package/docs/design/structure.md
CHANGED
|
@@ -41,8 +41,10 @@ dsh-plugin-core/
|
|
|
41
41
|
│ │ Checkbox / Segmented / Picker(下拉选择)/
|
|
42
42
|
│ │ DateTimePicker(日期时间:单值 / 时间段 × 精度到秒)
|
|
43
43
|
│ ├── 动作 ✅ Button / IconButton
|
|
44
|
-
│ ├── 反馈 ✅ Modal / Toast
|
|
45
|
-
│ │
|
|
44
|
+
│ ├── 反馈 ✅ Modal / Toast / Loader 家族(2026-10-30):
|
|
45
|
+
│ │ │ Loader(ring / blocks × 五档尺寸)、LoaderBar(胶囊不定进度);
|
|
46
|
+
│ │ │ 两者都只画图形,无背景无定位,背景与位置归调用方
|
|
47
|
+
│ │ └── Loading ✅ 旧复合浮层(贴右下角的 pill + 两种加载卡),保留、已标 deprecated
|
|
46
48
|
│ ├── 展示 ✅ Card / StripCard / Chip / MarqueeText /
|
|
47
49
|
│ │ SectionHead / FieldHint / LiveText / BackToTop
|
|
48
50
|
│ ├── 选择 ✅ WorkspacePicker(选工作区,自取宿主快照)
|
package/docs/help/ui.doc.ts
CHANGED
|
@@ -76,7 +76,7 @@ const doc: DocTopic = {
|
|
|
76
76
|
'Button', 'IconButton', 'Segmented', 'SplitGroup', 'Input', 'PrefixedInput', 'NumberInput', 'Textarea',
|
|
77
77
|
'Checkbox', 'fieldMetricsOf', 'Picker', 'WorkspacePicker', 'ModelPicker', 'DateTimePicker', 'Card', 'StripCard',
|
|
78
78
|
'Chip', 'Modal', 'FieldHint', 'setTooltipRenderer', 'showToast', 'notify', 'showHostToast',
|
|
79
|
-
'Loading', 'RunningBlocks', 'SectionHead', 'MarqueeText', 'LiveText',
|
|
79
|
+
'Loader', 'LoaderBar', 'Loading', 'RunningBlocks', 'SectionHead', 'MarqueeText', 'LiveText',
|
|
80
80
|
'BackToTop', 'startResizeLayoutWidth', 'PanelDock', 'createPanelDock', 'DockPanel',
|
|
81
81
|
'ensureControls', 'setStyleKit',
|
|
82
82
|
],
|
|
@@ -370,6 +370,14 @@ const doc: DocTopic = {
|
|
|
370
370
|
zh: '三条取舍(照用别改):① 样式取首个副本;② position 全局共享;③ 不做卸载回收。无 document 的环境静默跳过。',
|
|
371
371
|
en: 'Three trade-offs (accept them): ① styling comes from the first copy; ② position is shared per screen; ③ no unload reclamation. Environments without document skip silently.',
|
|
372
372
|
},
|
|
373
|
+
{
|
|
374
|
+
zh: '`Loader` 是通用加载**图标**:只画图标,不带背景、不带内距、不带定位 —— 胶囊 / 圆角面这类背景、按钮内 / 标签内 / 漂浮这类位置,全归调用方自己包。两轴正交:`variant`(`ring` 默认开口弧旋转 / `blocks` 三块脉动)× `size`(`xs` 12 / `sm` 16 / `md` 24 / `lg` 32 / `xl` 48),几何画在 24×24 viewBox 里随尺寸等比缩放,描边与方块的视觉重量各档一致。颜色走 `currentColor`,跟着所在文字自动变色。默认 `aria-hidden`(纯装饰,语义由旁边文字或外层 `role="status"` 承担);要它自己播报就传 `label`。新形态加在库里(枚举 + 一段 CSS),不要在插件里另造一套转圈。',
|
|
375
|
+
en: '`Loader` is the generic loading **icon**: it draws the icon and nothing else — no background, no padding, no positioning. Pills / rounded surfaces belong to you, and so does placement (inside a button, inside a tag, floating). Two orthogonal axes: `variant` (`ring` default — a rotating open arc / `blocks` — three pulsing squares) × `size` (`xs` 12 / `sm` 16 / `md` 24 / `lg` 32 / `xl` 48). The geometry lives in a 24×24 viewBox and scales proportionally, so stroke and square weights match across tiers. Colour is `currentColor`, inheriting the surrounding text. It is `aria-hidden` by default (pure decoration — semantics come from nearby text or an outer `role="status"`); pass `label` to have it announce itself. New variants go into the library (one enum value plus one CSS block), never a second spinner built in a plugin.',
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
zh: '同族还有一个**具象** loading,边界与 `Loader` 一样(只画图形,背景与定位归调用方):`LoaderBar` 是胶囊不定进度 —— 蓝色半截固定不动、只有它上面的细斜纹单向流动(0.55 秒走一个条纹周期),不表示任何百分比;尺寸档按**高度**给、宽固定 4:1。要停住(截图 / 打印)传 `animated={false}`。',
|
|
379
|
+
en: 'One **concrete** loader in the same family, with the same boundary as `Loader` (graphics only — background and placement belong to the caller): `LoaderBar` is a capsule indeterminate bar — the blue half stays put while the thin stripes on it flow in one direction (one stripe period every 0.55s), encoding no percentage; sizes set the **height**, width is a fixed 4:1. Pass `animated={false}` to freeze it (screenshots / print).',
|
|
380
|
+
},
|
|
373
381
|
{
|
|
374
382
|
zh: '加载提示两种样式:`LoadingToast` 横排卡(转圈在左、文字在右,灰底与 notify 的 info 卡同色)、`LoadingBlock` 方块卡(转圈在上、文字在下,内距更大)。默认文案走内置字典「数据加载中」/「Loading」,传 `text` 覆盖。',
|
|
375
383
|
en: 'Two loading styles: `LoadingToast` — a horizontal card (spinner left, text right, same grey as the notify info card) — and `LoadingBlock` — a square card (spinner above text, roomier padding). The default copy comes from the built-in dictionary (“数据加载中” / “Loading”); pass `text` to override.',
|
|
@@ -395,6 +403,8 @@ const doc: DocTopic = {
|
|
|
395
403
|
{ name: 'notify(message, opts?)', type: '', def: '', desc: { zh: '默认用这个。opts: `{ variant?, description?, durationMs?, position?, actions? }`,actions 用自带 Button(1–2 个)', en: 'Use this by default. opts `{ variant?, description?, durationMs?, position?, actions? }`, actions use our own Button (1–2)' } },
|
|
396
404
|
{ name: 'showHostToast(message, opts?)', type: '', def: '', desc: { zh: '宿主原生 Toast,走 `dsh-plugin-core/ui/host` 子路径。opts: `{ tone?, holdMs?, actions?, onDismiss? }`', en: 'Host-native Toast from the `dsh-plugin-core/ui/host` subpath. opts `{ tone?, holdMs?, actions?, onDismiss? }`' } },
|
|
397
405
|
{ name: 'showLoading(opts?)', type: '', def: '', desc: { zh: '全局加载提示(全局唯一一处),返回 `{ close() }`。opts: `{ text?, variant?: \'toast\' | \'block\', position?, mask?, maskOpacity?, translate? }`;position 默认 bottom-center', en: 'Global loading hint (one spot globally) returning `{ close() }`. opts `{ text?, variant?: \'toast\' | \'block\', position?, mask?, maskOpacity?, translate? }`; position defaults to bottom-center' } },
|
|
406
|
+
{ name: 'Loader({ variant?, size?, label?, className? })', type: '', def: '', desc: { zh: '通用加载图标:variant 两形态 × size 五档;无背景无定位,颜色走 currentColor', en: 'Generic loading icon: two variants × five sizes; no background or positioning, colour via currentColor' } },
|
|
407
|
+
{ name: 'LoaderBar({ size?, animated?, label?, className? })', type: '', def: '', desc: { zh: '胶囊不定进度:蓝色段固定、斜纹单向流动;尺寸按高度给,宽固定 4:1', en: 'Capsule indeterminate bar: the blue segment stays put while its stripes flow; sizes set height, width is a fixed 4:1' } },
|
|
398
408
|
{ name: 'LoadingToast({ text? })', type: '', def: '', desc: { zh: '就地渲染的横排加载卡(转圈在左)', en: 'In-place horizontal loading card (spinner left)' } },
|
|
399
409
|
{ name: 'LoadingBlock({ text? })', type: '', def: '', desc: { zh: '就地渲染的方块加载卡(转圈在上、文字在下)', en: 'In-place square loading card (spinner above text)' } },
|
|
400
410
|
{ name: 'Loading({ anchorId? })', type: '', def: '', desc: { zh: '贴到主内容容器右下角的加载指示;anchorId 默认 dshpc-main', en: 'Loading indicator pinned to the main container’s bottom-right; anchorId defaults to dshpc-main' } },
|
package/docs/help/ui.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
> EN: ui — base controls
|
|
6
6
|
|
|
7
|
-
导出:Button、IconButton、Segmented、SplitGroup、Input、PrefixedInput、NumberInput、Textarea、Checkbox、fieldMetricsOf、Picker、WorkspacePicker、ModelPicker、DateTimePicker、Card、StripCard、Chip、Modal、FieldHint、setTooltipRenderer、showToast、notify、showHostToast、Loading、RunningBlocks、SectionHead、MarqueeText、LiveText、BackToTop、startResizeLayoutWidth、PanelDock、createPanelDock、DockPanel、ensureControls、setStyleKit
|
|
7
|
+
导出:Button、IconButton、Segmented、SplitGroup、Input、PrefixedInput、NumberInput、Textarea、Checkbox、fieldMetricsOf、Picker、WorkspacePicker、ModelPicker、DateTimePicker、Card、StripCard、Chip、Modal、FieldHint、setTooltipRenderer、showToast、notify、showHostToast、Loader、LoaderBar、Loading、RunningBlocks、SectionHead、MarqueeText、LiveText、BackToTop、startResizeLayoutWidth、PanelDock、createPanelDock、DockPanel、ensureControls、setStyleKit
|
|
8
8
|
|
|
9
9
|
## 概览
|
|
10
10
|
|
|
@@ -308,6 +308,14 @@ h(StripCard, {
|
|
|
308
308
|
|
|
309
309
|
> EN: Three trade-offs (accept them): ① styling comes from the first copy; ② position is shared per screen; ③ no unload reclamation. Environments without document skip silently.
|
|
310
310
|
|
|
311
|
+
`Loader` 是通用加载**图标**:只画图标,不带背景、不带内距、不带定位 —— 胶囊 / 圆角面这类背景、按钮内 / 标签内 / 漂浮这类位置,全归调用方自己包。两轴正交:`variant`(`ring` 默认开口弧旋转 / `blocks` 三块脉动)× `size`(`xs` 12 / `sm` 16 / `md` 24 / `lg` 32 / `xl` 48),几何画在 24×24 viewBox 里随尺寸等比缩放,描边与方块的视觉重量各档一致。颜色走 `currentColor`,跟着所在文字自动变色。默认 `aria-hidden`(纯装饰,语义由旁边文字或外层 `role="status"` 承担);要它自己播报就传 `label`。新形态加在库里(枚举 + 一段 CSS),不要在插件里另造一套转圈。
|
|
312
|
+
|
|
313
|
+
> EN: `Loader` is the generic loading **icon**: it draws the icon and nothing else — no background, no padding, no positioning. Pills / rounded surfaces belong to you, and so does placement (inside a button, inside a tag, floating). Two orthogonal axes: `variant` (`ring` default — a rotating open arc / `blocks` — three pulsing squares) × `size` (`xs` 12 / `sm` 16 / `md` 24 / `lg` 32 / `xl` 48). The geometry lives in a 24×24 viewBox and scales proportionally, so stroke and square weights match across tiers. Colour is `currentColor`, inheriting the surrounding text. It is `aria-hidden` by default (pure decoration — semantics come from nearby text or an outer `role="status"`); pass `label` to have it announce itself. New variants go into the library (one enum value plus one CSS block), never a second spinner built in a plugin.
|
|
314
|
+
|
|
315
|
+
同族还有一个**具象** loading,边界与 `Loader` 一样(只画图形,背景与定位归调用方):`LoaderBar` 是胶囊不定进度 —— 蓝色半截固定不动、只有它上面的细斜纹单向流动(0.55 秒走一个条纹周期),不表示任何百分比;尺寸档按**高度**给、宽固定 4:1。要停住(截图 / 打印)传 `animated={false}`。
|
|
316
|
+
|
|
317
|
+
> EN: One **concrete** loader in the same family, with the same boundary as `Loader` (graphics only — background and placement belong to the caller): `LoaderBar` is a capsule indeterminate bar — the blue half stays put while the thin stripes on it flow in one direction (one stripe period every 0.55s), encoding no percentage; sizes set the **height**, width is a fixed 4:1. Pass `animated={false}` to freeze it (screenshots / print).
|
|
318
|
+
|
|
311
319
|
加载提示两种样式:`LoadingToast` 横排卡(转圈在左、文字在右,灰底与 notify 的 info 卡同色)、`LoadingBlock` 方块卡(转圈在上、文字在下,内距更大)。默认文案走内置字典「数据加载中」/「Loading」,传 `text` 覆盖。
|
|
312
320
|
|
|
313
321
|
> EN: Two loading styles: `LoadingToast` — a horizontal card (spinner left, text right, same grey as the notify info card) — and `LoadingBlock` — a square card (spinner above text, roomier padding). The default copy comes from the built-in dictionary (“数据加载中” / “Loading”); pass `text` to override.
|
|
@@ -330,6 +338,8 @@ Modal 是自绘 overlay,不走 react-dom portal。
|
|
|
330
338
|
| `notify(message, opts?)` | `` | | 默认用这个。opts: `{ variant?, description?, durationMs?, position?, actions? }`,actions 用自带 Button(1–2 个) | Use this by default. opts `{ variant?, description?, durationMs?, position?, actions? }`, actions use our own Button (1–2) |
|
|
331
339
|
| `showHostToast(message, opts?)` | `` | | 宿主原生 Toast,走 `dsh-plugin-core/ui/host` 子路径。opts: `{ tone?, holdMs?, actions?, onDismiss? }` | Host-native Toast from the `dsh-plugin-core/ui/host` subpath. opts `{ tone?, holdMs?, actions?, onDismiss? }` |
|
|
332
340
|
| `showLoading(opts?)` | `` | | 全局加载提示(全局唯一一处),返回 `{ close() }`。opts: `{ text?, variant?: 'toast' \| 'block', position?, mask?, maskOpacity?, translate? }`;position 默认 bottom-center | Global loading hint (one spot globally) returning `{ close() }`. opts `{ text?, variant?: 'toast' \| 'block', position?, mask?, maskOpacity?, translate? }`; position defaults to bottom-center |
|
|
341
|
+
| `Loader({ variant?, size?, label?, className? })` | `` | | 通用加载图标:variant 两形态 × size 五档;无背景无定位,颜色走 currentColor | Generic loading icon: two variants × five sizes; no background or positioning, colour via currentColor |
|
|
342
|
+
| `LoaderBar({ size?, animated?, label?, className? })` | `` | | 胶囊不定进度:蓝色段固定、斜纹单向流动;尺寸按高度给,宽固定 4:1 | Capsule indeterminate bar: the blue segment stays put while its stripes flow; sizes set height, width is a fixed 4:1 |
|
|
333
343
|
| `LoadingToast({ text? })` | `` | | 就地渲染的横排加载卡(转圈在左) | In-place horizontal loading card (spinner left) |
|
|
334
344
|
| `LoadingBlock({ text? })` | `` | | 就地渲染的方块加载卡(转圈在上、文字在下) | In-place square loading card (spinner above text) |
|
|
335
345
|
| `Loading({ anchorId? })` | `` | | 贴到主内容容器右下角的加载指示;anchorId 默认 dshpc-main | Loading indicator pinned to the main container’s bottom-right; anchorId defaults to dshpc-main |
|
package/docs/requirements.md
CHANGED
|
@@ -52,7 +52,19 @@ dsh-plugin-core/
|
|
|
52
52
|
- 日期时间:`DateTimePicker`(2026-10-24 新增:单值 / 时间段 × 精度 day/hour/minute/second;
|
|
53
53
|
数据恒完整本地 ISO 到毫秒、**显示只到精度**;起始端 floor、结束端 ceil)
|
|
54
54
|
- 「统一某类元素」的控件:`SectionHead` 等
|
|
55
|
-
- 反馈件:`Modal` / `Loading` / `toast` / 空态
|
|
55
|
+
- 反馈件:`Modal` / `Loader` 家族 / `Loading` / `toast` / 空态
|
|
56
|
+
- Loader 家族按「一个前缀 + 具象名」命名(2026-10-30 用户定):`Loader`(通用图标)/
|
|
57
|
+
`LoaderBar`(胶囊不定进度)。两者的边界完全一致 —— **只画图形,不带背景、内距、定位**,
|
|
58
|
+
背景与位置归调用方;尺寸轴共用 `LoaderSize`。
|
|
59
|
+
- `LoaderWhale`(品牌鲸鱼)同日实现后又按用户要求**删除**(2026-10-30:动效与形态都不合适):
|
|
60
|
+
删掉的是源码、CSS、转录的路径数据与源素材 `鲸鱼.svg`,不要把鲸鱼图形再搬回来。
|
|
61
|
+
- `Loader`(2026-10-30 拍板新增):**通用加载图标**,只画图标 —— 无背景、无内距、无定位,
|
|
62
|
+
背景(胶囊 / 圆角面)与位置(按钮内 / 标签内 / 漂浮)归调用方。两轴正交:`variant`
|
|
63
|
+
(`ring` / `blocks`)× `size`(`xs` 12 / `sm` 16 / `md` 24 / `lg` 32 / `xl` 48),
|
|
64
|
+
几何画在 24×24 viewBox 内等比缩放;颜色走 `currentColor`;默认 `aria-hidden`,传 `label` 才播报。
|
|
65
|
+
新形态加在库里(枚举 + 一段 CSS),不在插件里另造转圈。Button 的 loading 与 `LoadingToast` /
|
|
66
|
+
`LoadingBlock` 的转圈改为复用它(环的画法与 keyframes 只剩 `controls/loader.css` 一份)。
|
|
67
|
+
- `Loading` 是旧的「自带定位 + 自带 pill 背景」复合件,**保留不删**但标 `@deprecated`,新代码用 `Loader`。
|
|
56
68
|
- 布局基础:`PanelDock` / `DockPanel` / `createPanelDock`(**可停靠分栏容器**:多面板并存、按组名寻址、拖拽拉栏、宽度记忆;2026-10-20 拍板用此名,替代早先的 `SidebarLayout` / `SplitPane`)。只做右侧;组名与窗口一对一;默认上限 3,超限拒绝新开;不做 tab 切换 / 自动淘汰 / 多份同名;**面板本身始终是布局成员,不做面板浮层**(2026-10-28 补:**收起** = 面板退出布局、另出右侧一只独立的 `position: fixed` 耳朵,点耳朵展开并还原宽度;关闭不留耳朵——耳朵是独立浮层,不是把面板变浮层)。**结构照成熟库口径写 children,`open/close` 只传 id,不把页面树塞进调用参数**
|
|
57
69
|
- **通用控件是纯零件,数据由调用方传入**;**领域选择器例外**(2026-10-20 用户拍板反转):
|
|
58
70
|
`ModelPicker` / `WorkspacePicker` 是「现成的包」,接线后**自己取数自己显示**,消费方不再拿数组传 props。
|
package/package.json
CHANGED