@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
@@ -0,0 +1,137 @@
1
+ 'use strict';
2
+
3
+ var chunk3XIDJEYR_cjs = require('./chunk-3XIDJEYR.cjs');
4
+ require('./tokens-BIIUTPKN.css');
5
+ require('./shared-NJHRNLRH.css');
6
+ require('./Popover-DVGQGWX6.css');
7
+ var React = require('react');
8
+ var reactDom = require('react-dom');
9
+ var jsxRuntime = require('react/jsx-runtime');
10
+
11
+ function _interopNamespace(e) {
12
+ if (e && e.__esModule) return e;
13
+ var n = Object.create(null);
14
+ if (e) {
15
+ Object.keys(e).forEach(function (k) {
16
+ if (k !== 'default') {
17
+ var d = Object.getOwnPropertyDescriptor(e, k);
18
+ Object.defineProperty(n, k, d.get ? d : {
19
+ enumerable: true,
20
+ get: function () { return e[k]; }
21
+ });
22
+ }
23
+ });
24
+ }
25
+ n.default = e;
26
+ return Object.freeze(n);
27
+ }
28
+
29
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
+
31
+ var Popover = ({
32
+ content,
33
+ title,
34
+ placement = "bottom",
35
+ trigger = "click",
36
+ arrow = false,
37
+ closable = false,
38
+ width,
39
+ defaultOpen = false,
40
+ open,
41
+ onOpenChange,
42
+ children,
43
+ className = ""
44
+ }) => {
45
+ const [inner, setInner] = React__namespace.useState(defaultOpen);
46
+ const isControlled = open !== void 0;
47
+ const show = isControlled ? open : inner;
48
+ const panelWidth = width === "auto" ? 160 : width ?? 240;
49
+ const {
50
+ triggerRef,
51
+ floatingRef,
52
+ floatingStyle,
53
+ placement: resolved
54
+ } = chunk3XIDJEYR_cjs.useFloating({
55
+ open: show,
56
+ placement,
57
+ panelWidth,
58
+ panelHeight: 160,
59
+ alignCross: "center"
60
+ });
61
+ const set = React__namespace.useCallback((v) => {
62
+ if (!isControlled) setInner(v);
63
+ onOpenChange?.(v);
64
+ }, [isControlled, onOpenChange]);
65
+ React__namespace.useEffect(() => {
66
+ if (trigger !== "click" || !show) return;
67
+ const h = (e) => {
68
+ const t = e.target;
69
+ if (triggerRef.current?.contains(t)) return;
70
+ if (floatingRef.current?.contains(t)) return;
71
+ set(false);
72
+ };
73
+ document.addEventListener("mousedown", h);
74
+ return () => document.removeEventListener("mousedown", h);
75
+ }, [show, trigger, set, triggerRef, floatingRef]);
76
+ const hoverTimeout = React__namespace.useRef();
77
+ const interact = trigger === "hover" ? {
78
+ onMouseEnter: () => {
79
+ window.clearTimeout(hoverTimeout.current);
80
+ set(true);
81
+ },
82
+ onMouseLeave: () => {
83
+ hoverTimeout.current = window.setTimeout(() => set(false), 100);
84
+ }
85
+ } : { onClick: () => set(!show) };
86
+ const panelHover = trigger === "hover" ? {
87
+ onMouseEnter: () => window.clearTimeout(hoverTimeout.current),
88
+ onMouseLeave: () => {
89
+ hoverTimeout.current = window.setTimeout(() => set(false), 100);
90
+ }
91
+ } : {};
92
+ const widthStyle = width === "auto" ? {} : { width: width ?? void 0, minWidth: width ? void 0 : 220 };
93
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
94
+ /* @__PURE__ */ jsxRuntime.jsx(
95
+ "span",
96
+ {
97
+ ref: triggerRef,
98
+ className: `popover-anchor ${className}`,
99
+ style: { display: "inline-flex", alignSelf: "flex-start" },
100
+ ...interact,
101
+ children
102
+ }
103
+ ),
104
+ show && typeof document !== "undefined" && reactDom.createPortal(
105
+ /* @__PURE__ */ jsxRuntime.jsxs(
106
+ "div",
107
+ {
108
+ ref: floatingRef,
109
+ className: `popover popover-${resolved}`,
110
+ style: { ...floatingStyle, ...widthStyle },
111
+ ...panelHover,
112
+ children: [
113
+ (title || closable) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "popover-header", children: [
114
+ title && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "popover-title", children: title }),
115
+ closable && /* @__PURE__ */ jsxRuntime.jsx(
116
+ "button",
117
+ {
118
+ className: "popover-close",
119
+ onClick: () => set(false),
120
+ "aria-label": "Close",
121
+ children: "\xD7"
122
+ }
123
+ )
124
+ ] }),
125
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "popover-body", children: content }),
126
+ arrow && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `popover-arrow popover-arrow-${resolved}` })
127
+ ]
128
+ }
129
+ ),
130
+ document.body
131
+ )
132
+ ] });
133
+ };
134
+
135
+ exports.Popover = Popover;
136
+ //# sourceMappingURL=chunk-P2AV5BD7.cjs.map
137
+ //# sourceMappingURL=chunk-P2AV5BD7.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Popover/Popover.tsx"],"names":["React","useFloating","jsxs","Fragment","jsx","createPortal"],"mappings":"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","file":"chunk-P2AV5BD7.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Popover.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface PopoverProps {\n /** Popover body content. */\n content: React.ReactNode;\n /** Optional title rendered above content. */\n title?: React.ReactNode;\n /** Preferred placement relative to the trigger. */\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** How the popover is triggered. */\n trigger?: \"click\" | \"hover\";\n /** Show a small arrow pointing at the trigger. */\n arrow?: boolean;\n /** Show a close button in the header (click trigger only). */\n closable?: boolean;\n /** Panel width in px, or `\"auto\"` to fit content. */\n width?: number | \"auto\";\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Callback when visibility changes. */\n onOpenChange?: (open: boolean) => void;\n /** Trigger element. */\n children: React.ReactElement;\n className?: string;\n}\n\n/**\n * `Popover` — rich content bubble with optional title, arrow, and close button.\n *\n * @example\n * <Popover title=\"Confirm\" content={<p>Are you sure?</p>} arrow>\n * <Button>Delete</Button>\n * </Popover>\n */\nexport const Popover: React.FC<PopoverProps> = ({\n content,\n title,\n placement = \"bottom\",\n trigger = \"click\",\n arrow = false,\n closable = false,\n width,\n defaultOpen = false,\n open,\n onOpenChange,\n children,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState(defaultOpen);\n const isControlled = open !== undefined;\n const show = isControlled ? open! : inner;\n\n const panelWidth = width === \"auto\" ? 160 : (width ?? 240);\n\n const {\n triggerRef,\n floatingRef,\n floatingStyle,\n placement: resolved,\n } = useFloating<HTMLSpanElement, HTMLDivElement>({\n open: show,\n placement,\n panelWidth,\n panelHeight: 160,\n alignCross: \"center\",\n });\n\n const set = React.useCallback((v: boolean) => {\n if (!isControlled) setInner(v);\n onOpenChange?.(v);\n }, [isControlled, onOpenChange]);\n\n React.useEffect(() => {\n if (trigger !== \"click\" || !show) return;\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (triggerRef.current?.contains(t)) return;\n if (floatingRef.current?.contains(t)) return;\n set(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n }, [show, trigger, set, triggerRef, floatingRef]);\n\n const hoverTimeout = React.useRef<number | undefined>();\n\n const interact =\n trigger === \"hover\"\n ? {\n onMouseEnter: () => {\n window.clearTimeout(hoverTimeout.current);\n set(true);\n },\n onMouseLeave: () => {\n hoverTimeout.current = window.setTimeout(() => set(false), 100);\n },\n }\n : { onClick: () => set(!show) };\n\n const panelHover =\n trigger === \"hover\"\n ? {\n onMouseEnter: () => window.clearTimeout(hoverTimeout.current),\n onMouseLeave: () => {\n hoverTimeout.current = window.setTimeout(() => set(false), 100);\n },\n }\n : {};\n\n const widthStyle = width === \"auto\" ? {} : { width: width ?? undefined, minWidth: width ? undefined : 220 };\n\n return (\n <>\n <span\n ref={triggerRef}\n className={`popover-anchor ${className}`}\n style={{ display: \"inline-flex\", alignSelf: \"flex-start\" }}\n {...interact}\n >\n {children}\n </span>\n {show && typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={floatingRef}\n className={`popover popover-${resolved}`}\n style={{ ...floatingStyle, ...widthStyle }}\n {...panelHover}\n >\n {(title || closable) && (\n <div className=\"popover-header\">\n {title && <div className=\"popover-title\">{title}</div>}\n {closable && (\n <button\n className=\"popover-close\"\n onClick={() => set(false)}\n aria-label=\"Close\"\n >\n ×\n </button>\n )}\n </div>\n )}\n <div className=\"popover-body\">{content}</div>\n {arrow && <span className={`popover-arrow popover-arrow-${resolved}`} />}\n </div>,\n document.body\n )}\n </>\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { useFloating } from './chunk-V2DIQ3RH.js';
2
- import { Icon } from './chunk-QOGROEVD.js';
1
+ import { useFloating } from './chunk-ANAQER3T.js';
2
+ import { Icon } from './chunk-X3JG3IR6.js';
3
3
  import './tokens-BIIUTPKN.css';
