dsh-plugin-core 0.25.0 → 0.26.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.
Files changed (44) hide show
  1. package/dist/ui/AlertModal.d.ts +2 -0
  2. package/dist/ui/AlertModal.d.ts.map +1 -1
  3. package/dist/ui/AlertModal.js +1 -0
  4. package/dist/ui/AlertModal.js.map +1 -1
  5. package/dist/ui/ConfirmModal.d.ts +2 -0
  6. package/dist/ui/ConfirmModal.d.ts.map +1 -1
  7. package/dist/ui/ConfirmModal.js +1 -0
  8. package/dist/ui/ConfirmModal.js.map +1 -1
  9. package/dist/ui/FlipText.d.ts +38 -0
  10. package/dist/ui/FlipText.d.ts.map +1 -0
  11. package/dist/ui/FlipText.js +58 -0
  12. package/dist/ui/FlipText.js.map +1 -0
  13. package/dist/ui/Modal.d.ts +6 -0
  14. package/dist/ui/Modal.d.ts.map +1 -1
  15. package/dist/ui/Modal.js +5 -2
  16. package/dist/ui/Modal.js.map +1 -1
  17. package/dist/ui/SideSheet.d.ts +2 -0
  18. package/dist/ui/SideSheet.d.ts.map +1 -1
  19. package/dist/ui/SideSheet.js +6 -1
  20. package/dist/ui/SideSheet.js.map +1 -1
  21. package/dist/ui/feedback-css.generated.d.ts +1 -1
  22. package/dist/ui/feedback-css.generated.d.ts.map +1 -1
  23. package/dist/ui/feedback-css.generated.js +1 -1
  24. package/dist/ui/feedback-css.generated.js.map +1 -1
  25. package/dist/ui/flip-css.d.ts +2 -0
  26. package/dist/ui/flip-css.d.ts.map +1 -0
  27. package/dist/ui/flip-css.generated.d.ts +2 -0
  28. package/dist/ui/flip-css.generated.d.ts.map +1 -0
  29. package/dist/ui/flip-css.generated.js +4 -0
  30. package/dist/ui/flip-css.generated.js.map +1 -0
  31. package/dist/ui/flip-css.js +4 -0
  32. package/dist/ui/flip-css.js.map +1 -0
  33. package/dist/ui/index.d.ts +1 -0
  34. package/dist/ui/index.d.ts.map +1 -1
  35. package/dist/ui/index.js +1 -0
  36. package/dist/ui/index.js.map +1 -1
  37. package/dist/ui/side-sheet-css.generated.d.ts +1 -1
  38. package/dist/ui/side-sheet-css.generated.d.ts.map +1 -1
  39. package/dist/ui/side-sheet-css.generated.js +1 -1
  40. package/dist/ui/side-sheet-css.generated.js.map +1 -1
  41. package/docs/help/ui.doc.ts +48 -1
  42. package/docs/help/ui.md +43 -1
  43. package/docs/requirements.md +10 -1
  44. package/package.json +1 -1
