@fangxinyan/lumina 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/Accordion.cjs +3 -3
  2. package/dist/Accordion.js +2 -2
  3. package/dist/Alert.cjs +3 -3
  4. package/dist/Alert.js +2 -2
  5. package/dist/AutoComplete.cjs +5 -5
  6. package/dist/AutoComplete.js +4 -4
  7. package/dist/Button.cjs +4 -4
  8. package/dist/Button.js +2 -2
  9. package/dist/Calendar.cjs +3 -3
  10. package/dist/Calendar.js +2 -2
  11. package/dist/Cascader.cjs +4 -4
  12. package/dist/Cascader.js +3 -3
  13. package/dist/Checkbox.cjs +4 -4
  14. package/dist/Checkbox.js +2 -2
  15. package/dist/ColorPicker.cjs +3 -3
  16. package/dist/ColorPicker.js +2 -2
  17. package/dist/CommandPalette.cjs +4 -4
  18. package/dist/CommandPalette.js +3 -3
  19. package/dist/Drawer.cjs +3 -3
  20. package/dist/Drawer.js +2 -2
  21. package/dist/Icon.cjs +3 -3
  22. package/dist/Icon.d.cts +1 -1
  23. package/dist/Icon.d.ts +1 -1
  24. package/dist/Icon.js +1 -1
  25. package/dist/Image.cjs +4 -4
  26. package/dist/Image.js +2 -2
  27. package/dist/Input.cjs +4 -4
  28. package/dist/Input.js +2 -2
  29. package/dist/InputNumber.cjs +4 -4
  30. package/dist/InputNumber.js +3 -3
  31. package/dist/Modal.cjs +4 -4
  32. package/dist/Modal.js +3 -3
  33. package/dist/Pagination.cjs +6 -6
  34. package/dist/Pagination.js +5 -5
  35. package/dist/Popover-DVGQGWX6.css +103 -0
  36. package/dist/Popover.cjs +3 -3
  37. package/dist/Popover.d.cts +23 -1
  38. package/dist/Popover.d.ts +23 -1
  39. package/dist/Popover.js +2 -2
  40. package/dist/Select.cjs +5 -5
  41. package/dist/Select.js +4 -4
  42. package/dist/Table.cjs +9 -9
  43. package/dist/Table.js +7 -7
  44. package/dist/Tag.cjs +4 -4
  45. package/dist/Tag.js +2 -2
  46. package/dist/Timeline-RHZAZKZ7.css +136 -0
  47. package/dist/Timeline.cjs +13 -0
  48. package/dist/Timeline.cjs.map +1 -0
  49. package/dist/Timeline.d.cts +38 -0
  50. package/dist/Timeline.d.ts +38 -0
  51. package/dist/Timeline.js +4 -0
  52. package/dist/Timeline.js.map +1 -0
  53. package/dist/{Toast-6PVSAXQ5.css → Toast-YSACW3EM.css} +2 -2
  54. package/dist/Toast.cjs +4 -4
  55. package/dist/Toast.js +2 -2
  56. package/dist/{Tooltip-ST24GY4S.css → Tooltip-DMKUPC24.css} +1 -0
  57. package/dist/Tooltip.cjs +3 -3
  58. package/dist/Tooltip.js +2 -2
  59. package/dist/Typography.cjs +7 -7
  60. package/dist/Typography.js +2 -2
  61. package/dist/{chunk-BCPAY65C.cjs → chunk-2D5VCIJZ.cjs} +7 -7
  62. package/dist/{chunk-BCPAY65C.cjs.map → chunk-2D5VCIJZ.cjs.map} +1 -1
  63. package/dist/{chunk-LLNEDEST.cjs → chunk-2OBQOEFD.cjs} +4 -4
  64. package/dist/{chunk-LLNEDEST.cjs.map → chunk-2OBQOEFD.cjs.map} +1 -1
  65. package/dist/{chunk-N73JGXYZ.cjs → chunk-3ES5QPAF.cjs} +4 -4
  66. package/dist/{chunk-N73JGXYZ.cjs.map → chunk-3ES5QPAF.cjs.map} +1 -1
  67. package/dist/{chunk-YCHUHMNP.cjs → chunk-3KQKEE5O.cjs} +5 -4
  68. package/dist/chunk-3KQKEE5O.cjs.map +1 -0
  69. package/dist/{chunk-RZ2E3XEU.cjs → chunk-3XIDJEYR.cjs} +21 -6
  70. package/dist/chunk-3XIDJEYR.cjs.map +1 -0
  71. package/dist/{chunk-IOWREUEP.js → chunk-3YYOYDKI.js} +4 -4
  72. package/dist/{chunk-IOWREUEP.js.map → chunk-3YYOYDKI.js.map} +1 -1
  73. package/dist/{chunk-PKXXR76Q.js → chunk-4ADDAZK3.js} +3 -3
  74. package/dist/{chunk-PKXXR76Q.js.map → chunk-4ADDAZK3.js.map} +1 -1
  75. package/dist/{chunk-TZLM5GF4.js → chunk-5SJJI3HL.js} +4 -4
  76. package/dist/{chunk-TZLM5GF4.js.map → chunk-5SJJI3HL.js.map} +1 -1
  77. package/dist/{chunk-2ENTRT7R.cjs → chunk-AJEF2ZB7.cjs} +16 -6
  78. package/dist/chunk-AJEF2ZB7.cjs.map +1 -0
  79. package/dist/{chunk-V2DIQ3RH.js → chunk-ANAQER3T.js} +21 -6
  80. package/dist/chunk-ANAQER3T.js.map +1 -0
  81. package/dist/{chunk-FXQGPHK2.js → chunk-AZRJZM7W.js} +3 -3
  82. package/dist/{chunk-FXQGPHK2.js.map → chunk-AZRJZM7W.js.map} +1 -1
  83. package/dist/{chunk-3BZ47QNV.cjs → chunk-BIXW4ZYW.cjs} +7 -7
  84. package/dist/{chunk-3BZ47QNV.cjs.map → chunk-BIXW4ZYW.cjs.map} +1 -1
  85. package/dist/{chunk-IJA26LRY.cjs → chunk-BPDWBY6Y.cjs} +4 -4
  86. package/dist/{chunk-IJA26LRY.cjs.map → chunk-BPDWBY6Y.cjs.map} +1 -1
  87. package/dist/{chunk-77TZHI76.cjs → chunk-D26YHP2Y.cjs} +7 -7
  88. package/dist/{chunk-77TZHI76.cjs.map → chunk-D26YHP2Y.cjs.map} +1 -1
  89. package/dist/{chunk-T4PI2ZX7.cjs → chunk-D3GZSL2B.cjs} +16 -17
  90. package/dist/chunk-D3GZSL2B.cjs.map +1 -0
  91. package/dist/{chunk-VQBZKRIB.cjs → chunk-DF5K2BZ2.cjs} +6 -6
  92. package/dist/{chunk-VQBZKRIB.cjs.map → chunk-DF5K2BZ2.cjs.map} +1 -1
  93. package/dist/{chunk-7M7NAMR5.js → chunk-DLGFIRVW.js} +14 -4
  94. package/dist/chunk-DLGFIRVW.js.map +1 -0
  95. package/dist/{chunk-6Z24VO3K.js → chunk-E7UQSFKF.js} +3 -3
  96. package/dist/{chunk-6Z24VO3K.js.map → chunk-E7UQSFKF.js.map} +1 -1
  97. package/dist/{chunk-KW7Z4IQC.js → chunk-FLPHVK45.js} +3 -3
  98. package/dist/{chunk-KW7Z4IQC.js.map → chunk-FLPHVK45.js.map} +1 -1
  99. package/dist/{chunk-WUOFJPZ4.js → chunk-GB5NAXBP.js} +3 -3
  100. package/dist/{chunk-WUOFJPZ4.js.map → chunk-GB5NAXBP.js.map} +1 -1
  101. package/dist/{chunk-SMHXSEBD.cjs → chunk-GT45MQAK.cjs} +7 -7
  102. package/dist/{chunk-SMHXSEBD.cjs.map → chunk-GT45MQAK.cjs.map} +1 -1
  103. package/dist/{chunk-TZXEZFCI.cjs → chunk-H2QTLV5T.cjs} +5 -5
  104. package/dist/{chunk-TZXEZFCI.cjs.map → chunk-H2QTLV5T.cjs.map} +1 -1
  105. package/dist/{chunk-FFZLSY2N.js → chunk-HHPYY4LH.js} +4 -4
  106. package/dist/{chunk-FFZLSY2N.js.map → chunk-HHPYY4LH.js.map} +1 -1
  107. package/dist/{chunk-XYVJ3FBQ.cjs → chunk-I7UJA6RM.cjs} +5 -5
  108. package/dist/{chunk-XYVJ3FBQ.cjs.map → chunk-I7UJA6RM.cjs.map} +1 -1
  109. package/dist/{chunk-YFBHVTKN.cjs → chunk-IJIQ4H6C.cjs} +7 -7
  110. package/dist/{chunk-YFBHVTKN.cjs.map → chunk-IJIQ4H6C.cjs.map} +1 -1
  111. package/dist/{chunk-LXNR6TQK.js → chunk-ILVNMES2.js} +3 -3
  112. package/dist/{chunk-LXNR6TQK.js.map → chunk-ILVNMES2.js.map} +1 -1
  113. package/dist/{chunk-JXHMJUVI.js → chunk-JELHUUM5.js} +3 -3
  114. package/dist/{chunk-JXHMJUVI.js.map → chunk-JELHUUM5.js.map} +1 -1
  115. package/dist/{chunk-CTYW42GG.js → chunk-JQZFOIX6.js} +6 -6
  116. package/dist/{chunk-CTYW42GG.js.map → chunk-JQZFOIX6.js.map} +1 -1
  117. package/dist/{chunk-I7WLFADD.js → chunk-LWN2PXW7.js} +3 -3
  118. package/dist/{chunk-I7WLFADD.js.map → chunk-LWN2PXW7.js.map} +1 -1
  119. package/dist/{chunk-I2HHC6QW.js → chunk-N5W6XJI2.js} +3 -3
  120. package/dist/{chunk-I2HHC6QW.js.map → chunk-N5W6XJI2.js.map} +1 -1
  121. package/dist/chunk-P2AV5BD7.cjs +137 -0
  122. package/dist/chunk-P2AV5BD7.cjs.map +1 -0
  123. package/dist/{chunk-ZFJHUOFU.js → chunk-P4XPESR2.js} +4 -4
  124. package/dist/{chunk-ZFJHUOFU.js.map → chunk-P4XPESR2.js.map} +1 -1
  125. package/dist/{chunk-AESLEYST.js → chunk-RJNGXR5Y.js} +4 -4
  126. package/dist/{chunk-AESLEYST.js.map → chunk-RJNGXR5Y.js.map} +1 -1
  127. package/dist/chunk-S3NIRNWM.js +86 -0
  128. package/dist/chunk-S3NIRNWM.js.map +1 -0
  129. package/dist/{chunk-HJIKU6MF.cjs → chunk-S7RFIMA3.cjs} +4 -4
  130. package/dist/{chunk-HJIKU6MF.cjs.map → chunk-S7RFIMA3.cjs.map} +1 -1
  131. package/dist/chunk-TAYFI4RG.cjs +108 -0
  132. package/dist/chunk-TAYFI4RG.cjs.map +1 -0
  133. package/dist/{chunk-OZVPJWXO.cjs → chunk-TCPTBLDV.cjs} +5 -5
  134. package/dist/{chunk-OZVPJWXO.cjs.map → chunk-TCPTBLDV.cjs.map} +1 -1
  135. package/dist/{chunk-E62JFAHW.js → chunk-TGUDT3GK.js} +4 -4
  136. package/dist/{chunk-E62JFAHW.js.map → chunk-TGUDT3GK.js.map} +1 -1
  137. package/dist/{chunk-XCYE4OQV.js → chunk-TMRSI543.js} +3 -3
  138. package/dist/{chunk-XCYE4OQV.js.map → chunk-TMRSI543.js.map} +1 -1
  139. package/dist/{chunk-RWHWEQQX.cjs → chunk-U7TAQLPN.cjs} +6 -6
  140. package/dist/{chunk-RWHWEQQX.cjs.map → chunk-U7TAQLPN.cjs.map} +1 -1
  141. package/dist/chunk-UEHONGPZ.js +115 -0
  142. package/dist/chunk-UEHONGPZ.js.map +1 -0
  143. package/dist/{chunk-NN7WMXY4.cjs → chunk-UUY7EDVJ.cjs} +4 -4
  144. package/dist/{chunk-NN7WMXY4.cjs.map → chunk-UUY7EDVJ.cjs.map} +1 -1
  145. package/dist/{chunk-OM76QWUN.js → chunk-UXABXEWT.js} +3 -3
  146. package/dist/{chunk-OM76QWUN.js.map → chunk-UXABXEWT.js.map} +1 -1
  147. package/dist/{chunk-MDQNUKCP.cjs → chunk-V6466VMN.cjs} +14 -14
  148. package/dist/{chunk-MDQNUKCP.cjs.map → chunk-V6466VMN.cjs.map} +1 -1
  149. package/dist/{chunk-O7C6S644.js → chunk-WBL7LOIH.js} +3 -3
  150. package/dist/{chunk-O7C6S644.js.map → chunk-WBL7LOIH.js.map} +1 -1
  151. package/dist/{chunk-RQV7SMIZ.cjs → chunk-WKNVNN2K.cjs} +5 -5
  152. package/dist/{chunk-RQV7SMIZ.cjs.map → chunk-WKNVNN2K.cjs.map} +1 -1
  153. package/dist/{chunk-HXSAH4Y6.cjs → chunk-WR3FML2W.cjs} +7 -7
  154. package/dist/{chunk-HXSAH4Y6.cjs.map → chunk-WR3FML2W.cjs.map} +1 -1
  155. package/dist/{chunk-QOGROEVD.js → chunk-X3JG3IR6.js} +6 -5
  156. package/dist/chunk-X3JG3IR6.js.map +1 -0
  157. package/dist/{chunk-6XZ362VL.js → chunk-XT7RXXOE.js} +6 -7
  158. package/dist/chunk-XT7RXXOE.js.map +1 -0
  159. package/dist/{chunk-WVBFQB26.cjs → chunk-ZSR5JSYZ.cjs} +8 -8
  160. package/dist/{chunk-WVBFQB26.cjs.map → chunk-ZSR5JSYZ.cjs.map} +1 -1
  161. package/dist/index.cjs +65 -60
  162. package/dist/index.cjs.map +1 -1
  163. package/dist/index.d.cts +2 -1
  164. package/dist/index.d.ts +2 -1
  165. package/dist/index.js +26 -25
  166. package/dist/index.js.map +1 -1
  167. package/dist/styles.css +86 -4
  168. package/docs/llms/popover.md +138 -6
  169. package/docs/llms/timeline.md +140 -0
  170. package/docs/llms.md +3 -2
  171. package/package.json +5 -1
  172. package/dist/Popover-NYEKT5CQ.css +0 -10
  173. package/dist/chunk-2ENTRT7R.cjs.map +0 -1
  174. package/dist/chunk-3UU2PUK4.js +0 -66
  175. package/dist/chunk-3UU2PUK4.js.map +0 -1
  176. package/dist/chunk-6XZ362VL.js.map +0 -1
  177. package/dist/chunk-7M7NAMR5.js.map +0 -1
  178. package/dist/chunk-O2HMH5BI.cjs +0 -88
  179. package/dist/chunk-O2HMH5BI.cjs.map +0 -1
  180. package/dist/chunk-QOGROEVD.js.map +0 -1
  181. package/dist/chunk-RZ2E3XEU.cjs.map +0 -1
  182. package/dist/chunk-T4PI2ZX7.cjs.map +0 -1
  183. package/dist/chunk-V2DIQ3RH.js.map +0 -1
  184. package/dist/chunk-YCHUHMNP.cjs.map +0 -1