4
4
  import './shared-NJHRNLRH.css';
5
5
  import './Cascader-VSYEKQCG.css';
@@ -111,5 +111,5 @@ var Cascader = ({
111
111
  };
112
112
 
113
113
  export { Cascader };
114
- //# sourceMappingURL=chunk-ZFJHUOFU.js.map
115
- //# sourceMappingURL=chunk-ZFJHUOFU.js.map
114
+ //# sourceMappingURL=chunk-P4XPESR2.js.map
115
+ //# sourceMappingURL=chunk-P4XPESR2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Cascader/Cascader.tsx"],"names":[],"mappings":"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","file":"chunk-ZFJHUOFU.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Cascader.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Icon, type IconName } from \"../Icon\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface CascaderOption {\n value: string;\n label: React.ReactNode;\n icon?: IconName;\n children?: CascaderOption[];\n disabled?: boolean;\n}\n\nexport interface CascaderProps {\n options: CascaderOption[];\n value?: string[];\n defaultValue?: string[];\n onChange?: (path: string[]) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\n/** `Cascader` — multi-column hierarchical selector. */\nexport const Cascader: React.FC<CascaderProps> = ({\n options,\n value,\n defaultValue = [],\n onChange,\n placeholder = \"请选择\",\n disabled,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState<string[]>(defaultValue);\n const isControlled = value !== undefined;\n const cur = isControlled ? value! : inner;\n const [open, setOpen] = React.useState(false);\n const [path, setPath] = React.useState<string[]>(cur);\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n const { triggerRef: ref, floatingStyle } = useFloating<HTMLDivElement>({\n open,\n placement: \"bottom\",\n panelWidth: 520,\n panelHeight: 260,\n });\n\n React.useEffect(() => {\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (ref.current?.contains(t)) return;\n if (panelRef.current?.contains(t)) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n if (open) setPath(cur);\n }, [open, cur]);\n\n const columns: CascaderOption[][] = [options];\n let cursor: CascaderOption[] = options;\n for (const v of path) {\n const match: CascaderOption | undefined = cursor.find((o) => o.value === v);\n if (match && match.children) {\n cursor = match.children;\n columns.push(cursor);\n } else break;\n }\n\n const pick = (depth: number, val: string, hasChildren: boolean) => {\n const np = [...path.slice(0, depth), val];\n setPath(np);\n if (!hasChildren) {\n if (!isControlled) setInner(np);\n onChange?.(np);\n setOpen(false);\n }\n };\n\n const labels: React.ReactNode[] = [];\n let list: CascaderOption[] = options;\n for (const v of cur) {\n const m: CascaderOption | undefined = list.find((o) => o.value === v);\n if (!m) break;\n labels.push(m.label);\n if (!m.children) break;\n list = m.children;\n }\n\n return (\n <div ref={ref} className={`cascader ${open ? \"open\" : \"\"} ${className}`}>\n <button\n type=\"button\"\n className={`cascader-trigger ${labels.length === 0 ? \"placeholder\" : \"\"}`}\n disabled={disabled}\n onClick={() => !disabled && setOpen((o) => !o)}\n >\n <span style={{ flex: 1 }}>\n {labels.length ? labels.map((l, i) => <span key={i}>{i > 0 && \" / \"}{l}</span>) : placeholder}\n </span>\n <span style={{ position: \"absolute\", right: 12, color: \"var(--fg-subtle)\" }}>\n <Icon name=\"chevDown\" size={14} />\n </span>\n </button>\n {open && typeof document !== \"undefined\" &&\n createPortal(\n <div ref={panelRef} className=\"cascader-panel\" style={floatingStyle}>\n {columns.map((col, depth) => (\n <div key={depth} className=\"cascader-col\">\n {col.map((o) => {\n const isActive = path[depth] === o.value;\n const hasChildren = !!(o.children && o.children.length);\n return (\n <button\n key={o.value}\n type=\"button\"\n className={`cascader-item ${isActive ? \"active\" : \"\"}`}\n disabled={o.disabled}\n onClick={() => pick(depth, o.value, hasChildren)}\n >\n {o.icon && <Icon name={o.icon} size={13} />}\n <span>{o.label}</span>\n {hasChildren && (\n <span className=\"chev\">\n <Icon name=\"chevRight\" size={12} />\n </span>\n )}\n </button>\n );\n })}\n </div>\n ))}\n </div>,\n document.body\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Cascader/Cascader.tsx"],"names":[],"mappings":";;;;;;;;;AA2BO,IAAM,WAAoC,CAAC;AAAA,EAChD,OAAA;AAAA,EACA,KAAA;AAAA,EACA,eAAe,EAAC;AAAA,EAChB,QAAA;AAAA,EACA,WAAA,GAAc,oBAAA;AAAA,EACd,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAAmB,YAAY,CAAA;AAC/D,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,GAAA,GAAM,eAAe,KAAA,GAAS,KAAA;AACpC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAmB,GAAG,CAAA;AACpD,EAAA,MAAM,QAAA,GAAiB,aAAuB,IAAI,CAAA;AAElD,EAAA,MAAM,EAAE,UAAA,EAAY,GAAA,EAAK,aAAA,KAAkB,WAAA,CAA4B;AAAA,IACrE,IAAA;AAAA,IACA,SAAA,EAAW,QAAA;AAAA,IACX,UAAA,EAAY,GAAA;AAAA,IACZ,WAAA,EAAa;AAAA,GACd,CAAA;AAED,EAAM,gBAAU,MAAM;AACpB,IAAA,MAAM,CAAA,GAAI,CAAC,CAAA,KAAkB;AAC3B,MAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,MAAA,IAAI,GAAA,CAAI,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,EAAG;AAC9B,MAAA,IAAI,QAAA,CAAS,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,EAAG;AACnC,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,CAAC,CAAA;AACxC,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,CAAC,CAAA;AAAA,EAE1D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,IAAA,UAAc,GAAG,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,IAAA,EAAM,GAAG,CAAC,CAAA;AAEd,EAAA,MAAM,OAAA,GAA8B,CAAC,OAAO,CAAA;AAC5C,EAAA,IAAI,MAAA,GAA2B,OAAA;AAC/B,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,MAAM,QAAoC,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAC,CAAA;AAC1E,IAAA,IAAI,KAAA,IAAS,MAAM,QAAA,EAAU;AAC3B,MAAA,MAAA,GAAS,KAAA,CAAM,QAAA;AACf,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,IACrB,CAAA,MAAO;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,EAAe,GAAA,EAAa,WAAA,KAAyB;AACjE,IAAA,MAAM,EAAA,GAAK,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA,EAAG,KAAK,GAAG,GAAG,CAAA;AACxC,IAAA,OAAA,CAAQ,EAAE,CAAA;AACV,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,IAAI,CAAC,YAAA,EAAc,QAAA,CAAS,EAAE,CAAA;AAC9B,MAAA,QAAA,GAAW,EAAE,CAAA;AACb,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAA4B,EAAC;AACnC,EAAA,IAAI,IAAA,GAAyB,OAAA;AAC7B,EAAA,KAAA,MAAW,KAAK,GAAA,EAAK;AACnB,IAAA,MAAM,IAAgC,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAC,CAAA;AACpE,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAK,CAAA;AACnB,IAAA,IAAI,CAAC,EAAE,QAAA,EAAU;AACjB,IAAA,IAAA,GAAO,CAAA,CAAE,QAAA;AAAA,EACX;AAEA,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,CAAA,SAAA,EAAY,OAAO,MAAA,GAAS,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EACnE,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,WAAW,CAAA,iBAAA,EAAoB,MAAA,CAAO,MAAA,KAAW,CAAA,GAAI,gBAAgB,EAAE,CAAA,CAAA;AAAA,QACvE,QAAA;AAAA,QACA,OAAA,EAAS,MAAM,CAAC,QAAA,IAAY,QAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,QAE7C,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,IAAA,EAAM,GAAE,EACpB,QAAA,EAAA,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,0BAAO,MAAA,EAAA,EAAc,QAAA,EAAA;AAAA,YAAA,CAAA,GAAI,CAAA,IAAK,KAAA;AAAA,YAAO;AAAA,WAAA,EAAA,EAApB,CAAsB,CAAO,CAAA,GAAI,WAAA,EACpF,CAAA;AAAA,8BACC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,YAAY,KAAA,EAAO,EAAA,EAAI,KAAA,EAAO,kBAAA,IACrD,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAK,UAAA,EAAW,IAAA,EAAM,IAAI,CAAA,EAClC;AAAA;AAAA;AAAA,KACF;AAAA,IACC,IAAA,IAAQ,OAAO,QAAA,KAAa,WAAA,IAC3B,YAAA;AAAA,sBACE,GAAA,CAAC,SAAI,GAAA,EAAK,QAAA,EAAU,WAAU,gBAAA,EAAiB,KAAA,EAAO,eACnD,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,yBAChB,KAAA,EAAA,EAAgB,SAAA,EAAU,gBACxB,QAAA,EAAA,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM;AACd,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAK,CAAA,KAAM,CAAA,CAAE,KAAA;AACnC,QAAA,MAAM,cAAc,CAAC,EAAE,CAAA,CAAE,QAAA,IAAY,EAAE,QAAA,CAAS,MAAA,CAAA;AAChD,QAAA,uBACE,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAW,CAAA,cAAA,EAAiB,QAAA,GAAW,QAAA,GAAW,EAAE,CAAA,CAAA;AAAA,YACpD,UAAU,CAAA,CAAE,QAAA;AAAA,YACZ,SAAS,MAAM,IAAA,CAAK,KAAA,EAAO,CAAA,CAAE,OAAO,WAAW,CAAA;AAAA,YAE9C,QAAA,EAAA;AAAA,cAAA,CAAA,CAAE,wBAAQ,GAAA,CAAC,IAAA,EAAA,EAAK,MAAM,CAAA,CAAE,IAAA,EAAM,MAAM,EAAA,EAAI,CAAA;AAAA,8BACzC,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA;AAAA,cACd,WAAA,oBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,MAAA,EACd,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,WAAA,EAAY,IAAA,EAAM,EAAA,EAAI,CAAA,EACnC;AAAA;AAAA,WAAA;AAAA,UAXG,CAAA,CAAE;AAAA,SAaT;AAAA,MAEJ,CAAC,CAAA,EAAA,EArBO,KAsBV,CACD,CAAA,EACH,CAAA;AAAA,MACA,QAAA,CAAS;AAAA;AACX,GAAA,EACJ,CAAA;AAEJ","file":"chunk-P4XPESR2.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Cascader.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Icon, type IconName } from \"../Icon\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface CascaderOption {\n value: string;\n label: React.ReactNode;\n icon?: IconName;\n children?: CascaderOption[];\n disabled?: boolean;\n}\n\nexport interface CascaderProps {\n options: CascaderOption[];\n value?: string[];\n defaultValue?: string[];\n onChange?: (path: string[]) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\n/** `Cascader` — multi-column hierarchical selector. */\nexport const Cascader: React.FC<CascaderProps> = ({\n options,\n value,\n defaultValue = [],\n onChange,\n placeholder = \"请选择\",\n disabled,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState<string[]>(defaultValue);\n const isControlled = value !== undefined;\n const cur = isControlled ? value! : inner;\n const [open, setOpen] = React.useState(false);\n const [path, setPath] = React.useState<string[]>(cur);\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n const { triggerRef: ref, floatingStyle } = useFloating<HTMLDivElement>({\n open,\n placement: \"bottom\",\n panelWidth: 520,\n panelHeight: 260,\n });\n\n React.useEffect(() => {\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (ref.current?.contains(t)) return;\n if (panelRef.current?.contains(t)) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n if (open) setPath(cur);\n }, [open, cur]);\n\n const columns: CascaderOption[][] = [options];\n let cursor: CascaderOption[] = options;\n for (const v of path) {\n const match: CascaderOption | undefined = cursor.find((o) => o.value === v);\n if (match && match.children) {\n cursor = match.children;\n columns.push(cursor);\n } else break;\n }\n\n const pick = (depth: number, val: string, hasChildren: boolean) => {\n const np = [...path.slice(0, depth), val];\n setPath(np);\n if (!hasChildren) {\n if (!isControlled) setInner(np);\n onChange?.(np);\n setOpen(false);\n }\n };\n\n const labels: React.ReactNode[] = [];\n let list: CascaderOption[] = options;\n for (const v of cur) {\n const m: CascaderOption | undefined = list.find((o) => o.value === v);\n if (!m) break;\n labels.push(m.label);\n if (!m.children) break;\n list = m.children;\n }\n\n return (\n <div ref={ref} className={`cascader ${open ? \"open\" : \"\"} ${className}`}>\n <button\n type=\"button\"\n className={`cascader-trigger ${labels.length === 0 ? \"placeholder\" : \"\"}`}\n disabled={disabled}\n onClick={() => !disabled && setOpen((o) => !o)}\n >\n <span style={{ flex: 1 }}>\n {labels.length ? labels.map((l, i) => <span key={i}>{i > 0 && \" / \"}{l}</span>) : placeholder}\n </span>\n <span style={{ position: \"absolute\", right: 12, color: \"var(--fg-subtle)\" }}>\n <Icon name=\"chevDown\" size={14} />\n </span>\n </button>\n {open && typeof document !== \"undefined\" &&\n createPortal(\n <div ref={panelRef} className=\"cascader-panel\" style={floatingStyle}>\n {columns.map((col, depth) => (\n <div key={depth} className=\"cascader-col\">\n {col.map((o) => {\n const isActive = path[depth] === o.value;\n const hasChildren = !!(o.children && o.children.length);\n return (\n <button\n key={o.value}\n type=\"button\"\n className={`cascader-item ${isActive ? \"active\" : \"\"}`}\n disabled={o.disabled}\n onClick={() => pick(depth, o.value, hasChildren)}\n >\n {o.icon && <Icon name={o.icon} size={13} />}\n <span>{o.label}</span>\n {hasChildren && (\n <span className=\"chev\">\n <Icon name=\"chevRight\" size={12} />\n </span>\n )}\n </button>\n );\n })}\n </div>\n ))}\n </div>,\n document.body\n )}\n </div>\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { Select } from './chunk-6XZ362VL.js';
2
- import { Icon } from './chunk-QOGROEVD.js';
1
+ import { Select } from './chunk-XT7RXXOE.js';
2
+ import { Icon } from './chunk-X3JG3IR6.js';
3
3
  import './tokens-BIIUTPKN.css';
4
4
  import './shared-NJHRNLRH.css';
5
5
  import './Pagination-YIRYJUXP.css';
@@ -130,5 +130,5 @@ var Pagination = ({
130
130
  };
131
131
 
132
132
  export { Pagination };
133
- //# sourceMappingURL=chunk-AESLEYST.js.map
134
- //# sourceMappingURL=chunk-AESLEYST.js.map
133
+ //# sourceMappingURL=chunk-RJNGXR5Y.js.map
134
+ //# sourceMappingURL=chunk-RJNGXR5Y.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Pagination/Pagination.tsx"],"names":[],"mappings":"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","file":"chunk-AESLEYST.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Pagination.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\nimport { Select } from \"../Select\";\n\nexport interface PaginationProps {\n /** Total number of items. */\n total: number;\n /** Items per page. */\n pageSize?: number;\n /** Current page (1-indexed). */\n page?: number;\n defaultPage?: number;\n onChange?: (page: number) => void;\n /** Max visible page buttons (before ellipsis logic). */\n siblings?: number;\n /**\n * Render a \"跳至 N 页\" input to the right of the page buttons. Enter key commits\n * and clamps to `1..totalPages`.\n */\n showQuickJumper?: boolean;\n /**\n * Render a Select to let the user switch the page size. Resetting the size sends the\n * user back to page 1 and calls both `onShowSizeChange` and `onChange(1)`.\n */\n showSizeChanger?: boolean;\n /** Page size choices for `showSizeChanger`. Defaults to `[10, 20, 50, 100]`. */\n pageSizeOptions?: number[];\n /** Fires when the user picks a new page size via the size changer. */\n onShowSizeChange?: (current: number, size: number) => void;\n className?: string;\n}\n\nconst DEFAULT_SIZE_OPTIONS = [10, 20, 50, 100];\n\n/** `Pagination` — page number controls. */\nexport const Pagination: React.FC<PaginationProps> = ({\n total,\n pageSize = 10,\n page,\n defaultPage = 1,\n onChange,\n siblings = 1,\n showQuickJumper = false,\n showSizeChanger = false,\n pageSizeOptions = DEFAULT_SIZE_OPTIONS,\n onShowSizeChange,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState(defaultPage);\n const isControlled = page !== undefined;\n const cur = isControlled ? page! : inner;\n const pages = Math.max(1, Math.ceil(total / pageSize));\n const [jumpDraft, setJumpDraft] = React.useState(\"\");\n\n const go = (p: number) => {\n const next = Math.min(pages, Math.max(1, p));\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n const handleJump = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key !== \"Enter\") return;\n const n = Number(jumpDraft);\n if (!Number.isFinite(n) || n < 1) {\n setJumpDraft(\"\");\n return;\n }\n go(Math.trunc(n));\n setJumpDraft(\"\");\n };\n\n const handleSizeChange = (size: number) => {\n onShowSizeChange?.(cur, size);\n // reset to page 1 — Ant Design parity\n if (!isControlled) setInner(1);\n onChange?.(1);\n };\n\n const range = (): (number | \"...\")[] => {\n const out: (number | \"...\")[] = [];\n const add = (n: number | \"...\") => out.push(n);\n const s = Math.max(2, cur - siblings);\n const e = Math.min(pages - 1, cur + siblings);\n add(1);\n if (s > 2) add(\"...\");\n for (let i = s; i <= e; i++) add(i);\n if (e < pages - 1) add(\"...\");\n if (pages > 1) add(pages);\n return out;\n };\n\n return (\n <div className={`pagination ${className}`}>\n <span className=\"pg-info\">\n 共 {total} 条 · 第 {cur} / {pages} 页\n </span>\n <div className=\"pg-controls\">\n <button\n type=\"button\"\n className={`pg ${cur === 1 ? \"disabled\" : \"\"}`}\n onClick={() => cur > 1 && go(cur - 1)}\n aria-label=\"Previous\"\n >\n <Icon name=\"chevLeft\" size={12} />\n </button>\n {range().map((p, i) =>\n p === \"...\" ? (\n <span key={`e${i}`} className=\"ellipsis\">…</span>\n ) : (\n <button\n key={p}\n type=\"button\"\n className={`pg ${p === cur ? \"active\" : \"\"}`}\n onClick={() => go(p)}\n >\n {p}\n </button>\n )\n )}\n <button\n type=\"button\"\n className={`pg ${cur === pages ? \"disabled\" : \"\"}`}\n onClick={() => cur < pages && go(cur + 1)}\n aria-label=\"Next\"\n >\n <Icon name=\"chevRight\" size={12} />\n </button>\n {showSizeChanger && (\n <div className=\"pg-size-changer\">\n <Select<number>\n value={pageSize}\n size=\"sm\"\n options={pageSizeOptions.map((n) => ({ value: n, label: `${n} 条/页` }))}\n onChange={handleSizeChange}\n />\n </div>\n )}\n {showQuickJumper && (\n <label className=\"pg-jumper\">\n <span className=\"pg-jumper-label\">跳至</span>\n <input\n type=\"text\"\n inputMode=\"numeric\"\n className=\"pg-jumper-input\"\n value={jumpDraft}\n onChange={(e) => setJumpDraft(e.target.value.replace(/[^\\d]/g, \"\"))}\n onKeyDown={handleJump}\n aria-label=\"跳转到指定页\"\n />\n <span className=\"pg-jumper-label\">页</span>\n </label>\n )}\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Pagination/Pagination.tsx"],"names":[],"mappings":"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","file":"chunk-RJNGXR5Y.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Pagination.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\nimport { Select } from \"../Select\";\n\nexport interface PaginationProps {\n /** Total number of items. */\n total: number;\n /** Items per page. */\n pageSize?: number;\n /** Current page (1-indexed). */\n page?: number;\n defaultPage?: number;\n onChange?: (page: number) => void;\n /** Max visible page buttons (before ellipsis logic). */\n siblings?: number;\n /**\n * Render a \"跳至 N 页\" input to the right of the page buttons. Enter key commits\n * and clamps to `1..totalPages`.\n */\n showQuickJumper?: boolean;\n /**\n * Render a Select to let the user switch the page size. Resetting the size sends the\n * user back to page 1 and calls both `onShowSizeChange` and `onChange(1)`.\n */\n showSizeChanger?: boolean;\n /** Page size choices for `showSizeChanger`. Defaults to `[10, 20, 50, 100]`. */\n pageSizeOptions?: number[];\n /** Fires when the user picks a new page size via the size changer. */\n onShowSizeChange?: (current: number, size: number) => void;\n className?: string;\n}\n\nconst DEFAULT_SIZE_OPTIONS = [10, 20, 50, 100];\n\n/** `Pagination` — page number controls. */\nexport const Pagination: React.FC<PaginationProps> = ({\n total,\n pageSize = 10,\n page,\n defaultPage = 1,\n onChange,\n siblings = 1,\n showQuickJumper = false,\n showSizeChanger = false,\n pageSizeOptions = DEFAULT_SIZE_OPTIONS,\n onShowSizeChange,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState(defaultPage);\n const isControlled = page !== undefined;\n const cur = isControlled ? page! : inner;\n const pages = Math.max(1, Math.ceil(total / pageSize));\n const [jumpDraft, setJumpDraft] = React.useState(\"\");\n\n const go = (p: number) => {\n const next = Math.min(pages, Math.max(1, p));\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n const handleJump = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key !== \"Enter\") return;\n const n = Number(jumpDraft);\n if (!Number.isFinite(n) || n < 1) {\n setJumpDraft(\"\");\n return;\n }\n go(Math.trunc(n));\n setJumpDraft(\"\");\n };\n\n const handleSizeChange = (size: number) => {\n onShowSizeChange?.(cur, size);\n // reset to page 1 — Ant Design parity\n if (!isControlled) setInner(1);\n onChange?.(1);\n };\n\n const range = (): (number | \"...\")[] => {\n const out: (number | \"...\")[] = [];\n const add = (n: number | \"...\") => out.push(n);\n const s = Math.max(2, cur - siblings);\n const e = Math.min(pages - 1, cur + siblings);\n add(1);\n if (s > 2) add(\"...\");\n for (let i = s; i <= e; i++) add(i);\n if (e < pages - 1) add(\"...\");\n if (pages > 1) add(pages);\n return out;\n };\n\n return (\n <div className={`pagination ${className}`}>\n <span className=\"pg-info\">\n 共 {total} 条 · 第 {cur} / {pages} 页\n </span>\n <div className=\"pg-controls\">\n <button\n type=\"button\"\n className={`pg ${cur === 1 ? \"disabled\" : \"\"}`}\n onClick={() => cur > 1 && go(cur - 1)}\n aria-label=\"Previous\"\n >\n <Icon name=\"chevLeft\" size={12} />\n </button>\n {range().map((p, i) =>\n p === \"...\" ? (\n <span key={`e${i}`} className=\"ellipsis\">…</span>\n ) : (\n <button\n key={p}\n type=\"button\"\n className={`pg ${p === cur ? \"active\" : \"\"}`}\n onClick={() => go(p)}\n >\n {p}\n </button>\n )\n )}\n <button\n type=\"button\"\n className={`pg ${cur === pages ? \"disabled\" : \"\"}`}\n onClick={() => cur < pages && go(cur + 1)}\n aria-label=\"Next\"\n >\n <Icon name=\"chevRight\" size={12} />\n </button>\n {showSizeChanger && (\n <div className=\"pg-size-changer\">\n <Select<number>\n value={pageSize}\n size=\"sm\"\n options={pageSizeOptions.map((n) => ({ value: n, label: `${n} 条/页` }))}\n onChange={handleSizeChange}\n />\n </div>\n )}\n {showQuickJumper && (\n <label className=\"pg-jumper\">\n <span className=\"pg-jumper-label\">跳至</span>\n <input\n type=\"text\"\n inputMode=\"numeric\"\n className=\"pg-jumper-input\"\n value={jumpDraft}\n onChange={(e) => setJumpDraft(e.target.value.replace(/[^\\d]/g, \"\"))}\n onKeyDown={handleJump}\n aria-label=\"跳转到指定页\"\n />\n <span className=\"pg-jumper-label\">页</span>\n </label>\n )}\n </div>\n </div>\n );\n};\n"]}
@@ -0,0 +1,86 @@
1
+ import { Spinner } from './chunk-GR5STMOA.js';
2
+ import './tokens-BIIUTPKN.css';
3
+ import './shared-NJHRNLRH.css';
4
+ import './Timeline-RHZAZKZ7.css';
5
+ import * as React from 'react';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var Timeline = React.forwardRef(
9
+ ({
10
+ items,
11
+ pending = false,
12
+ pendingContent = "\u52A0\u8F7D\u4E2D...",
13
+ mode = "left",
14
+ reverse = false,
15
+ className = "",
16
+ ...rest
17
+ }, ref) => {
18
+ const displayItems = [...items];
19
+ if (reverse) displayItems.reverse();
20
+ const hasPending = pending !== false;
21
+ return /* @__PURE__ */ jsxs(
22
+ "div",
23
+ {
24
+ ref,
25
+ className: `timeline timeline-${mode} ${className}`,
26
+ ...rest,
27
+ children: [
28
+ displayItems.map((item, i) => /* @__PURE__ */ jsx(
29
+ TimelineItem,
30
+ {
31
+ item,
32
+ isLast: !hasPending && i === displayItems.length - 1,
33
+ position: getPosition(mode, i)
34
+ },
35
+ item.key ?? i
36
+ )),
37
+ hasPending && /* @__PURE__ */ jsx(
38
+ TimelineItem,
39
+ {
40
+ item: {
41
+ children: pendingContent,
42
+ dot: typeof pending === "boolean" ? void 0 : pending,
43
+ color: "muted"
44
+ },
45
+ isLast: true,
46
+ isPending: true,
47
+ position: getPosition(mode, displayItems.length)
48
+ }
49
+ )
50
+ ]
51
+ }
52
+ );
53
+ }
54
+ );
55
+ Timeline.displayName = "Timeline";
56
+ function getPosition(mode, index) {
57
+ if (mode === "left") return "left";
58
+ if (mode === "right") return "right";
59
+ return index % 2 === 0 ? "left" : "right";
60
+ }
61
+ var TimelineItem = ({
62
+ item,
63
+ isLast,
64
+ isPending,
65
+ position
66
+ }) => {
67
+ const color = item.color ?? "accent";
68
+ const cls = [
69
+ "timeline-item",
70
+ `timeline-item-${position}`,
71
+ isLast ? "timeline-item-last" : "",
72
+ isPending ? "timeline-item-pending" : ""
73
+ ].filter(Boolean).join(" ");
74
+ return /* @__PURE__ */ jsxs("div", { className: cls, children: [
75
+ /* @__PURE__ */ jsx("div", { className: "timeline-item-label", children: item.label }),
76
+ /* @__PURE__ */ jsxs("div", { className: "timeline-item-head", children: [
77
+ /* @__PURE__ */ jsx("div", { className: `timeline-item-dot ${color} ${isPending ? "pending" : ""}`, children: item.dot ?? (isPending && /* @__PURE__ */ jsx(Spinner, { size: 14 })) }),
78
+ !isLast && /* @__PURE__ */ jsx("div", { className: "timeline-item-tail" })
79
+ ] }),
80
+ /* @__PURE__ */ jsx("div", { className: "timeline-item-content", children: item.children })
81
+ ] });
82
+ };
83
+
84
+ export { Timeline };
85
+ //# sourceMappingURL=chunk-S3NIRNWM.js.map
86
+ //# sourceMappingURL=chunk-S3NIRNWM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Timeline/Timeline.tsx"],"names":[],"mappings":"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","file":"chunk-S3NIRNWM.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Timeline.css\";\nimport * as React from \"react\";\nimport { Spinner } from \"../Empty\";\n\nexport interface TimelineItemConfig {\n /** Unique key for the item */\n key?: string;\n /** Content displayed on the right (or main side) */\n children?: React.ReactNode;\n /** Label displayed on the opposite side (alternate/label mode) */\n label?: React.ReactNode;\n /** Dot color */\n color?: \"accent\" | \"success\" | \"warning\" | \"danger\" | \"info\" | \"muted\";\n /** Custom dot content (replaces default dot) */\n dot?: React.ReactNode;\n}\n\nexport interface TimelineProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Timeline items */\n items: TimelineItemConfig[];\n /**\n * Show a pending (loading) item at the end.\n * `true` renders a default spinner; a ReactNode renders custom content.\n */\n pending?: boolean | React.ReactNode;\n /** Text shown as the pending item's content */\n pendingContent?: React.ReactNode;\n /** Layout mode */\n mode?: \"left\" | \"right\" | \"alternate\";\n /** Reverse the order of items */\n reverse?: boolean;\n}\n\n/**\n * `Timeline` — vertical timeline with pending/loading state.\n *\n * @example\n * <Timeline items={[{ children: \"Created\" }, { children: \"In Progress\" }]} pending />\n */\nexport const Timeline = React.forwardRef<HTMLDivElement, TimelineProps>(\n (\n {\n items,\n pending = false,\n pendingContent = \"加载中...\",\n mode = \"left\",\n reverse = false,\n className = \"\",\n ...rest\n },\n ref\n ) => {\n const displayItems = [...items];\n if (reverse) displayItems.reverse();\n\n const hasPending = pending !== false;\n\n return (\n <div\n ref={ref}\n className={`timeline timeline-${mode} ${className}`}\n {...rest}\n >\n {displayItems.map((item, i) => (\n <TimelineItem\n key={item.key ?? i}\n item={item}\n isLast={!hasPending && i === displayItems.length - 1}\n position={getPosition(mode, i)}\n />\n ))}\n {hasPending && (\n <TimelineItem\n item={{\n children: pendingContent,\n dot: typeof pending === \"boolean\" ? undefined : pending,\n color: \"muted\",\n }}\n isLast\n isPending\n position={getPosition(mode, displayItems.length)}\n />\n )}\n </div>\n );\n }\n);\nTimeline.displayName = \"Timeline\";\n\nfunction getPosition(\n mode: \"left\" | \"right\" | \"alternate\",\n index: number\n): \"left\" | \"right\" {\n if (mode === \"left\") return \"left\";\n if (mode === \"right\") return \"right\";\n return index % 2 === 0 ? \"left\" : \"right\";\n}\n\ninterface TimelineItemInternalProps {\n item: TimelineItemConfig;\n isLast: boolean;\n isPending?: boolean;\n position: \"left\" | \"right\";\n}\n\nconst TimelineItem: React.FC<TimelineItemInternalProps> = ({\n item,\n isLast,\n isPending,\n position,\n}) => {\n const color = item.color ?? \"accent\";\n const cls = [\n \"timeline-item\",\n `timeline-item-${position}`,\n isLast ? \"timeline-item-last\" : \"\",\n isPending ? \"timeline-item-pending\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div className={cls}>\n <div className=\"timeline-item-label\">{item.label}</div>\n <div className=\"timeline-item-head\">\n <div className={`timeline-item-dot ${color} ${isPending ? \"pending\" : \"\"}`}>\n {item.dot ?? (isPending && <Spinner size={14} />)}\n </div>\n {!isLast && <div className=\"timeline-item-tail\" />}\n </div>\n <div className=\"timeline-item-content\">{item.children}</div>\n </div>\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('./Accordion-REMDCQUD.css');
@@ -102,7 +102,7 @@ var Accordion = ({
102
102
  toggle(it.key, it.disabled);
103
103
  }
104
104
  },
105
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkYCHUHMNP_cjs.Icon, { name: "chevDown", size: 16 })
105
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunk3KQKEE5O_cjs.Icon, { name: "chevDown", size: 16 })
106
106
  }