@@ -23,6 +23,8 @@ export interface AlertModalProps {
23
23
  closeOnMask?: boolean;
24
24
  /** 外部驱动确认钮 loading(如别处正在刷新)。与按钮自己的异步状态取或。 */
25
25
  confirmLoading?: boolean;
26
+ /** 底栏左侧的一行过程提示(换字即翻牌,超长省略 + hover 跑马灯)。不传 = 不占位。 */
27
+ notice?: string;
26
28
  /** 尺寸档(默认 sm 确认框宽度)。 */
27
29
  size?: ModalSize;
28
30
  /** 点击确认 / 遮罩 / Esc 的统一出口(单按钮弹窗,关闭即确认);**返回 Promise 自动转圈 + 整框锁死**。 */
@@ -1 +1 @@
1
- {"version":3,"file":"AlertModal.d.ts","sourceRoot":"","sources":["../../src/ui/AlertModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAElD,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAIpD,2CAA2C;AAC3C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;AASpE,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,mBAAmB;IACnB,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,wBAAwB;IACxB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,OAAO,CAAA;IACzB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CA6BvE"}
1
+ {"version":3,"file":"AlertModal.d.ts","sourceRoot":"","sources":["../../src/ui/AlertModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAElD,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAIpD,2CAA2C;AAC3C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;AASpE,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,mBAAmB;IACnB,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wBAAwB;IACxB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,OAAO,CAAA;IACzB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CA8BvE"}
@@ -30,6 +30,7 @@ export function AlertModal(props) {
30
30
  closeOnMask: props.closeOnMask,
31
31
  busy,
32
32
  onClose: props.onConfirm,
33
+ notice: props.notice,
33
34
  footer: h(Button, {
34
35
  variant: 'primary',
35
36
  width: props.confirmWidth,
@@ -1 +1 @@
1
- {"version":3,"file":"AlertModal.js","sourceRoot":"","sources":["../../src/ui/AlertModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AACpE,OAAO,EAAE,KAAK,EAAkB,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,CAAC,EAAkB,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAKhD,MAAM,cAAc,GAAkC;IACpD,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;CACX,CAAA;AA6BD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,qBAAqB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAA;IACzC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,gCAAgC;IAChC,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,CAAA;IACrD,OAAO,CAAC,CACN,KAAK,EACL;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,oCAAoC,QAAQ,EAAE,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QACxG,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;QACxB,UAAU,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS;QACrC,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,IAAI;QACJ,OAAO,EAAE,KAAK,CAAC,SAAS;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,KAAK,CAAC,YAAY;YACzB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI;YACtC,YAAY,EAAE,UAAU;YACxB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE;SACnC,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC;KACxC,EACD,KAAK,CAAC,OAAO,IAAI,IAAI,CACtB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"AlertModal.js","sourceRoot":"","sources":["../../src/ui/AlertModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AACpE,OAAO,EAAE,KAAK,EAAkB,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,CAAC,EAAkB,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAKhD,MAAM,cAAc,GAAkC;IACpD,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;CACX,CAAA;AA+BD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,qBAAqB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAA;IACzC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,gCAAgC;IAChC,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,CAAA;IACrD,OAAO,CAAC,CACN,KAAK,EACL;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,oCAAoC,QAAQ,EAAE,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QACxG,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;QACxB,UAAU,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS;QACrC,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,IAAI;QACJ,OAAO,EAAE,KAAK,CAAC,SAAS;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,KAAK,CAAC,YAAY;YACzB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI;YACtC,YAAY,EAAE,UAAU;YACxB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE;SACnC,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC;KACxC,EACD,KAAK,CAAC,OAAO,IAAI,IAAI,CACtB,CAAA;AACH,CAAC"}
@@ -28,6 +28,8 @@ export interface ConfirmModalProps {
28
28
  confirmLoading?: boolean;
29
29
  /** 外部驱动取消钮 loading:同上。 */
30
30
  cancelLoading?: boolean;
31
+ /** 底栏左侧的一行过程提示(换字即翻牌,超长省略 + hover 跑马灯)。不传 = 不占位。 */
32
+ notice?: string;
31
33
  size?: ModalSize;
32
34
  /** 确认回调;**返回 Promise 自动转圈 + 整框锁死**,settle 后恢复(关闭与否由你决定)。 */
33
35
  onConfirm?: () => unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmModal.d.ts","sourceRoot":"","sources":["../../src/ui/ConfirmModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAElD,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEpD,uBAAuB;AACvB,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE1D,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,mBAAmB;IACnB,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gCAAgC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,OAAO,CAAA;IACzB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAA;IACxB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAyC3E"}
1
+ {"version":3,"file":"ConfirmModal.d.ts","sourceRoot":"","sources":["../../src/ui/ConfirmModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAElD,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEpD,uBAAuB;AACvB,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE1D,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,mBAAmB;IACnB,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gCAAgC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,OAAO,CAAA;IACzB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAA;IACxB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CA0C3E"}
@@ -25,6 +25,7 @@ export function ConfirmModal(props) {
25
25
  closeOnMask: props.closeOnMask,
26
26
  busy,
27
27
  onClose: props.onCancel,
28
+ notice: props.notice,
28
29
  footer: h('div', { style: { display: 'flex', gap: '8px', justifyContent: 'flex-end' } }, h(Button, {
29
30
  variant: 'outline',
30
31
  width: props.cancelWidth,
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmModal.js","sourceRoot":"","sources":["../../src/ui/ConfirmModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AACpE,OAAO,EAAE,KAAK,EAAkB,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,CAAC,EAAkB,MAAM,kBAAkB,CAAA;AAsCpD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,SAAS,CAAA;IACpC,MAAM,cAAc,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;IAChG,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACnD,2BAA2B;IAC3B,MAAM,IAAI,GAAG,WAAW,IAAI,UAAU,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,CAAA;IACvG,OAAO,CAAC,CACN,KAAK,EACL;QACE,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;QACxB,UAAU,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS;QACrC,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,IAAI;QACJ,OAAO,EAAE,KAAK,CAAC,QAAQ;QACvB,MAAM,EAAE,CAAC,CACP,KAAK,EACL,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EACtE,CAAC,CAAC,MAAM,EAAE;YACR,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,KAAK,CAAC,WAAW;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI;YACrC,YAAY,EAAE,aAAa;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;SAClC,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,EACpC,CAAC,CAAC,MAAM,EAAE;YACR,OAAO,EAAE,cAAc;YACvB,KAAK,EAAE,KAAK,CAAC,YAAY;YACzB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI;YACtC,YAAY,EAAE,cAAc;YAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE;SACnC,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CACvC;KACF,EACD,KAAK,CAAC,OAAO,IAAI,IAAI,CACtB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"ConfirmModal.js","sourceRoot":"","sources":["../../src/ui/ConfirmModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AACpE,OAAO,EAAE,KAAK,EAAkB,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,CAAC,EAAkB,MAAM,kBAAkB,CAAA;AAwCpD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,SAAS,CAAA;IACpC,MAAM,cAAc,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;IAChG,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACnD,2BAA2B;IAC3B,MAAM,IAAI,GAAG,WAAW,IAAI,UAAU,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,CAAA;IACvG,OAAO,CAAC,CACN,KAAK,EACL;QACE,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;QACxB,UAAU,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS;QACrC,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,IAAI;QACJ,OAAO,EAAE,KAAK,CAAC,QAAQ;QACvB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,CAAC,CACP,KAAK,EACL,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EACtE,CAAC,CAAC,MAAM,EAAE;YACR,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,KAAK,CAAC,WAAW;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI;YACrC,YAAY,EAAE,aAAa;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;SAClC,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,EACpC,CAAC,CAAC,MAAM,EAAE;YACR,OAAO,EAAE,cAAc;YACvB,KAAK,EAAE,KAAK,CAAC,YAAY;YACzB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI;YACtC,YAAY,EAAE,cAAc;YAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE;SACnC,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CACvC;KACF,EACD,KAAK,CAAC,OAAO,IAAI,IAAI,CACtB,CAAA;AACH,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * 翻牌文本 —— 一行文字,换字时旧的上移出、新的从下进(机场翻牌那种)。
3
+ *
4
+ * 与 `MarqueeText` 的分工:跑马灯(三点省略 + hover 滚)由它负责,本组件只管「换字动效 + 裁剪」,
5
+ * 所以两层叠放的每一层就是一个 `MarqueeText`,不重复实现测宽。
6
+ *
7
+ * 宽度三档与 `Button` / `Chip` 同一口径:`width` 优先,`width` 未设时 `minWidth` / `maxWidth` 生效。
8
+ * 全不传 = 随父容器(flex 子项自然伸缩),这也是弹窗 footer 里的用法。
9
+ *
10
+ * 空串 = 没有文案:不渲染、不占位。所以「同一块地方复用」时传 `''` 就把上一句清干净了,
11
+ * 之后第一次给值是从无到有,直接出现(没有上一句可翻)。
12
+ */
13
+ import { type ReactElement } from 'react';
14
+ export interface FlipTextProps {
15
+ /** 当前文本。变了就翻一次;没变不动(同一句重复设置不会重播);空串 = 无文案。 */
16
+ text: string;
17
+ /** 定宽(px 或任意 CSS 宽度);给了即忽略 minWidth / maxWidth。 */
18
+ width?: number | string;
19
+ /** 最小宽(width 未设时生效)。 */
20
+ minWidth?: number | string;
21
+ /** 最大宽(width 未设时生效);超出折叠成省略号,hover 以跑马灯展开。 */
22
+ maxWidth?: number | string;
23
+ /** 追加 class(只允许补字体 / 颜色这类皮肤)。 */
24
+ className?: string;
25
+ }
26
+ /** 当前帧 + 上一帧;`seq` 只用来换 key,让两层每次都重新挂载、动效从头播。 */
27
+ export interface FlipSlot {
28
+ curr: string;
29
+ prev: string | null;
30
+ seq: number;
31
+ }
32
+ /**
33
+ * 换字推导:文本没变原样返回(同一句重复设置不重播);变了把当前帧降为上一帧、seq+1。
34
+ * 上一帧是空串 ⇒ 不设 prev:第一句直接出现,不从下方翻上来。
35
+ */
36
+ export declare function nextFlipSlot(slot: FlipSlot, text: string): FlipSlot;
37
+ export declare function FlipText(props: FlipTextProps): ReactElement | null;
38
+ //# sourceMappingURL=FlipText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlipText.d.ts","sourceRoot":"","sources":["../../src/ui/FlipText.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAA+D,KAAK,YAAY,EAAE,MAAM,OAAO,CAAA;AAQtG,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,iDAAiD;AACjD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAGnE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY,GAAG,IAAI,CAsClE"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * 翻牌文本 —— 一行文字,换字时旧的上移出、新的从下进(机场翻牌那种)。
3
+ *
4
+ * 与 `MarqueeText` 的分工:跑马灯(三点省略 + hover 滚)由它负责,本组件只管「换字动效 + 裁剪」,
5
+ * 所以两层叠放的每一层就是一个 `MarqueeText`,不重复实现测宽。
6
+ *
7
+ * 宽度三档与 `Button` / `Chip` 同一口径:`width` 优先,`width` 未设时 `minWidth` / `maxWidth` 生效。
8
+ * 全不传 = 随父容器(flex 子项自然伸缩),这也是弹窗 footer 里的用法。
9
+ *
10
+ * 空串 = 没有文案:不渲染、不占位。所以「同一块地方复用」时传 `''` 就把上一句清干净了,
11
+ * 之后第一次给值是从无到有,直接出现(没有上一句可翻)。
12
+ */
13
+ import { createElement as h, useEffect, useState } from 'react';
14
+ import { ensureComponentStyles } from './css.js';
15
+ import { FLIP_CSS } from './flip-css.js';
16
+ import { MarqueeText } from './MarqueeText.js';
17
+ /** 与 flip.css 的 --dshpc-flip-dur(260ms)对齐,留一点余量给慢帧。 */
18
+ const FLIP_MS = 300;
19
+ /**
20
+ * 换字推导:文本没变原样返回(同一句重复设置不重播);变了把当前帧降为上一帧、seq+1。
21
+ * 上一帧是空串 ⇒ 不设 prev:第一句直接出现,不从下方翻上来。
22
+ */
23
+ export function nextFlipSlot(slot, text) {
24
+ if (slot.curr === text)
25
+ return slot;
26
+ return { curr: text, prev: slot.curr === '' ? null : slot.curr, seq: slot.seq + 1 };
27
+ }
28
+ export function FlipText(props) {
29
+ ensureComponentStyles('flip', FLIP_CSS);
30
+ const [slot, setSlot] = useState({ curr: props.text, prev: null, seq: 0 });
31
+ // 换字在 render 期调整(React 官方推荐的「props 变了就调 state」写法):
32
+ // 同一次渲染就带上新值,不会先按旧帧画一屏再动画。
33
+ const next = nextFlipSlot(slot, props.text);
34
+ if (next !== slot)
35
+ setSlot(next);
36
+ // 旧帧到点就摘。用定时器而不是 animationend:reduced-motion 下动画被关掉,
37
+ // 事件永远不会来,旧帧会一直压在新帧上(同格叠放,两层都可见)。
38
+ useEffect(() => {
39
+ if (slot.prev === null)
40
+ return undefined;
41
+ const id = window.setTimeout(() => setSlot((s) => (s.prev === null ? s : { ...s, prev: null })), FLIP_MS);
42
+ return () => window.clearTimeout(id);
43
+ }, [slot.seq, slot.prev]);
44
+ if (props.text === '')
45
+ return null;
46
+ const style = props.width !== undefined
47
+ ? { width: props.width }
48
+ : { minWidth: props.minWidth, maxWidth: props.maxWidth };
49
+ const item = 'dshpc-flip__item';
50
+ return h('span', { className: props.className === undefined ? 'dshpc-flip' : `dshpc-flip ${props.className}`, style },
51
+ // 旧帧:只在换字后存在,到点摘掉
52
+ slot.prev === null
53
+ ? null
54
+ : h('span', { key: `p${String(slot.seq)}`, className: `${item} dshpc-flip__out` }, h(MarqueeText, { text: slot.prev })),
55
+ // 新帧:没有上一帧(首帧 / 从无到有)不放动画
56
+ h('span', { key: `c${String(slot.seq)}`, className: slot.prev === null ? item : `${item} dshpc-flip__in` }, h(MarqueeText, { text: slot.curr })));
57
+ }
58
+ //# sourceMappingURL=FlipText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlipText.js","sourceRoot":"","sources":["../../src/ui/FlipText.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAyC,MAAM,OAAO,CAAA;AACtG,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,uDAAuD;AACvD,MAAM,OAAO,GAAG,GAAG,CAAA;AAsBnB;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAc,EAAE,IAAY;IACvD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IACnC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAA;AACrF,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACvC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAW,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;IACpF,mDAAmD;IACnD,2BAA2B;IAC3B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC3C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhC,qDAAqD;IACrD,kCAAkC;IAClC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,SAAS,CAAA;QACxC,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QACzG,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;IACtC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAEzB,IAAI,KAAK,CAAC,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAA;IAElC,MAAM,KAAK,GACT,KAAK,CAAC,KAAK,KAAK,SAAS;QACvB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;QACxB,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAA;IAE5D,MAAM,IAAI,GAAG,kBAAkB,CAAA;IAC/B,OAAO,CAAC,CACN,MAAM,EACN,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE;IACpG,kBAAkB;IAClB,IAAI,CAAC,IAAI,KAAK,IAAI;QAChB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,IAAI,kBAAkB,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACzH,0BAA0B;IAC1B,CAAC,CACC,MAAM,EACN,EAAE,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,iBAAiB,EAAE,EAChG,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CACpC,CACF,CAAA;AACH,CAAC"}
@@ -40,6 +40,12 @@ export interface ModalProps {
40
40
  /** 不渲染头部(沉浸式 / 无标题场景)。 */
41
41
  hideHeader?: boolean;
42
42
  footer?: ReactNode;
43
+ /**
44
+ * footer **左侧**的一行过程提示(换字即翻牌,太长省略、hover 跑马灯)。
45
+ * 不传 = 不占位、与以前完全一样;传了就自动出现(footer 也可不给,它会自己撑起底栏)。
46
+ * 换文案只改这个值,动效由 `FlipText` 负责。
47
+ */
48
+ notice?: string;
43
49
  /** footer 上面那条分隔线(默认 true)。传 false 关闭;sm 确认框家族本来就没有。 */
44
50
  footerDivider?: boolean;
45
51
  /** 追加 class(只允许补布局 / 视觉修饰,不许覆盖皮肤)。 */
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/ui/Modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAMpD,qCAAqC;AACrC,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAE1C,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,gDAAgD;IAChD,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,qCAAqC;IACrC,aAAa,CAAC,EAAE,SAAS,CAAA;IACzB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wCAAwC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,yDAAyD;IACzD,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,wDAAwD;IACxD,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAqE7D"}
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/ui/Modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAOpD,qCAAqC;AACrC,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAE1C,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,gDAAgD;IAChD,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,qCAAqC;IACrC,aAAa,CAAC,EAAE,SAAS,CAAA;IACzB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wCAAwC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,yDAAyD;IACzD,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wDAAwD;IACxD,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAwE7D"}
package/dist/ui/Modal.js CHANGED
@@ -4,6 +4,7 @@ import { ensureComponentStyles } from './css.js';
4
4
  import { FEEDBACK_CSS } from './feedback-css.js';
5
5
  import { OverlayHead, OverlayMask, useEscapeClose } from './overlay.js';
6
6
  import { PanelSurface } from './panel.js';
7
+ import { FlipText } from './FlipText.js';
7
8
  /**
8
9
  * 模态弹窗(自绘 overlay,**不用 react-dom 的 portal**,避免多一个必需依赖)。
9
10
  *
@@ -16,6 +17,8 @@ export function Modal(props) {
16
17
  const busy = props.busy === true;
17
18
  const closeOnMask = !busy && props.closeOnMask !== false;
18
19
  useEscapeClose(!busy && props.escClose !== false, busy ? undefined : props.onClose);
20
+ // 空串等同于没给:底栏那块地方复用给下一轮时,传 "" 就把上一句清干净、不留占位。
21
+ const notice = props.notice === '' ? undefined : props.notice;
19
22
  // 默认宽高(兄弟项目真值:小框 360px(task-list.tsx:457)/ 大弹窗 min(1120px,100vw-32px) × calc(100%-80px)(archive-session-css.ts:42))。
20
23
  // 宽度用 `100%`(相对遮罩盒)而不是 `100vw`:遮罩已按右侧分栏让位(见 feedback.css),
21
24
  // 用 `100vw` 算出来的宽在分栏在场时会溢出到分栏上,等于白让(用户 2026-10-22)。
@@ -61,8 +64,8 @@ export function Modal(props) {
61
64
  : null,
62
65
  // body 是**唯一滚动容器**:内距归它、滚动条归它、滚动条贴面板右缘;
63
66
  // 内容只管按流排,不许自己定高、不许自己再开滚动条(用户 2026-10-22 定的口径)。
64
- h('div', { className: 'dshpc-modal__body' }, props.children ?? null), props.footer === undefined
67
+ h('div', { className: 'dshpc-modal__body' }, props.children ?? null), props.footer === undefined && notice === undefined
65
68
  ? null
66
- : h('div', { className: `dshpc-modal__foot${props.footerDivider === false ? ' dshpc-modal__foot--bare' : ''}` }, props.footer)));
69
+ : h('div', { className: `dshpc-modal__foot${props.footerDivider === false ? ' dshpc-modal__foot--bare' : ''}` }, notice === undefined ? null : h(FlipText, { text: notice, className: 'dshpc-modal__notice' }), props.footer)));
67
70
  }
68
71
  //# sourceMappingURL=Modal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/ui/Modal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/ui/Modal.ts"],"names":[],"mappings":"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"}
@@ -59,6 +59,8 @@ export interface SideSheetProps {
59
59
  /** 能否拖宽(默认 true)。 */
60
60
  resizable?: boolean;
61
61
  footer?: ReactNode;
62
+ /** 底栏左侧的一行过程提示(换字即翻牌,超长省略 + hover 跑马灯)。不传 = 不占位。 */
63
+ notice?: string;
62
64
  children?: ReactNode;
63
65
  translate?: Translate;
64
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SideSheet.d.ts","sourceRoot":"","sources":["../../src/ui/SideSheet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAmD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACvF,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAOpD,wBAAwB;AACxB,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,CAAA;AAE5C,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,cAAc;IACd,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,eAAe;IACf,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,iCAAiC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACzB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,qBAAqB;IACrB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qBAAqB;IACrB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CAuH1D"}
1
+ {"version":3,"file":"SideSheet.d.ts","sourceRoot":"","sources":["../../src/ui/SideSheet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAmD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACvF,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAQpD,wBAAwB;AACxB,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,CAAA;AAE5C,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,cAAc;IACd,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,eAAe;IACf,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,iCAAiC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACzB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,qBAAqB;IACrB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qBAAqB;IACrB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CAgI1D"}
@@ -17,6 +17,7 @@ import { SIDE_PANEL_CSS } from './side-panel-css.js';
17
17
  import { SIDE_SHEET_CSS } from './side-sheet-css.js';
18
18
  import { OverlayMask, useEscapeClose } from './overlay.js';
19
19
  import { startResizeLayoutWidth } from './resizer.js';
20
+ import { FlipText } from './FlipText.js';
20
21
  export function SideSheet(props) {
21
22
  ensureComponentStyles('side-panel', SIDE_PANEL_CSS);
22
23
  ensureComponentStyles('side-sheet', SIDE_SHEET_CSS);
@@ -26,6 +27,8 @@ export function SideSheet(props) {
26
27
  const busy = props.busy === true;
27
28
  const closeOnMask = !busy && props.closeOnMask !== false;
28
29
  useEscapeClose(!busy && props.escClose !== false, busy ? undefined : props.onClose);
30
+ // 空串等同于没给:抽屉常驻渲染时,传 "" 就能把上一轮的提示清干净、不留占位。
31
+ const notice = props.notice === '' ? undefined : props.notice;
29
32
  const [width, setWidth] = useState(props.width ?? 460);
30
33
  const panelRef = useRef(null);
31
34
  // 收起动效(用户 2026-11-02):open=false 时先播完 dshpc-side-out 再真正卸载;
@@ -110,6 +113,8 @@ export function SideSheet(props) {
110
113
  onPointerDown: (event) => {
111
114
  beginResize(event);
112
115
  },
113
- }), renderHeader(), closeButton(!hasHeader), h('div', { className: 'dshpc-dock__body dshpc-sheet__body' }, props.children ?? null), props.footer === undefined ? null : h('div', { className: 'dshpc-sheet__foot' }, props.footer)));
116
+ }), renderHeader(), closeButton(!hasHeader), h('div', { className: 'dshpc-dock__body dshpc-sheet__body' }, props.children ?? null), props.footer === undefined && notice === undefined
117
+ ? null
118
+ : h('div', { className: 'dshpc-sheet__foot' }, notice === undefined ? null : h(FlipText, { text: notice, className: 'dshpc-sheet__notice' }), props.footer)));
114
119
  }
115
120
  //# sourceMappingURL=SideSheet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SideSheet.js","sourceRoot":"","sources":["../../src/ui/SideSheet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SideSheet.js","sourceRoot":"","sources":["../../src/ui/SideSheet.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const FEEDBACK_CSS = "/* \u906E\u7F69\u4E0E\u5934\u90E8\u5728 overlay.css\uFF0C\u8868\u9762\uFF08\u5E95\u8272/\u63CF\u8FB9/\u5706\u89D2/\u9634\u5F71\uFF09\u5728 panel.css \u7684 --modal \u6863\uFF0C\n \u8FD9\u91CC\u53EA\u5269**\u5BB6\u65CF\u5E03\u5C40\u4E0E\u5C3A\u5BF8**\u3002\u4E09\u8005\u5404\u7BA1\u4E00\u6BB5\uFF0C\u522B\u518D\u628A\u76AE\u80A4\u6284\u56DE\u6765\u3002 */\n.dshpc-modal{\n display:flex;flex-direction:column;box-sizing:border-box;\n}\n/* body = \u552F\u4E00\u6EDA\u52A8\u5BB9\u5668\uFF1A\u5185\u8DDD\u4E0E\u6EDA\u52A8\u90FD\u5F52\u5B83\uFF08\u6EDA\u52A8\u6761\u8D34\u9762\u677F\u53F3\u7F18\uFF0C\u4E0D\u88AB\u5185\u8DDD\u6324\u8FDB\u6765\uFF09\uFF1B\n \u5185\u5BB9\u6309\u6D41\u6392\uFF0C\u4E0D\u8BBE height:100%\u3001\u4E0D\u81EA\u5DF1\u5F00\u6EDA\u52A8\u6761\u3002\n \u900F\u660E\u53F3\u8FB9\u6846 = \u8BA9\u6EDA\u52A8\u6761\u4E0E\u9762\u677F\u53F3\u7F18\u9694 1px\uFF08\u53E3\u5F84\u89C1 style.md \u00A7\u6EDA\u52A8\u6761\u8BA9\u4F4D\uFF09\u3002 */\n.dshpc-modal__body{flex:1 1 auto;min-height:0;overflow:auto;padding:17px 18px;border-right:1px solid transparent}\n/* \u5E95\u680F\u4E0E\u5934\u90E8\u540C\u4E00\u53E3\u5F84\uFF082026-11-02 \u7528\u6237\uFF09\uFF1A\u4E0A\u4E0B\u5185\u8DDD\u76F8\u7B49\u3001\u5185\u5BB9\u5782\u76F4\u5C45\u4E2D\u3001\u9ED8\u8BA4\u5E26\u4E00\u6761\u5206\u9694\u7EBF\u3002\n \u7EBF\u53EF\u7531\u6D88\u8D39\u65B9\u5173\u6389\uFF08Modal \u7684 footerDivider=false\uFF09\u2014\u2014 \u786E\u8BA4\u6846\u5BB6\u65CF\u672C\u6765\u5C31\u6CA1\u6709\u7EBF\uFF08\u4E0E\u5934\u90E8\u4E00\u81F4\uFF09\u3002 */\n.dshpc-modal .dshpc-modal__foot{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:18px;border-top:1px solid var(--dshpc-border)}\n.dshpc-modal .dshpc-modal__foot--bare{border-top:none}\n/* \u81EA\u7ED8 toast \u7684\u6837\u5F0F\u5728 2026-11-03 \u5220\u9664\uFF1AToast \u65E9\u5DF2\u6539\u8D70\u5BBF\u4E3B toast()\uFF08Toast.ts \u7684 showNative\uFF09\uFF0C\n .dshpc-toast* \u8FD9\u51E0\u4E2A\u7C7B\u6CA1\u6709\u4EFB\u4F55\u6D88\u8D39\u8005\uFF0C\u7559\u7740\u53EA\u662F\u6B7B\u6837\u5F0F\uFF08\u8FD8\u5E26\u7740\u88F8 z-index \u4E0E\u88F8\u9634\u5F71\uFF09\u3002 */\n.dshpc-error__retry{\n margin-top:8px;color:var(--dshpc-link);cursor:pointer;background:none;border:none;padding:0;\n}\n/* \u539F\u751F\u5F39\u7A97\u6F14\u793A\uFF1A\u7ECF\u5BBF\u4E3B Modal \u7684 contentClassName \u6CE8\u5165\uFF0C\u8BC1\u660E\u5BBF\u4E3B\u5185\u5BB9\u533A\u5C3A\u5BF8\u53EF\u7ECF\u7C7B\u540D\u81EA\u5B9A\u4E49\u3002 */\n.dshpc-native-demo-content{max-width:520px}\n/* \u5934\u90E8\u4FE1\u53F7\u56FE\u6807\uFF08AlertModal \u6309 severity \u6CE8\u5165\uFF09\uFF1A\u81EA\u542B\u914D\u8272\uFF0C\u8272\u503C\u5728 tokens.css \u7684 --dshpc-sev-*\u3002 */\n.dshpc-alert-sev{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:12px;color:var(--dshpc-on-signal);flex:none}\n.dshpc-alert-sev--info{background:var(--dshpc-sev-info)}\n.dshpc-alert-sev--success{background:var(--dshpc-sev-success)}\n.dshpc-alert-sev--warning{background:var(--dshpc-sev-warning)}\n.dshpc-alert-sev--error{background:var(--dshpc-sev-error)}\n/* \u5C0F\u786E\u8BA4\u6846\u5BB6\u65CF\uFF08sm\uFF09\uFF1A\u4E25\u683C\u6284\u5144\u5F1F\u9879\u76EE renderConfirm \u7684 dialogStyle\uFF08task-list.tsx:456\uFF09\u2014\u2014\n 360px \u5BBD / 18px \u5185\u8DDD / \u5934\u90E8\u65E0\u5206\u9694\u7EBF / \u8BF4\u660E\u6587\u5B57 fg-2 / \u5E95\u90E8\u6309\u94AE\u53F3\u5BF9\u9F50\u3002 */\n.dshpc-modal--sm{padding:18px}\n.dshpc-modal--sm .dshpc-overlay-head{padding:0 0 8px;border-bottom:none}\n.dshpc-modal--sm .dshpc-modal__body{padding:0 0 14px;overflow:visible;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-2);line-height:var(--dshpc-line-sm)}\n.dshpc-modal--sm .dshpc-modal__foot{padding:0;border-top:none}\n";
1
+ export declare const FEEDBACK_CSS = "/* \u906E\u7F69\u4E0E\u5934\u90E8\u5728 overlay.css\uFF0C\u8868\u9762\uFF08\u5E95\u8272/\u63CF\u8FB9/\u5706\u89D2/\u9634\u5F71\uFF09\u5728 panel.css \u7684 --modal \u6863\uFF0C\n \u8FD9\u91CC\u53EA\u5269**\u5BB6\u65CF\u5E03\u5C40\u4E0E\u5C3A\u5BF8**\u3002\u4E09\u8005\u5404\u7BA1\u4E00\u6BB5\uFF0C\u522B\u518D\u628A\u76AE\u80A4\u6284\u56DE\u6765\u3002 */\n.dshpc-modal{\n display:flex;flex-direction:column;box-sizing:border-box;\n}\n/* body = \u552F\u4E00\u6EDA\u52A8\u5BB9\u5668\uFF1A\u5185\u8DDD\u4E0E\u6EDA\u52A8\u90FD\u5F52\u5B83\uFF08\u6EDA\u52A8\u6761\u8D34\u9762\u677F\u53F3\u7F18\uFF0C\u4E0D\u88AB\u5185\u8DDD\u6324\u8FDB\u6765\uFF09\uFF1B\n \u5185\u5BB9\u6309\u6D41\u6392\uFF0C\u4E0D\u8BBE height:100%\u3001\u4E0D\u81EA\u5DF1\u5F00\u6EDA\u52A8\u6761\u3002\n \u900F\u660E\u53F3\u8FB9\u6846 = \u8BA9\u6EDA\u52A8\u6761\u4E0E\u9762\u677F\u53F3\u7F18\u9694 1px\uFF08\u53E3\u5F84\u89C1 style.md \u00A7\u6EDA\u52A8\u6761\u8BA9\u4F4D\uFF09\u3002 */\n.dshpc-modal__body{flex:1 1 auto;min-height:0;overflow:auto;padding:17px 18px;border-right:1px solid transparent}\n/* \u5E95\u680F\u4E0E\u5934\u90E8\u540C\u4E00\u53E3\u5F84\uFF082026-11-02 \u7528\u6237\uFF09\uFF1A\u4E0A\u4E0B\u5185\u8DDD\u76F8\u7B49\u3001\u5185\u5BB9\u5782\u76F4\u5C45\u4E2D\u3001\u9ED8\u8BA4\u5E26\u4E00\u6761\u5206\u9694\u7EBF\u3002\n \u7EBF\u53EF\u7531\u6D88\u8D39\u65B9\u5173\u6389\uFF08Modal \u7684 footerDivider=false\uFF09\u2014\u2014 \u786E\u8BA4\u6846\u5BB6\u65CF\u672C\u6765\u5C31\u6CA1\u6709\u7EBF\uFF08\u4E0E\u5934\u90E8\u4E00\u81F4\uFF09\u3002 */\n.dshpc-modal .dshpc-modal__foot{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:18px;border-top:1px solid var(--dshpc-border)}\n.dshpc-modal .dshpc-modal__foot--bare{border-top:none}\n/* \u5E95\u680F\u5DE6\u4FA7\u7684\u8FC7\u7A0B\u63D0\u793A\uFF1A\u5403\u6389\u6309\u94AE\u4E4B\u5916\u7684\u5269\u4F59\u5BBD\uFF0C\u8D85\u957F\u4EA4\u7ED9 FlipText \u7701\u7565 / hover \u8DD1\u9A6C\u706F\u3002 */\n.dshpc-modal .dshpc-modal__notice{flex:1 1 auto;min-width:0;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);color:var(--dshpc-fg-3)}\n/* \u81EA\u7ED8 toast \u7684\u6837\u5F0F\u5728 2026-11-03 \u5220\u9664\uFF1AToast \u65E9\u5DF2\u6539\u8D70\u5BBF\u4E3B toast()\uFF08Toast.ts \u7684 showNative\uFF09\uFF0C\n .dshpc-toast* \u8FD9\u51E0\u4E2A\u7C7B\u6CA1\u6709\u4EFB\u4F55\u6D88\u8D39\u8005\uFF0C\u7559\u7740\u53EA\u662F\u6B7B\u6837\u5F0F\uFF08\u8FD8\u5E26\u7740\u88F8 z-index \u4E0E\u88F8\u9634\u5F71\uFF09\u3002 */\n.dshpc-error__retry{\n margin-top:8px;color:var(--dshpc-link);cursor:pointer;background:none;border:none;padding:0;\n}\n/* \u539F\u751F\u5F39\u7A97\u6F14\u793A\uFF1A\u7ECF\u5BBF\u4E3B Modal \u7684 contentClassName \u6CE8\u5165\uFF0C\u8BC1\u660E\u5BBF\u4E3B\u5185\u5BB9\u533A\u5C3A\u5BF8\u53EF\u7ECF\u7C7B\u540D\u81EA\u5B9A\u4E49\u3002 */\n.dshpc-native-demo-content{max-width:520px}\n/* \u5934\u90E8\u4FE1\u53F7\u56FE\u6807\uFF08AlertModal \u6309 severity \u6CE8\u5165\uFF09\uFF1A\u81EA\u542B\u914D\u8272\uFF0C\u8272\u503C\u5728 tokens.css \u7684 --dshpc-sev-*\u3002 */\n.dshpc-alert-sev{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:12px;color:var(--dshpc-on-signal);flex:none}\n.dshpc-alert-sev--info{background:var(--dshpc-sev-info)}\n.dshpc-alert-sev--success{background:var(--dshpc-sev-success)}\n.dshpc-alert-sev--warning{background:var(--dshpc-sev-warning)}\n.dshpc-alert-sev--error{background:var(--dshpc-sev-error)}\n/* \u5C0F\u786E\u8BA4\u6846\u5BB6\u65CF\uFF08sm\uFF09\uFF1A\u4E25\u683C\u6284\u5144\u5F1F\u9879\u76EE renderConfirm \u7684 dialogStyle\uFF08task-list.tsx:456\uFF09\u2014\u2014\n 360px \u5BBD / 18px \u5185\u8DDD / \u5934\u90E8\u65E0\u5206\u9694\u7EBF / \u8BF4\u660E\u6587\u5B57 fg-2 / \u5E95\u90E8\u6309\u94AE\u53F3\u5BF9\u9F50\u3002 */\n.dshpc-modal--sm{padding:18px}\n.dshpc-modal--sm .dshpc-overlay-head{padding:0 0 8px;border-bottom:none}\n.dshpc-modal--sm .dshpc-modal__body{padding:0 0 14px;overflow:visible;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-2);line-height:var(--dshpc-line-sm)}\n.dshpc-modal--sm .dshpc-modal__foot{padding:0;border-top:none}\n";
2
2
  //# sourceMappingURL=feedback-css.generated.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-css.generated.d.ts","sourceRoot":"","sources":["../../src/ui/feedback-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,utHAAyiE,CAAA"}
1
+ {"version":3,"file":"feedback-css.generated.d.ts","sourceRoot":"","sources":["../../src/ui/feedback-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,kkIAAyvE,CAAA"}
@@ -1,4 +1,4 @@
1
1
  // ⚠️ 生成物,勿手改。真源 = src/ui/feedback.css
2
2
  // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
- export const FEEDBACK_CSS = "/* 遮罩与头部在 overlay.css,表面(底色/描边/圆角/阴影)在 panel.css 的 --modal 档,\n 这里只剩**家族布局与尺寸**。三者各管一段,别再把皮肤抄回来。 */\n.dshpc-modal{\n display:flex;flex-direction:column;box-sizing:border-box;\n}\n/* body = 唯一滚动容器:内距与滚动都归它(滚动条贴面板右缘,不被内距挤进来);\n 内容按流排,不设 height:100%、不自己开滚动条。\n 透明右边框 = 让滚动条与面板右缘隔 1px(口径见 style.md §滚动条让位)。 */\n.dshpc-modal__body{flex:1 1 auto;min-height:0;overflow:auto;padding:17px 18px;border-right:1px solid transparent}\n/* 底栏与头部同一口径(2026-11-02 用户):上下内距相等、内容垂直居中、默认带一条分隔线。\n 线可由消费方关掉(Modal 的 footerDivider=false)—— 确认框家族本来就没有线(与头部一致)。 */\n.dshpc-modal .dshpc-modal__foot{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:18px;border-top:1px solid var(--dshpc-border)}\n.dshpc-modal .dshpc-modal__foot--bare{border-top:none}\n/* 自绘 toast 的样式在 2026-11-03 删除:Toast 早已改走宿主 toast()(Toast.ts 的 showNative),\n .dshpc-toast* 这几个类没有任何消费者,留着只是死样式(还带着裸 z-index 与裸阴影)。 */\n.dshpc-error__retry{\n margin-top:8px;color:var(--dshpc-link);cursor:pointer;background:none;border:none;padding:0;\n}\n/* 原生弹窗演示:经宿主 Modal 的 contentClassName 注入,证明宿主内容区尺寸可经类名自定义。 */\n.dshpc-native-demo-content{max-width:520px}\n/* 头部信号图标(AlertModal 按 severity 注入):自含配色,色值在 tokens.css 的 --dshpc-sev-*。 */\n.dshpc-alert-sev{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:12px;color:var(--dshpc-on-signal);flex:none}\n.dshpc-alert-sev--info{background:var(--dshpc-sev-info)}\n.dshpc-alert-sev--success{background:var(--dshpc-sev-success)}\n.dshpc-alert-sev--warning{background:var(--dshpc-sev-warning)}\n.dshpc-alert-sev--error{background:var(--dshpc-sev-error)}\n/* 小确认框家族(sm):严格抄兄弟项目 renderConfirm 的 dialogStyle(task-list.tsx:456)——\n 360px 宽 / 18px 内距 / 头部无分隔线 / 说明文字 fg-2 / 底部按钮右对齐。 */\n.dshpc-modal--sm{padding:18px}\n.dshpc-modal--sm .dshpc-overlay-head{padding:0 0 8px;border-bottom:none}\n.dshpc-modal--sm .dshpc-modal__body{padding:0 0 14px;overflow:visible;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-2);line-height:var(--dshpc-line-sm)}\n.dshpc-modal--sm .dshpc-modal__foot{padding:0;border-top:none}\n";
3
+ export const FEEDBACK_CSS = "/* 遮罩与头部在 overlay.css,表面(底色/描边/圆角/阴影)在 panel.css 的 --modal 档,\n 这里只剩**家族布局与尺寸**。三者各管一段,别再把皮肤抄回来。 */\n.dshpc-modal{\n display:flex;flex-direction:column;box-sizing:border-box;\n}\n/* body = 唯一滚动容器:内距与滚动都归它(滚动条贴面板右缘,不被内距挤进来);\n 内容按流排,不设 height:100%、不自己开滚动条。\n 透明右边框 = 让滚动条与面板右缘隔 1px(口径见 style.md §滚动条让位)。 */\n.dshpc-modal__body{flex:1 1 auto;min-height:0;overflow:auto;padding:17px 18px;border-right:1px solid transparent}\n/* 底栏与头部同一口径(2026-11-02 用户):上下内距相等、内容垂直居中、默认带一条分隔线。\n 线可由消费方关掉(Modal 的 footerDivider=false)—— 确认框家族本来就没有线(与头部一致)。 */\n.dshpc-modal .dshpc-modal__foot{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:18px;border-top:1px solid var(--dshpc-border)}\n.dshpc-modal .dshpc-modal__foot--bare{border-top:none}\n/* 底栏左侧的过程提示:吃掉按钮之外的剩余宽,超长交给 FlipText 省略 / hover 跑马灯。 */\n.dshpc-modal .dshpc-modal__notice{flex:1 1 auto;min-width:0;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);color:var(--dshpc-fg-3)}\n/* 自绘 toast 的样式在 2026-11-03 删除:Toast 早已改走宿主 toast()(Toast.ts 的 showNative),\n .dshpc-toast* 这几个类没有任何消费者,留着只是死样式(还带着裸 z-index 与裸阴影)。 */\n.dshpc-error__retry{\n margin-top:8px;color:var(--dshpc-link);cursor:pointer;background:none;border:none;padding:0;\n}\n/* 原生弹窗演示:经宿主 Modal 的 contentClassName 注入,证明宿主内容区尺寸可经类名自定义。 */\n.dshpc-native-demo-content{max-width:520px}\n/* 头部信号图标(AlertModal 按 severity 注入):自含配色,色值在 tokens.css 的 --dshpc-sev-*。 */\n.dshpc-alert-sev{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:12px;color:var(--dshpc-on-signal);flex:none}\n.dshpc-alert-sev--info{background:var(--dshpc-sev-info)}\n.dshpc-alert-sev--success{background:var(--dshpc-sev-success)}\n.dshpc-alert-sev--warning{background:var(--dshpc-sev-warning)}\n.dshpc-alert-sev--error{background:var(--dshpc-sev-error)}\n/* 小确认框家族(sm):严格抄兄弟项目 renderConfirm 的 dialogStyle(task-list.tsx:456)——\n 360px 宽 / 18px 内距 / 头部无分隔线 / 说明文字 fg-2 / 底部按钮右对齐。 */\n.dshpc-modal--sm{padding:18px}\n.dshpc-modal--sm .dshpc-overlay-head{padding:0 0 8px;border-bottom:none}\n.dshpc-modal--sm .dshpc-modal__body{padding:0 0 14px;overflow:visible;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-2);line-height:var(--dshpc-line-sm)}\n.dshpc-modal--sm .dshpc-modal__foot{padding:0;border-top:none}\n";
4
4
  //# sourceMappingURL=feedback-css.generated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-css.generated.js","sourceRoot":"","sources":["../../src/ui/feedback-css.generated.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,qEAAqE;AACrE,MAAM,CAAC,MAAM,YAAY,GAAG,siEAAsiE,CAAA"}
1
+ {"version":3,"file":"feedback-css.generated.js","sourceRoot":"","sources":["../../src/ui/feedback-css.generated.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,qEAAqE;AACrE,MAAM,CAAC,MAAM,YAAY,GAAG,svEAAsvE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { FLIP_CSS } from './flip-css.generated.js';
2
+ //# sourceMappingURL=flip-css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flip-css.d.ts","sourceRoot":"","sources":["../../src/ui/flip-css.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const FLIP_CSS = "/* \u7FFB\u724C\u6587\u672C\uFF08FlipText\uFF09\uFF1A\u4E00\u4E2A\u5355\u884C\u7A97\u53E3 + \u4E24\u5C42\u540C\u683C\u53E0\u653E\uFF0C\u6362\u5B57\u65F6\u65E7\u7684\u4E0A\u79FB\u51FA\u3001\u65B0\u7684\u4ECE\u4E0B\u8FDB\u3002\n \u6EA2\u51FA\uFF08\u4E09\u70B9\u7701\u7565 + hover \u8DD1\u9A6C\u706F\uFF09\u4E0D\u5728\u8FD9\u91CC\u505A \u2014\u2014 \u4EA4\u7ED9 MarqueeText\uFF0C\u672C\u6587\u4EF6\u53EA\u7BA1\u88C1\u526A\u4E0E\u5207\u6362\u52A8\u6548\u3002\n \u53E0\u653E\u7528 grid \u540C\u683C\u800C\u4E0D\u662F\u7EDD\u5BF9\u5B9A\u4F4D\uFF1A\u5BB9\u5668\u9AD8\u5EA6\u5929\u7136\u7B49\u4E8E\u4E00\u884C\uFF0C\u4E0D\u7528\u6D4B\u91CF\u3001\u4E5F\u4E0D\u4F9D\u8D56 lh \u5355\u4F4D\u3002 */\n.dshpc-flip{--dshpc-flip-dur:260ms;--dshpc-flip-ease:cubic-bezier(.22,.61,.36,1);display:grid;min-width:0;overflow:hidden}\n.dshpc-flip__item{grid-area:1/1;min-width:0}\n.dshpc-flip__in{animation:dshpc-flip-in var(--dshpc-flip-dur) var(--dshpc-flip-ease) both}\n.dshpc-flip__out{animation:dshpc-flip-out var(--dshpc-flip-dur) var(--dshpc-flip-ease) both}\n@keyframes dshpc-flip-in{from{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}\n@keyframes dshpc-flip-out{from{transform:translateY(0);opacity:1}to{transform:translateY(-100%);opacity:0}}\n/* \u524D\u5EAD\u654F\u611F / \u4F4E\u6027\u80FD\u8BBE\u5907\u5173\u6389\u4F4D\u79FB\u52A8\u753B\uFF1A\u6362\u5B57\u4ECD\u5728\uFF0C\u53EA\u662F\u4E0D\u518D\u7FFB\u3002\n \u65E7\u5E27\u6CA1\u6709\u52A8\u753B\u53EF\u64AD\uFF0C\u5FC5\u987B\u81EA\u5DF1\u9690\u5F62 \u2014\u2014 \u4E24\u5C42\u540C\u683C\u53E0\u653E\uFF0C\u7559\u7740\u5C31\u91CD\u5F71\u3002 */\n@media (prefers-reduced-motion:reduce){\n .dshpc-flip__in,.dshpc-flip__out{animation:none}\n .dshpc-flip__out{opacity:0}\n}\n";
2
+ //# sourceMappingURL=flip-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flip-css.generated.d.ts","sourceRoot":"","sources":["../../src/ui/flip-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,4tDAAk7B,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/flip.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const FLIP_CSS = "/* 翻牌文本(FlipText):一个单行窗口 + 两层同格叠放,换字时旧的上移出、新的从下进。\n 溢出(三点省略 + hover 跑马灯)不在这里做 —— 交给 MarqueeText,本文件只管裁剪与切换动效。\n 叠放用 grid 同格而不是绝对定位:容器高度天然等于一行,不用测量、也不依赖 lh 单位。 */\n.dshpc-flip{--dshpc-flip-dur:260ms;--dshpc-flip-ease:cubic-bezier(.22,.61,.36,1);display:grid;min-width:0;overflow:hidden}\n.dshpc-flip__item{grid-area:1/1;min-width:0}\n.dshpc-flip__in{animation:dshpc-flip-in var(--dshpc-flip-dur) var(--dshpc-flip-ease) both}\n.dshpc-flip__out{animation:dshpc-flip-out var(--dshpc-flip-dur) var(--dshpc-flip-ease) both}\n@keyframes dshpc-flip-in{from{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}\n@keyframes dshpc-flip-out{from{transform:translateY(0);opacity:1}to{transform:translateY(-100%);opacity:0}}\n/* 前庭敏感 / 低性能设备关掉位移动画:换字仍在,只是不再翻。\n 旧帧没有动画可播,必须自己隐形 —— 两层同格叠放,留着就重影。 */\n@media (prefers-reduced-motion:reduce){\n .dshpc-flip__in,.dshpc-flip__out{animation:none}\n .dshpc-flip__out{opacity:0}\n}\n";
4
+ //# sourceMappingURL=flip-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flip-css.generated.js","sourceRoot":"","sources":["../../src/ui/flip-css.generated.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,qEAAqE;AACrE,MAAM,CAAC,MAAM,QAAQ,GAAG,+6BAA+6B,CAAA"}
@@ -0,0 +1,4 @@
1
+ // 翻牌文本(FlipText)样式。
2
+ // 类名与变量统一 dshpc 前缀。
3
+ export { FLIP_CSS } from './flip-css.generated.js';
4
+ //# sourceMappingURL=flip-css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flip-css.js","sourceRoot":"","sources":["../../src/ui/flip-css.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,oBAAoB;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA"}
@@ -27,6 +27,7 @@ export { InputGroup, type InputGroupAction, type InputGroupProps, } from './Inpu
27
27
  export { Textarea, type TextareaProps } from './Textarea.js';
28
28
  export { Checkbox, type CheckboxProps } from './Checkbox.js';
29
29
  export { MarqueeText } from './MarqueeText.js';
30
+ export { FlipText, type FlipTextProps } from './FlipText.js';
30
31
  export { Loader, type LoaderProps, type LoaderSize, type LoaderVariant } from './Loader.js';
31
32
  export { LoaderBar, type LoaderBarProps } from './LoaderBar.js';
32
33
  export { Loading, LoadingBlock, LoadingToast, RunningBlocks, showLoading, type LoadingOptions, type LoadingProps, type LoadingViewProps, } from './Loading.js';
@@ -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":"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"}
package/dist/ui/index.js CHANGED
@@ -33,6 +33,7 @@ export { InputGroup, } from './InputGroup.js';
33
33
  export { Textarea } from './Textarea.js';
34
34
  export { Checkbox } from './Checkbox.js';
35
35
  export { MarqueeText } from './MarqueeText.js';
36
+ export { FlipText } from './FlipText.js';
36
37
  export { Loader } from './Loader.js';
37
38
  export { LoaderBar } from './LoaderBar.js';
38
39
  export { Loading, LoadingBlock, LoadingToast, RunningBlocks, showLoading, } from './Loading.js';
@@ -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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"}
@@ -1,2 +1,2 @@
1
- export declare const SIDE_SHEET_CSS = "/* \u4FA7\u8FB9\u62BD\u5C49\uFF1A\u8986\u76D6\u5F0F\u3002**\u76AE\u80A4\u4E0E PanelDock \u5B8C\u5168\u5171\u7528**\uFF08side-panel.css \u7684 .dshpc-side-surface\n + \u5934\u90E8 / \u62D6\u62FD\u6761 / \u5173\u95ED\u94AE\uFF09\uFF0C\u8FD9\u91CC\u53EA\u7BA1\u300C\u600E\u4E48\u5360\u4F4D\u300D\uFF1Aabsolute \u8D34\u8FB9\u3001\u901A\u9AD8\u3001\u76D6\u5728\u9875\u9762\u4E0A\u3002\n \u4E0E\u5206\u680F\u7684\u552F\u4E00\u5DEE\u522B\uFF1A\u5B83\u4E0D\u6324\u7A84\u4E3B\u533A\uFF08\u6240\u4EE5\u6CA1\u6709 sticky\u3001\u6CA1\u6709\u5360\u5BBD\u3001\u4E5F\u6CA1\u6709\u6536\u8D77\uFF09\u3002\n\n \u6CA1\u6709\u6536\u8D77/\u8033\u6735\uFF08\u7528\u6237 2026-11-02\uFF09\uFF1A\u62BD\u5C49\u5173\u5C31\u662F\u5173\u3002 */\n\n.dshpc-sheet{position:absolute;top:0;bottom:0}\n/* \u6536\u8D77\u51FA\u573A\uFF08\u7528\u6237 2026-11-02\uFF09\uFF1A\u5BBD\u5EA6\u6536\u5230 0 + \u6DE1\u51FA\uFF0C\u64AD\u5B8C\u7531\u7EC4\u4EF6\u5378\u8F7D\u3002\u53CC\u7C7B\u538B\u8FC7 .dshpc-side-surface \u7684\u5165\u573A\u52A8\u753B\u3002 */\n@keyframes dshpc-side-out{to{width:0;opacity:0;border-width:0;overflow:hidden}}\n.dshpc-side-surface.dshpc-sheet--leaving{animation:dshpc-side-out .2s var(--dshpc-ease) forwards;pointer-events:none;}\n/* \u9762\u4E0E Modal \u540C\u6863\uFF08bg-layer-1\uFF09\uFF0CPanelDock \u4ECD\u7528\u9875\u9762\u5E95\uFF1A\u53CC\u7C7B\u538B\u8FC7\u5171\u7528\u7684 .dshpc-side-surface\uFF0C\n \u4E0D\u78B0\u8FB9\u6846\uFF08\u7528\u6237 2026-11-02\uFF1A\u53EA\u6539\u80CC\u666F\uFF09\u3002 */\n.dshpc-side-surface.dshpc-sheet{background:var(--dshpc-surface-1)}\n/* \u8D34\u8FB9\u90A3\u4FA7\u63CF\u8FB9\uFF08\u4E0E\u5206\u680F\u7684 border-left \u540C\u4E00\u5957\u7EBF\u8272\uFF09\uFF0C\u62D6\u62FD\u6761\u6C38\u8FDC\u5728**\u671D\u5185**\u90A3\u4E00\u4FA7\u3002 */\n.dshpc-sheet--left{left:0;border-right:1px solid var(--dshpc-border)}\n.dshpc-sheet--right{right:0;border-left:1px solid var(--dshpc-border)}\n.dshpc-sheet--left .dshpc-dock__resizer{left:auto;right:0}\n/* \u5185\u5BB9\u5185\u8DDD\uFF1A\u5206\u680F\u7684 body \u628A\u5185\u8DDD\u4EA4\u7ED9\u5185\u5BB9\u7EC4\u4EF6\uFF08FileBrowser \u90A3\u7C7B\u81EA\u5DF1\u5E26 17px\uFF09\uFF0C\n \u62BD\u5C49\u662F**\u901A\u7528\u5BB9\u5668**\uFF0C\u5FC5\u987B\u81EA\u5E26 \u2014\u2014 \u5426\u5219\u6587\u5B57\u76F4\u63A5\u8D34\u9762\u677F\u8FB9\uFF08\u7528\u6237 2026-11-02 \u622A\u56FE\uFF09\u3002\n \u5DE6\u53F3 14 \u4E0E\u5934\u90E8\u5DE6\u5185\u8DDD\u5BF9\u9F50\uFF0C\u4E0A\u4E0B\u4E5F\u7559\u540C\u6863\u547C\u5438\u3002 */\n.dshpc-sheet__body{padding:14px}\n/* \u5E95\u680F\uFF08\u53EF\u9009\uFF09\uFF1A\u7EBF\u8272\u4E0E\u5185\u8DDD\u5BF9\u9F50\u9762\u677F\u5934\u90E8\u3002 */\n.dshpc-sheet__foot{\n flex:none;display:flex;justify-content:flex-end;gap:8px;\n padding:10px 14px;border-top:1px solid var(--dshpc-border-faint);\n}\n";
1
+ export declare const SIDE_SHEET_CSS = "/* \u4FA7\u8FB9\u62BD\u5C49\uFF1A\u8986\u76D6\u5F0F\u3002**\u76AE\u80A4\u4E0E PanelDock \u5B8C\u5168\u5171\u7528**\uFF08side-panel.css \u7684 .dshpc-side-surface\n + \u5934\u90E8 / \u62D6\u62FD\u6761 / \u5173\u95ED\u94AE\uFF09\uFF0C\u8FD9\u91CC\u53EA\u7BA1\u300C\u600E\u4E48\u5360\u4F4D\u300D\uFF1Aabsolute \u8D34\u8FB9\u3001\u901A\u9AD8\u3001\u76D6\u5728\u9875\u9762\u4E0A\u3002\n \u4E0E\u5206\u680F\u7684\u552F\u4E00\u5DEE\u522B\uFF1A\u5B83\u4E0D\u6324\u7A84\u4E3B\u533A\uFF08\u6240\u4EE5\u6CA1\u6709 sticky\u3001\u6CA1\u6709\u5360\u5BBD\u3001\u4E5F\u6CA1\u6709\u6536\u8D77\uFF09\u3002\n\n \u6CA1\u6709\u6536\u8D77/\u8033\u6735\uFF08\u7528\u6237 2026-11-02\uFF09\uFF1A\u62BD\u5C49\u5173\u5C31\u662F\u5173\u3002 */\n\n.dshpc-sheet{position:absolute;top:0;bottom:0}\n/* \u6536\u8D77\u51FA\u573A\uFF08\u7528\u6237 2026-11-02\uFF09\uFF1A\u5BBD\u5EA6\u6536\u5230 0 + \u6DE1\u51FA\uFF0C\u64AD\u5B8C\u7531\u7EC4\u4EF6\u5378\u8F7D\u3002\u53CC\u7C7B\u538B\u8FC7 .dshpc-side-surface \u7684\u5165\u573A\u52A8\u753B\u3002 */\n@keyframes dshpc-side-out{to{width:0;opacity:0;border-width:0;overflow:hidden}}\n.dshpc-side-surface.dshpc-sheet--leaving{animation:dshpc-side-out .2s var(--dshpc-ease) forwards;pointer-events:none;}\n/* \u9762\u4E0E Modal \u540C\u6863\uFF08bg-layer-1\uFF09\uFF0CPanelDock \u4ECD\u7528\u9875\u9762\u5E95\uFF1A\u53CC\u7C7B\u538B\u8FC7\u5171\u7528\u7684 .dshpc-side-surface\uFF0C\n \u4E0D\u78B0\u8FB9\u6846\uFF08\u7528\u6237 2026-11-02\uFF1A\u53EA\u6539\u80CC\u666F\uFF09\u3002 */\n.dshpc-side-surface.dshpc-sheet{background:var(--dshpc-surface-1)}\n/* \u8D34\u8FB9\u90A3\u4FA7\u63CF\u8FB9\uFF08\u4E0E\u5206\u680F\u7684 border-left \u540C\u4E00\u5957\u7EBF\u8272\uFF09\uFF0C\u62D6\u62FD\u6761\u6C38\u8FDC\u5728**\u671D\u5185**\u90A3\u4E00\u4FA7\u3002 */\n.dshpc-sheet--left{left:0;border-right:1px solid var(--dshpc-border)}\n.dshpc-sheet--right{right:0;border-left:1px solid var(--dshpc-border)}\n.dshpc-sheet--left .dshpc-dock__resizer{left:auto;right:0}\n/* \u5185\u5BB9\u5185\u8DDD\uFF1A\u5206\u680F\u7684 body \u628A\u5185\u8DDD\u4EA4\u7ED9\u5185\u5BB9\u7EC4\u4EF6\uFF08FileBrowser \u90A3\u7C7B\u81EA\u5DF1\u5E26 17px\uFF09\uFF0C\n \u62BD\u5C49\u662F**\u901A\u7528\u5BB9\u5668**\uFF0C\u5FC5\u987B\u81EA\u5E26 \u2014\u2014 \u5426\u5219\u6587\u5B57\u76F4\u63A5\u8D34\u9762\u677F\u8FB9\uFF08\u7528\u6237 2026-11-02 \u622A\u56FE\uFF09\u3002\n \u5DE6\u53F3 14 \u4E0E\u5934\u90E8\u5DE6\u5185\u8DDD\u5BF9\u9F50\uFF0C\u4E0A\u4E0B\u4E5F\u7559\u540C\u6863\u547C\u5438\u3002 */\n.dshpc-sheet__body{padding:14px}\n/* \u5E95\u680F\uFF08\u53EF\u9009\uFF09\uFF1A\u7EBF\u8272\u4E0E\u5185\u8DDD\u5BF9\u9F50\u9762\u677F\u5934\u90E8\u3002 */\n.dshpc-sheet__foot{\n flex:none;display:flex;justify-content:flex-end;gap:8px;\n padding:10px 14px;border-top:1px solid var(--dshpc-border-faint);\n}\n/* \u5E95\u680F\u5DE6\u4FA7\u7684\u8FC7\u7A0B\u63D0\u793A\uFF1A\u5403\u6389\u6309\u94AE\u4E4B\u5916\u7684\u5269\u4F59\u5BBD\uFF0C\u8D85\u957F\u4EA4\u7ED9 FlipText \u7701\u7565 / hover \u8DD1\u9A6C\u706F\u3002 */\n.dshpc-sheet__notice{flex:1 1 auto;min-width:0;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);color:var(--dshpc-fg-3)}\n";
2
2
  //# sourceMappingURL=side-sheet-css.generated.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"side-sheet-css.generated.d.ts","sourceRoot":"","sources":["../../src/ui/side-sheet-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,6vFAAqzC,CAAA"}
1
+ {"version":3,"file":"side-sheet-css.generated.d.ts","sourceRoot":"","sources":["../../src/ui/side-sheet-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,2lGAAw/C,CAAA"}
@@ -1,4 +1,4 @@
1
1
  // ⚠️ 生成物,勿手改。真源 = src/ui/side-sheet.css
2
2
  // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
- export const SIDE_SHEET_CSS = "/* 侧边抽屉:覆盖式。**皮肤与 PanelDock 完全共用**(side-panel.css 的 .dshpc-side-surface\n + 头部 / 拖拽条 / 关闭钮),这里只管「怎么占位」:absolute 贴边、通高、盖在页面上。\n 与分栏的唯一差别:它不挤窄主区(所以没有 sticky、没有占宽、也没有收起)。\n\n 没有收起/耳朵(用户 2026-11-02):抽屉关就是关。 */\n\n.dshpc-sheet{position:absolute;top:0;bottom:0}\n/* 收起出场(用户 2026-11-02):宽度收到 0 + 淡出,播完由组件卸载。双类压过 .dshpc-side-surface 的入场动画。 */\n@keyframes dshpc-side-out{to{width:0;opacity:0;border-width:0;overflow:hidden}}\n.dshpc-side-surface.dshpc-sheet--leaving{animation:dshpc-side-out .2s var(--dshpc-ease) forwards;pointer-events:none;}\n/* 面与 Modal 同档(bg-layer-1),PanelDock 仍用页面底:双类压过共用的 .dshpc-side-surface,\n 不碰边框(用户 2026-11-02:只改背景)。 */\n.dshpc-side-surface.dshpc-sheet{background:var(--dshpc-surface-1)}\n/* 贴边那侧描边(与分栏的 border-left 同一套线色),拖拽条永远在**朝内**那一侧。 */\n.dshpc-sheet--left{left:0;border-right:1px solid var(--dshpc-border)}\n.dshpc-sheet--right{right:0;border-left:1px solid var(--dshpc-border)}\n.dshpc-sheet--left .dshpc-dock__resizer{left:auto;right:0}\n/* 内容内距:分栏的 body 把内距交给内容组件(FileBrowser 那类自己带 17px),\n 抽屉是**通用容器**,必须自带 —— 否则文字直接贴面板边(用户 2026-11-02 截图)。\n 左右 14 与头部左内距对齐,上下也留同档呼吸。 */\n.dshpc-sheet__body{padding:14px}\n/* 底栏(可选):线色与内距对齐面板头部。 */\n.dshpc-sheet__foot{\n flex:none;display:flex;justify-content:flex-end;gap:8px;\n padding:10px 14px;border-top:1px solid var(--dshpc-border-faint);\n}\n";
3
+ export const SIDE_SHEET_CSS = "/* 侧边抽屉:覆盖式。**皮肤与 PanelDock 完全共用**(side-panel.css 的 .dshpc-side-surface\n + 头部 / 拖拽条 / 关闭钮),这里只管「怎么占位」:absolute 贴边、通高、盖在页面上。\n 与分栏的唯一差别:它不挤窄主区(所以没有 sticky、没有占宽、也没有收起)。\n\n 没有收起/耳朵(用户 2026-11-02):抽屉关就是关。 */\n\n.dshpc-sheet{position:absolute;top:0;bottom:0}\n/* 收起出场(用户 2026-11-02):宽度收到 0 + 淡出,播完由组件卸载。双类压过 .dshpc-side-surface 的入场动画。 */\n@keyframes dshpc-side-out{to{width:0;opacity:0;border-width:0;overflow:hidden}}\n.dshpc-side-surface.dshpc-sheet--leaving{animation:dshpc-side-out .2s var(--dshpc-ease) forwards;pointer-events:none;}\n/* 面与 Modal 同档(bg-layer-1),PanelDock 仍用页面底:双类压过共用的 .dshpc-side-surface,\n 不碰边框(用户 2026-11-02:只改背景)。 */\n.dshpc-side-surface.dshpc-sheet{background:var(--dshpc-surface-1)}\n/* 贴边那侧描边(与分栏的 border-left 同一套线色),拖拽条永远在**朝内**那一侧。 */\n.dshpc-sheet--left{left:0;border-right:1px solid var(--dshpc-border)}\n.dshpc-sheet--right{right:0;border-left:1px solid var(--dshpc-border)}\n.dshpc-sheet--left .dshpc-dock__resizer{left:auto;right:0}\n/* 内容内距:分栏的 body 把内距交给内容组件(FileBrowser 那类自己带 17px),\n 抽屉是**通用容器**,必须自带 —— 否则文字直接贴面板边(用户 2026-11-02 截图)。\n 左右 14 与头部左内距对齐,上下也留同档呼吸。 */\n.dshpc-sheet__body{padding:14px}\n/* 底栏(可选):线色与内距对齐面板头部。 */\n.dshpc-sheet__foot{\n flex:none;display:flex;justify-content:flex-end;gap:8px;\n padding:10px 14px;border-top:1px solid var(--dshpc-border-faint);\n}\n/* 底栏左侧的过程提示:吃掉按钮之外的剩余宽,超长交给 FlipText 省略 / hover 跑马灯。 */\n.dshpc-sheet__notice{flex:1 1 auto;min-width:0;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);color:var(--dshpc-fg-3)}\n";
4
4
  //# sourceMappingURL=side-sheet-css.generated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"side-sheet-css.generated.js","sourceRoot":"","sources":["../../src/ui/side-sheet-css.generated.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,kzCAAkzC,CAAA"}
1
+ {"version":3,"file":"side-sheet-css.generated.js","sourceRoot":"","sources":["../../src/ui/side-sheet-css.generated.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,q/CAAq/C,CAAA"}
@@ -8,6 +8,18 @@ setStyleKit(createStyleKit({ id: 'dsh-task-reminder-ui' }))
8
8
  // 控件样式不用你挂:每个控件首次渲染时自注入自己那份 CSS(幂等),
9
9
  // 用不到的控件其 CSS 也不会进你的包。`
10
10
 
11
+ const flipExample = `import { FlipText } from 'dsh-plugin-core/ui'
12
+
13
+ // 换文案 = 改 text,动效自己放(旧的上移出、新的从下进)
14
+ const [step, setStep] = useState('正在扫描工作区…')
15
+ h(FlipText, { text: step })
16
+
17
+ // 溢出:放不下三点省略,hover 跑马灯
18
+ h(FlipText, { text: step, maxWidth: 220 })
19
+
20
+ // 宽度三档:width 优先,其次 minWidth / maxWidth
21
+ h(FlipText, { text: step, width: 200 })`
22
+
11
23
  const cardExample = `import { Card, Chip, StripCard } from 'dsh-plugin-core/ui'
12
24
 
13
25
  h(Card, {
@@ -270,7 +282,7 @@ const doc: DocTopic = {
270
282
  'Button', 'IconButton', 'Segmented', 'SplitGroup', 'Input', 'PrefixedInput', 'NumberInput', 'Textarea',
271
283
  'Checkbox', 'fieldMetricsOf', 'Picker', 'WorkspacePicker', 'ModelPicker', 'DateTimePicker', 'Surface', 'Card', 'StripCard',
272
284
  'Chip', 'Table', 'Pagination', 'Modal', 'SideSheet', 'FieldHint', 'setTooltipRenderer', 'showToast', 'notify', 'showHostToast',
273
- 'Loader', 'LoaderBar', 'Loading', 'RunningBlocks', 'SectionHead', 'MarqueeText', 'LiveText',
285
+ 'Loader', 'LoaderBar', 'Loading', 'RunningBlocks', 'SectionHead', 'MarqueeText', 'FlipText', 'LiveText',
274
286
  'QuickToolbar', 'startResizeLayoutWidth', 'PanelDock', 'createPanelDock', 'DockPanel',
275
287
  'ensureControls', 'setStyleKit',
276
288
  ],
@@ -622,6 +634,37 @@ const doc: DocTopic = {
622
634
  },
623
635
  ],
624
636
  },
637
+ {
638
+ id: 'flip-text',
639
+ heading: { zh: 'FlipText(翻牌文本)', en: 'FlipText' },
640
+ prose: [
641
+ {
642
+ zh: '一行文字,换一句翻一次牌:旧的上移出、新的从下进。**只给文本,动效自己放** —— `text` 变了就翻,没变不动(同一句重复设置不重播)。**空串 = 没有文案**:不渲染、不占位,同一块地方复用时靠它把上一句清干净;清空后再给值是直接出现,不从下方翻上来。',
643
+ en: 'One line of text that flips on every change: the old line slides up and out, the new one comes in from below. **Give it text; it owns the motion** — a changed `text` flips, an unchanged one does nothing (setting the same line twice does not replay). **An empty string means no line at all**: nothing rendered, no space taken, which is how a reused spot gets cleared; the next value then appears outright instead of sliding in.',
644
+ },
645
+ {
646
+ zh: '溢出与 MarqueeText 同一套:单行、放不下三点省略,鼠标移上去跑马灯(复用同一个实现,不重复测宽)。高度恒为一行,永不换行。',
647
+ en: 'Overflow behaves exactly like MarqueeText: one line, an ellipsis when it does not fit, marquee on hover (same implementation, no second width measurement). Height stays at one line and it never wraps.',
648
+ },
649
+ {
650
+ zh: '宽度三档同 Button / Chip:`width` 优先,`width` 未设时 `minWidth` / `maxWidth` 生效;三者都不传 = 随父容器(flex 子项自然伸缩,弹窗底栏就是这么用的)。要放进弹窗底栏左侧**不要自己包**,直接用 `Modal` / `ConfirmModal` / `AlertModal` / `SideSheet` 的 `notice`。',
651
+ en: 'Widths follow Button / Chip: `width` wins; `minWidth` / `maxWidth` apply only when it is unset; none of the three means "follow the parent" (a flex child stretches naturally — that is how the dialog footer uses it). To put it on the left of a dialog footer, use the `notice` prop on `Modal` / `ConfirmModal` / `AlertModal` / `SideSheet` rather than wrapping it yourself.',
652
+ },
653
+ ],
654
+ api: [
655
+ {
656
+ id: 'ui-flip-text',
657
+ rows: [
658
+ { name: 'text', type: 'string', def: '—(必填)', desc: { zh: '当前文本;变了就翻一次牌。**空串 = 没有文案**:不渲染、不占位(同一块地方复用靠它清场);清空后再给值是直接出现,不从下方翻上来', en: 'Current text; a change flips it once. **An empty string means no line at all**: nothing rendered, no space taken (that is how a reused spot is cleared); the next value appears outright instead of sliding in' } },
659
+ { name: 'width', type: 'number | string', def: '—', desc: { zh: '固定宽(px 或任意 CSS 宽度);与 minWidth / maxWidth 互斥,一旦设定后两者自动失效', en: 'Fixed width (px or any CSS width); mutually exclusive with minWidth/maxWidth — once set, the other two are ignored' } },
660
+ { name: 'minWidth', type: 'number | string', def: '—', desc: { zh: '最小宽:width 未设时生效', en: 'Minimum width: applies only when width is unset' } },
661
+ { name: 'maxWidth', type: 'number | string', def: '—', desc: { zh: '最大宽:width 未设时生效,文字超出折叠成省略号,hover 以跑马灯展开', en: 'Maximum width: applies only when width is unset; overflowing text collapses to an ellipsis and marquees on hover' } },
662
+ { name: 'className', type: 'string', def: '—', desc: { zh: '追加 class(只补字体 / 颜色这类皮肤,布局归组件自己)', en: 'Extra class (font / colour skin only; layout belongs to the component)' } },
663
+ ],
664
+ },
665
+ ],
666
+ code: [{ id: 'ui-flip-text-example', lang: 'tsx', src: flipExample }],
667
+ },
625
668
  {
626
669
  id: 'table',
627
670
  heading: { zh: 'Table(表格)', en: 'Table' },
@@ -809,6 +852,7 @@ const doc: DocTopic = {
809
852
  { name: 'maxWidth', type: 'string', def: '按 size', desc: { zh: '任意 CSS 值,覆盖 size 的宽度上限;不要用 vw(遮罩已按右侧分栏让位)', en: 'Any CSS value, overriding the size’s max width; avoid vw (the mask already yielded to the right column)' } },
810
853
  { name: 'hideHeader', type: 'boolean', def: "'false'", desc: { zh: '不渲染头部(沉浸式)', en: 'Skip header (immersive)' } },
811
854
  { name: 'footer', type: 'ReactNode', def: '—', desc: { zh: '底栏(按钮区;上下内距相等、内容垂直居中)', en: 'Footer (button area; symmetric padding, vertically centred)' } },
855
+ { name: 'notice', type: 'string', def: '—', desc: { zh: '底栏**左侧**的一行过程提示:换文案即翻牌,超长省略 + hover 跑马灯。不传 = 不占位、与以前完全一样;**传空字符串 = 清场**;footer 也可不给(它会自己撑起底栏)', en: 'One-line progress notice on the **left** of the footer: changing the string flips it, overflow elides and marquees on hover. Omitted = nothing at all (unchanged behaviour); **an empty string clears it**; `footer` may be omitted too — the notice alone brings the footer up' } },
812
856
  { name: 'footerDivider', type: 'boolean', def: "'true'", desc: { zh: '底栏上面的那条分隔线;传 false 关掉(sm 确认框本来就没有)', en: 'The divider above the footer; pass false to drop it (sm dialogs never have one)' } },
813
857
  { name: 'className', type: 'string', def: '—', desc: { zh: '追加 class(只补布局 / 视觉修饰,别覆盖皮肤)', en: 'Extra class (layout / visual tweaks only; do not override the skin)' } },
814
858
  { name: 'children', type: 'ReactNode', def: '—', desc: { zh: '主体', en: 'Body' } },
@@ -824,6 +868,7 @@ const doc: DocTopic = {
824
868
  { name: 'loadingText', type: 'boolean', def: 'true', desc: { zh: '传 false:loading 时两颗钮清文案、锁住有文案的宽度、只留居中的圈(见 `Button.loadingText`)', en: 'Pass false: while loading, both buttons drop their labels, freeze at the labelled width and show a centred spinner (see `Button.loadingText`)' } },
825
869
  { name: 'onConfirm / onCancel', type: '() => unknown', def: '—', desc: { zh: '确认 / 取消回调;返回 Promise 时按钮转圈、整框锁死,settle 后恢复;返回 `false` 不关', en: 'Confirm / cancel callback; a Promise makes its button spin and locks the dialog until it settles; `false` keeps it open' } },
826
870
  { name: 'confirmLoading / cancelLoading', type: 'boolean', def: 'false', desc: { zh: '外部驱动对应按钮 loading,与按钮自身异步状态取或', en: 'External loading for that button, OR-ed with its own async state' } },
871
+ { name: 'notice', type: 'string', def: '—', desc: { zh: '底栏**左侧**的一行过程提示(loading 期间逐步换文案、换一句翻一次牌,超长省略 + hover 跑马灯)。不传 = 不占位;**传空字符串 = 清场**(同一块地方复用下一轮时用它把上一句清掉)', en: 'One-line progress notice on the **left** of the footer (swap the string while loading, each change flips; overflow elides and marquees on hover). Omitted = nothing at all; **an empty string clears it** (use it when the same spot is reused for the next round)' } },
827
872
  { name: 'closeOnMask', type: 'boolean', def: "'true'", desc: { zh: '点遮罩关闭(等于取消)', en: 'Close on mask click (treated as cancel)' } },
828
873
  { name: 'size', type: 'ModalSize', def: "'sm'", desc: { zh: '尺寸档', en: 'Size tier' } },
829
874
  { name: 'translate', type: 'Translate', def: '内置字典', desc: { zh: '覆盖确定 / 取消文案', en: 'Override confirm / cancel copy' } },
@@ -839,6 +884,7 @@ const doc: DocTopic = {
839
884
  { name: 'loadingText', type: 'boolean', def: 'true', desc: { zh: '传 false:loading 时清文案、锁住有文案的宽度、只留居中的圈(见 `Button.loadingText`)', en: 'Pass false: while loading, drop the label, freeze at the labelled width and show a centred spinner (see `Button.loadingText`)' } },
840
885
  { name: 'onConfirm', type: '() => unknown', def: '—', desc: { zh: '确认 / 遮罩 / Esc 的统一出口;返回 Promise 时转圈锁框,返回 `false` 不关', en: 'Single exit for confirm / mask / Esc; a Promise spins and locks it, `false` keeps it open' } },
841
886
  { name: 'confirmLoading', type: 'boolean', def: 'false', desc: { zh: '外部驱动按钮 loading,与按钮自身异步状态取或', en: 'External button loading, OR-ed with its own async state' } },
887
+ { name: 'notice', type: 'string', def: '—', desc: { zh: '底栏**左侧**的一行过程提示(loading 期间逐步换文案、换一句翻一次牌,超长省略 + hover 跑马灯)。不传 = 不占位;**传空字符串 = 清场**(同一块地方复用下一轮时用它把上一句清掉)', en: 'One-line progress notice on the **left** of the footer (swap the string while loading, each change flips; overflow elides and marquees on hover). Omitted = nothing at all; **an empty string clears it** (use it when the same spot is reused for the next round)' } },
842
888
  { name: 'closeOnMask', type: 'boolean', def: "'true'", desc: { zh: '点遮罩关闭', en: 'Close on mask click' } },
843
889
  { name: 'size', type: 'ModalSize', def: "'sm'", desc: { zh: '尺寸档', en: 'Size tier' } },
844
890
  { name: 'translate', type: 'Translate', def: '内置字典', desc: { zh: '覆盖按钮文案', en: 'Override the button copy' } },
@@ -889,6 +935,7 @@ const doc: DocTopic = {
889
935
  { name: 'width / minWidth / maxWidth', type: 'number / number / number', def: '460 / 320 / —', desc: { zh: '初始宽度 / 拖拽下限 / 拖拽上限(px;上限缺省 = 遮罩盒宽)', en: 'Initial width / resize floor / resize ceiling (px; ceiling defaults to the mask box)' } },
890
936
  { name: 'resizable', type: 'boolean', def: 'true', desc: { zh: '能否拖宽(关掉就没有拖拽条)', en: 'Whether it resizes by dragging (off = no handle)' } },
891
937
  { name: 'footer / children', type: 'ReactNode / ReactNode', def: '— / —', desc: { zh: '底栏 / 主体(主体是唯一滚动容器)', en: 'Footer / body (the body is the only scroll container)' } },
938
+ { name: 'notice', type: 'string', def: '—', desc: { zh: '底栏**左侧**的一行过程提示(换文案即翻牌,超长省略 + hover 跑马灯)。不传 = 不占位;**传空字符串 = 清场**(抽屉常驻渲染,关掉再开时用它清上一轮)', en: 'One-line progress notice on the **left** of the footer (changing it flips; overflow elides and marquees on hover). Omitted = nothing at all; **an empty string clears it** (the drawer stays mounted, so this is how the previous round is wiped)' } },
892
939
  { name: 'translate', type: 'Translate', def: '内置字典', desc: { zh: '覆盖关闭 / 拖拽条的文案', en: 'Override close / resize copy' } },
893
940
  ],
894
941
  },
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、Surface、Card、StripCard、Chip、Table、Pagination、Modal、SideSheet、FieldHint、setTooltipRenderer、showToast、notify、showHostToast、Loader、LoaderBar、Loading、RunningBlocks、SectionHead、MarqueeText、LiveText、QuickToolbar、startResizeLayoutWidth、PanelDock、createPanelDock、DockPanel、ensureControls、setStyleKit
7
+ 导出:Button、IconButton、Segmented、SplitGroup、Input、PrefixedInput、NumberInput、Textarea、Checkbox、fieldMetricsOf、Picker、WorkspacePicker、ModelPicker、DateTimePicker、Surface、Card、StripCard、Chip、Table、Pagination、Modal、SideSheet、FieldHint、setTooltipRenderer、showToast、notify、showHostToast、Loader、LoaderBar、Loading、RunningBlocks、SectionHead、MarqueeText、FlipText、LiveText、QuickToolbar、startResizeLayoutWidth、PanelDock、createPanelDock、DockPanel、ensureControls、setStyleKit
8
8
 
9
9
  ## 概览
10
10
 
@@ -397,6 +397,44 @@ h(StripCard, {
397
397
  | `className` | `string` | — | 追加 class(只允许补布局,不许覆盖皮肤) | Extra class (layout only, never overrides the skin) |
398
398
  | `children` | `ReactNode` | — | 标签内容(maxWidth + 纯文字时自动接跑马灯) | Tag content (auto-marqueed when maxWidth + plain text) |
399
399
 
400
+ ## FlipText(翻牌文本)
401
+
402
+ > EN: FlipText
403
+
404
+ 一行文字,换一句翻一次牌:旧的上移出、新的从下进。**只给文本,动效自己放** —— `text` 变了就翻,没变不动(同一句重复设置不重播)。**空串 = 没有文案**:不渲染、不占位,同一块地方复用时靠它把上一句清干净;清空后再给值是直接出现,不从下方翻上来。
405
+
406
+ > EN: One line of text that flips on every change: the old line slides up and out, the new one comes in from below. **Give it text; it owns the motion** — a changed `text` flips, an unchanged one does nothing (setting the same line twice does not replay). **An empty string means no line at all**: nothing rendered, no space taken, which is how a reused spot gets cleared; the next value then appears outright instead of sliding in.
407
+
408
+ 溢出与 MarqueeText 同一套:单行、放不下三点省略,鼠标移上去跑马灯(复用同一个实现,不重复测宽)。高度恒为一行,永不换行。
409
+
410
+ > EN: Overflow behaves exactly like MarqueeText: one line, an ellipsis when it does not fit, marquee on hover (same implementation, no second width measurement). Height stays at one line and it never wraps.
411
+
412
+ 宽度三档同 Button / Chip:`width` 优先,`width` 未设时 `minWidth` / `maxWidth` 生效;三者都不传 = 随父容器(flex 子项自然伸缩,弹窗底栏就是这么用的)。要放进弹窗底栏左侧**不要自己包**,直接用 `Modal` / `ConfirmModal` / `AlertModal` / `SideSheet` 的 `notice`。
413
+
414
+ > EN: Widths follow Button / Chip: `width` wins; `minWidth` / `maxWidth` apply only when it is unset; none of the three means "follow the parent" (a flex child stretches naturally — that is how the dialog footer uses it). To put it on the left of a dialog footer, use the `notice` prop on `Modal` / `ConfirmModal` / `AlertModal` / `SideSheet` rather than wrapping it yourself.
415
+
416
+ | 参数 | 类型 | 默认 | 说明(zh) | 说明(en) |
417
+ |---|---|---|---|---|
418
+ | `text` | `string` | —(必填) | 当前文本;变了就翻一次牌。**空串 = 没有文案**:不渲染、不占位(同一块地方复用靠它清场);清空后再给值是直接出现,不从下方翻上来 | Current text; a change flips it once. **An empty string means no line at all**: nothing rendered, no space taken (that is how a reused spot is cleared); the next value appears outright instead of sliding in |
419
+ | `width` | `number \| string` | — | 固定宽(px 或任意 CSS 宽度);与 minWidth / maxWidth 互斥,一旦设定后两者自动失效 | Fixed width (px or any CSS width); mutually exclusive with minWidth/maxWidth — once set, the other two are ignored |
420
+ | `minWidth` | `number \| string` | — | 最小宽:width 未设时生效 | Minimum width: applies only when width is unset |
421
+ | `maxWidth` | `number \| string` | — | 最大宽:width 未设时生效,文字超出折叠成省略号,hover 以跑马灯展开 | Maximum width: applies only when width is unset; overflowing text collapses to an ellipsis and marquees on hover |
422
+ | `className` | `string` | — | 追加 class(只补字体 / 颜色这类皮肤,布局归组件自己) | Extra class (font / colour skin only; layout belongs to the component) |
423
+
424
+ ```tsx id="ui-flip-text-example"
425
+ import { FlipText } from 'dsh-plugin-core/ui'
426
+
427
+ // 换文案 = 改 text,动效自己放(旧的上移出、新的从下进)
428
+ const [step, setStep] = useState('正在扫描工作区…')
429
+ h(FlipText, { text: step })
430
+
431
+ // 溢出:放不下三点省略,hover 跑马灯
432
+ h(FlipText, { text: step, maxWidth: 220 })
433
+
434
+ // 宽度三档:width 优先,其次 minWidth / maxWidth
435
+ h(FlipText, { text: step, width: 200 })
436
+ ```
437
+
400
438
  ## Table(表格)
401
439
 
402
440
  > EN: Table
@@ -681,6 +719,7 @@ Modal 是自绘 overlay,不走 react-dom portal。
681
719
  | `maxWidth` | `string` | 按 size | 任意 CSS 值,覆盖 size 的宽度上限;不要用 vw(遮罩已按右侧分栏让位) | Any CSS value, overriding the size’s max width; avoid vw (the mask already yielded to the right column) |
682
720
  | `hideHeader` | `boolean` | 'false' | 不渲染头部(沉浸式) | Skip header (immersive) |
683
721
  | `footer` | `ReactNode` | — | 底栏(按钮区;上下内距相等、内容垂直居中) | Footer (button area; symmetric padding, vertically centred) |
722
+ | `notice` | `string` | — | 底栏**左侧**的一行过程提示:换文案即翻牌,超长省略 + hover 跑马灯。不传 = 不占位、与以前完全一样;**传空字符串 = 清场**;footer 也可不给(它会自己撑起底栏) | One-line progress notice on the **left** of the footer: changing the string flips it, overflow elides and marquees on hover. Omitted = nothing at all (unchanged behaviour); **an empty string clears it**; `footer` may be omitted too — the notice alone brings the footer up |
684
723
  | `footerDivider` | `boolean` | 'true' | 底栏上面的那条分隔线;传 false 关掉(sm 确认框本来就没有) | The divider above the footer; pass false to drop it (sm dialogs never have one) |
685
724
  | `className` | `string` | — | 追加 class(只补布局 / 视觉修饰,别覆盖皮肤) | Extra class (layout / visual tweaks only; do not override the skin) |
686
725
  | `children` | `ReactNode` | — | 主体 | Body |
@@ -694,6 +733,7 @@ Modal 是自绘 overlay,不走 react-dom portal。
694
733
  | `loadingText` | `boolean` | true | 传 false:loading 时两颗钮清文案、锁住有文案的宽度、只留居中的圈(见 `Button.loadingText`) | Pass false: while loading, both buttons drop their labels, freeze at the labelled width and show a centred spinner (see `Button.loadingText`) |
695
734
  | `onConfirm / onCancel` | `() => unknown` | — | 确认 / 取消回调;返回 Promise 时按钮转圈、整框锁死,settle 后恢复;返回 `false` 不关 | Confirm / cancel callback; a Promise makes its button spin and locks the dialog until it settles; `false` keeps it open |
696
735
  | `confirmLoading / cancelLoading` | `boolean` | false | 外部驱动对应按钮 loading,与按钮自身异步状态取或 | External loading for that button, OR-ed with its own async state |
736
+ | `notice` | `string` | — | 底栏**左侧**的一行过程提示(loading 期间逐步换文案、换一句翻一次牌,超长省略 + hover 跑马灯)。不传 = 不占位;**传空字符串 = 清场**(同一块地方复用下一轮时用它把上一句清掉) | One-line progress notice on the **left** of the footer (swap the string while loading, each change flips; overflow elides and marquees on hover). Omitted = nothing at all; **an empty string clears it** (use it when the same spot is reused for the next round) |
697
737
  | `closeOnMask` | `boolean` | 'true' | 点遮罩关闭(等于取消) | Close on mask click (treated as cancel) |
698
738
  | `size` | `ModalSize` | 'sm' | 尺寸档 | Size tier |
699
739
  | `translate` | `Translate` | 内置字典 | 覆盖确定 / 取消文案 | Override confirm / cancel copy |
@@ -707,6 +747,7 @@ Modal 是自绘 overlay,不走 react-dom portal。
707
747
  | `loadingText` | `boolean` | true | 传 false:loading 时清文案、锁住有文案的宽度、只留居中的圈(见 `Button.loadingText`) | Pass false: while loading, drop the label, freeze at the labelled width and show a centred spinner (see `Button.loadingText`) |
708
748
  | `onConfirm` | `() => unknown` | — | 确认 / 遮罩 / Esc 的统一出口;返回 Promise 时转圈锁框,返回 `false` 不关 | Single exit for confirm / mask / Esc; a Promise spins and locks it, `false` keeps it open |
709
749
  | `confirmLoading` | `boolean` | false | 外部驱动按钮 loading,与按钮自身异步状态取或 | External button loading, OR-ed with its own async state |
750
+ | `notice` | `string` | — | 底栏**左侧**的一行过程提示(loading 期间逐步换文案、换一句翻一次牌,超长省略 + hover 跑马灯)。不传 = 不占位;**传空字符串 = 清场**(同一块地方复用下一轮时用它把上一句清掉) | One-line progress notice on the **left** of the footer (swap the string while loading, each change flips; overflow elides and marquees on hover). Omitted = nothing at all; **an empty string clears it** (use it when the same spot is reused for the next round) |
710
751
  | `closeOnMask` | `boolean` | 'true' | 点遮罩关闭 | Close on mask click |
711
752
  | `size` | `ModalSize` | 'sm' | 尺寸档 | Size tier |
712
753
  | `translate` | `Translate` | 内置字典 | 覆盖按钮文案 | Override the button copy |
@@ -749,6 +790,7 @@ Modal 是自绘 overlay,不走 react-dom portal。
749
790
  | `width / minWidth / maxWidth` | `number / number / number` | 460 / 320 / — | 初始宽度 / 拖拽下限 / 拖拽上限(px;上限缺省 = 遮罩盒宽) | Initial width / resize floor / resize ceiling (px; ceiling defaults to the mask box) |
750
791
  | `resizable` | `boolean` | true | 能否拖宽(关掉就没有拖拽条) | Whether it resizes by dragging (off = no handle) |
751
792
  | `footer / children` | `ReactNode / ReactNode` | — / — | 底栏 / 主体(主体是唯一滚动容器) | Footer / body (the body is the only scroll container) |
793
+ | `notice` | `string` | — | 底栏**左侧**的一行过程提示(换文案即翻牌,超长省略 + hover 跑马灯)。不传 = 不占位;**传空字符串 = 清场**(抽屉常驻渲染,关掉再开时用它清上一轮) | One-line progress notice on the **left** of the footer (changing it flips; overflow elides and marquees on hover). Omitted = nothing at all; **an empty string clears it** (the drawer stays mounted, so this is how the previous round is wiped) |
752
794
  | `translate` | `Translate` | 内置字典 | 覆盖关闭 / 拖拽条的文案 | Override close / resize copy |
753
795
 
754
796
  ```tsx id="ui-sidesheet-example"
@@ -46,7 +46,7 @@ dsh-plugin-core/
46
46
  ### 2.2 ui
47
47
 
48
48
  - 零件:Button / Input 家族 / Textarea / Checkbox / Segmented / 下拉框 / 搜索框 / 滑轨 /
49
- MarqueeText / LiveText / Field(含错误提示)/ resizer / DateTime / TimeRange
49
+ MarqueeText / FlipText / LiveText / Field(含错误提示)/ resizer / DateTime / TimeRange
50
50
  - 选择器:`Picker`(通用:单选/多选/上限/搜索/分组/空态/降级)、`ModelPicker`、
51
51
  `WorkspacePicker`(选工作区);`FilePicker` 已删(2026-10-20 用户:文件选择框没有用)
52
52
  - 日期时间:`DateTimePicker`(2026-10-24 新增:单值 / 时间段 × 精度 day/hour/minute/second;
@@ -126,6 +126,15 @@ dsh-plugin-core/
126
126
  清文案后读屏名称靠 `aria-label`(字符串 children 自动补,复合 children 由调用方给);
127
127
  首帧就是 loading(没有「有文案的宽度」可量)时锁不到宽,走 ① 的 `width`。
128
128
  loading 圈包进 `.dshpc-btn__icon`(svg 被 1em 规则接管)⇒ 有 icon 的按钮切 loading 宽度零差。
129
+ - **弹窗底栏左侧的过程提示**(2026-11-04 用户拍板):`Modal` / `ConfirmModal` / `AlertModal` / `SideSheet`
130
+ 各加一个 `notice?: string`,渲染在 footer 最左;**不传 = 不占位**,与接入前完全一样(`footer` 也可不给,
131
+ notice 自己撑起底栏)。换文案即翻牌(旧的上移出、新的从下进),单行、超长三点省略、hover 跑马灯 ——
132
+ 跑马灯与省略**复用 `MarqueeText`**,不另写一份测宽;高度恒为一行,永不换行。
133
+ **空串 = 没有文案**(2026-11-04 用户补的要求):不渲染、不占位 —— 底栏那块地方被下一轮复用时,
134
+ 传空串就把上一句清干净;清空后第一次给值是直接出现、不从下方翻上来(没有上一句可翻)。
135
+ 实现分两层(用户拍板「拆成两层、不做引擎、不监听 loading」):控件 `FlipText`(`text` 变了就翻,
136
+ 没变不动;宽度三档与 Button / Chip 同口径:`width` 优先,其次 `minWidth` / `maxWidth`,
137
+ 全不传 = 随父容器)+ 弹窗只做「挂载位 + 透传」。步骤队列、loading 状态一律由调用方 setState 管。
129
138
  - `Loading` 是旧的「自带定位 + 自带 pill 背景」复合件,**保留不删**但标 `@deprecated`,新代码用 `Loader`。
130
139
  - 布局基础:`PanelDock` / `DockPanel` / `createPanelDock`(**可停靠分栏容器**:多面板并存、按组名寻址、拖拽拉栏、宽度记忆;2026-10-20 拍板用此名,替代早先的 `SidebarLayout` / `SplitPane`)。只做右侧;组名与窗口一对一;默认上限 3,超限拒绝新开;不做 tab 切换 / 自动淘汰 / 多份同名;**面板本身始终是布局成员,不做面板浮层**(2026-10-28 补:**收起** = 面板退出布局、另出右侧一只独立的 `position: fixed` 耳朵,点耳朵展开并还原宽度;关闭不留耳朵——耳朵是独立浮层,不是把面板变浮层)。**结构照成熟库口径写 children,`open/close` 只传 id,不把页面树塞进调用参数**
131
140
  - 浮动快捷工具栏:`QuickToolbar`(2026-10-31 用户拍板):右侧一列独立圆钮,纵向**恒贴屏幕底边**(默认 16px);横向默认贴屏幕右缘,传 `anchorId` / `anchor()` 时贴到指定控件右缘外侧,右侧放不下则退回屏幕右缘(控件找不到按跟随窗口处理)。内置回顶部默认 `when:'scroll'`、阈值 320,`backToTop:false` 可关掉,对象可调 `order` / `label` / `threshold`;自定义项 `items` 支持 `icon` / `label` / `onClick` / `visible` / `when` / `order` / `threshold` / `color` / `fgColor`,统一 `onAction`。旧的 `BackToTop` **全部删除**,只保留这一份,不做迁移。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-core",
3
- "version": "0.25.0",
3
+ "version": "0.26.0",
4
4
  "packageManager": "pnpm@12.3.4",
5
5
  "description": "Shared base for DSH plugins: design tokens, UI controls, utils, workspace explorer, session preview",
6
6
  "keywords": [