@@ -1,5 +1,5 @@
1
- import { Button } from './chunk-JXHMJUVI.js';
2
- import { Icon } from './chunk-QOGROEVD.js';
1
+ import { Button } from './chunk-JELHUUM5.js';
2
+ import { Icon } from './chunk-X3JG3IR6.js';
3
3
  import './tokens-BIIUTPKN.css';
4
4
  import './shared-NJHRNLRH.css';
5
5
  import './Modal-XSDMU4XJ.css';
@@ -121,5 +121,5 @@ var Modal = ({
121
121
  };
122
122
 
123
123
  export { Modal };
124
- //# sourceMappingURL=chunk-TZLM5GF4.js.map
125
- //# sourceMappingURL=chunk-TZLM5GF4.js.map
124
+ //# sourceMappingURL=chunk-5SJJI3HL.js.map
125
+ //# sourceMappingURL=chunk-5SJJI3HL.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Modal/Modal.tsx"],"names":[],"mappings":"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","file":"chunk-TZLM5GF4.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Modal.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\nimport { Button, type ButtonProps } from \"../Button\";\n\nexport interface ModalProps {\n /** Whether the modal is visible. */\n open: boolean;\n /** Fired by mask click / close button / Esc. Also the fallback for cancel. */\n onClose?: () => void;\n /** Dedicated Cancel callback. Falls back to `onClose` when omitted. */\n onCancel?: () => void;\n /** Fired when the default OK button is clicked. */\n onOk?: () => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n /**\n * Footer content. Pass `null` to hide the footer, or a custom node to\n * replace the default OK / Cancel buttons.\n */\n footer?: React.ReactNode;\n children?: React.ReactNode;\n width?: number | string;\n /** Show the close (×) button. Default true. */\n closable?: boolean;\n /** Override the close icon node. */\n closeIcon?: React.ReactNode;\n /** Close when clicking the mask. Default true. */\n maskClosable?: boolean;\n /** Close on Escape key. Default true. */\n escClosable?: boolean;\n /** Label for the default OK button. */\n okText?: React.ReactNode;\n /** Label for the default Cancel button. */\n cancelText?: React.ReactNode;\n /** Extra props forwarded to the default OK button. */\n okButtonProps?: Partial<ButtonProps>;\n /** Extra props forwarded to the default Cancel button. */\n cancelButtonProps?: Partial<ButtonProps>;\n /** Show a spinner on the OK button (e.g. while an async submit is running). */\n confirmLoading?: boolean;\n /**\n * When true the modal's children are unmounted every time it closes.\n * Default `false` — children stay mounted so internal state survives\n * reopens, matching antd's default.\n */\n destroyOnClose?: boolean;\n /** Fires after the open/close animation finishes. */\n afterOpenChange?: (open: boolean) => void;\n /** Override the z-index of the overlay. */\n zIndex?: number;\n className?: string;\n}\n\nconst ANIM_MS = 280;\n\n/** `Modal` — centered dialog with mask. Renders into `document.body`. */\nexport const Modal: React.FC<ModalProps> = ({\n open,\n onClose,\n onCancel,\n onOk,\n title,\n description,\n footer,\n children,\n width = 440,\n closable = true,\n closeIcon,\n maskClosable = true,\n escClosable = true,\n okText = \"确定\",\n cancelText = \"取消\",\n okButtonProps,\n cancelButtonProps,\n confirmLoading,\n destroyOnClose = false,\n afterOpenChange,\n zIndex,\n className = \"\",\n}) => {\n const [hasOpenedOnce, setHasOpenedOnce] = React.useState(open);\n React.useEffect(() => {\n if (open) setHasOpenedOnce(true);\n }, [open]);\n\n const handleCancel = React.useCallback(() => {\n if (onCancel) onCancel();\n else onClose?.();\n }, [onCancel, onClose]);\n\n React.useEffect(() => {\n if (!open || !escClosable) return;\n const h = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handleCancel();\n };\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, escClosable, handleCancel]);\n\n const prevOpen = React.useRef(open);\n React.useEffect(() => {\n if (prevOpen.current !== open) {\n prevOpen.current = open;\n if (afterOpenChange) {\n const id = window.setTimeout(() => afterOpenChange(open), ANIM_MS);\n return () => window.clearTimeout(id);\n }\n }\n }, [open, afterOpenChange]);\n\n if (typeof document === \"undefined\") return null;\n if (!hasOpenedOnce) return null;\n if (!open && destroyOnClose) return null;\n\n const overlayStyle: React.CSSProperties | undefined =\n zIndex != null ? { zIndex } : undefined;\n\n const defaultFooter = (\n <>\n <Button variant=\"ghost\" onClick={handleCancel} {...cancelButtonProps}>\n {cancelText}\n </Button>\n <Button\n variant=\"primary\"\n loading={confirmLoading}\n onClick={() => onOk?.()}\n {...okButtonProps}\n >\n {okText}\n </Button>\n </>\n );\n\n return ReactDOM.createPortal(\n <div\n className={`modal-overlay ${open ? \"\" : \"hidden\"} ${className}`}\n style={overlayStyle}\n onClick={() => maskClosable && handleCancel()}\n role=\"presentation\"\n >\n <div\n className=\"modal\"\n style={{ width }}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-modal\n aria-hidden={!open}\n >\n {(title || description || closable) && (\n <div className=\"modal-head\">\n <div className=\"modal-titles\">\n {title && <div className=\"modal-title\">{title}</div>}\n {description && <div className=\"modal-desc\">{description}</div>}\n </div>\n {closable && (\n <button\n type=\"button\"\n className=\"modal-close\"\n onClick={handleCancel}\n aria-label=\"Close\"\n >\n {closeIcon ?? <Icon name=\"x\" size={16} />}\n </button>\n )}\n </div>\n )}\n <div className=\"modal-body\">{children}</div>\n {footer === null ? null : (\n <div className=\"modal-foot\">{footer ?? defaultFooter}</div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Modal/Modal.tsx"],"names":[],"mappings":"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","file":"chunk-5SJJI3HL.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Modal.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\nimport { Button, type ButtonProps } from \"../Button\";\n\nexport interface ModalProps {\n /** Whether the modal is visible. */\n open: boolean;\n /** Fired by mask click / close button / Esc. Also the fallback for cancel. */\n onClose?: () => void;\n /** Dedicated Cancel callback. Falls back to `onClose` when omitted. */\n onCancel?: () => void;\n /** Fired when the default OK button is clicked. */\n onOk?: () => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n /**\n * Footer content. Pass `null` to hide the footer, or a custom node to\n * replace the default OK / Cancel buttons.\n */\n footer?: React.ReactNode;\n children?: React.ReactNode;\n width?: number | string;\n /** Show the close (×) button. Default true. */\n closable?: boolean;\n /** Override the close icon node. */\n closeIcon?: React.ReactNode;\n /** Close when clicking the mask. Default true. */\n maskClosable?: boolean;\n /** Close on Escape key. Default true. */\n escClosable?: boolean;\n /** Label for the default OK button. */\n okText?: React.ReactNode;\n /** Label for the default Cancel button. */\n cancelText?: React.ReactNode;\n /** Extra props forwarded to the default OK button. */\n okButtonProps?: Partial<ButtonProps>;\n /** Extra props forwarded to the default Cancel button. */\n cancelButtonProps?: Partial<ButtonProps>;\n /** Show a spinner on the OK button (e.g. while an async submit is running). */\n confirmLoading?: boolean;\n /**\n * When true the modal's children are unmounted every time it closes.\n * Default `false` — children stay mounted so internal state survives\n * reopens, matching antd's default.\n */\n destroyOnClose?: boolean;\n /** Fires after the open/close animation finishes. */\n afterOpenChange?: (open: boolean) => void;\n /** Override the z-index of the overlay. */\n zIndex?: number;\n className?: string;\n}\n\nconst ANIM_MS = 280;\n\n/** `Modal` — centered dialog with mask. Renders into `document.body`. */\nexport const Modal: React.FC<ModalProps> = ({\n open,\n onClose,\n onCancel,\n onOk,\n title,\n description,\n footer,\n children,\n width = 440,\n closable = true,\n closeIcon,\n maskClosable = true,\n escClosable = true,\n okText = \"确定\",\n cancelText = \"取消\",\n okButtonProps,\n cancelButtonProps,\n confirmLoading,\n destroyOnClose = false,\n afterOpenChange,\n zIndex,\n className = \"\",\n}) => {\n const [hasOpenedOnce, setHasOpenedOnce] = React.useState(open);\n React.useEffect(() => {\n if (open) setHasOpenedOnce(true);\n }, [open]);\n\n const handleCancel = React.useCallback(() => {\n if (onCancel) onCancel();\n else onClose?.();\n }, [onCancel, onClose]);\n\n React.useEffect(() => {\n if (!open || !escClosable) return;\n const h = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handleCancel();\n };\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, escClosable, handleCancel]);\n\n const prevOpen = React.useRef(open);\n React.useEffect(() => {\n if (prevOpen.current !== open) {\n prevOpen.current = open;\n if (afterOpenChange) {\n const id = window.setTimeout(() => afterOpenChange(open), ANIM_MS);\n return () => window.clearTimeout(id);\n }\n }\n }, [open, afterOpenChange]);\n\n if (typeof document === \"undefined\") return null;\n if (!hasOpenedOnce) return null;\n if (!open && destroyOnClose) return null;\n\n const overlayStyle: React.CSSProperties | undefined =\n zIndex != null ? { zIndex } : undefined;\n\n const defaultFooter = (\n <>\n <Button variant=\"ghost\" onClick={handleCancel} {...cancelButtonProps}>\n {cancelText}\n </Button>\n <Button\n variant=\"primary\"\n loading={confirmLoading}\n onClick={() => onOk?.()}\n {...okButtonProps}\n >\n {okText}\n </Button>\n </>\n );\n\n return ReactDOM.createPortal(\n <div\n className={`modal-overlay ${open ? \"\" : \"hidden\"} ${className}`}\n style={overlayStyle}\n onClick={() => maskClosable && handleCancel()}\n role=\"presentation\"\n >\n <div\n className=\"modal\"\n style={{ width }}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-modal\n aria-hidden={!open}\n >\n {(title || description || closable) && (\n <div className=\"modal-head\">\n <div className=\"modal-titles\">\n {title && <div className=\"modal-title\">{title}</div>}\n {description && <div className=\"modal-desc\">{description}</div>}\n </div>\n {closable && (\n <button\n type=\"button\"\n className=\"modal-close\"\n onClick={handleCancel}\n aria-label=\"Close\"\n >\n {closeIcon ?? <Icon name=\"x\" size={16} />}\n </button>\n )}\n </div>\n )}\n <div className=\"modal-body\">{children}</div>\n {footer === null ? null : (\n <div className=\"modal-foot\">{footer ?? defaultFooter}</div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n"]}
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkYCHUHMNP_cjs = require('./chunk-YCHUHMNP.cjs');
3
+ var chunk3KQKEE5O_cjs = require('./chunk-3KQKEE5O.cjs');
4
4
  require('./tokens-BIIUTPKN.css');
5
5
  require('./shared-NJHRNLRH.css');
6
- require('./Toast-6PVSAXQ5.css');
6
+ require('./Toast-YSACW3EM.css');
7
7
  var React = require('react');
8
8
  var ReactDOM = require('react-dom');
9
9
  var jsxRuntime = require('react/jsx-runtime');
@@ -34,7 +34,17 @@ var ReactDOM__default = /*#__PURE__*/_interopDefault(ReactDOM);
34
34
  var listeners = /* @__PURE__ */ new Set();
35
35
  var items = [];
36
36
  var uid = 0;
37
+ var autoMounted = false;
37
38
  function emit() {
39
+ if (listeners.size === 0 && !autoMounted && typeof document !== "undefined") {
40
+ autoMounted = true;
41
+ const div = document.createElement("div");
42
+ document.body.appendChild(div);
43
+ const root = ReactDOM__default.default.createRoot ? ReactDOM__default.default.createRoot(div) : null;
44
+ if (root) {
45
+ root.render(React__namespace.createElement(ToastContainer));
46
+ }
47
+ }
38
48
  listeners.forEach((l) => l(items));
39
49
  }
40
50
  var toast = {
@@ -73,12 +83,12 @@ var ToastContainer = ({ placement = "top-right" }) => {
73
83
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: `toast-container ${placement}`, children: list.map((t) => {
74
84
  const iconName = t.type === "success" ? "check2" : t.type === "warning" ? "alert" : t.type === "danger" ? "alert" : "info";
75
85
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `toast ${t.type}`, role: "status", children: [
76
- /* @__PURE__ */ jsxRuntime.jsx(chunkYCHUHMNP_cjs.Icon, { name: iconName, size: 18, className: "toast-icon" }),
86
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3KQKEE5O_cjs.Icon, { name: iconName, size: 18, className: "toast-icon" }),
77
87
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "toast-body", children: [
78
88
  t.title && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "toast-title", children: t.title }),
79
89
  t.message && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "toast-msg", children: t.message })
80
90
  ] }),