107
107
  )
108
108
  ]
@@ -117,5 +117,5 @@ var Accordion = ({
117
117
  };
118
118
 
119
119
  exports.Accordion = Accordion;
120
- //# sourceMappingURL=chunk-HJIKU6MF.cjs.map
121
- //# sourceMappingURL=chunk-HJIKU6MF.cjs.map
120
+ //# sourceMappingURL=chunk-S7RFIMA3.cjs.map
121
+ //# sourceMappingURL=chunk-S7RFIMA3.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Accordion/Accordion.tsx"],"names":["React","jsx","jsxs","Icon"],"mappings":"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","file":"chunk-HJIKU6MF.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Accordion.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface AccordionItem {\n key: string;\n title: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface AccordionProps {\n items: AccordionItem[];\n /** If true, multiple sections can be open at once. */\n multiple?: boolean;\n /**\n * Accordion mode — at most one item open at a time. Takes precedence over `multiple`\n * when both are set.\n */\n accordion?: boolean;\n /**\n * What triggers expansion.\n * - `\"header\"` (default): clicking anywhere on the header toggles.\n * - `\"icon\"`: only the chevron icon is clickable.\n * - `\"disabled\"`: the panel cannot be toggled.\n */\n collapsible?: \"header\" | \"icon\" | \"disabled\";\n activeKeys?: string[];\n defaultActiveKeys?: string[];\n onChange?: (keys: string[]) => void;\n className?: string;\n}\n\nconst AccordionPanel: React.FC<{ open: boolean; children: React.ReactNode }> = ({ open, children }) => {\n const innerRef = React.useRef<HTMLDivElement>(null);\n const [h, setH] = React.useState(0);\n const [animated, setAnimated] = React.useState(false);\n\n React.useLayoutEffect(() => {\n const el = innerRef.current;\n if (!el) return;\n setH(el.scrollHeight);\n const ro = new ResizeObserver(() => setH(el.scrollHeight));\n ro.observe(el);\n return () => ro.disconnect();\n }, []);\n\n React.useEffect(() => {\n const id = requestAnimationFrame(() => setAnimated(true));\n return () => cancelAnimationFrame(id);\n }, []);\n\n return (\n <div\n className=\"accordion-body\"\n style={{ maxHeight: open ? h : 0, transition: animated ? undefined : \"none\" }}\n aria-hidden={!open}\n >\n <div ref={innerRef} className=\"accordion-body-inner\">{children}</div>\n </div>\n );\n};\n\n/** `Accordion` — collapsible sections. */\nexport const Accordion: React.FC<AccordionProps> = ({\n items,\n multiple = false,\n accordion = false,\n collapsible = \"header\",\n activeKeys,\n defaultActiveKeys = [],\n onChange,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState<string[]>(defaultActiveKeys);\n const isControlled = activeKeys !== undefined;\n const keys = isControlled ? activeKeys! : inner;\n\n // accordion takes precedence over multiple\n const singleOpen = accordion || !multiple;\n\n const toggle = (k: string, itemDisabled?: boolean) => {\n if (collapsible === \"disabled\" || itemDisabled) return;\n const next = keys.includes(k)\n ? keys.filter((x) => x !== k)\n : singleOpen\n ? [k]\n : [...keys, k];\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n return (\n <div className={`accordion ${className}`}>\n {items.map((it) => {\n const open = keys.includes(it.key);\n const isDisabled = it.disabled || collapsible === \"disabled\";\n const headerClickable = collapsible === \"header\" && !isDisabled;\n return (\n <div\n key={it.key}\n className={`accordion-item ${open ? \"open\" : \"\"} ${isDisabled ? \"disabled\" : \"\"} ${collapsible === \"icon\" ? \"icon-only\" : \"\"}`}\n >\n <button\n type=\"button\"\n className=\"accordion-head\"\n disabled={isDisabled}\n onClick={() => headerClickable && toggle(it.key, it.disabled)}\n aria-expanded={open}\n >\n <span>{it.title}</span>\n <span\n className={`accordion-chev${collapsible === \"icon\" ? \" clickable\" : \"\"}`}\n onClick={(e) => {\n if (collapsible === \"icon\" && !isDisabled) {\n e.stopPropagation();\n toggle(it.key, it.disabled);\n }\n }}\n >\n <Icon name=\"chevDown\" size={16} />\n </span>\n </button>\n <AccordionPanel open={open}>{it.content}</AccordionPanel>\n </div>\n );\n })}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Accordion/Accordion.tsx"],"names":["React","jsx","jsxs","Icon"],"mappings":"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","file":"chunk-S7RFIMA3.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Accordion.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface AccordionItem {\n key: string;\n title: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface AccordionProps {\n items: AccordionItem[];\n /** If true, multiple sections can be open at once. */\n multiple?: boolean;\n /**\n * Accordion mode — at most one item open at a time. Takes precedence over `multiple`\n * when both are set.\n */\n accordion?: boolean;\n /**\n * What triggers expansion.\n * - `\"header\"` (default): clicking anywhere on the header toggles.\n * - `\"icon\"`: only the chevron icon is clickable.\n * - `\"disabled\"`: the panel cannot be toggled.\n */\n collapsible?: \"header\" | \"icon\" | \"disabled\";\n activeKeys?: string[];\n defaultActiveKeys?: string[];\n onChange?: (keys: string[]) => void;\n className?: string;\n}\n\nconst AccordionPanel: React.FC<{ open: boolean; children: React.ReactNode }> = ({ open, children }) => {\n const innerRef = React.useRef<HTMLDivElement>(null);\n const [h, setH] = React.useState(0);\n const [animated, setAnimated] = React.useState(false);\n\n React.useLayoutEffect(() => {\n const el = innerRef.current;\n if (!el) return;\n setH(el.scrollHeight);\n const ro = new ResizeObserver(() => setH(el.scrollHeight));\n ro.observe(el);\n return () => ro.disconnect();\n }, []);\n\n React.useEffect(() => {\n const id = requestAnimationFrame(() => setAnimated(true));\n return () => cancelAnimationFrame(id);\n }, []);\n\n return (\n <div\n className=\"accordion-body\"\n style={{ maxHeight: open ? h : 0, transition: animated ? undefined : \"none\" }}\n aria-hidden={!open}\n >\n <div ref={innerRef} className=\"accordion-body-inner\">{children}</div>\n </div>\n );\n};\n\n/** `Accordion` — collapsible sections. */\nexport const Accordion: React.FC<AccordionProps> = ({\n items,\n multiple = false,\n accordion = false,\n collapsible = \"header\",\n activeKeys,\n defaultActiveKeys = [],\n onChange,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState<string[]>(defaultActiveKeys);\n const isControlled = activeKeys !== undefined;\n const keys = isControlled ? activeKeys! : inner;\n\n // accordion takes precedence over multiple\n const singleOpen = accordion || !multiple;\n\n const toggle = (k: string, itemDisabled?: boolean) => {\n if (collapsible === \"disabled\" || itemDisabled) return;\n const next = keys.includes(k)\n ? keys.filter((x) => x !== k)\n : singleOpen\n ? [k]\n : [...keys, k];\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n return (\n <div className={`accordion ${className}`}>\n {items.map((it) => {\n const open = keys.includes(it.key);\n const isDisabled = it.disabled || collapsible === \"disabled\";\n const headerClickable = collapsible === \"header\" && !isDisabled;\n return (\n <div\n key={it.key}\n className={`accordion-item ${open ? \"open\" : \"\"} ${isDisabled ? \"disabled\" : \"\"} ${collapsible === \"icon\" ? \"icon-only\" : \"\"}`}\n >\n <button\n type=\"button\"\n className=\"accordion-head\"\n disabled={isDisabled}\n onClick={() => headerClickable && toggle(it.key, it.disabled)}\n aria-expanded={open}\n >\n <span>{it.title}</span>\n <span\n className={`accordion-chev${collapsible === \"icon\" ? \" clickable\" : \"\"}`}\n onClick={(e) => {\n if (collapsible === \"icon\" && !isDisabled) {\n e.stopPropagation();\n toggle(it.key, it.disabled);\n }\n }}\n >\n <Icon name=\"chevDown\" size={16} />\n </span>\n </button>\n <AccordionPanel open={open}>{it.content}</AccordionPanel>\n </div>\n );\n })}\n </div>\n );\n};\n"]}
@@ -0,0 +1,108 @@
1
+ 'use strict';
2
+
3
+ var chunkXUT2Z2L6_cjs = require('./chunk-XUT2Z2L6.cjs');
4
+ require('./tokens-BIIUTPKN.css');
5
+ require('./shared-NJHRNLRH.css');
6
+ require('./Timeline-RHZAZKZ7.css');
7
+ var React = require('react');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
12
+ var n = Object.create(null);
13
+ if (e) {
14
+ Object.keys(e).forEach(function (k) {
15
+ if (k !== 'default') {
16
+ var d = Object.getOwnPropertyDescriptor(e, k);
17
+ Object.defineProperty(n, k, d.get ? d : {
18
+ enumerable: true,
19
+ get: function () { return e[k]; }
20
+ });
21
+ }
22
+ });
23
+ }
24
+ n.default = e;
25
+ return Object.freeze(n);
26
+ }
27
+
28
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
29
+
30
+ var Timeline = React__namespace.forwardRef(
31
+ ({
32
+ items,
33
+ pending = false,
34
+ pendingContent = "\u52A0\u8F7D\u4E2D...",
35
+ mode = "left",
36
+ reverse = false,
37
+ className = "",
38
+ ...rest
39
+ }, ref) => {
40
+ const displayItems = [...items];
41
+ if (reverse) displayItems.reverse();
42
+ const hasPending = pending !== false;
43
+ return /* @__PURE__ */ jsxRuntime.jsxs(
44
+ "div",
45
+ {
46
+ ref,
47
+ className: `timeline timeline-${mode} ${className}`,
48
+ ...rest,
49
+ children: [
50
+ displayItems.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx(
51
+ TimelineItem,
52
+ {
53
+ item,
54
+ isLast: !hasPending && i === displayItems.length - 1,
55
+ position: getPosition(mode, i)
56
+ },
57
+ item.key ?? i
58
+ )),
59
+ hasPending && /* @__PURE__ */ jsxRuntime.jsx(
60
+ TimelineItem,
61
+ {
62
+ item: {
63
+ children: pendingContent,
64
+ dot: typeof pending === "boolean" ? void 0 : pending,
65
+ color: "muted"
66
+ },
67
+ isLast: true,
68
+ isPending: true,
69
+ position: getPosition(mode, displayItems.length)
70
+ }
71
+ )
72
+ ]
73
+ }
74
+ );
75
+ }
76
+ );
77
+ Timeline.displayName = "Timeline";
78
+ function getPosition(mode, index) {
79
+ if (mode === "left") return "left";
80
+ if (mode === "right") return "right";
81
+ return index % 2 === 0 ? "left" : "right";
82
+ }
83
+ var TimelineItem = ({
84
+ item,
85
+ isLast,
86
+ isPending,
87
+ position
88
+ }) => {
89
+ const color = item.color ?? "accent";
90
+ const cls = [
91
+ "timeline-item",
92
+ `timeline-item-${position}`,
93
+ isLast ? "timeline-item-last" : "",
94
+ isPending ? "timeline-item-pending" : ""
95
+ ].filter(Boolean).join(" ");
96
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cls, children: [
97
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "timeline-item-label", children: item.label }),
98
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "timeline-item-head", children: [
99
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `timeline-item-dot ${color} ${isPending ? "pending" : ""}`, children: item.dot ?? (isPending && /* @__PURE__ */ jsxRuntime.jsx(chunkXUT2Z2L6_cjs.Spinner, { size: 14 })) }),
100
+ !isLast && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "timeline-item-tail" })
101
+ ] }),
102
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "timeline-item-content", children: item.children })
103
+ ] });
104
+ };
105
+
106
+ exports.Timeline = Timeline;
107
+ //# sourceMappingURL=chunk-TAYFI4RG.cjs.map
108
+ //# sourceMappingURL=chunk-TAYFI4RG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Timeline/Timeline.tsx"],"names":["React","jsxs","jsx","Spinner"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CO,IAAM,QAAA,GAAiBA,gBAAA,CAAA,UAAA;AAAA,EAC5B,CACE;AAAA,IACE,KAAA;AAAA,IACA,OAAA,GAAU,KAAA;AAAA,IACV,cAAA,GAAiB,uBAAA;AAAA,IACjB,IAAA,GAAO,MAAA;AAAA,IACP,OAAA,GAAU,KAAA;AAAA,IACV,SAAA,GAAY,EAAA;AAAA,IACZ,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,YAAA,GAAe,CAAC,GAAG,KAAK,CAAA;AAC9B,IAAA,IAAI,OAAA,eAAsB,OAAA,EAAQ;AAElC,IAAA,MAAM,aAAa,OAAA,KAAY,KAAA;AAE/B,IAAA,uBACEC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,CAAA,kBAAA,EAAqB,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,QAChD,GAAG,IAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBACvBC,cAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cAEC,IAAA;AAAA,cACA,MAAA,EAAQ,CAAC,UAAA,IAAc,CAAA,KAAM,aAAa,MAAA,GAAS,CAAA;AAAA,cACnD,QAAA,EAAU,WAAA,CAAY,IAAA,EAAM,CAAC;AAAA,aAAA;AAAA,YAHxB,KAAK,GAAA,IAAO;AAAA,WAKpB,CAAA;AAAA,UACA,UAAA,oBACCA,cAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM;AAAA,gBACJ,QAAA,EAAU,cAAA;AAAA,gBACV,GAAA,EAAK,OAAO,OAAA,KAAY,SAAA,GAAY,MAAA,GAAY,OAAA;AAAA,gBAChD,KAAA,EAAO;AAAA,eACT;AAAA,cACA,MAAA,EAAM,IAAA;AAAA,cACN,SAAA,EAAS,IAAA;AAAA,cACT,QAAA,EAAU,WAAA,CAAY,IAAA,EAAM,YAAA,CAAa,MAAM;AAAA;AAAA;AACjD;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA;AAEvB,SAAS,WAAA,CACP,MACA,KAAA,EACkB;AAClB,EAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,MAAA;AAC5B,EAAA,IAAI,IAAA,KAAS,SAAS,OAAO,OAAA;AAC7B,EAAA,OAAO,KAAA,GAAQ,CAAA,KAAM,CAAA,GAAI,MAAA,GAAS,OAAA;AACpC;AASA,IAAM,eAAoD,CAAC;AAAA,EACzD,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,QAAA;AAC5B,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,eAAA;AAAA,IACA,iBAAiB,QAAQ,CAAA,CAAA;AAAA,IACzB,SAAS,oBAAA,GAAuB,EAAA;AAAA,IAChC,YAAY,uBAAA,GAA0B;AAAA,GACxC,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,EAAA,uBACED,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAA,EACd,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,oBACjDD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,SAAI,SAAA,EAAW,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,YAAY,SAAA,GAAY,EAAE,CAAA,CAAA,EACrE,QAAA,EAAA,IAAA,CAAK,QAAQ,SAAA,oBAAaA,cAAA,CAACC,yBAAA,EAAA,EAAQ,IAAA,EAAM,IAAI,CAAA,CAAA,EAChD,CAAA;AAAA,MACC,CAAC,MAAA,oBAAUD,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oBAAA,EAAqB;AAAA,KAAA,EAClD,CAAA;AAAA,oBACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EAAyB,eAAK,QAAA,EAAS;AAAA,GAAA,EACxD,CAAA;AAEJ,CAAA","file":"chunk-TAYFI4RG.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Timeline.css\";\nimport * as React from \"react\";\nimport { Spinner } from \"../Empty\";\n\nexport interface TimelineItemConfig {\n /** Unique key for the item */\n key?: string;\n /** Content displayed on the right (or main side) */\n children?: React.ReactNode;\n /** Label displayed on the opposite side (alternate/label mode) */\n label?: React.ReactNode;\n /** Dot color */\n color?: \"accent\" | \"success\" | \"warning\" | \"danger\" | \"info\" | \"muted\";\n /** Custom dot content (replaces default dot) */\n dot?: React.ReactNode;\n}\n\nexport interface TimelineProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Timeline items */\n items: TimelineItemConfig[];\n /**\n * Show a pending (loading) item at the end.\n * `true` renders a default spinner; a ReactNode renders custom content.\n */\n pending?: boolean | React.ReactNode;\n /** Text shown as the pending item's content */\n pendingContent?: React.ReactNode;\n /** Layout mode */\n mode?: \"left\" | \"right\" | \"alternate\";\n /** Reverse the order of items */\n reverse?: boolean;\n}\n\n/**\n * `Timeline` — vertical timeline with pending/loading state.\n *\n * @example\n * <Timeline items={[{ children: \"Created\" }, { children: \"In Progress\" }]} pending />\n */\nexport const Timeline = React.forwardRef<HTMLDivElement, TimelineProps>(\n (\n {\n items,\n pending = false,\n pendingContent = \"加载中...\",\n mode = \"left\",\n reverse = false,\n className = \"\",\n ...rest\n },\n ref\n ) => {\n const displayItems = [...items];\n if (reverse) displayItems.reverse();\n\n const hasPending = pending !== false;\n\n return (\n <div\n ref={ref}\n className={`timeline timeline-${mode} ${className}`}\n {...rest}\n >\n {displayItems.map((item, i) => (\n <TimelineItem\n key={item.key ?? i}\n item={item}\n isLast={!hasPending && i === displayItems.length - 1}\n position={getPosition(mode, i)}\n />\n ))}\n {hasPending && (\n <TimelineItem\n item={{\n children: pendingContent,\n dot: typeof pending === \"boolean\" ? undefined : pending,\n color: \"muted\",\n }}\n isLast\n isPending\n position={getPosition(mode, displayItems.length)}\n />\n )}\n </div>\n );\n }\n);\nTimeline.displayName = \"Timeline\";\n\nfunction getPosition(\n mode: \"left\" | \"right\" | \"alternate\",\n index: number\n): \"left\" | \"right\" {\n if (mode === \"left\") return \"left\";\n if (mode === \"right\") return \"right\";\n return index % 2 === 0 ? \"left\" : \"right\";\n}\n\ninterface TimelineItemInternalProps {\n item: TimelineItemConfig;\n isLast: boolean;\n isPending?: boolean;\n position: \"left\" | \"right\";\n}\n\nconst TimelineItem: React.FC<TimelineItemInternalProps> = ({\n item,\n isLast,\n isPending,\n position,\n}) => {\n const color = item.color ?? \"accent\";\n const cls = [\n \"timeline-item\",\n `timeline-item-${position}`,\n isLast ? \"timeline-item-last\" : \"\",\n isPending ? \"timeline-item-pending\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div className={cls}>\n <div className=\"timeline-item-label\">{item.label}</div>\n <div className=\"timeline-item-head\">\n <div className={`timeline-item-dot ${color} ${isPending ? \"pending\" : \"\"}`}>\n {item.dot ?? (isPending && <Spinner size={14} />)}\n </div>\n {!isLast && <div className=\"timeline-item-tail\" />}\n </div>\n <div className=\"timeline-item-content\">{item.children}</div>\n </div>\n );\n};\n"]}
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkRZ2E3XEU_cjs = require('./chunk-RZ2E3XEU.cjs');
3
+ var chunk3XIDJEYR_cjs = require('./chunk-3XIDJEYR.cjs');
4
4
  require('./tokens-BIIUTPKN.css');
