@fangxinyan/lumina 0.6.1 → 0.6.3

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 (270) hide show
  1. package/README.md +2 -1
  2. package/dist/{Alert-JJ7GB3UU.css → Alert-QBKIDY5H.css} +7 -0
  3. package/dist/Alert.cjs +3 -3
  4. package/dist/Alert.d.cts +3 -2
  5. package/dist/Alert.d.ts +3 -2
  6. package/dist/Alert.js +2 -2
  7. package/dist/AutoComplete.cjs +5 -4
  8. package/dist/AutoComplete.d.cts +1 -1
  9. package/dist/AutoComplete.d.ts +1 -1
  10. package/dist/AutoComplete.js +4 -3
  11. package/dist/Badge-DPGLV3D3.css +22 -0
  12. package/dist/Badge.cjs +10 -0
  13. package/dist/Badge.d.cts +19 -0
  14. package/dist/Badge.d.ts +19 -0
  15. package/dist/Badge.js +1 -0
  16. package/dist/{Button-SDQD25AG.css → Button-4Z3Q6KII.css} +56 -36
  17. package/dist/Button.cjs +3 -7
  18. package/dist/Button.d.cts +11 -15
  19. package/dist/Button.d.ts +11 -15
  20. package/dist/Button.js +2 -2
  21. package/dist/Calendar.cjs +3 -3
  22. package/dist/Calendar.js +2 -2
  23. package/dist/{Card-RG7ECXL2.css → Card-6RMVIHWX.css} +7 -13
  24. package/dist/Card.cjs +2 -6
  25. package/dist/Card.d.cts +7 -11
  26. package/dist/Card.d.ts +7 -11
  27. package/dist/Card.js +1 -1
  28. package/dist/{Cascader-VSYEKQCG.css → Cascader-3BLLA7EN.css} +77 -0
  29. package/dist/Cascader.cjs +5 -3
  30. package/dist/Cascader.d.cts +22 -4
  31. package/dist/Cascader.d.ts +22 -4
  32. package/dist/Cascader.js +4 -2
  33. package/dist/{Checkbox-SKJATVSN.css → Checkbox-U5EUDSYS.css} +5 -35
  34. package/dist/Checkbox.cjs +3 -7
  35. package/dist/Checkbox.d.cts +1 -18
  36. package/dist/Checkbox.d.ts +1 -18
  37. package/dist/Checkbox.js +2 -2
  38. package/dist/Collapse-66U5YJFY.css +53 -0
  39. package/dist/Collapse.cjs +11 -0
  40. package/dist/Collapse.d.cts +32 -0
  41. package/dist/Collapse.d.ts +32 -0
  42. package/dist/Collapse.js +2 -0
  43. package/dist/CommandPalette.cjs +5 -4
  44. package/dist/CommandPalette.js +4 -3
  45. package/dist/Drawer.cjs +3 -3
  46. package/dist/Drawer.js +2 -2
  47. package/dist/Empty-DC2LPORC.css +28 -0
  48. package/dist/Empty.cjs +2 -10
  49. package/dist/Empty.d.cts +1 -62
  50. package/dist/Empty.d.ts +1 -62
  51. package/dist/Empty.js +1 -1
  52. package/dist/Form.d.cts +1 -1
  53. package/dist/Form.d.ts +1 -1
  54. package/dist/Icon.cjs +187 -3
  55. package/dist/Icon.d.cts +104 -3
  56. package/dist/Icon.d.ts +104 -3
  57. package/dist/Icon.js +1 -1
  58. package/dist/{Image-4MN34O6P.css → Image-MRYQCRQ5.css} +78 -0
  59. package/dist/Image.cjs +12 -4
  60. package/dist/Image.d.cts +79 -6
  61. package/dist/Image.d.ts +79 -6
  62. package/dist/Image.js +2 -2
  63. package/dist/{Input-33CAH4O6.css → Input-HUBJ55OH.css} +25 -42
  64. package/dist/Input.cjs +6 -5
  65. package/dist/Input.d.cts +23 -26
  66. package/dist/Input.d.ts +23 -26
  67. package/dist/Input.js +3 -2
  68. package/dist/InputNumber.cjs +5 -4
  69. package/dist/InputNumber.d.cts +1 -1
  70. package/dist/InputNumber.d.ts +1 -1
  71. package/dist/InputNumber.js +4 -3
  72. package/dist/Message-2MZ3LFPU.css +45 -0
  73. package/dist/Message.cjs +23 -0
  74. package/dist/Message.d.cts +54 -0
  75. package/dist/Message.d.ts +54 -0
  76. package/dist/Message.js +2 -0
  77. package/dist/{Modal-XSDMU4XJ.css → Modal-2QNDW4SO.css} +27 -0
  78. package/dist/Modal.cjs +4 -4
  79. package/dist/Modal.d.cts +29 -4
  80. package/dist/Modal.d.ts +29 -4
  81. package/dist/Modal.js +3 -3
  82. package/dist/Pagination.cjs +7 -5
  83. package/dist/Pagination.js +6 -4
  84. package/dist/Popover.cjs +2 -2
  85. package/dist/Popover.d.cts +11 -3
  86. package/dist/Popover.d.ts +11 -3
  87. package/dist/Popover.js +1 -1
  88. package/dist/Radio-GVFDPAZM.css +97 -0
  89. package/dist/Radio.cjs +14 -0
  90. package/dist/Radio.d.cts +36 -0
  91. package/dist/Radio.d.ts +36 -0
  92. package/dist/Radio.js +1 -0
  93. package/dist/{Select-J3CCVFJ7.css → Select-Z5VYPEEY.css} +33 -24
  94. package/dist/Select.cjs +6 -4
  95. package/dist/Select.d.cts +29 -7
  96. package/dist/Select.d.ts +29 -7
  97. package/dist/Select.js +5 -3
  98. package/dist/Skeleton-CVWH2VWN.css +40 -0
  99. package/dist/Skeleton.cjs +10 -0
  100. package/dist/Skeleton.d.cts +30 -0
  101. package/dist/Skeleton.d.ts +30 -0
  102. package/dist/Skeleton.js +1 -0
  103. package/dist/Spin-3GJNMSIH.css +94 -0
  104. package/dist/Spin.cjs +10 -0
  105. package/dist/Spin.d.cts +20 -0
  106. package/dist/Spin.d.ts +20 -0
  107. package/dist/Spin.js +1 -0
  108. package/dist/{Table-2LPTOUIR.css → Table-ATJJQLKU.css} +0 -53
  109. package/dist/Table.cjs +9 -11
  110. package/dist/Table.d.cts +2 -21
  111. package/dist/Table.d.ts +2 -21
  112. package/dist/Table.js +8 -6
  113. package/dist/TablePro-3XVHYLSL.css +45 -0
  114. package/dist/TablePro.cjs +19 -0
  115. package/dist/TablePro.d.cts +21 -0
  116. package/dist/TablePro.d.ts +21 -0
  117. package/dist/TablePro.js +10 -0
  118. package/dist/{Tabs-RHK6XAFF.css → Tabs-BLSNI2T5.css} +0 -34
  119. package/dist/Tabs.cjs +2 -6
  120. package/dist/Tabs.d.cts +1 -16
  121. package/dist/Tabs.d.ts +1 -16
  122. package/dist/Tabs.js +1 -1
  123. package/dist/Tag-HDYCDPFS.css +42 -0
  124. package/dist/Tag.cjs +3 -7
  125. package/dist/Tag.d.cts +5 -14
  126. package/dist/Tag.d.ts +5 -14
  127. package/dist/Tag.js +2 -2
  128. package/dist/Textarea-YNET7IBH.css +54 -0
  129. package/dist/Textarea.cjs +15 -0
  130. package/dist/Textarea.d.cts +25 -0
  131. package/dist/Textarea.d.ts +25 -0
  132. package/dist/Textarea.js +2 -0
  133. package/dist/Theme.cjs +14 -10
  134. package/dist/Theme.d.cts +29 -6
  135. package/dist/Theme.d.ts +29 -6
  136. package/dist/Theme.js +1 -1
  137. package/dist/{Timeline-RHZAZKZ7.css → Timeline-3ZHOHPXT.css} +2 -2
  138. package/dist/Timeline.cjs +3 -3
  139. package/dist/Timeline.d.cts +1 -1
  140. package/dist/Timeline.d.ts +1 -1
  141. package/dist/Timeline.js +2 -2
  142. package/dist/Tooltip.cjs +2 -2
  143. package/dist/Tooltip.d.cts +17 -4
  144. package/dist/Tooltip.d.ts +17 -4
  145. package/dist/Tooltip.js +1 -1
  146. package/dist/Typography.cjs +7 -7
  147. package/dist/Typography.d.cts +1 -0
  148. package/dist/Typography.d.ts +1 -0
  149. package/dist/Typography.js +2 -2
  150. package/dist/{chunk-OVZTG5CP.cjs → chunk-2HQCUBA7.cjs} +2 -2
  151. package/dist/{chunk-X2U7EKCS.cjs → chunk-3YJU3D5S.cjs} +28 -5
  152. package/dist/chunk-45VJGBGN.js +25 -0
  153. package/dist/{chunk-3D77MQHO.js → chunk-46VXFTEC.js} +3 -3
  154. package/dist/chunk-47VG2P34.js +393 -0
  155. package/dist/{chunk-LZU33BX6.cjs → chunk-5DKRY67M.cjs} +4 -20
  156. package/dist/{chunk-TWGQZX2R.js → chunk-5H5YP2TB.js} +4 -19
  157. package/dist/chunk-5MN3PMF4.cjs +240 -0
  158. package/dist/{chunk-5A3RT4KD.js → chunk-5TKC6IEN.js} +4 -55
  159. package/dist/{chunk-N57NXCNC.cjs → chunk-6HMTV6P4.cjs} +3 -44
  160. package/dist/{chunk-RF2EY5JS.cjs → chunk-6ZXQJRAT.cjs} +153 -34
  161. package/dist/{chunk-OFGDUCT7.cjs → chunk-7AG524YZ.cjs} +3 -3
  162. package/dist/chunk-7IYKKLV3.js +283 -0
  163. package/dist/{chunk-73RQBWWW.js → chunk-AAGF7K3L.js} +2 -2
  164. package/dist/chunk-AXZ7ELMA.js +41 -0
  165. package/dist/{chunk-R6BIF3FF.js → chunk-BPOOVO5T.js} +5 -23
  166. package/dist/{chunk-OI3CWXT3.js → chunk-BVQ77VRY.js} +3 -3
  167. package/dist/{chunk-UXH5PH3S.js → chunk-CETNCRZ4.js} +2 -2
  168. package/dist/chunk-DG5VQ6BO.cjs +28 -0
  169. package/dist/chunk-DWAN57G4.js +243 -0
  170. package/dist/chunk-ELNT3CFO.js +64 -0
  171. package/dist/{chunk-ULOJ5UEY.js → chunk-ET6DYQVZ.js} +1 -1
  172. package/dist/chunk-F6RYCBQG.js +25 -0
  173. package/dist/{chunk-RPFMQZA5.js → chunk-FBYUZOZP.js} +42 -31
  174. package/dist/chunk-FGW5GJ22.cjs +132 -0
  175. package/dist/{chunk-6Y5WRCPW.js → chunk-FWPBORRB.js} +1 -1
  176. package/dist/chunk-GENABQYA.cjs +47 -0
  177. package/dist/{chunk-TGHBKKSS.js → chunk-GIZU3H6H.js} +3 -43
  178. package/dist/chunk-GMN74OEY.cjs +63 -0
  179. package/dist/{chunk-Y47YTYQ3.cjs → chunk-H4LGWZMH.cjs} +159 -8
  180. package/dist/chunk-HKF2V5MM.cjs +214 -0
  181. package/dist/chunk-HLFH5HWR.js +81 -0
  182. package/dist/{chunk-4WRE4HQP.js → chunk-HWFM4MAT.js} +18 -6
  183. package/dist/{chunk-GY3BSHHS.cjs → chunk-HZSIUOCN.cjs} +2 -55
  184. package/dist/{chunk-D46EM4EN.js → chunk-I5WTQ5Y3.js} +4 -4
  185. package/dist/chunk-J2HZTJO6.js +26 -0
  186. package/dist/{chunk-NN25YMOL.js → chunk-J5ZGYQZK.js} +153 -35
  187. package/dist/{chunk-WRDKOSSM.js → chunk-JCEHZ336.js} +1 -1
  188. package/dist/chunk-JVUVOR6S.js +110 -0
  189. package/dist/chunk-K5IGFBDR.js +113 -0
  190. package/dist/{chunk-Q2KG6SQK.cjs → chunk-K7FV7W6U.cjs} +5 -5
  191. package/dist/{chunk-PWW64ZWO.cjs → chunk-KD4YYIIO.cjs} +1 -32
  192. package/dist/chunk-KGSADAOD.cjs +170 -0
  193. package/dist/{chunk-54YLXXS2.js → chunk-ME5BZ2WA.js} +2 -2
  194. package/dist/chunk-MPVCYU2K.cjs +104 -0
  195. package/dist/{chunk-EEMWQX3C.cjs → chunk-NTS5L4NQ.cjs} +3 -3
  196. package/dist/{chunk-WBK6XIDJ.js → chunk-OBEKX4VR.js} +2 -32
  197. package/dist/{chunk-EBNRZRWY.cjs → chunk-P6EZG2R7.cjs} +5 -5
  198. package/dist/{chunk-KYEY2LIB.cjs → chunk-P6P4DGLF.cjs} +3 -3
  199. package/dist/{chunk-GOBWKQCX.cjs → chunk-PULGVK2I.cjs} +3 -3
  200. package/dist/chunk-Q5SZIU7Z.cjs +47 -0
  201. package/dist/chunk-QKQHZIF3.cjs +86 -0
  202. package/dist/{chunk-3TWNBJFI.cjs → chunk-QP3VCSRY.cjs} +6 -6
  203. package/dist/{chunk-6ODY6MGL.cjs → chunk-R2TEDH2F.cjs} +5 -5
  204. package/dist/{chunk-YRZGXXWA.js → chunk-SQGPSMSK.js} +14 -20
  205. package/dist/{chunk-IW5LW6XS.js → chunk-TEEFR2FD.js} +28 -5
  206. package/dist/chunk-TGL5BGMR.js +218 -0
  207. package/dist/{chunk-62GU4OHH.cjs → chunk-TP567B3L.cjs} +13 -20
  208. package/dist/chunk-UKS23N3L.js +191 -0
  209. package/dist/chunk-USQ43DJ5.js +147 -0
  210. package/dist/{chunk-G2K6ETP4.cjs → chunk-UUHFKIWP.cjs} +18 -6
  211. package/dist/{chunk-2MNAZRWE.cjs → chunk-V272XR3F.cjs} +271 -2
  212. package/dist/chunk-VFFIE2VO.cjs +271 -0
  213. package/dist/{chunk-FIO65XYG.cjs → chunk-X5GCOMC3.cjs} +49 -38
  214. package/dist/{chunk-Y3ZSG3SJ.cjs → chunk-XSN4TLN5.cjs} +11 -30
  215. package/dist/chunk-ZKE73UQF.cjs +138 -0
  216. package/dist/index.cjs +342 -132
  217. package/dist/index.d.cts +26 -20
  218. package/dist/index.d.ts +26 -20
  219. package/dist/index.js +35 -29
  220. package/dist/styles.css +515 -230
  221. package/docs/llms/alert.md +4 -3
  222. package/docs/llms/badge.md +3 -3
  223. package/docs/llms/button.md +11 -41
  224. package/docs/llms/card.md +6 -12
  225. package/docs/llms/cascader.md +22 -0
  226. package/docs/llms/{accordion.md → collapse.md} +13 -11
  227. package/docs/llms/drawer.md +1 -1
  228. package/docs/llms/form.md +1 -1
  229. package/docs/llms/image.md +72 -1
  230. package/docs/llms/input.md +28 -18
  231. package/docs/llms/message.md +63 -0
  232. package/docs/llms/modal.md +30 -0
  233. package/docs/llms/popover.md +18 -1
  234. package/docs/llms/radio.md +37 -1
  235. package/docs/llms/select.md +22 -2
  236. package/docs/llms/spin.md +59 -0
  237. package/docs/llms/table.md +3 -3
  238. package/docs/llms/tag.md +3 -2
  239. package/docs/llms/theme.md +41 -4
  240. package/docs/llms/tooltip.md +16 -3
  241. package/docs/llms.md +8 -8
  242. package/package.json +32 -52
  243. package/dist/Accordion-REMDCQUD.css +0 -44
  244. package/dist/Accordion.cjs +0 -11
  245. package/dist/Accordion.d.cts +0 -33
  246. package/dist/Accordion.d.ts +0 -33
  247. package/dist/Accordion.js +0 -2
  248. package/dist/Empty-NQ72W3D7.css +0 -160
  249. package/dist/Tag-FGDY3W7E.css +0 -51
  250. package/dist/Toast-YSACW3EM.css +0 -45
  251. package/dist/Toast.cjs +0 -15
  252. package/dist/Toast.d.cts +0 -26
  253. package/dist/Toast.d.ts +0 -26
  254. package/dist/Toast.js +0 -2
  255. package/dist/chunk-32HBMXXV.cjs +0 -208
  256. package/dist/chunk-3XTHKAEY.js +0 -39
  257. package/dist/chunk-5M26OVVY.js +0 -90
  258. package/dist/chunk-DOMYUGJY.js +0 -132
  259. package/dist/chunk-DPNDHNKK.js +0 -185
  260. package/dist/chunk-G2XK57I7.cjs +0 -116
  261. package/dist/chunk-HBWO3QKW.js +0 -74
  262. package/dist/chunk-JVS5ZALZ.js +0 -123
  263. package/dist/chunk-LIGHV4RC.cjs +0 -121
  264. package/dist/chunk-MCTIA6RZ.js +0 -99
  265. package/dist/chunk-NC4YUEXM.cjs +0 -145
  266. package/dist/chunk-NJ6B22YJ.js +0 -170
  267. package/dist/chunk-W64ARHLJ.cjs +0 -62
  268. package/dist/chunk-ZFW6OYAO.cjs +0 -100
  269. package/docs/llms/spinner.md +0 -58
  270. package/docs/llms/toast.md +0 -51