81
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "toast-close", onClick: () => toast.dismiss(t.id), "aria-label": "Dismiss", children: /* @__PURE__ */ jsxRuntime.jsx(chunkYCHUHMNP_cjs.Icon, { name: "x", size: 14 }) })
91
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "toast-close", onClick: () => toast.dismiss(t.id), "aria-label": "Dismiss", children: /* @__PURE__ */ jsxRuntime.jsx(chunk3KQKEE5O_cjs.Icon, { name: "x", size: 14 }) })
82
92
  ] }, t.id);
83
93
  }) }),
84
94
  document.body
@@ -87,5 +97,5 @@ var ToastContainer = ({ placement = "top-right" }) => {
87
97
 
88
98
  exports.ToastContainer = ToastContainer;
89
99
  exports.toast = toast;
90
- //# sourceMappingURL=chunk-2ENTRT7R.cjs.map
91
- //# sourceMappingURL=chunk-2ENTRT7R.cjs.map
100
+ //# sourceMappingURL=chunk-AJEF2ZB7.cjs.map
101
+ //# sourceMappingURL=chunk-AJEF2ZB7.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Toast/Toast.tsx"],"names":["ReactDOM","React","jsx","jsxs","Icon"],"mappings":"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","file":"chunk-AJEF2ZB7.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Toast.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\n\nexport type ToastType = \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface ToastItem {\n id: number;\n type: ToastType;\n title?: React.ReactNode;\n message?: React.ReactNode;\n duration?: number;\n}\n\ntype ListenerState = ToastItem[];\nconst listeners = new Set<(s: ListenerState) => void>();\nlet items: ListenerState = [];\nlet uid = 0;\nlet autoMounted = false;\n\nfunction emit() {\n if (listeners.size === 0 && !autoMounted && typeof document !== \"undefined\") {\n autoMounted = true;\n const div = document.createElement(\"div\");\n document.body.appendChild(div);\n const root = (ReactDOM as any).createRoot\n ? (ReactDOM as any).createRoot(div)\n : null;\n if (root) {\n root.render(React.createElement(ToastContainer));\n }\n }\n listeners.forEach((l) => l(items));\n}\n\nexport const toast = {\n show(t: Omit<ToastItem, \"id\">) {\n const id = ++uid;\n items = [...items, { ...t, id, duration: t.duration ?? 3200 }];\n emit();\n if (items[items.length - 1].duration! > 0) {\n setTimeout(() => toast.dismiss(id), items[items.length - 1].duration);\n }\n return id;\n },\n info: (message: React.ReactNode, title?: React.ReactNode) => toast.show({ type: \"info\", message, title }),\n success: (message: React.ReactNode, title?: React.ReactNode) => toast.show({ type: \"success\", message, title }),\n warn: (message: React.ReactNode, title?: React.ReactNode) => toast.show({ type: \"warning\", message, title }),\n error: (message: React.ReactNode, title?: React.ReactNode) => toast.show({ type: \"danger\", message, title }),\n dismiss(id: number) {\n items = items.filter((i) => i.id !== id);\n emit();\n },\n clear() {\n items = [];\n emit();\n },\n};\n\nexport interface ToastContainerProps {\n placement?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\" | \"top-center\";\n}\n\n/** `ToastContainer` — mount once at your app root; subscribes to `toast.*` calls. */\nexport const ToastContainer: React.FC<ToastContainerProps> = ({ placement = \"top-right\" }) => {\n const [list, setList] = React.useState<ListenerState>(items);\n React.useEffect(() => {\n listeners.add(setList);\n return () => {\n listeners.delete(setList);\n };\n }, []);\n if (typeof document === \"undefined\") return null;\n return ReactDOM.createPortal(\n <div className={`toast-container ${placement}`}>\n {list.map((t) => {\n const iconName =\n t.type === \"success\" ? \"check2\" : t.type === \"warning\" ? \"alert\" : t.type === \"danger\" ? \"alert\" : \"info\";\n return (\n <div key={t.id} className={`toast ${t.type}`} role=\"status\">\n <Icon name={iconName} size={18} className=\"toast-icon\" />\n <div className=\"toast-body\">\n {t.title && <div className=\"toast-title\">{t.title}</div>}\n {t.message && <div className=\"toast-msg\">{t.message}</div>}\n </div>\n <button type=\"button\" className=\"toast-close\" onClick={() => toast.dismiss(t.id)} aria-label=\"Dismiss\">\n <Icon name=\"x\" size={14} />\n </button>\n </div>\n );\n })}\n </div>,\n document.body\n );\n};\n"]}
@@ -3,6 +3,7 @@ import * as React from 'react';
3
3
  // src/utils/useFloating.ts
4
4
  function useFloating(opts) {
5
5
  const triggerRef = React.useRef(null);
6
+ const floatingRef = React.useRef(null);
6
7
  const preferred = opts.placement ?? "bottom";
7
8
  const gap = opts.gap ?? 8;
8
9
  const panelW = opts.panelWidth ?? 240;
@@ -18,9 +19,12 @@ function useFloating(opts) {
18
19
  const update = () => {
19
20
  const el = triggerRef.current;
20
21
  if (!el) return;
22
+ const floatingRect = floatingRef.current?.getBoundingClientRect();
21
23
  const rect = el.getBoundingClientRect();
22
- const w = matchW ? rect.width : panelW;
23
- const h = panelH;
24
+ const measuredW = floatingRect?.width && floatingRect.width > 0 ? floatingRect.width : void 0;
25
+ const measuredH = floatingRect?.height && floatingRect.height > 0 ? floatingRect.height : void 0;
26
+ const w = matchW ? rect.width : measuredW ?? panelW;
27
+ const h = measuredH ?? panelH;
24
28
  const vw = window.innerWidth;
25
29
  const vh = window.innerHeight;
26
30
  const MARGIN = 8;
@@ -83,11 +87,17 @@ function useFloating(opts) {
83
87
  update();
84
88
  window.addEventListener("scroll", update, true);
85
89
  window.addEventListener("resize", update);
90
+ const ro = typeof ResizeObserver !== "undefined" ? new ResizeObserver(update) : null;
91
+ if (ro) {
92
+ if (triggerRef.current) ro.observe(triggerRef.current);
93
+ if (floatingRef.current) ro.observe(floatingRef.current);
94
+ }
86
95
  return () => {
87
96
  window.removeEventListener("scroll", update, true);
88
97
  window.removeEventListener("resize", update);
98
+ ro?.disconnect();
89
99
  };
90
- }, [open, preferred, gap, panelW, panelH, doShift, doFlip, matchW]);
100
+ }, [open, preferred, gap, panelW, panelH, doShift, doFlip, matchW, align]);
91
101
  let transform;
92
102
  if (align !== "start") {
93
103
  const cross = state.placement === "top" || state.placement === "bottom" ? "X" : "Y";
@@ -101,9 +111,14 @@ function useFloating(opts) {
101
111
  ...state.width != null ? { width: state.width } : {},
102
112
  ...transform ? { transform } : {}
103
113
  };
104
- return { triggerRef, floatingStyle, placement: state.placement };
114
+ return {
115
+ triggerRef,
116
+ floatingRef,
117
+ floatingStyle,
118
+ placement: state.placement
119
+ };
105
120
  }
106
121
 
107
122
  export { useFloating };
108
- //# sourceMappingURL=chunk-V2DIQ3RH.js.map
109
- //# sourceMappingURL=chunk-V2DIQ3RH.js.map
123
+ //# sourceMappingURL=chunk-ANAQER3T.js.map
124
+ //# sourceMappingURL=chunk-ANAQER3T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/useFloating.ts"],"names":[],"mappings":"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","file":"chunk-ANAQER3T.js","sourcesContent":["import * as React from \"react\";\n\nexport type Placement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface UseFloatingOptions {\n /** Whether the floating element is currently visible. */\n open: boolean;\n /** Preferred placement relative to the trigger. Default `\"bottom\"`. */\n placement?: Placement;\n /** Distance between trigger and panel in px. Default 8. */\n gap?: number;\n /** Estimated panel width, used for flip / shift math. Ignored when `matchTriggerWidth`. */\n panelWidth?: number;\n /** Estimated panel height, used for flip / shift math. */\n panelHeight?: number;\n /** Keep the panel inside the viewport horizontally / vertically. Default true. */\n shift?: boolean;\n /** Flip to the opposite side if the preferred side would overflow. Default true. */\n flip?: boolean;\n /** Make the panel width track the trigger width (used by Select / Cascader). */\n matchTriggerWidth?: boolean;\n /**\n * Cross-axis alignment of the panel relative to the trigger.\n * - `\"start\"` (default) — panel's leading edge lines up with trigger's leading edge.\n * - `\"center\"` — panel is centered on the trigger (uses a CSS transform).\n * - `\"end\"` — panel's trailing edge lines up with trigger's trailing edge.\n *\n * `shift` is ignored for non-`\"start\"` alignments to avoid tugging against the\n * caller's translate.\n */\n alignCross?: \"start\" | \"center\" | \"end\";\n}\n\nexport interface UseFloatingResult<\n T extends HTMLElement,\n F extends HTMLElement\n> {\n /** Attach this to the trigger element. */\n triggerRef: React.RefObject<T>;\n /** Attach this to the floating element so placement can use its real size. */\n floatingRef: React.RefObject<F>;\n /** Spread this onto the panel element. Already contains `position: fixed` + coords. */\n floatingStyle: React.CSSProperties;\n /** Resolved placement after flip logic — useful for arrow direction. */\n placement: Placement;\n}\n\n/**\n * Minimal floating-element positioning hook used by Tooltip / Popover / Select /\n * Cascader / ColorPicker. Designed to be paired with `createPortal(document.body)`\n * so overflow clipping from ancestors becomes a non-issue.\n *\n * Not a general-purpose `@floating-ui` replacement — it only covers flip + shift\n * relative to the viewport, which is what Lumina's overlays need.\n */\nexport function useFloating<\n T extends HTMLElement = HTMLElement,\n F extends HTMLElement = HTMLElement\n>(\n opts: UseFloatingOptions\n): UseFloatingResult<T, F> {\n const triggerRef = React.useRef<T>(null);\n const floatingRef = React.useRef<F>(null);\n const preferred = opts.placement ?? \"bottom\";\n const gap = opts.gap ?? 8;\n const panelW = opts.panelWidth ?? 240;\n const panelH = opts.panelHeight ?? 300;\n const doShift = opts.shift !== false;\n const doFlip = opts.flip !== false;\n const matchW = !!opts.matchTriggerWidth;\n const align = opts.alignCross ?? \"start\";\n const open = opts.open;\n\n const [state, setState] = React.useState<{\n top: number;\n left: number;\n width?: number;\n placement: Placement;\n }>({ top: 0, left: 0, placement: preferred });\n\n React.useLayoutEffect(() => {\n if (!open) return;\n const update = () => {\n const el = triggerRef.current;\n if (!el) return;\n\n const floatingRect = floatingRef.current?.getBoundingClientRect();\n const rect = el.getBoundingClientRect();\n const measuredW = floatingRect?.width && floatingRect.width > 0 ? floatingRect.width : undefined;\n const measuredH = floatingRect?.height && floatingRect.height > 0 ? floatingRect.height : undefined;\n const w = matchW ? rect.width : (measuredW ?? panelW);\n const h = measuredH ?? panelH;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const MARGIN = 8;\n\n const place = (p: Placement) => {\n switch (p) {\n case \"top\":\n return { top: rect.top - gap - h, left: rect.left };\n case \"right\":\n return { top: rect.top, left: rect.right + gap };\n case \"left\":\n return { top: rect.top, left: rect.left - gap - w };\n case \"bottom\":\n default:\n return { top: rect.bottom + gap, left: rect.left };\n }\n };\n\n const fits = (p: Placement, c: { top: number; left: number }) => {\n if (p === \"bottom\") return c.top + h <= vh - MARGIN;\n if (p === \"top\") return c.top >= MARGIN;\n if (p === \"right\") return c.left + w <= vw - MARGIN;\n if (p === \"left\") return c.left >= MARGIN;\n return true;\n };\n\n let resolved: Placement = preferred;\n let coords = place(resolved);\n\n if (doFlip && !fits(resolved, coords)) {\n const opp: Record<Placement, Placement> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n };\n const alt = opp[resolved];\n const altCoords = place(alt);\n if (fits(alt, altCoords)) {\n resolved = alt;\n coords = altCoords;\n }\n }\n\n // Cross-axis alignment replaces the cross coordinate with the trigger\n // midpoint / far edge; the paired CSS transform then visually aligns.\n if (align !== \"start\") {\n if (resolved === \"top\" || resolved === \"bottom\") {\n coords.left =\n align === \"center\" ? rect.left + rect.width / 2 : rect.right;\n } else {\n coords.top =\n align === \"center\" ? rect.top + rect.height / 2 : rect.bottom;\n }\n } else if (doShift) {\n if (resolved === \"bottom\" || resolved === \"top\") {\n coords.left = Math.max(MARGIN, Math.min(coords.left, vw - w - MARGIN));\n } else {\n coords.top = Math.max(MARGIN, Math.min(coords.top, vh - h - MARGIN));\n }\n }\n\n setState({\n top: coords.top,\n left: coords.left,\n width: matchW ? rect.width : undefined,\n placement: resolved,\n });\n };\n\n update();\n window.addEventListener(\"scroll\", update, true);\n window.addEventListener(\"resize\", update);\n const ro =\n typeof ResizeObserver !== \"undefined\" ? new ResizeObserver(update) : null;\n if (ro) {\n if (triggerRef.current) ro.observe(triggerRef.current);\n if (floatingRef.current) ro.observe(floatingRef.current);\n }\n return () => {\n window.removeEventListener(\"scroll\", update, true);\n window.removeEventListener(\"resize\", update);\n ro?.disconnect();\n };\n }, [open, preferred, gap, panelW, panelH, doShift, doFlip, matchW, align]);\n\n let transform: string | undefined;\n if (align !== \"start\") {\n const cross = state.placement === \"top\" || state.placement === \"bottom\" ? \"X\" : \"Y\";\n const percent = align === \"center\" ? \"-50%\" : \"-100%\";\n transform = `translate${cross}(${percent})`;\n }\n\n const floatingStyle: React.CSSProperties = {\n position: \"fixed\",\n top: state.top,\n left: state.left,\n ...(state.width != null ? { width: state.width } : {}),\n ...(transform ? { transform } : {}),\n };\n\n return {\n triggerRef,\n floatingRef,\n floatingStyle,\n placement: state.placement,\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Icon } from './chunk-QOGROEVD.js';
1
+ import { Icon } from './chunk-X3JG3IR6.js';
2
2
  import './tokens-BIIUTPKN.css';
3
3
  import './shared-NJHRNLRH.css';
4
4
  import './Drawer-IPGB4CXH.css';
@@ -98,5 +98,5 @@ var Drawer = ({
98
98
  };
99
99
 
100
100
  export { Drawer };
101
- //# sourceMappingURL=chunk-FXQGPHK2.js.map
102
- //# sourceMappingURL=chunk-FXQGPHK2.js.map
101
+ //# sourceMappingURL=chunk-AZRJZM7W.js.map
102
+ //# sourceMappingURL=chunk-AZRJZM7W.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Drawer/Drawer.tsx"],"names":[],"mappings":"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","file":"chunk-FXQGPHK2.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Drawer.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\n\nexport interface DrawerProps {\n /** Whether the drawer is visible. */\n open: boolean;\n /** Close callback (triggered by mask click / close button / Esc). */\n onClose?: () => void;\n /** Which edge the drawer slides from. */\n placement?: \"left\" | \"right\" | \"top\" | \"bottom\";\n /** Width (for left/right) or height (for top/bottom). Number → px. */\n size?: number | string;\n /** Header title. */\n title?: React.ReactNode;\n /** Extra content rendered to the right of the title (e.g. action buttons). */\n extra?: React.ReactNode;\n /** Footer content. */\n footer?: React.ReactNode;\n /** Drawer body. */\n children?: React.ReactNode;\n /** Render the mask overlay. Default true. Set `false` for a non-blocking drawer. */\n mask?: boolean;\n /** Close when clicking the mask. Default true. Ignored when `mask` is false. */\n maskClosable?: boolean;\n /** Close on Escape key. Default true. */\n keyboard?: boolean;\n /** Show the close (×) button in the header. Default true. */\n closable?: boolean;\n /** Override the close icon node. */\n closeIcon?: React.ReactNode;\n /**\n * When true the drawer's children are unmounted every time it closes.\n * Default `false` — children stay mounted across open/close cycles so\n * internal state (form fields, scroll position) is preserved.\n */\n destroyOnClose?: boolean;\n /** Fires after the open/close animation finishes. */\n afterOpenChange?: (open: boolean) => void;\n /** Stack index for nested drawers. */\n zIndex?: number;\n className?: string;\n}\n\nconst ANIM_MS = 280;\n\n/** `Drawer` — slide-in panel from an edge. */\nexport const Drawer: React.FC<DrawerProps> = ({\n open,\n onClose,\n placement = \"right\",\n size = 380,\n title,\n extra,\n footer,\n children,\n mask = true,\n maskClosable = true,\n keyboard = true,\n closable = true,\n closeIcon,\n destroyOnClose = false,\n afterOpenChange,\n zIndex,\n className = \"\",\n}) => {\n const [hasOpenedOnce, setHasOpenedOnce] = React.useState(open);\n React.useEffect(() => {\n if (open) setHasOpenedOnce(true);\n }, [open]);\n\n React.useEffect(() => {\n if (!open || !keyboard) return;\n const h = (e: KeyboardEvent) => e.key === \"Escape\" && onClose?.();\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, keyboard, onClose]);\n\n const prevOpen = React.useRef(open);\n React.useEffect(() => {\n if (prevOpen.current !== open) {\n prevOpen.current = open;\n if (afterOpenChange) {\n const id = window.setTimeout(() => afterOpenChange(open), ANIM_MS);\n return () => window.clearTimeout(id);\n }\n }\n }, [open, afterOpenChange]);\n\n if (typeof document === \"undefined\") return null;\n if (!hasOpenedOnce) return null;\n if (!open && destroyOnClose) return null;\n\n const isV = placement === \"left\" || placement === \"right\";\n const style: React.CSSProperties = isV ? { width: size } : { height: size };\n if (zIndex != null) style.zIndex = zIndex;\n\n return ReactDOM.createPortal(\n <>\n {mask && (\n <div\n className={`drawer-overlay ${open ? \"\" : \"hidden\"}`}\n style={zIndex != null ? { zIndex: zIndex - 1 } : undefined}\n onClick={() => maskClosable && onClose?.()}\n />\n )}\n <div\n className={`drawer ${placement} ${open ? \"\" : \"hidden\"} ${className}`}\n style={style}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-hidden={!open}\n >\n {(title || extra || closable) && (\n <div className=\"drawer-head\">\n <div className=\"drawer-title\">{title}</div>\n <div className=\"drawer-head-right\">\n {extra}\n {closable && (\n <button\n type=\"button\"\n className=\"drawer-close\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n {closeIcon ?? <Icon name=\"x\" size={16} />}\n </button>\n )}\n </div>\n </div>\n )}\n <div className=\"drawer-body\">{children}</div>\n {footer && <div className=\"drawer-foot\">{footer}</div>}\n </div>\n </>,\n document.body\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Drawer/Drawer.tsx"],"names":[],"mappings":"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","file":"chunk-AZRJZM7W.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Drawer.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\n\nexport interface DrawerProps {\n /** Whether the drawer is visible. */\n open: boolean;\n /** Close callback (triggered by mask click / close button / Esc). */\n onClose?: () => void;\n /** Which edge the drawer slides from. */\n placement?: \"left\" | \"right\" | \"top\" | \"bottom\";\n /** Width (for left/right) or height (for top/bottom). Number → px. */\n size?: number | string;\n /** Header title. */\n title?: React.ReactNode;\n /** Extra content rendered to the right of the title (e.g. action buttons). */\n extra?: React.ReactNode;\n /** Footer content. */\n footer?: React.ReactNode;\n /** Drawer body. */\n children?: React.ReactNode;\n /** Render the mask overlay. Default true. Set `false` for a non-blocking drawer. */\n mask?: boolean;\n /** Close when clicking the mask. Default true. Ignored when `mask` is false. */\n maskClosable?: boolean;\n /** Close on Escape key. Default true. */\n keyboard?: boolean;\n /** Show the close (×) button in the header. Default true. */\n closable?: boolean;\n /** Override the close icon node. */\n closeIcon?: React.ReactNode;\n /**\n * When true the drawer's children are unmounted every time it closes.\n * Default `false` — children stay mounted across open/close cycles so\n * internal state (form fields, scroll position) is preserved.\n */\n destroyOnClose?: boolean;\n /** Fires after the open/close animation finishes. */\n afterOpenChange?: (open: boolean) => void;\n /** Stack index for nested drawers. */\n zIndex?: number;\n className?: string;\n}\n\nconst ANIM_MS = 280;\n\n/** `Drawer` — slide-in panel from an edge. */\nexport const Drawer: React.FC<DrawerProps> = ({\n open,\n onClose,\n placement = \"right\",\n size = 380,\n title,\n extra,\n footer,\n children,\n mask = true,\n maskClosable = true,\n keyboard = true,\n closable = true,\n closeIcon,\n destroyOnClose = false,\n afterOpenChange,\n zIndex,\n className = \"\",\n}) => {\n const [hasOpenedOnce, setHasOpenedOnce] = React.useState(open);\n React.useEffect(() => {\n if (open) setHasOpenedOnce(true);\n }, [open]);\n\n React.useEffect(() => {\n if (!open || !keyboard) return;\n const h = (e: KeyboardEvent) => e.key === \"Escape\" && onClose?.();\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, keyboard, onClose]);\n\n const prevOpen = React.useRef(open);\n React.useEffect(() => {\n if (prevOpen.current !== open) {\n prevOpen.current = open;\n if (afterOpenChange) {\n const id = window.setTimeout(() => afterOpenChange(open), ANIM_MS);\n return () => window.clearTimeout(id);\n }\n }\n }, [open, afterOpenChange]);\n\n if (typeof document === \"undefined\") return null;\n if (!hasOpenedOnce) return null;\n if (!open && destroyOnClose) return null;\n\n const isV = placement === \"left\" || placement === \"right\";\n const style: React.CSSProperties = isV ? { width: size } : { height: size };\n if (zIndex != null) style.zIndex = zIndex;\n\n return ReactDOM.createPortal(\n <>\n {mask && (\n <div\n className={`drawer-overlay ${open ? \"\" : \"hidden\"}`}\n style={zIndex != null ? { zIndex: zIndex - 1 } : undefined}\n onClick={() => maskClosable && onClose?.()}\n />\n )}\n <div\n className={`drawer ${placement} ${open ? \"\" : \"hidden\"} ${className}`}\n style={style}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-hidden={!open}\n >\n {(title || extra || closable) && (\n <div className=\"drawer-head\">\n <div className=\"drawer-title\">{title}</div>\n <div className=\"drawer-head-right\">\n {extra}\n {closable && (\n <button\n type=\"button\"\n className=\"drawer-close\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n {closeIcon ?? <Icon name=\"x\" size={16} />}\n </button>\n )}\n </div>\n </div>\n )}\n <div className=\"drawer-body\">{children}</div>\n {footer && <div className=\"drawer-foot\">{footer}</div>}\n </div>\n </>,\n document.body\n );\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkYCHUHMNP_cjs = require('./chunk-YCHUHMNP.cjs');
3
+ var chunk3KQKEE5O_cjs = require('./chunk-3KQKEE5O.cjs');
4
4
  require('./tokens-BIIUTPKN.css');
5
5
  require('./shared-NJHRNLRH.css');
6
6
  require('./Typography-NKPWTJCV.css');
@@ -74,8 +74,8 @@ var CopyAction = ({ config, fallbackText }) => {
74
74
  timerRef.current = window.setTimeout(() => setCopied(false), 2400);
75
75
  };
76
76
  const [defIcon, doneIcon] = config.icon ?? [
77
- /* @__PURE__ */ jsxRuntime.jsx(chunkYCHUHMNP_cjs.Icon, { name: "copy", size: 12 }, "def"),
78
- /* @__PURE__ */ jsxRuntime.jsx(chunkYCHUHMNP_cjs.Icon, { name: "check", size: 12 }, "done")
77
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3KQKEE5O_cjs.Icon, { name: "copy", size: 12 }, "def"),
78
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3KQKEE5O_cjs.Icon, { name: "check", size: 12 }, "done")
79
79
  ];