5
5
  require('./shared-NJHRNLRH.css');
6
- require('./Tooltip-ST24GY4S.css');
6
+ require('./Tooltip-DMKUPC24.css');
7
7
  var React = require('react');
8
8
  var reactDom = require('react-dom');
9
9
  var jsxRuntime = require('react/jsx-runtime');
@@ -46,7 +46,7 @@ var Tooltip = ({
46
46
  window.clearTimeout(t.current);
47
47
  setShow(false);
48
48
  };
49
- const { triggerRef, floatingStyle, placement: resolved } = chunkRZ2E3XEU_cjs.useFloating({
49
+ const { triggerRef, floatingStyle, placement: resolved } = chunk3XIDJEYR_cjs.useFloating({
50
50
  open: show,
51
51
  placement,
52
52
  panelWidth: 160,
@@ -74,5 +74,5 @@ var Tooltip = ({
74
74
  };
75
75
 
76
76
  exports.Tooltip = Tooltip;
77
- //# sourceMappingURL=chunk-OZVPJWXO.cjs.map
78
- //# sourceMappingURL=chunk-OZVPJWXO.cjs.map
77
+ //# sourceMappingURL=chunk-TCPTBLDV.cjs.map
78
+ //# sourceMappingURL=chunk-TCPTBLDV.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Tooltip/Tooltip.tsx"],"names":["React","useFloating","jsxs","Fragment","jsx","createPortal"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBO,IAAM,UAAkC,CAAC;AAAA,EAC9C,OAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,KAAA,GAAQ,GAAA;AAAA,EACR;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUA,0BAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,IAAUA,gBAAA,CAAA,MAAA,EAA2B;AAE3C,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAA,CAAO,YAAA,CAAa,EAAE,OAAO,CAAA;AAC7B,IAAA,CAAA,CAAE,UAAU,MAAA,CAAO,UAAA,CAAW,MAAM,OAAA,CAAQ,IAAI,GAAG,KAAK,CAAA;AAAA,EAC1D,CAAA;AACA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,MAAA,CAAO,YAAA,CAAa,EAAE,OAAO,CAAA;AAC7B,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAe,SAAA,EAAW,QAAA,KAAaC,6BAAA,CAA6B;AAAA,IACtF,IAAA,EAAM,IAAA;AAAA,IACN,SAAA;AAAA,IACA,UAAA,EAAY,GAAA;AAAA,IACZ,WAAA,EAAa,EAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,SAAA,EAAU,YAAA;AAAA,QACV,YAAA,EAAc,IAAA;AAAA,QACd,YAAA,EAAc,KAAA;AAAA,QACd,OAAA,EAAS,IAAA;AAAA,QACT,MAAA,EAAQ,KAAA;AAAA,QAEP;AAAA;AAAA,KACH;AAAA,IACC,IAAA,IAAQ,OAAO,QAAA,KAAa,WAAA,IAC3BC,qBAAA;AAAA,sBACED,cAAA,CAAC,UAAK,SAAA,EAAW,CAAA,IAAA,EAAO,QAAQ,CAAA,CAAA,EAAI,KAAA,EAAO,eACxC,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,MACA,QAAA,CAAS;AAAA;AACX,GAAA,EACJ,CAAA;AAEJ","file":"chunk-OZVPJWXO.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Tooltip.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface TooltipProps {\n content: React.ReactNode;\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n children: React.ReactElement;\n delay?: number;\n disabled?: boolean;\n}\n\n/** `Tooltip` — hover/focus text bubble. */\nexport const Tooltip: React.FC<TooltipProps> = ({\n content,\n placement = \"top\",\n children,\n delay = 250,\n disabled,\n}) => {\n const [show, setShow] = React.useState(false);\n const t = React.useRef<number | undefined>();\n\n const open = () => {\n if (disabled) return;\n window.clearTimeout(t.current);\n t.current = window.setTimeout(() => setShow(true), delay);\n };\n const close = () => {\n window.clearTimeout(t.current);\n setShow(false);\n };\n\n const { triggerRef, floatingStyle, placement: resolved } = useFloating<HTMLSpanElement>({\n open: show,\n placement,\n panelWidth: 160,\n panelHeight: 32,\n alignCross: \"center\",\n });\n\n return (\n <>\n <span\n ref={triggerRef}\n className=\"tip-anchor\"\n onMouseEnter={open}\n onMouseLeave={close}\n onFocus={open}\n onBlur={close}\n >\n {children}\n </span>\n {show && typeof document !== \"undefined\" &&\n createPortal(\n <span className={`tip ${resolved}`} style={floatingStyle}>\n {content}\n </span>,\n document.body\n )}\n </>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Tooltip/Tooltip.tsx"],"names":["React","useFloating","jsxs","Fragment","jsx","createPortal"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBO,IAAM,UAAkC,CAAC;AAAA,EAC9C,OAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,KAAA,GAAQ,GAAA;AAAA,EACR;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUA,0BAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,IAAUA,gBAAA,CAAA,MAAA,EAA2B;AAE3C,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAA,CAAO,YAAA,CAAa,EAAE,OAAO,CAAA;AAC7B,IAAA,CAAA,CAAE,UAAU,MAAA,CAAO,UAAA,CAAW,MAAM,OAAA,CAAQ,IAAI,GAAG,KAAK,CAAA;AAAA,EAC1D,CAAA;AACA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,MAAA,CAAO,YAAA,CAAa,EAAE,OAAO,CAAA;AAC7B,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAe,SAAA,EAAW,QAAA,KAAaC,6BAAA,CAA6B;AAAA,IACtF,IAAA,EAAM,IAAA;AAAA,IACN,SAAA;AAAA,IACA,UAAA,EAAY,GAAA;AAAA,IACZ,WAAA,EAAa,EAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,SAAA,EAAU,YAAA;AAAA,QACV,YAAA,EAAc,IAAA;AAAA,QACd,YAAA,EAAc,KAAA;AAAA,QACd,OAAA,EAAS,IAAA;AAAA,QACT,MAAA,EAAQ,KAAA;AAAA,QAEP;AAAA;AAAA,KACH;AAAA,IACC,IAAA,IAAQ,OAAO,QAAA,KAAa,WAAA,IAC3BC,qBAAA;AAAA,sBACED,cAAA,CAAC,UAAK,SAAA,EAAW,CAAA,IAAA,EAAO,QAAQ,CAAA,CAAA,EAAI,KAAA,EAAO,eACxC,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,MACA,QAAA,CAAS;AAAA;AACX,GAAA,EACJ,CAAA;AAEJ","file":"chunk-TCPTBLDV.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Tooltip.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface TooltipProps {\n content: React.ReactNode;\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n children: React.ReactElement;\n delay?: number;\n disabled?: boolean;\n}\n\n/** `Tooltip` — hover/focus text bubble. */\nexport const Tooltip: React.FC<TooltipProps> = ({\n content,\n placement = \"top\",\n children,\n delay = 250,\n disabled,\n}) => {\n const [show, setShow] = React.useState(false);\n const t = React.useRef<number | undefined>();\n\n const open = () => {\n if (disabled) return;\n window.clearTimeout(t.current);\n t.current = window.setTimeout(() => setShow(true), delay);\n };\n const close = () => {\n window.clearTimeout(t.current);\n setShow(false);\n };\n\n const { triggerRef, floatingStyle, placement: resolved } = useFloating<HTMLSpanElement>({\n open: show,\n placement,\n panelWidth: 160,\n panelHeight: 32,\n alignCross: \"center\",\n });\n\n return (\n <>\n <span\n ref={triggerRef}\n className=\"tip-anchor\"\n onMouseEnter={open}\n onMouseLeave={close}\n onFocus={open}\n onBlur={close}\n >\n {children}\n </span>\n {show && typeof document !== \"undefined\" &&\n createPortal(\n <span className={`tip ${resolved}`} style={floatingStyle}>\n {content}\n </span>,\n document.body\n )}\n </>\n );\n};\n"]}