@@ -0,0 +1,191 @@
1
+ import { Textarea } from './chunk-HLFH5HWR.js';
2
+ import { Icon, isIconName, renderIconSlot } from './chunk-47VG2P34.js';
3
+ import './tokens-BIIUTPKN.css';
4
+ import './shared-NJHRNLRH.css';
5
+ import './Input-HUBJ55OH.css';
6
+ import * as React from 'react';
7
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
+
9
+ var InputBase = React.forwardRef(
10
+ ({
11
+ value,
12
+ defaultValue,
13
+ onChange,
14
+ onValueChange,
15
+ placeholder,
16
+ leadingIcon,
17
+ trailingIcon,
18
+ onLeadingIconClick,
19
+ onTrailingIconClick,
20
+ size = "md",
21
+ invalid,
22
+ disabled,
23
+ allowClear,
24
+ maxLength,
25
+ showCount,
26
+ prefix,
27
+ suffix,
28
+ className = "",
29
+ ...rest
30
+ }, ref) => {
31
+ const [inner, setInner] = React.useState(defaultValue ?? "");
32
+ const inputRef = React.useRef(null);
33
+ const isControlled = value !== void 0;
34
+ const currentValue = isControlled ? value : inner;
35
+ const setInputRef = React.useCallback(
36
+ (node) => {
37
+ inputRef.current = node;
38
+ if (typeof ref === "function") ref(node);
39
+ else if (ref) ref.current = node;
40
+ },
41
+ [ref]
42
+ );
43
+ const wrapCls = [
44
+ "input-wrap",
45
+ size !== "md" && size,
46
+ invalid && "invalid",
47
+ disabled && "disabled",
48
+ className
49
+ ].filter(Boolean).join(" ");
50
+ const handleIconClick = (handler) => handler ? (e) => {
51
+ e.stopPropagation();
52
+ if (!disabled) handler(e);
53
+ } : void 0;
54
+ const renderAffixIcon = (icon, side, handler) => {
55
+ if (icon == null || icon === false) return null;
56
+ const className2 = `${side}${handler ? " interactive" : ""}`;
57
+ if (isIconName(icon)) {
58
+ return /* @__PURE__ */ jsx(
59
+ Icon,
60
+ {
61
+ name: icon,
62
+ size: 14,
63
+ className: className2,
64
+ onClick: handleIconClick(handler)
65
+ }
66
+ );
67
+ }
68
+ return /* @__PURE__ */ jsx(
69
+ "span",
70
+ {
71
+ className: className2,
72
+ onClick: handler ? (e) => {
73
+ e.stopPropagation();
74
+ if (!disabled) handler(e);
75
+ } : void 0,
76
+ children: renderIconSlot(icon)
77
+ }
78
+ );
79
+ };
80
+ const handleChange = (e) => {
81
+ if (!isControlled) setInner(e.target.value);
82
+ onChange?.(e);
83
+ onValueChange?.(e.target.value, e);
84
+ };
85
+ const handleClear = (e) => {
86
+ e.stopPropagation();
87
+ if (disabled) return;
88
+ if (!isControlled) setInner("");
89
+ if (inputRef.current) inputRef.current.value = "";
90
+ const synthetic = {
91
+ ...e,
92
+ target: inputRef.current ?? { value: "" },
93
+ currentTarget: inputRef.current ?? { value: "" }
94
+ };
95
+ onChange?.(synthetic);
96
+ onValueChange?.("", synthetic);
97
+ };
98
+ const showClear = !!allowClear && !!currentValue && !disabled;
99
+ const count = currentValue ? currentValue.length : 0;
100
+ const inputElement = /* @__PURE__ */ jsxs("div", { className: wrapCls, children: [
101
+ renderAffixIcon(leadingIcon, "lead", onLeadingIconClick),
102
+ prefix && /* @__PURE__ */ jsx("span", { className: "input-affix prefix", children: prefix }),
103
+ /* @__PURE__ */ jsx(
104
+ "input",
105
+ {
106
+ ref: setInputRef,
107
+ className: "input",
108
+ value: isControlled ? value : void 0,
109
+ defaultValue: isControlled ? void 0 : defaultValue,
110
+ onChange: handleChange,
111
+ placeholder,
112
+ disabled,
113
+ maxLength,
114
+ ...rest
115
+ }
116
+ ),
117
+ suffix && /* @__PURE__ */ jsx("span", { className: "input-affix suffix", children: suffix }),
118
+ showClear && /* @__PURE__ */ jsx(
119
+ "span",
120
+ {
121
+ className: "input-clear",
122
+ role: "button",
123
+ "aria-label": "Clear",
124
+ tabIndex: -1,
125
+ onMouseDown: (e) => e.preventDefault(),
126
+ onClick: handleClear,
127
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", size: 12 })
128
+ }
129
+ ),
130
+ renderAffixIcon(trailingIcon, "trail", onTrailingIconClick)
131
+ ] });
132
+ if (!showCount) return inputElement;
133
+ return /* @__PURE__ */ jsxs("div", { className: "input-shell", children: [
134
+ inputElement,
135
+ /* @__PURE__ */ jsx("div", { className: "input-count", children: maxLength != null ? `${count} / ${maxLength}` : `${count}` })
136
+ ] });
137
+ }
138
+ );
139
+ InputBase.displayName = "Input";
140
+ var InputPassword = React.forwardRef(
141
+ ({
142
+ visibilityToggle = true,
143
+ iconRender,
144
+ suffix,
145
+ onValueChange,
146
+ ...rest
147
+ }, ref) => {
148
+ const [visible, setVisible] = React.useState(false);
149
+ const renderedIcon = iconRender?.(visible);
150
+ const useCustomToggle = visibilityToggle !== false && !!renderedIcon;
151
+ const useDefaultToggle = visibilityToggle !== false && !renderedIcon;
152
+ const toggle = (e) => {
153
+ e.preventDefault();
154
+ e.stopPropagation();
155
+ setVisible((v) => !v);
156
+ };
157
+ const toggleNode = useCustomToggle ? /* @__PURE__ */ jsx(
158
+ "button",
159
+ {
160
+ type: "button",
161
+ className: "input-password-toggle",
162
+ tabIndex: -1,
163
+ onMouseDown: (e) => e.preventDefault(),
164
+ onClick: toggle,
165
+ "aria-label": visible ? "Hide password" : "Show password",
166
+ children: renderedIcon
167
+ }
168
+ ) : null;
169
+ return /* @__PURE__ */ jsx(
170
+ InputBase,
171
+ {
172
+ ref,
173
+ ...rest,
174
+ type: visible ? "text" : "password",
175
+ suffix: toggleNode ? /* @__PURE__ */ jsxs(Fragment, { children: [
176
+ suffix,
177
+ toggleNode
178
+ ] }) : suffix,
179
+ trailingIcon: useDefaultToggle ? visible ? "eyeOff" : "eye" : void 0,
180
+ onTrailingIconClick: useDefaultToggle ? () => setVisible((v) => !v) : void 0,
181
+ onValueChange
182
+ }
183
+ );
184
+ }
185
+ );
186
+ InputPassword.displayName = "Input.Password";
187
+ var Input = InputBase;
188
+ Input.Password = InputPassword;
189
+ Input.TextArea = Textarea;
190
+
191
+ export { Input, InputPassword };
@@ -0,0 +1,147 @@
1
+ import './tokens-BIIUTPKN.css';
2
+ import './shared-NJHRNLRH.css';
3
+ import './Radio-GVFDPAZM.css';
4
+ import * as React from 'react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ // src/components/Radio/Radio.tsx
8
+ var RadioRoot = React.forwardRef(({
9
+ checked,
10
+ defaultChecked,
11
+ onChange,
12
+ disabled,
13
+ label,
14
+ className = "",
15
+ id,
16
+ ...rest
17
+ }, ref) => {
18
+ const [inner, setInner] = React.useState(defaultChecked ?? false);
19
+ const isControlled = checked !== void 0;
20
+ const value = isControlled ? checked : inner;
21
+ const pick = () => {
22
+ if (disabled) return;
23
+ if (!isControlled) setInner(true);
24
+ onChange?.(true);
25
+ };
26
+ return /* @__PURE__ */ jsxs(
27
+ "label",
28
+ {
29
+ ref,
30
+ className: `radio ${value ? "checked" : ""} ${disabled ? "disabled" : ""} ${className}`,
31
+ onClick: pick,
32
+ ...rest,
33
+ children: [
34
+ /* @__PURE__ */ jsx(
35
+ "button",
36
+ {
37
+ type: "button",
38
+ role: "radio",
39
+ "aria-checked": value,
40
+ disabled,
41
+ onClick: (event) => {
42
+ event.stopPropagation();
43
+ pick();
44
+ },
45
+ id,
46
+ className: "radio-dot"
47
+ }
48
+ ),
49
+ label && /* @__PURE__ */ jsx("span", { className: "radio-label", children: label })
50
+ ]
51
+ }
52
+ );
53
+ });
54
+ RadioRoot.displayName = "Radio";
55
+ var RadioGroupInner = ({
56
+ options,
57
+ value,
58
+ defaultValue,
59
+ onChange,
60
+ direction,
61
+ variant = "default",
62
+ size = "md",
63
+ className = "",
64
+ ...rest
65
+ }, ref) => {
66
+ const [inner, setInner] = React.useState(defaultValue);
67
+ const groupRef = React.useRef(null);
68
+ const [thumb, setThumb] = React.useState({ left: 0, width: 0, ready: false });
69
+ const isControlled = value !== void 0;
70
+ const current = isControlled ? value : inner;
71
+ const setGroupRef = React.useCallback(
72
+ (node) => {
73
+ groupRef.current = node;
74
+ if (typeof ref === "function") ref(node);
75
+ else if (ref) ref.current = node;
76
+ },
77
+ [ref]
78
+ );
79
+ const pick = (v) => {
80
+ if (!isControlled) setInner(v);
81
+ onChange?.(v);
82
+ };
83
+ const resolvedDirection = direction ?? (variant === "segmented" ? "horizontal" : "vertical");
84
+ React.useLayoutEffect(() => {
85
+ if (variant !== "segmented") return;
86
+ const group = groupRef.current;
87
+ if (!group) return;
88
+ const updateThumb = () => {
89
+ const active = group.querySelector(".radio.checked");
90
+ if (!active) {
91
+ setThumb((prev) => prev.ready ? { left: prev.left, width: prev.width, ready: false } : prev);
92
+ return;
93
+ }
94
+ const next = {
95
+ left: active.offsetLeft,
96
+ width: active.offsetWidth,
97
+ ready: true
98
+ };
99
+ setThumb(
100
+ (prev) => prev.left === next.left && prev.width === next.width && prev.ready === next.ready ? prev : next
101
+ );
102
+ };
103
+ updateThumb();
104
+ const frame = requestAnimationFrame(updateThumb);
105
+ const observer = typeof ResizeObserver !== "undefined" ? new ResizeObserver(updateThumb) : null;
106
+ if (observer) {
107
+ observer.observe(group);
108
+ group.querySelectorAll(".radio").forEach((item) => observer.observe(item));
109
+ }
110
+ window.addEventListener("resize", updateThumb);
111
+ return () => {
112
+ cancelAnimationFrame(frame);
113
+ observer?.disconnect();
114
+ window.removeEventListener("resize", updateThumb);
115
+ };
116
+ }, [current, options, size, variant]);
117
+ return /* @__PURE__ */ jsxs("div", { ref: setGroupRef, className: `radio-group ${resolvedDirection} ${variant} ${size} ${className}`, ...rest, children: [
118
+ variant === "segmented" && /* @__PURE__ */ jsx(
119
+ "span",
120
+ {
121
+ "aria-hidden": true,
122
+ className: "radio-segment-thumb",
123
+ style: {
124
+ width: thumb.width,
125
+ transform: `translateX(${thumb.left}px)`,
126
+ opacity: thumb.ready ? 1 : 0
127
+ }
128
+ }
129
+ ),
130
+ options.map((opt) => /* @__PURE__ */ jsx(
131
+ RadioRoot,
132
+ {
133
+ label: opt.label,
134
+ checked: current === opt.value,
135
+ disabled: opt.disabled,
136
+ onChange: () => pick(opt.value)
137
+ },
138
+ String(opt.value)
139
+ ))
140
+ ] });
141
+ };
142
+ var RadioGroup = React.forwardRef(RadioGroupInner);
143
+ RadioGroup.displayName = "RadioGroup";
144
+ var Radio = RadioRoot;
145
+ Radio.Group = RadioGroup;
146
+
147
+ export { Radio, RadioGroup };
@@ -28,6 +28,11 @@ function _interopNamespace(e) {
28
28
 
29
29
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
30
 
31
+ var normalizePlacement = (placement) => {
32
+ const base = placement.startsWith("top") ? "top" : placement.startsWith("bottom") ? "bottom" : placement.startsWith("left") ? "left" : placement.startsWith("right") ? "right" : placement;
33
+ const alignCross = placement.endsWith("Left") || placement.endsWith("Top") ? "start" : placement.endsWith("Right") || placement.endsWith("Bottom") ? "end" : "center";
34
+ return { placement: base, alignCross };
35
+ };
31
36
  var Popover = React__namespace.forwardRef(({
32
37
  content,
33
38
  title,
@@ -38,18 +43,24 @@ var Popover = React__namespace.forwardRef(({
38
43
  width,
39
44
  defaultOpen = false,
40
45
  open,
46
+ visible,
41
47
  onOpenChange,
48
+ onVisibleChange,
42
49
  children,
43
50
  className = "",
51
+ overlayClassName = "",
52
+ popupClassName = "",
44
53
  onClick,
45
54
  onMouseEnter,
46
55
  onMouseLeave,
47
56
  ...rest
48
57
  }, ref) => {
49
58
  const [inner, setInner] = React__namespace.useState(defaultOpen);
50
- const isControlled = open !== void 0;
51
- const show = isControlled ? open : inner;
59
+ const controlledOpen = open ?? visible;
60
+ const isControlled = controlledOpen !== void 0;
61
+ const show = isControlled ? controlledOpen : inner;
52
62
  const panelWidth = width === "auto" ? 160 : width ?? 240;
63
+ const normalized = normalizePlacement(placement);
53
64
  const {
54
65
  triggerRef,
55
66
  floatingRef,
@@ -57,15 +68,16 @@ var Popover = React__namespace.forwardRef(({
57
68
  placement: resolved
58
69
  } = chunkYB3IWIOJ_cjs.useFloating({
59
70
  open: show,
60
- placement,
71
+ placement: normalized.placement,
61
72
  panelWidth,
62
73
  panelHeight: 160,
63
- alignCross: "center"
74
+ alignCross: normalized.alignCross
64
75
  });
65
76
  const set = React__namespace.useCallback((v) => {
66
77
  if (!isControlled) setInner(v);
67
78
  onOpenChange?.(v);
68
- }, [isControlled, onOpenChange]);
79
+ onVisibleChange?.(v);
80
+ }, [isControlled, onOpenChange, onVisibleChange]);
69
81
  const setTriggerRef = React__namespace.useCallback(
70
82
  (node) => {
71
83
  triggerRef.current = node;
@@ -130,7 +142,7 @@ var Popover = React__namespace.forwardRef(({
130
142
  "div",
131
143
  {
132
144
  ref: floatingRef,
133
- className: `popover popover-${resolved}`,
145
+ className: `popover popover-${resolved} ${overlayClassName} ${popupClassName}`,
134
146
  style: { ...floatingStyle, ...widthStyle },
135
147
  ...panelHover,
136
148
  children: [