80
80
  const tipText = config.tooltips === false ? void 0 : Array.isArray(config.tooltips) ? copied ? config.tooltips[1] : config.tooltips[0] : copied ? "\u5DF2\u590D\u5236" : "\u590D\u5236";
81
81
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -213,7 +213,7 @@ function useTypographyBody(props) {
213
213
  }
214
214
  },
215
215
  className: "typo-action typo-edit",
216
- children: editConf.icon ?? /* @__PURE__ */ jsxRuntime.jsx(chunkYCHUHMNP_cjs.Icon, { name: "edit", size: 12 })
216
+ children: editConf.icon ?? /* @__PURE__ */ jsxRuntime.jsx(chunk3KQKEE5O_cjs.Icon, { name: "edit", size: 12 })
217
217
  }
218
218
  );
219
219
  }
@@ -473,7 +473,7 @@ var Link = React__namespace.forwardRef(
473
473
  ...anchorRest,
474
474
  children: [
475
475
  body.inner,
476
- external && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-link-ext", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx(chunkYCHUHMNP_cjs.Icon, { name: externalIcon, size: 12 }) }),
476
+ external && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-link-ext", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx(chunk3KQKEE5O_cjs.Icon, { name: externalIcon, size: 12 }) }),
477
477
  body.expandNode,
478
478
  body.copyNode,
479
479
  body.editIconNode
@@ -506,5 +506,5 @@ exports.Paragraph = Paragraph;
506
506
  exports.Text = Text;
507
507
  exports.Title = Title;
508
508
  exports.Typography = Typography;
509
- //# sourceMappingURL=chunk-3BZ47QNV.cjs.map
510
- //# sourceMappingURL=chunk-3BZ47QNV.cjs.map
509
+ //# sourceMappingURL=chunk-BIXW4ZYW.cjs.map
510
+ //# sourceMappingURL=chunk-BIXW4ZYW.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Typography/Typography.tsx"],"names":["React","Icon","jsx","jsxs"],"mappings":"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","file":"chunk-3BZ47QNV.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Typography.css\";\nimport * as React from \"react\";\nimport { Icon, type IconName } from \"../Icon\";\n\n/* ============================================================================\n * Shared types\n * ========================================================================== */\n\nexport type TypographyType = \"secondary\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface CopyableConfig {\n /** Text to copy. Defaults to the rendered children string. */\n text?: string;\n /** Fired after a successful copy. */\n onCopy?: (event: React.MouseEvent<HTMLSpanElement>) => void;\n /** Custom icons `[default, copied]`. */\n icon?: [React.ReactNode, React.ReactNode];\n /** Custom tooltip text `[default, copied]`. Pass `false` to disable. */\n tooltips?: [React.ReactNode, React.ReactNode] | false;\n /** Format/MIME hint when calling `navigator.clipboard.write` is not used. */\n format?: \"text/plain\" | \"text/html\";\n}\n\nexport interface EditableConfig {\n /** Controlled editing flag. Omit for uncontrolled (click icon to start). */\n editing?: boolean;\n /** Text shown in the editor; falls back to `children` string. */\n text?: string;\n /** Fired with the new value when the user confirms. */\n onChange?: (value: string) => void;\n /** Fired when the user cancels (Escape or blur without confirm). */\n onCancel?: () => void;\n /** Fired when editing starts. */\n onStart?: () => void;\n /** Fired when editing ends (regardless of save/cancel). */\n onEnd?: () => void;\n /** Maximum input length. */\n maxLength?: number;\n /** Auto resize textarea. `true` = autosize; or pass row bounds. */\n autoSize?: boolean | { minRows?: number; maxRows?: number };\n /** What triggers entering edit mode. Defaults to `[\"icon\"]`. */\n triggerType?: Array<\"icon\" | \"text\">;\n /** Override the edit icon. */\n icon?: React.ReactNode;\n /** Tooltip text on the trigger icon. Pass `false` to disable. */\n tooltip?: React.ReactNode | false;\n /** Use a single-line input instead of textarea. */\n enterIcon?: React.ReactNode;\n}\n\nexport interface EllipsisConfig {\n /** Number of rows to clamp at. Defaults to 1. */\n rows?: number;\n /** Show an \"Expand\" affordance after clamping. */\n expandable?: boolean;\n /** Custom expand-button label. */\n symbol?: React.ReactNode;\n /** Fired on expand. */\n onExpand?: (event: React.MouseEvent<HTMLElement>) => void;\n /** Show full text in a `title` attribute. */\n tooltip?: boolean | React.ReactNode;\n /** Optional suffix that should always remain visible (e.g. an em-dash author). */\n suffix?: string;\n}\n\nexport interface BaseTypographyProps {\n /** Semantic color. */\n type?: TypographyType;\n /** Render disabled (muted + not selectable). */\n disabled?: boolean;\n /** Highlight with mark background. */\n mark?: boolean;\n /** Render as inline `<code>`. */\n code?: boolean;\n /** Render as keyboard key `<kbd>`. */\n keyboard?: boolean;\n /** Underline. */\n underline?: boolean;\n /** Strikethrough. */\n delete?: boolean;\n /** Bold. */\n strong?: boolean;\n /** Italic. */\n italic?: boolean;\n /** Add a copy button. Pass an object to customize. */\n copyable?: boolean | CopyableConfig;\n /** Add an edit button. Pass an object to customize. */\n editable?: boolean | EditableConfig;\n /** Truncate to N rows with optional expand affordance. */\n ellipsis?: boolean | EllipsisConfig;\n /** Extra class names. */\n className?: string;\n /** Inline style. */\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\n/* ============================================================================\n * Internals\n * ========================================================================== */\n\nfunction toText(node: React.ReactNode): string {\n if (node == null || node === false) return \"\";\n if (typeof node === \"string\" || typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(toText).join(\"\");\n if (React.isValidElement(node)) {\n const props = node.props as { children?: React.ReactNode };\n return toText(props.children);\n }\n return \"\";\n}\n\nfunction buildClass(props: BaseTypographyProps, base: string, extra?: string) {\n return [\n base,\n props.type,\n props.disabled && \"disabled\",\n props.mark && \"mark\",\n props.code && \"code\",\n props.keyboard && \"kbd\",\n props.underline && \"underline\",\n props.delete && \"del\",\n props.strong && \"strong\",\n props.italic && \"italic\",\n extra,\n props.className,\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\n/* ---------- Copy button ---------- */\n\nconst CopyAction: React.FC<{\n config: CopyableConfig;\n fallbackText: string;\n}> = ({ config, fallbackText }) => {\n const [copied, setCopied] = React.useState(false);\n const timerRef = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n return () => {\n if (timerRef.current != null) window.clearTimeout(timerRef.current);\n };\n }, []);\n\n const handleCopy = (event: React.MouseEvent<HTMLSpanElement>) => {\n event.stopPropagation();\n const text = config.text ?? fallbackText;\n if (typeof navigator !== \"undefined\" && navigator.clipboard) {\n navigator.clipboard.writeText(text).catch(() => {\n /* swallow — user-visible feedback is already minimal */\n });\n }\n config.onCopy?.(event);\n setCopied(true);\n if (timerRef.current != null) window.clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => setCopied(false), 2400);\n };\n\n const [defIcon, doneIcon] = config.icon ?? [\n <Icon key=\"def\" name=\"copy\" size={12} />,\n <Icon key=\"done\" name=\"check\" size={12} />,\n ];\n const tipText =\n config.tooltips === false\n ? undefined\n : Array.isArray(config.tooltips)\n ? copied\n ? config.tooltips[1]\n : config.tooltips[0]\n : copied\n ? \"已复制\"\n : \"复制\";\n\n return (\n <span\n role=\"button\"\n aria-label={typeof tipText === \"string\" ? tipText : \"Copy\"}\n tabIndex={0}\n title={typeof tipText === \"string\" ? tipText : undefined}\n onClick={handleCopy}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleCopy(e as unknown as React.MouseEvent<HTMLSpanElement>);\n }\n }}\n className={`typo-action typo-copy ${copied ? \"copied\" : \"\"}`}\n >\n {copied ? doneIcon : defIcon}\n </span>\n );\n};\n\n/* ---------- Edit affordance + inline editor ---------- */\n\nconst EditableEditor: React.FC<{\n initial: string;\n multiline: boolean;\n maxLength?: number;\n autoSize?: EditableConfig[\"autoSize\"];\n onConfirm: (value: string) => void;\n onCancel: () => void;\n}> = ({ initial, multiline, maxLength, autoSize, onConfirm, onCancel }) => {\n const [value, setValue] = React.useState(initial);\n const ref = React.useRef<HTMLTextAreaElement | HTMLInputElement | null>(null);\n\n React.useEffect(() => {\n const el = ref.current;\n if (el) {\n el.focus();\n const len = el.value.length;\n el.setSelectionRange(len, len);\n }\n }, []);\n\n const resize = React.useCallback(() => {\n const el = ref.current as HTMLTextAreaElement | null;\n if (!el || !multiline || !autoSize) return;\n el.style.height = \"auto\";\n const computed = window.getComputedStyle(el);\n const lineHeight = parseFloat(computed.lineHeight) || 20;\n const padding =\n parseFloat(computed.paddingTop) + parseFloat(computed.paddingBottom);\n const bounds = typeof autoSize === \"object\" ? autoSize : {};\n const min = (bounds.minRows ?? 1) * lineHeight + padding;\n const max = bounds.maxRows ? bounds.maxRows * lineHeight + padding : Infinity;\n const next = Math.min(Math.max(el.scrollHeight, min), max);\n el.style.height = `${next}px`;\n el.style.overflowY = el.scrollHeight > max ? \"auto\" : \"hidden\";\n }, [autoSize, multiline]);\n\n React.useEffect(() => {\n resize();\n }, [value, resize]);\n\n const handleKeyDown = (\n e: React.KeyboardEvent<HTMLTextAreaElement | HTMLInputElement>\n ) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n return;\n }\n if (e.key === \"Enter\" && (!multiline || (e.metaKey || e.ctrlKey))) {\n e.preventDefault();\n onConfirm(value);\n }\n };\n\n const common = {\n ref: ref as never,\n value,\n maxLength,\n className: \"typo-editor\",\n onChange: (\n e: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>\n ) => setValue(e.target.value),\n onBlur: () => onConfirm(value),\n onKeyDown: handleKeyDown,\n } as const;\n\n return multiline ? (\n <textarea rows={1} {...common} />\n ) : (\n <input type=\"text\" {...common} />\n );\n};\n\n/* ============================================================================\n * Hook: shared rendering body\n * ========================================================================== */\n\ninterface RenderableProps extends BaseTypographyProps {\n ellipsisRows?: number;\n multilineEdit?: boolean;\n}\n\nfunction useTypographyBody(props: RenderableProps) {\n const fallbackText = React.useMemo(\n () => toText(props.children),\n [props.children]\n );\n\n /* ---- editable state ---- */\n const editable = props.editable;\n const editConf: EditableConfig =\n editable && typeof editable === \"object\" ? editable : {};\n const triggers = editConf.triggerType ?? [\"icon\"];\n const isControlledEdit = editConf.editing != null;\n const [editingState, setEditingState] = React.useState(false);\n const editing = isControlledEdit ? editConf.editing! : editingState;\n\n const startEdit = () => {\n editConf.onStart?.();\n if (!isControlledEdit) setEditingState(true);\n };\n const endEdit = () => {\n editConf.onEnd?.();\n if (!isControlledEdit) setEditingState(false);\n };\n const handleConfirm = (value: string) => {\n if (value !== (editConf.text ?? fallbackText)) editConf.onChange?.(value);\n endEdit();\n };\n const handleCancel = () => {\n editConf.onCancel?.();\n endEdit();\n };\n\n /* ---- ellipsis state ---- */\n const ellipsis = props.ellipsis;\n const ellConf: EllipsisConfig =\n ellipsis && typeof ellipsis === \"object\" ? ellipsis : {};\n const rows = ellConf.rows ?? props.ellipsisRows ?? 1;\n const wantClamp = !!ellipsis;\n const [expanded, setExpanded] = React.useState(false);\n\n /* ---- content ---- */\n let inner: React.ReactNode = props.children;\n\n if (props.code) inner = <code>{inner}</code>;\n if (props.keyboard) inner = <kbd>{inner}</kbd>;\n if (props.mark) inner = <mark>{inner}</mark>;\n if (props.delete) inner = <del>{inner}</del>;\n if (props.underline) inner = <u>{inner}</u>;\n if (props.strong) inner = <strong>{inner}</strong>;\n if (props.italic) inner = <i>{inner}</i>;\n\n /* ---- copy node ---- */\n let copyNode: React.ReactNode = null;\n if (props.copyable) {\n const conf =\n typeof props.copyable === \"object\" ? props.copyable : ({} as CopyableConfig);\n copyNode = <CopyAction config={conf} fallbackText={fallbackText} />;\n }\n\n /* ---- edit node ---- */\n let editIconNode: React.ReactNode = null;\n if (editable) {\n const tip = editConf.tooltip ?? \"编辑\";\n editIconNode = (\n <span\n role=\"button\"\n aria-label={typeof tip === \"string\" ? tip : \"Edit\"}\n tabIndex={0}\n title={typeof tip === \"string\" && tip !== \"\" ? tip : undefined}\n onClick={(e) => {\n e.stopPropagation();\n startEdit();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n startEdit();\n }\n }}\n className=\"typo-action typo-edit\"\n >\n {editConf.icon ?? <Icon name=\"edit\" size={12} />}\n </span>\n );\n }\n\n /* ---- text-trigger edit ---- */\n if (editable && triggers.includes(\"text\") && !editing) {\n inner = (\n <span\n className=\"typo-edit-text-trigger\"\n onClick={() => startEdit()}\n >\n {inner}\n </span>\n );\n }\n\n /* ---- clamp / expand ---- */\n let style: React.CSSProperties | undefined = props.style;\n let extraCls: string | undefined;\n if (wantClamp && !expanded) {\n extraCls = rows > 1 ? \"ellipsis-multi\" : \"ellipsis\";\n if (rows > 1) {\n style = {\n ...style,\n WebkitLineClamp: rows,\n } as React.CSSProperties;\n }\n }\n\n let expandNode: React.ReactNode = null;\n if (wantClamp && ellConf.expandable && !expanded) {\n expandNode = (\n <a\n className=\"typo-expand\"\n onClick={(e) => {\n ellConf.onExpand?.(e);\n setExpanded(true);\n }}\n >\n {ellConf.symbol ?? \"展开\"}\n </a>\n );\n }\n\n /* ---- title attribute fallback ---- */\n const titleAttr =\n wantClamp && ellConf.tooltip\n ? typeof ellConf.tooltip === \"string\"\n ? ellConf.tooltip\n : fallbackText\n : undefined;\n\n return {\n editing,\n editConf,\n fallbackText,\n handleConfirm,\n handleCancel,\n inner,\n copyNode,\n editIconNode,\n expandNode,\n style,\n extraCls,\n titleAttr,\n };\n}\n\n/* ============================================================================\n * Title (h1–h5)\n * ========================================================================== */\n\nexport type TitleLevel = 1 | 2 | 3 | 4 | 5;\n\nexport interface TitleProps extends BaseTypographyProps {\n /** Heading level — 1..5. Defaults to 1. */\n level?: TitleLevel;\n}\n\n/**\n * `Typography.Title` — semantic heading.\n *\n * @example\n * <Title level={2} copyable>章节标题</Title>\n */\nexport const Title = React.forwardRef<HTMLElement, TitleProps>((props, ref) => {\n const { level = 1, ...rest } = props;\n const body = useTypographyBody({ ...rest, multilineEdit: false });\n const Tag = (`h${level}`) as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\";\n\n if (body.editing) {\n return (\n <Tag\n ref={ref as React.Ref<HTMLHeadingElement>}\n className={buildClass(rest, `typo typo-title h${level}`, \"editing\")}\n style={rest.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </Tag>\n );\n }\n\n return (\n <Tag\n ref={ref as React.Ref<HTMLHeadingElement>}\n className={buildClass(rest, `typo typo-title h${level}`, body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </Tag>\n );\n});\nTitle.displayName = \"Typography.Title\";\n\n/* ============================================================================\n * Text — inline span\n * ========================================================================== */\n\nexport interface TextProps extends BaseTypographyProps {\n /** Force the rendered tag (default `<span>`). */\n as?: keyof JSX.IntrinsicElements;\n}\n\n/**\n * `Typography.Text` — inline text with semantic / decorative variants.\n *\n * @example\n * <Text type=\"success\" strong>成功</Text>\n * <Text code>npm install</Text>\n * <Text copyable>可复制内容</Text>\n */\nexport const Text = React.forwardRef<HTMLElement, TextProps>((props, ref) => {\n const { as = \"span\", ...rest } = props;\n const body = useTypographyBody({ ...rest, multilineEdit: false });\n const Tag = as as \"span\";\n\n if (body.editing) {\n return (\n <Tag\n ref={ref as React.Ref<HTMLSpanElement>}\n className={buildClass(rest, \"typo typo-text\", \"editing\")}\n style={rest.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </Tag>\n );\n }\n\n return (\n <Tag\n ref={ref as React.Ref<HTMLSpanElement>}\n className={buildClass(rest, \"typo typo-text\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </Tag>\n );\n});\nText.displayName = \"Typography.Text\";\n\n/* ============================================================================\n * Paragraph — block <p>\n * ========================================================================== */\n\nexport interface ParagraphProps extends BaseTypographyProps {}\n\n/**\n * `Typography.Paragraph` — block paragraph with the same decorations as `Text`.\n *\n * @example\n * <Paragraph ellipsis={{ rows: 3, expandable: true }}>{long}</Paragraph>\n */\nexport const Paragraph = React.forwardRef<HTMLParagraphElement, ParagraphProps>(\n (props, ref) => {\n const body = useTypographyBody({ ...props, multilineEdit: true });\n\n if (body.editing) {\n return (\n <div\n ref={ref as unknown as React.Ref<HTMLDivElement>}\n className={buildClass(props, \"typo typo-paragraph\", \"editing\")}\n style={props.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize ?? true}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </div>\n );\n }\n\n return (\n <p\n ref={ref}\n className={buildClass(props, \"typo typo-paragraph\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </p>\n );\n }\n);\nParagraph.displayName = \"Typography.Paragraph\";\n\n/* ============================================================================\n * Link — anchor\n * ========================================================================== */\n\nexport interface LinkProps\n extends BaseTypographyProps,\n Omit<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n keyof BaseTypographyProps | \"type\"\n > {\n href?: string;\n /** Add the leading external icon. */\n external?: boolean;\n /** Override the external icon. */\n externalIcon?: IconName;\n}\n\n/**\n * `Typography.Link` — styled `<a>` that participates in the same decoration\n * system as `Text`. Adds a small `arrow` for `external` links.\n *\n * @example\n * <Link href=\"https://example.com\" external>外部链接</Link>\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n (props, ref) => {\n const {\n type,\n disabled,\n mark,\n code,\n keyboard,\n underline,\n delete: del,\n strong,\n italic,\n copyable,\n editable,\n ellipsis,\n className,\n style,\n children,\n external,\n externalIcon = \"arrowRight\",\n target,\n rel,\n ...anchorRest\n } = props;\n const body = useTypographyBody({\n type,\n disabled,\n mark,\n code,\n keyboard,\n underline,\n delete: del,\n strong,\n italic,\n copyable,\n editable,\n ellipsis,\n className,\n style,\n children,\n });\n\n const safeRel =\n target === \"_blank\" ? rel ?? \"noopener noreferrer\" : rel;\n\n if (body.editing) {\n return (\n <span\n className={buildClass(props, \"typo typo-link\", \"editing\")}\n style={style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </span>\n );\n }\n\n return (\n <a\n ref={ref}\n className={buildClass(props, \"typo typo-link\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n target={target}\n rel={safeRel}\n aria-disabled={disabled || undefined}\n onClick={(e) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n anchorRest.onClick?.(e);\n }}\n {...anchorRest}\n >\n {body.inner}\n {external && (\n <span className=\"typo-link-ext\" aria-hidden>\n <Icon name={externalIcon} size={12} />\n </span>\n )}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </a>\n );\n }\n);\nLink.displayName = \"Typography.Link\";\n\n/* ============================================================================\n * Typography wrapper (article-style block)\n * ========================================================================== */\n\nexport interface TypographyProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n}\n\ninterface TypographyComponent\n extends React.ForwardRefExoticComponent<\n TypographyProps & React.RefAttributes<HTMLDivElement>\n > {\n Title: typeof Title;\n Text: typeof Text;\n Paragraph: typeof Paragraph;\n Link: typeof Link;\n}\n\n/**\n * `Typography` — optional article-style wrapper that applies consistent\n * vertical rhythm to its `Title` / `Paragraph` / `Text` / `Link` children.\n *\n * @example\n * <Typography>\n * <Typography.Title level={2}>标题</Typography.Title>\n * <Typography.Paragraph>段落…</Typography.Paragraph>\n * </Typography>\n */\nconst TypographyBase = React.forwardRef<HTMLDivElement, TypographyProps>(\n ({ className = \"\", children, ...rest }, ref) => (\n <article\n ref={ref as unknown as React.Ref<HTMLElement>}\n className={`typo-root ${className}`}\n {...(rest as React.HTMLAttributes<HTMLElement>)}\n >\n {children}\n </article>\n )\n) as unknown as TypographyComponent;\n\nTypographyBase.Title = Title;\nTypographyBase.Text = Text;\nTypographyBase.Paragraph = Paragraph;\nTypographyBase.Link = Link;\n(TypographyBase as React.ForwardRefExoticComponent<unknown>).displayName =\n \"Typography\";\n\nexport const Typography = TypographyBase;\n"]}
1
+ {"version":3,"sources":["../src/components/Typography/Typography.tsx"],"names":["React","Icon","jsx","jsxs"],"mappings":"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","file":"chunk-BIXW4ZYW.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Typography.css\";\nimport * as React from \"react\";\nimport { Icon, type IconName } from \"../Icon\";\n\n/* ============================================================================\n * Shared types\n * ========================================================================== */\n\nexport type TypographyType = \"secondary\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface CopyableConfig {\n /** Text to copy. Defaults to the rendered children string. */\n text?: string;\n /** Fired after a successful copy. */\n onCopy?: (event: React.MouseEvent<HTMLSpanElement>) => void;\n /** Custom icons `[default, copied]`. */\n icon?: [React.ReactNode, React.ReactNode];\n /** Custom tooltip text `[default, copied]`. Pass `false` to disable. */\n tooltips?: [React.ReactNode, React.ReactNode] | false;\n /** Format/MIME hint when calling `navigator.clipboard.write` is not used. */\n format?: \"text/plain\" | \"text/html\";\n}\n\nexport interface EditableConfig {\n /** Controlled editing flag. Omit for uncontrolled (click icon to start). */\n editing?: boolean;\n /** Text shown in the editor; falls back to `children` string. */\n text?: string;\n /** Fired with the new value when the user confirms. */\n onChange?: (value: string) => void;\n /** Fired when the user cancels (Escape or blur without confirm). */\n onCancel?: () => void;\n /** Fired when editing starts. */\n onStart?: () => void;\n /** Fired when editing ends (regardless of save/cancel). */\n onEnd?: () => void;\n /** Maximum input length. */\n maxLength?: number;\n /** Auto resize textarea. `true` = autosize; or pass row bounds. */\n autoSize?: boolean | { minRows?: number; maxRows?: number };\n /** What triggers entering edit mode. Defaults to `[\"icon\"]`. */\n triggerType?: Array<\"icon\" | \"text\">;\n /** Override the edit icon. */\n icon?: React.ReactNode;\n /** Tooltip text on the trigger icon. Pass `false` to disable. */\n tooltip?: React.ReactNode | false;\n /** Use a single-line input instead of textarea. */\n enterIcon?: React.ReactNode;\n}\n\nexport interface EllipsisConfig {\n /** Number of rows to clamp at. Defaults to 1. */\n rows?: number;\n /** Show an \"Expand\" affordance after clamping. */\n expandable?: boolean;\n /** Custom expand-button label. */\n symbol?: React.ReactNode;\n /** Fired on expand. */\n onExpand?: (event: React.MouseEvent<HTMLElement>) => void;\n /** Show full text in a `title` attribute. */\n tooltip?: boolean | React.ReactNode;\n /** Optional suffix that should always remain visible (e.g. an em-dash author). */\n suffix?: string;\n}\n\nexport interface BaseTypographyProps {\n /** Semantic color. */\n type?: TypographyType;\n /** Render disabled (muted + not selectable). */\n disabled?: boolean;\n /** Highlight with mark background. */\n mark?: boolean;\n /** Render as inline `<code>`. */\n code?: boolean;\n /** Render as keyboard key `<kbd>`. */\n keyboard?: boolean;\n /** Underline. */\n underline?: boolean;\n /** Strikethrough. */\n delete?: boolean;\n /** Bold. */\n strong?: boolean;\n /** Italic. */\n italic?: boolean;\n /** Add a copy button. Pass an object to customize. */\n copyable?: boolean | CopyableConfig;\n /** Add an edit button. Pass an object to customize. */\n editable?: boolean | EditableConfig;\n /** Truncate to N rows with optional expand affordance. */\n ellipsis?: boolean | EllipsisConfig;\n /** Extra class names. */\n className?: string;\n /** Inline style. */\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\n/* ============================================================================\n * Internals\n * ========================================================================== */\n\nfunction toText(node: React.ReactNode): string {\n if (node == null || node === false) return \"\";\n if (typeof node === \"string\" || typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(toText).join(\"\");\n if (React.isValidElement(node)) {\n const props = node.props as { children?: React.ReactNode };\n return toText(props.children);\n }\n return \"\";\n}\n\nfunction buildClass(props: BaseTypographyProps, base: string, extra?: string) {\n return [\n base,\n props.type,\n props.disabled && \"disabled\",\n props.mark && \"mark\",\n props.code && \"code\",\n props.keyboard && \"kbd\",\n props.underline && \"underline\",\n props.delete && \"del\",\n props.strong && \"strong\",\n props.italic && \"italic\",\n extra,\n props.className,\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\n/* ---------- Copy button ---------- */\n\nconst CopyAction: React.FC<{\n config: CopyableConfig;\n fallbackText: string;\n}> = ({ config, fallbackText }) => {\n const [copied, setCopied] = React.useState(false);\n const timerRef = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n return () => {\n if (timerRef.current != null) window.clearTimeout(timerRef.current);\n };\n }, []);\n\n const handleCopy = (event: React.MouseEvent<HTMLSpanElement>) => {\n event.stopPropagation();\n const text = config.text ?? fallbackText;\n if (typeof navigator !== \"undefined\" && navigator.clipboard) {\n navigator.clipboard.writeText(text).catch(() => {\n /* swallow — user-visible feedback is already minimal */\n });\n }\n config.onCopy?.(event);\n setCopied(true);\n if (timerRef.current != null) window.clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => setCopied(false), 2400);\n };\n\n const [defIcon, doneIcon] = config.icon ?? [\n <Icon key=\"def\" name=\"copy\" size={12} />,\n <Icon key=\"done\" name=\"check\" size={12} />,\n ];\n const tipText =\n config.tooltips === false\n ? undefined\n : Array.isArray(config.tooltips)\n ? copied\n ? config.tooltips[1]\n : config.tooltips[0]\n : copied\n ? \"已复制\"\n : \"复制\";\n\n return (\n <span\n role=\"button\"\n aria-label={typeof tipText === \"string\" ? tipText : \"Copy\"}\n tabIndex={0}\n title={typeof tipText === \"string\" ? tipText : undefined}\n onClick={handleCopy}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleCopy(e as unknown as React.MouseEvent<HTMLSpanElement>);\n }\n }}\n className={`typo-action typo-copy ${copied ? \"copied\" : \"\"}`}\n >\n {copied ? doneIcon : defIcon}\n </span>\n );\n};\n\n/* ---------- Edit affordance + inline editor ---------- */\n\nconst EditableEditor: React.FC<{\n initial: string;\n multiline: boolean;\n maxLength?: number;\n autoSize?: EditableConfig[\"autoSize\"];\n onConfirm: (value: string) => void;\n onCancel: () => void;\n}> = ({ initial, multiline, maxLength, autoSize, onConfirm, onCancel }) => {\n const [value, setValue] = React.useState(initial);\n const ref = React.useRef<HTMLTextAreaElement | HTMLInputElement | null>(null);\n\n React.useEffect(() => {\n const el = ref.current;\n if (el) {\n el.focus();\n const len = el.value.length;\n el.setSelectionRange(len, len);\n }\n }, []);\n\n const resize = React.useCallback(() => {\n const el = ref.current as HTMLTextAreaElement | null;\n if (!el || !multiline || !autoSize) return;\n el.style.height = \"auto\";\n const computed = window.getComputedStyle(el);\n const lineHeight = parseFloat(computed.lineHeight) || 20;\n const padding =\n parseFloat(computed.paddingTop) + parseFloat(computed.paddingBottom);\n const bounds = typeof autoSize === \"object\" ? autoSize : {};\n const min = (bounds.minRows ?? 1) * lineHeight + padding;\n const max = bounds.maxRows ? bounds.maxRows * lineHeight + padding : Infinity;\n const next = Math.min(Math.max(el.scrollHeight, min), max);\n el.style.height = `${next}px`;\n el.style.overflowY = el.scrollHeight > max ? \"auto\" : \"hidden\";\n }, [autoSize, multiline]);\n\n React.useEffect(() => {\n resize();\n }, [value, resize]);\n\n const handleKeyDown = (\n e: React.KeyboardEvent<HTMLTextAreaElement | HTMLInputElement>\n ) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n return;\n }\n if (e.key === \"Enter\" && (!multiline || (e.metaKey || e.ctrlKey))) {\n e.preventDefault();\n onConfirm(value);\n }\n };\n\n const common = {\n ref: ref as never,\n value,\n maxLength,\n className: \"typo-editor\",\n onChange: (\n e: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>\n ) => setValue(e.target.value),\n onBlur: () => onConfirm(value),\n onKeyDown: handleKeyDown,\n } as const;\n\n return multiline ? (\n <textarea rows={1} {...common} />\n ) : (\n <input type=\"text\" {...common} />\n );\n};\n\n/* ============================================================================\n * Hook: shared rendering body\n * ========================================================================== */\n\ninterface RenderableProps extends BaseTypographyProps {\n ellipsisRows?: number;\n multilineEdit?: boolean;\n}\n\nfunction useTypographyBody(props: RenderableProps) {\n const fallbackText = React.useMemo(\n () => toText(props.children),\n [props.children]\n );\n\n /* ---- editable state ---- */\n const editable = props.editable;\n const editConf: EditableConfig =\n editable && typeof editable === \"object\" ? editable : {};\n const triggers = editConf.triggerType ?? [\"icon\"];\n const isControlledEdit = editConf.editing != null;\n const [editingState, setEditingState] = React.useState(false);\n const editing = isControlledEdit ? editConf.editing! : editingState;\n\n const startEdit = () => {\n editConf.onStart?.();\n if (!isControlledEdit) setEditingState(true);\n };\n const endEdit = () => {\n editConf.onEnd?.();\n if (!isControlledEdit) setEditingState(false);\n };\n const handleConfirm = (value: string) => {\n if (value !== (editConf.text ?? fallbackText)) editConf.onChange?.(value);\n endEdit();\n };\n const handleCancel = () => {\n editConf.onCancel?.();\n endEdit();\n };\n\n /* ---- ellipsis state ---- */\n const ellipsis = props.ellipsis;\n const ellConf: EllipsisConfig =\n ellipsis && typeof ellipsis === \"object\" ? ellipsis : {};\n const rows = ellConf.rows ?? props.ellipsisRows ?? 1;\n const wantClamp = !!ellipsis;\n const [expanded, setExpanded] = React.useState(false);\n\n /* ---- content ---- */\n let inner: React.ReactNode = props.children;\n\n if (props.code) inner = <code>{inner}</code>;\n if (props.keyboard) inner = <kbd>{inner}</kbd>;\n if (props.mark) inner = <mark>{inner}</mark>;\n if (props.delete) inner = <del>{inner}</del>;\n if (props.underline) inner = <u>{inner}</u>;\n if (props.strong) inner = <strong>{inner}</strong>;\n if (props.italic) inner = <i>{inner}</i>;\n\n /* ---- copy node ---- */\n let copyNode: React.ReactNode = null;\n if (props.copyable) {\n const conf =\n typeof props.copyable === \"object\" ? props.copyable : ({} as CopyableConfig);\n copyNode = <CopyAction config={conf} fallbackText={fallbackText} />;\n }\n\n /* ---- edit node ---- */\n let editIconNode: React.ReactNode = null;\n if (editable) {\n const tip = editConf.tooltip ?? \"编辑\";\n editIconNode = (\n <span\n role=\"button\"\n aria-label={typeof tip === \"string\" ? tip : \"Edit\"}\n tabIndex={0}\n title={typeof tip === \"string\" && tip !== \"\" ? tip : undefined}\n onClick={(e) => {\n e.stopPropagation();\n startEdit();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n startEdit();\n }\n }}\n className=\"typo-action typo-edit\"\n >\n {editConf.icon ?? <Icon name=\"edit\" size={12} />}\n </span>\n );\n }\n\n /* ---- text-trigger edit ---- */\n if (editable && triggers.includes(\"text\") && !editing) {\n inner = (\n <span\n className=\"typo-edit-text-trigger\"\n onClick={() => startEdit()}\n >\n {inner}\n </span>\n );\n }\n\n /* ---- clamp / expand ---- */\n let style: React.CSSProperties | undefined = props.style;\n let extraCls: string | undefined;\n if (wantClamp && !expanded) {\n extraCls = rows > 1 ? \"ellipsis-multi\" : \"ellipsis\";\n if (rows > 1) {\n style = {\n ...style,\n WebkitLineClamp: rows,\n } as React.CSSProperties;\n }\n }\n\n let expandNode: React.ReactNode = null;\n if (wantClamp && ellConf.expandable && !expanded) {\n expandNode = (\n <a\n className=\"typo-expand\"\n onClick={(e) => {\n ellConf.onExpand?.(e);\n setExpanded(true);\n }}\n >\n {ellConf.symbol ?? \"展开\"}\n </a>\n );\n }\n\n /* ---- title attribute fallback ---- */\n const titleAttr =\n wantClamp && ellConf.tooltip\n ? typeof ellConf.tooltip === \"string\"\n ? ellConf.tooltip\n : fallbackText\n : undefined;\n\n return {\n editing,\n editConf,\n fallbackText,\n handleConfirm,\n handleCancel,\n inner,\n copyNode,\n editIconNode,\n expandNode,\n style,\n extraCls,\n titleAttr,\n };\n}\n\n/* ============================================================================\n * Title (h1–h5)\n * ========================================================================== */\n\nexport type TitleLevel = 1 | 2 | 3 | 4 | 5;\n\nexport interface TitleProps extends BaseTypographyProps {\n /** Heading level — 1..5. Defaults to 1. */\n level?: TitleLevel;\n}\n\n/**\n * `Typography.Title` — semantic heading.\n *\n * @example\n * <Title level={2} copyable>章节标题</Title>\n */\nexport const Title = React.forwardRef<HTMLElement, TitleProps>((props, ref) => {\n const { level = 1, ...rest } = props;\n const body = useTypographyBody({ ...rest, multilineEdit: false });\n const Tag = (`h${level}`) as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\";\n\n if (body.editing) {\n return (\n <Tag\n ref={ref as React.Ref<HTMLHeadingElement>}\n className={buildClass(rest, `typo typo-title h${level}`, \"editing\")}\n style={rest.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </Tag>\n );\n }\n\n return (\n <Tag\n ref={ref as React.Ref<HTMLHeadingElement>}\n className={buildClass(rest, `typo typo-title h${level}`, body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </Tag>\n );\n});\nTitle.displayName = \"Typography.Title\";\n\n/* ============================================================================\n * Text — inline span\n * ========================================================================== */\n\nexport interface TextProps extends BaseTypographyProps {\n /** Force the rendered tag (default `<span>`). */\n as?: keyof JSX.IntrinsicElements;\n}\n\n/**\n * `Typography.Text` — inline text with semantic / decorative variants.\n *\n * @example\n * <Text type=\"success\" strong>成功</Text>\n * <Text code>npm install</Text>\n * <Text copyable>可复制内容</Text>\n */\nexport const Text = React.forwardRef<HTMLElement, TextProps>((props, ref) => {\n const { as = \"span\", ...rest } = props;\n const body = useTypographyBody({ ...rest, multilineEdit: false });\n const Tag = as as \"span\";\n\n if (body.editing) {\n return (\n <Tag\n ref={ref as React.Ref<HTMLSpanElement>}\n className={buildClass(rest, \"typo typo-text\", \"editing\")}\n style={rest.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </Tag>\n );\n }\n\n return (\n <Tag\n ref={ref as React.Ref<HTMLSpanElement>}\n className={buildClass(rest, \"typo typo-text\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </Tag>\n );\n});\nText.displayName = \"Typography.Text\";\n\n/* ============================================================================\n * Paragraph — block <p>\n * ========================================================================== */\n\nexport interface ParagraphProps extends BaseTypographyProps {}\n\n/**\n * `Typography.Paragraph` — block paragraph with the same decorations as `Text`.\n *\n * @example\n * <Paragraph ellipsis={{ rows: 3, expandable: true }}>{long}</Paragraph>\n */\nexport const Paragraph = React.forwardRef<HTMLParagraphElement, ParagraphProps>(\n (props, ref) => {\n const body = useTypographyBody({ ...props, multilineEdit: true });\n\n if (body.editing) {\n return (\n <div\n ref={ref as unknown as React.Ref<HTMLDivElement>}\n className={buildClass(props, \"typo typo-paragraph\", \"editing\")}\n style={props.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize ?? true}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </div>\n );\n }\n\n return (\n <p\n ref={ref}\n className={buildClass(props, \"typo typo-paragraph\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </p>\n );\n }\n);\nParagraph.displayName = \"Typography.Paragraph\";\n\n/* ============================================================================\n * Link — anchor\n * ========================================================================== */\n\nexport interface LinkProps\n extends BaseTypographyProps,\n Omit<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n keyof BaseTypographyProps | \"type\"\n > {\n href?: string;\n /** Add the leading external icon. */\n external?: boolean;\n /** Override the external icon. */\n externalIcon?: IconName;\n}\n\n/**\n * `Typography.Link` — styled `<a>` that participates in the same decoration\n * system as `Text`. Adds a small `arrow` for `external` links.\n *\n * @example\n * <Link href=\"https://example.com\" external>外部链接</Link>\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n (props, ref) => {\n const {\n type,\n disabled,\n mark,\n code,\n keyboard,\n underline,\n delete: del,\n strong,\n italic,\n copyable,\n editable,\n ellipsis,\n className,\n style,\n children,\n external,\n externalIcon = \"arrowRight\",\n target,\n rel,\n ...anchorRest\n } = props;\n const body = useTypographyBody({\n type,\n disabled,\n mark,\n code,\n keyboard,\n underline,\n delete: del,\n strong,\n italic,\n copyable,\n editable,\n ellipsis,\n className,\n style,\n children,\n });\n\n const safeRel =\n target === \"_blank\" ? rel ?? \"noopener noreferrer\" : rel;\n\n if (body.editing) {\n return (\n <span\n className={buildClass(props, \"typo typo-link\", \"editing\")}\n style={style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </span>\n );\n }\n\n return (\n <a\n ref={ref}\n className={buildClass(props, \"typo typo-link\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n target={target}\n rel={safeRel}\n aria-disabled={disabled || undefined}\n onClick={(e) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n anchorRest.onClick?.(e);\n }}\n {...anchorRest}\n >\n {body.inner}\n {external && (\n <span className=\"typo-link-ext\" aria-hidden>\n <Icon name={externalIcon} size={12} />\n </span>\n )}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </a>\n );\n }\n);\nLink.displayName = \"Typography.Link\";\n\n/* ============================================================================\n * Typography wrapper (article-style block)\n * ========================================================================== */\n\nexport interface TypographyProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n}\n\ninterface TypographyComponent\n extends React.ForwardRefExoticComponent<\n TypographyProps & React.RefAttributes<HTMLDivElement>\n > {\n Title: typeof Title;\n Text: typeof Text;\n Paragraph: typeof Paragraph;\n Link: typeof Link;\n}\n\n/**\n * `Typography` — optional article-style wrapper that applies consistent\n * vertical rhythm to its `Title` / `Paragraph` / `Text` / `Link` children.\n *\n * @example\n * <Typography>\n * <Typography.Title level={2}>标题</Typography.Title>\n * <Typography.Paragraph>段落…</Typography.Paragraph>\n * </Typography>\n */\nconst TypographyBase = React.forwardRef<HTMLDivElement, TypographyProps>(\n ({ className = \"\", children, ...rest }, ref) => (\n <article\n ref={ref as unknown as React.Ref<HTMLElement>}\n className={`typo-root ${className}`}\n {...(rest as React.HTMLAttributes<HTMLElement>)}\n >\n {children}\n </article>\n )\n) as unknown as TypographyComponent;\n\nTypographyBase.Title = Title;\nTypographyBase.Text = Text;\nTypographyBase.Paragraph = Paragraph;\nTypographyBase.Link = Link;\n(TypographyBase as React.ForwardRefExoticComponent<unknown>).displayName =\n \"Typography\";\n\nexport const Typography = TypographyBase;\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkYFBHVTKN_cjs = require('./chunk-YFBHVTKN.cjs');
3
+ var chunkIJIQ4H6C_cjs = require('./chunk-IJIQ4H6C.cjs');
4
4
  require('./tokens-BIIUTPKN.css');
5
5
  require('./shared-NJHRNLRH.css');
6
6
  require('./CommandPalette-T45DBMPY.css');
@@ -140,7 +140,7 @@ var CommandPalette = ({
140
140
  "aria-label": "\u547D\u4EE4\u9762\u677F",
141
141
  children: [
142
142
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cmdp-search", children: /* @__PURE__ */ jsxRuntime.jsx(
143
- chunkYFBHVTKN_cjs.Input,
143
+ chunkIJIQ4H6C_cjs.Input,
144
144
  {
145
145
  ref: inputRef,
146
146
  size: "lg",
@@ -205,5 +205,5 @@ var CommandPalette = ({
205
205
  };
206
206
 
207
207
  exports.CommandPalette = CommandPalette;
208
- //# sourceMappingURL=chunk-IJA26LRY.cjs.map
209
- //# sourceMappingURL=chunk-IJA26LRY.cjs.map
208
+ //# sourceMappingURL=chunk-BPDWBY6Y.cjs.map
209
+ //# sourceMappingURL=chunk-BPDWBY6Y.cjs.map