@misael703/ui 1.31.1 → 1.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/README.md +19 -1
  2. package/dist/{chunk-42EYBIRW.js → chunk-2PNXLTEM.js} +3 -3
  3. package/dist/{chunk-42EYBIRW.js.map → chunk-2PNXLTEM.js.map} +1 -1
  4. package/dist/{chunk-4WGXCRNN.js → chunk-3JRP3DGM.js} +3 -3
  5. package/dist/{chunk-4WGXCRNN.js.map → chunk-3JRP3DGM.js.map} +1 -1
  6. package/dist/{chunk-TO4EQVAN.js → chunk-4R5BHEDE.js} +5 -5
  7. package/dist/{chunk-TO4EQVAN.js.map → chunk-4R5BHEDE.js.map} +1 -1
  8. package/dist/{chunk-KNKIJOES.js → chunk-4XHKOZJD.js} +16 -16
  9. package/dist/{chunk-KNKIJOES.js.map → chunk-4XHKOZJD.js.map} +1 -1
  10. package/dist/{chunk-ZQ4HEU55.js → chunk-542LEDCL.js} +17 -17
  11. package/dist/{chunk-ZQ4HEU55.js.map → chunk-542LEDCL.js.map} +1 -1
  12. package/dist/{chunk-AU7VNBV2.mjs → chunk-5RA2CERT.mjs} +6 -6
  13. package/dist/{chunk-AU7VNBV2.mjs.map → chunk-5RA2CERT.mjs.map} +1 -1
  14. package/dist/{chunk-74ALPTUE.js → chunk-6SSTTJV4.js} +4 -4
  15. package/dist/{chunk-74ALPTUE.js.map → chunk-6SSTTJV4.js.map} +1 -1
  16. package/dist/{chunk-ULRTSRBP.mjs → chunk-77M3OY2L.mjs} +4 -4
  17. package/dist/{chunk-ULRTSRBP.mjs.map → chunk-77M3OY2L.mjs.map} +1 -1
  18. package/dist/{chunk-OLOSL6KO.js → chunk-7BOA6V72.js} +10 -10
  19. package/dist/{chunk-OLOSL6KO.js.map → chunk-7BOA6V72.js.map} +1 -1
  20. package/dist/{chunk-FVNW5TYQ.js → chunk-AGMDYCGG.js} +5 -5
  21. package/dist/{chunk-FVNW5TYQ.js.map → chunk-AGMDYCGG.js.map} +1 -1
  22. package/dist/{chunk-ZKLTT2PW.mjs → chunk-AVDMGH7M.mjs} +6 -6
  23. package/dist/{chunk-ZKLTT2PW.mjs.map → chunk-AVDMGH7M.mjs.map} +1 -1
  24. package/dist/{chunk-LOQG2PQC.js → chunk-AYMLKLRZ.js} +13 -13
  25. package/dist/{chunk-LOQG2PQC.js.map → chunk-AYMLKLRZ.js.map} +1 -1
  26. package/dist/{chunk-SDKXMULE.mjs → chunk-BERDZAO5.mjs} +5 -5
  27. package/dist/{chunk-SDKXMULE.mjs.map → chunk-BERDZAO5.mjs.map} +1 -1
  28. package/dist/{chunk-VSBCBKOL.mjs → chunk-BJBNDA2B.mjs} +6 -6
  29. package/dist/{chunk-VSBCBKOL.mjs.map → chunk-BJBNDA2B.mjs.map} +1 -1
  30. package/dist/{chunk-VHYTJD6Z.mjs → chunk-BJGMROKL.mjs} +21 -3
  31. package/dist/chunk-BJGMROKL.mjs.map +1 -0
  32. package/dist/{chunk-3HA3VO2I.js → chunk-C4AKMVDZ.js} +23 -2
  33. package/dist/chunk-C4AKMVDZ.js.map +1 -0
  34. package/dist/{chunk-NQGUJ4B5.mjs → chunk-CVU54JYN.mjs} +5 -5
  35. package/dist/{chunk-NQGUJ4B5.mjs.map → chunk-CVU54JYN.mjs.map} +1 -1
  36. package/dist/{chunk-K325NBYF.js → chunk-D42GKEUX.js} +8 -8
  37. package/dist/{chunk-K325NBYF.js.map → chunk-D42GKEUX.js.map} +1 -1
  38. package/dist/{chunk-QKUH25YO.js → chunk-D6IVNHT2.js} +13 -13
  39. package/dist/{chunk-QKUH25YO.js.map → chunk-D6IVNHT2.js.map} +1 -1
  40. package/dist/{chunk-7IPB5A75.mjs → chunk-DBV6FV4V.mjs} +3 -3
  41. package/dist/{chunk-7IPB5A75.mjs.map → chunk-DBV6FV4V.mjs.map} +1 -1
  42. package/dist/{chunk-SEYLCARU.mjs → chunk-DCDFM4CI.mjs} +5 -5
  43. package/dist/{chunk-SEYLCARU.mjs.map → chunk-DCDFM4CI.mjs.map} +1 -1
  44. package/dist/{chunk-QP5HKKTM.mjs → chunk-DH3IXJRJ.mjs} +4 -4
  45. package/dist/{chunk-QP5HKKTM.mjs.map → chunk-DH3IXJRJ.mjs.map} +1 -1
  46. package/dist/{chunk-AS4NTE2Q.js → chunk-DYZM6NZU.js} +5 -5
  47. package/dist/{chunk-AS4NTE2Q.js.map → chunk-DYZM6NZU.js.map} +1 -1
  48. package/dist/{chunk-FQ7RZJBG.mjs → chunk-ESOUBZQJ.mjs} +4 -4
  49. package/dist/{chunk-FQ7RZJBG.mjs.map → chunk-ESOUBZQJ.mjs.map} +1 -1
  50. package/dist/{chunk-QC3XHUF4.js → chunk-FB6JXUP3.js} +9 -9
  51. package/dist/{chunk-QC3XHUF4.js.map → chunk-FB6JXUP3.js.map} +1 -1
  52. package/dist/{chunk-X2YSLKDS.js → chunk-FPUSNOVX.js} +10 -10
  53. package/dist/{chunk-X2YSLKDS.js.map → chunk-FPUSNOVX.js.map} +1 -1
  54. package/dist/{chunk-I7URH4F2.mjs → chunk-FR4JV3JA.mjs} +3 -3
  55. package/dist/{chunk-I7URH4F2.mjs.map → chunk-FR4JV3JA.mjs.map} +1 -1
  56. package/dist/{chunk-4CPGEYY3.js → chunk-GGILBESE.js} +5 -5
  57. package/dist/{chunk-4CPGEYY3.js.map → chunk-GGILBESE.js.map} +1 -1
  58. package/dist/{chunk-PUXXDABJ.mjs → chunk-GWYH2U2H.mjs} +5 -5
  59. package/dist/{chunk-PUXXDABJ.mjs.map → chunk-GWYH2U2H.mjs.map} +1 -1
  60. package/dist/{chunk-U6ZXX4WF.js → chunk-HB5VGI2W.js} +3 -2
  61. package/dist/chunk-HB5VGI2W.js.map +1 -0
  62. package/dist/{chunk-732BPQGZ.js → chunk-HCTY5QYL.js} +3 -3
  63. package/dist/{chunk-732BPQGZ.js.map → chunk-HCTY5QYL.js.map} +1 -1
  64. package/dist/{chunk-EAVUJY3H.js → chunk-I7D47VEK.js} +11 -11
  65. package/dist/{chunk-EAVUJY3H.js.map → chunk-I7D47VEK.js.map} +1 -1
  66. package/dist/{chunk-V54BL7YF.mjs → chunk-J2LKDSLW.mjs} +5 -5
  67. package/dist/{chunk-V54BL7YF.mjs.map → chunk-J2LKDSLW.mjs.map} +1 -1
  68. package/dist/{chunk-HEI6PUMK.js → chunk-JKBJ2AKX.js} +4 -4
  69. package/dist/{chunk-HEI6PUMK.js.map → chunk-JKBJ2AKX.js.map} +1 -1
  70. package/dist/{chunk-QR6X2UOT.mjs → chunk-JMFDIN5R.mjs} +3 -3
  71. package/dist/{chunk-QR6X2UOT.mjs.map → chunk-JMFDIN5R.mjs.map} +1 -1
  72. package/dist/{chunk-TMU6UXWF.mjs → chunk-KCJCIUOK.mjs} +72 -28
  73. package/dist/chunk-KCJCIUOK.mjs.map +1 -0
  74. package/dist/{chunk-ITYDWKUE.js → chunk-LGLG5UZP.js} +8 -8
  75. package/dist/{chunk-ITYDWKUE.js.map → chunk-LGLG5UZP.js.map} +1 -1
  76. package/dist/{chunk-6BU22FZ7.js → chunk-ME57NREH.js} +22 -22
  77. package/dist/{chunk-6BU22FZ7.js.map → chunk-ME57NREH.js.map} +1 -1
  78. package/dist/{chunk-L7IEAJSD.js → chunk-MH6AK52N.js} +8 -8
  79. package/dist/{chunk-L7IEAJSD.js.map → chunk-MH6AK52N.js.map} +1 -1
  80. package/dist/{chunk-KVOPVYZ5.mjs → chunk-MMHTQ6T7.mjs} +2 -2
  81. package/dist/chunk-MMHTQ6T7.mjs.map +1 -0
  82. package/dist/{chunk-KJ6YAYWS.js → chunk-MW7HQCFC.js} +3 -3
  83. package/dist/{chunk-KJ6YAYWS.js.map → chunk-MW7HQCFC.js.map} +1 -1
  84. package/dist/{chunk-X62VJCF3.js → chunk-MWYYFA5X.js} +11 -11
  85. package/dist/{chunk-X62VJCF3.js.map → chunk-MWYYFA5X.js.map} +1 -1
  86. package/dist/{chunk-H3227BHR.mjs → chunk-NBSJ6AJP.mjs} +24 -6
  87. package/dist/chunk-NBSJ6AJP.mjs.map +1 -0
  88. package/dist/{chunk-PUEGDRTJ.mjs → chunk-NS6CI6RP.mjs} +3 -3
  89. package/dist/{chunk-PUEGDRTJ.mjs.map → chunk-NS6CI6RP.mjs.map} +1 -1
  90. package/dist/{chunk-JZNUYA42.js → chunk-NU4GAGUV.js} +3 -3
  91. package/dist/{chunk-JZNUYA42.js.map → chunk-NU4GAGUV.js.map} +1 -1
  92. package/dist/{chunk-574VINGB.mjs → chunk-OIYIWG53.mjs} +4 -4
  93. package/dist/{chunk-574VINGB.mjs.map → chunk-OIYIWG53.mjs.map} +1 -1
  94. package/dist/{chunk-SAVJLOGS.mjs → chunk-P4I7G5PW.mjs} +5 -5
  95. package/dist/{chunk-SAVJLOGS.mjs.map → chunk-P4I7G5PW.mjs.map} +1 -1
  96. package/dist/{chunk-R4KMFKP4.mjs → chunk-QAGQ6OH4.mjs} +6 -6
  97. package/dist/{chunk-R4KMFKP4.mjs.map → chunk-QAGQ6OH4.mjs.map} +1 -1
  98. package/dist/{chunk-PBWX4LU2.mjs → chunk-QCBC4ME5.mjs} +3 -2
  99. package/dist/chunk-QCBC4ME5.mjs.map +1 -0
  100. package/dist/{chunk-UD37YQ4T.js → chunk-QSLBGCB5.js} +82 -38
  101. package/dist/chunk-QSLBGCB5.js.map +1 -0
  102. package/dist/{chunk-EHJNOVHL.mjs → chunk-RSY4ONVR.mjs} +4 -4
  103. package/dist/{chunk-EHJNOVHL.mjs.map → chunk-RSY4ONVR.mjs.map} +1 -1
  104. package/dist/{chunk-TS3WC3G4.mjs → chunk-SUQLII3F.mjs} +3 -3
  105. package/dist/{chunk-TS3WC3G4.mjs.map → chunk-SUQLII3F.mjs.map} +1 -1
  106. package/dist/{chunk-PMZDGU63.js → chunk-TCL7LRRU.js} +14 -14
  107. package/dist/{chunk-PMZDGU63.js.map → chunk-TCL7LRRU.js.map} +1 -1
  108. package/dist/{chunk-ZKPFXBE7.js → chunk-TMDAR6XW.js} +10 -10
  109. package/dist/{chunk-ZKPFXBE7.js.map → chunk-TMDAR6XW.js.map} +1 -1
  110. package/dist/{chunk-KD7353FR.js → chunk-TVIU7DLZ.js} +26 -8
  111. package/dist/chunk-TVIU7DLZ.js.map +1 -0
  112. package/dist/{chunk-UYANLSRC.js → chunk-TX4BUYX4.js} +5 -5
  113. package/dist/{chunk-UYANLSRC.js.map → chunk-TX4BUYX4.js.map} +1 -1
  114. package/dist/{chunk-RJJH6UZU.js → chunk-VJLOL7FR.js} +2 -2
  115. package/dist/chunk-VJLOL7FR.js.map +1 -0
  116. package/dist/{chunk-ZA2AXUIB.mjs → chunk-VXJTDBSM.mjs} +3 -3
  117. package/dist/{chunk-ZA2AXUIB.mjs.map → chunk-VXJTDBSM.mjs.map} +1 -1
  118. package/dist/{chunk-HDQNM3GC.mjs → chunk-W7MQSEUR.mjs} +7 -7
  119. package/dist/{chunk-HDQNM3GC.mjs.map → chunk-W7MQSEUR.mjs.map} +1 -1
  120. package/dist/{chunk-HFRMDYNW.mjs → chunk-X36H75RR.mjs} +3 -3
  121. package/dist/{chunk-HFRMDYNW.mjs.map → chunk-X36H75RR.mjs.map} +1 -1
  122. package/dist/{chunk-2LHXOVX2.mjs → chunk-XRWMJVSI.mjs} +3 -3
  123. package/dist/{chunk-2LHXOVX2.mjs.map → chunk-XRWMJVSI.mjs.map} +1 -1
  124. package/dist/{chunk-DTWQA7TN.mjs → chunk-YHWZITIY.mjs} +5 -5
  125. package/dist/{chunk-DTWQA7TN.mjs.map → chunk-YHWZITIY.mjs.map} +1 -1
  126. package/dist/{chunk-KDCMQRYI.mjs → chunk-YNH3ILYV.mjs} +7 -7
  127. package/dist/{chunk-KDCMQRYI.mjs.map → chunk-YNH3ILYV.mjs.map} +1 -1
  128. package/dist/{chunk-ZTAAFZNC.mjs → chunk-YXUYWO2W.mjs} +3 -3
  129. package/dist/{chunk-ZTAAFZNC.mjs.map → chunk-YXUYWO2W.mjs.map} +1 -1
  130. package/dist/components/AdvancedPickers.d.mts +19 -3
  131. package/dist/components/AdvancedPickers.d.ts +19 -3
  132. package/dist/components/AdvancedPickers.js +9 -9
  133. package/dist/components/AdvancedPickers.mjs +5 -5
  134. package/dist/components/AppShell.d.mts +11 -1
  135. package/dist/components/AppShell.d.ts +11 -1
  136. package/dist/components/AppShell.js +8 -7
  137. package/dist/components/AppShell.mjs +6 -5
  138. package/dist/components/Carousel.js +3 -3
  139. package/dist/components/Carousel.mjs +2 -2
  140. package/dist/components/Code.js +4 -4
  141. package/dist/components/Code.mjs +2 -2
  142. package/dist/components/Comments.js +9 -9
  143. package/dist/components/Comments.mjs +6 -6
  144. package/dist/components/Commerce.js +19 -19
  145. package/dist/components/Commerce.mjs +8 -8
  146. package/dist/components/ContextMenu.js +3 -3
  147. package/dist/components/ContextMenu.mjs +2 -2
  148. package/dist/components/DataTable.js +12 -12
  149. package/dist/components/DataTable.mjs +6 -6
  150. package/dist/components/Display.js +14 -14
  151. package/dist/components/Display.mjs +3 -3
  152. package/dist/components/Display2.js +7 -7
  153. package/dist/components/Display2.mjs +3 -3
  154. package/dist/components/Display3.js +11 -11
  155. package/dist/components/Display3.mjs +5 -5
  156. package/dist/components/Editing.js +13 -13
  157. package/dist/components/Editing.mjs +8 -8
  158. package/dist/components/Filters.js +10 -10
  159. package/dist/components/Filters.mjs +4 -4
  160. package/dist/components/Form.js +12 -12
  161. package/dist/components/Form.mjs +2 -2
  162. package/dist/components/Gallery.js +6 -6
  163. package/dist/components/Gallery.mjs +4 -4
  164. package/dist/components/HoverCard.js +3 -3
  165. package/dist/components/HoverCard.mjs +2 -2
  166. package/dist/components/Icons.d.mts +4 -1
  167. package/dist/components/Icons.d.ts +4 -1
  168. package/dist/components/Icons.js +84 -72
  169. package/dist/components/Icons.mjs +1 -1
  170. package/dist/components/Inputs.js +8 -8
  171. package/dist/components/Inputs.mjs +4 -4
  172. package/dist/components/InputsExtra.js +14 -14
  173. package/dist/components/InputsExtra.mjs +5 -5
  174. package/dist/components/Layout.js +22 -22
  175. package/dist/components/Layout.mjs +3 -3
  176. package/dist/components/Logo.js +3 -3
  177. package/dist/components/Logo.mjs +2 -2
  178. package/dist/components/Marketing.js +5 -5
  179. package/dist/components/Marketing.mjs +2 -2
  180. package/dist/components/Menubar.js +3 -3
  181. package/dist/components/Menubar.mjs +2 -2
  182. package/dist/components/NavigationMenu.js +4 -4
  183. package/dist/components/NavigationMenu.mjs +3 -3
  184. package/dist/components/Notifications.js +5 -5
  185. package/dist/components/Notifications.mjs +4 -4
  186. package/dist/components/Overlay.js +8 -8
  187. package/dist/components/Overlay.mjs +6 -6
  188. package/dist/components/Permissions.js +6 -6
  189. package/dist/components/Permissions.mjs +5 -5
  190. package/dist/components/Pickers.js +9 -9
  191. package/dist/components/Pickers.mjs +4 -4
  192. package/dist/components/Popover.js +3 -3
  193. package/dist/components/Popover.mjs +2 -2
  194. package/dist/components/Toast.js +5 -5
  195. package/dist/components/Toast.mjs +3 -3
  196. package/dist/hooks/index.js +10 -10
  197. package/dist/hooks/index.mjs +2 -2
  198. package/dist/index.d.mts +1 -1
  199. package/dist/index.d.ts +1 -1
  200. package/dist/index.js +276 -264
  201. package/dist/index.mjs +39 -39
  202. package/dist/locale/index.d.mts +2 -0
  203. package/dist/locale/index.d.ts +2 -0
  204. package/dist/locale/index.js +6 -6
  205. package/dist/locale/index.mjs +2 -2
  206. package/dist/styles.css +1 -1
  207. package/package.json +1 -1
  208. package/dist/chunk-3HA3VO2I.js.map +0 -1
  209. package/dist/chunk-H3227BHR.mjs.map +0 -1
  210. package/dist/chunk-KD7353FR.js.map +0 -1
  211. package/dist/chunk-KVOPVYZ5.mjs.map +0 -1
  212. package/dist/chunk-PBWX4LU2.mjs.map +0 -1
  213. package/dist/chunk-RJJH6UZU.js.map +0 -1
  214. package/dist/chunk-TMU6UXWF.mjs.map +0 -1
  215. package/dist/chunk-U6ZXX4WF.js.map +0 -1
  216. package/dist/chunk-UD37YQ4T.js.map +0 -1
  217. package/dist/chunk-VHYTJD6Z.mjs.map +0 -1
@@ -1,14 +1,14 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
+ var chunkVJLOL7FR_js = require('./chunk-VJLOL7FR.js');
4
5
  var chunkMVJITG75_js = require('./chunk-MVJITG75.js');
5
6
  var chunkWAGWB35Q_js = require('./chunk-WAGWB35Q.js');
6
- var chunkRJJH6UZU_js = require('./chunk-RJJH6UZU.js');
7
- var chunkU6ZXX4WF_js = require('./chunk-U6ZXX4WF.js');
8
- var chunk3HA3VO2I_js = require('./chunk-3HA3VO2I.js');
9
- var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
7
+ var chunkHB5VGI2W_js = require('./chunk-HB5VGI2W.js');
10
8
  var chunkXMLBKK7X_js = require('./chunk-XMLBKK7X.js');
11
9
  var chunkCRKYET66_js = require('./chunk-CRKYET66.js');
10
+ var chunkC4AKMVDZ_js = require('./chunk-C4AKMVDZ.js');
11
+ var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
12
12
  var React = require('react');
13
13
  var jsxRuntime = require('react/jsx-runtime');
14
14
 
@@ -46,7 +46,7 @@ function MultiCombobox({
46
46
  id,
47
47
  maxVisibleChips = 3
48
48
  }) {
49
- const locale = chunkU6ZXX4WF_js.useLocale();
49
+ const locale = chunkHB5VGI2W_js.useLocale();
50
50
  const ph = placeholder ?? locale["common.search"];
51
51
  const empty = emptyMessage ?? locale["common.noResults"];
52
52
  const [open, setOpen] = React__namespace.useState(false);
@@ -107,10 +107,10 @@ function MultiCombobox({
107
107
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "multicombo__chips", onClick: () => inputRef.current?.focus(), children: [
108
108
  visible.map((o) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "multicombo__chip", children: [
109
109
  o.label,
110
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", "aria-label": chunkRJJH6UZU_js.format(locale["combobox.remove"], { label: o.label }), onClick: (e) => {
110
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", "aria-label": chunkVJLOL7FR_js.format(locale["combobox.remove"], { label: o.label }), onClick: (e) => {
111
111
  e.stopPropagation();
112
112
  toggle(o.value);
113
- }, children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.X, { size: 12 }) })
113
+ }, children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.X, { size: 12 }) })
114
114
  ] }, String(o.value))),
115
115
  overflow > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "multicombo__chip multicombo__chip--more", children: [
116
116
  "+",
@@ -169,7 +169,7 @@ function MultiCombobox({
169
169
  if (!o.disabled) toggle(o.value);
170
170
  },
171
171
  children: [
172
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkPASF6T4H_js.cx("multicombo__check", checked && "is-checked"), "aria-hidden": "true", children: checked ? /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.Check, { size: 14 }) : null }),
172
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkPASF6T4H_js.cx("multicombo__check", checked && "is-checked"), "aria-hidden": "true", children: checked ? /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.Check, { size: 14 }) : null }),
173
173
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "multicombo__option-body", children: [
174
174
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "multicombo__option-label", children: o.label }),
175
175
  o.description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "multicombo__option-desc", children: o.description })
@@ -183,9 +183,13 @@ function MultiCombobox({
183
183
  ) })
184
184
  ] });
185
185
  }
186
+ var EMPTY_RANGE = { from: null, to: null };
186
187
  function DateRangePicker({
187
188
  value,
188
189
  onChange,
190
+ defaultValue,
191
+ onApply,
192
+ onOpenChange,
189
193
  minDate,
190
194
  maxDate,
191
195
  presets,
@@ -195,12 +199,26 @@ function DateRangePicker({
195
199
  id,
196
200
  format: format2 = "auto"
197
201
  }) {
198
- const locale = chunkU6ZXX4WF_js.useLocale();
202
+ const locale = chunkHB5VGI2W_js.useLocale();
199
203
  const weekdays = locale["picker.weekdaysShort"];
200
204
  const months = locale["calendar.months"];
201
205
  const fmt = chunkMVJITG75_js.resolveDateFormat(format2);
206
+ const isControlled = value !== void 0;
207
+ const applyMode = !!onApply;
208
+ const initial = isControlled ? value : defaultValue ?? EMPTY_RANGE;
209
+ const [draft, setDraft] = React__namespace.useState(initial);
210
+ const [lastApplied, setLastApplied] = React__namespace.useState(initial);
211
+ const vFrom = value?.from?.getTime() ?? 0;
212
+ const vTo = value?.to?.getTime() ?? 0;
213
+ React__namespace.useEffect(() => {
214
+ if (!isControlled) return;
215
+ setDraft(value);
216
+ setLastApplied(value);
217
+ }, [isControlled, vFrom, vTo]);
218
+ const current = isControlled && !applyMode ? value : draft;
219
+ const displayed = applyMode ? lastApplied : current;
202
220
  const [open, setOpen] = React__namespace.useState(false);
203
- const [view, setView] = React__namespace.useState(() => chunkMVJITG75_js.startOfMonth(value.from ?? /* @__PURE__ */ new Date()));
221
+ const [view, setView] = React__namespace.useState(() => chunkMVJITG75_js.startOfMonth(initial.from ?? /* @__PURE__ */ new Date()));
204
222
  const [hover, setHover] = React__namespace.useState(null);
205
223
  const wrapRef = React__namespace.useRef(null);
206
224
  const popoverRef = React__namespace.useRef(null);
@@ -211,9 +229,14 @@ function DateRangePicker({
211
229
  align: "start",
212
230
  offset: 6
213
231
  });
232
+ const closeWithoutCommit = React__namespace.useCallback(() => {
233
+ if (applyMode) setDraft(lastApplied);
234
+ setOpen(false);
235
+ onOpenChange?.(false);
236
+ }, [applyMode, lastApplied, onOpenChange]);
214
237
  chunkXMLBKK7X_js.useDismiss({
215
238
  open,
216
- onDismiss: () => setOpen(false),
239
+ onDismiss: closeWithoutCommit,
217
240
  refs: [wrapRef, popoverRef],
218
241
  returnFocusRef: triggerRef
219
242
  });
@@ -221,23 +244,47 @@ function DateRangePicker({
221
244
  const monthGrid1 = React__namespace.useMemo(() => chunkMVJITG75_js.buildMonthGrid(view, 1), [view]);
222
245
  const isDisabled = (d) => minDate && d < new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()) || maxDate && d > new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate());
223
246
  const inRange = (d) => {
224
- if (!value.from) return false;
225
- const end = value.to ?? hover;
226
- if (!end) return chunkMVJITG75_js.isSameDay(d, value.from);
227
- const a = value.from < end ? value.from : end;
228
- const b = value.from < end ? end : value.from;
247
+ if (!current.from) return false;
248
+ const end = current.to ?? hover;
249
+ if (!end) return chunkMVJITG75_js.isSameDay(d, current.from);
250
+ const a = current.from < end ? current.from : end;
251
+ const b = current.from < end ? end : current.from;
229
252
  return d >= new Date(a.getFullYear(), a.getMonth(), a.getDate()) && d <= new Date(b.getFullYear(), b.getMonth(), b.getDate());
230
253
  };
231
254
  const click = (d) => {
232
- if (!value.from || value.from && value.to) {
233
- onChange({ from: d, to: null });
234
- } else {
235
- const from = value.from;
236
- if (d < from) onChange({ from: d, to: from });
237
- else onChange({ from, to: d });
255
+ let next;
256
+ if (!current.from || current.from && current.to) next = { from: d, to: null };
257
+ else {
258
+ const from = current.from;
259
+ next = d < from ? { from: d, to: from } : { from, to: d };
260
+ }
261
+ if (applyMode) setDraft(next);
262
+ else onChange?.(next);
263
+ };
264
+ const commit = (next, fromPreset = false) => {
265
+ if (applyMode) {
266
+ onApply(next);
267
+ setLastApplied(next);
268
+ setDraft(next);
269
+ if (isControlled) onChange?.(next);
270
+ } else if (fromPreset) {
271
+ onChange?.(next);
272
+ }
273
+ setOpen(false);
274
+ onOpenChange?.(false);
275
+ };
276
+ const clear = () => {
277
+ if (applyMode) setDraft(EMPTY_RANGE);
278
+ else onChange?.(EMPTY_RANGE);
279
+ };
280
+ const toggleOpen = () => {
281
+ if (open) closeWithoutCommit();
282
+ else {
283
+ setOpen(true);
284
+ onOpenChange?.(true);
238
285
  }
239
286
  };
240
- const label = value.from ? value.to ? `${chunkMVJITG75_js.formatDate(value.from, fmt)} \u2192 ${chunkMVJITG75_js.formatDate(value.to, fmt)}` : `${chunkMVJITG75_js.formatDate(value.from, fmt)} \u2192 \u2026` : locale["picker.selectRange"];
287
+ const label = displayed.from ? displayed.to ? `${chunkMVJITG75_js.formatDate(displayed.from, fmt)} \u2192 ${chunkMVJITG75_js.formatDate(displayed.to, fmt)}` : `${chunkMVJITG75_js.formatDate(displayed.from, fmt)} \u2192 \u2026` : locale["picker.selectRange"];
241
288
  const renderMonth = (offset) => {
242
289
  const { month: m, cells } = offset === 0 ? monthGrid0 : monthGrid1;
243
290
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "daterange__month", children: [
@@ -250,7 +297,7 @@ function DateRangePicker({
250
297
  weekdays.map((w, i) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "daterange__dow", children: w }, i)),
251
298
  cells.map((d, i) => {
252
299
  if (!d) return /* @__PURE__ */ jsxRuntime.jsx("span", {}, `b${i}`);
253
- const sel = value.from && chunkMVJITG75_js.isSameDay(d, value.from) || value.to && chunkMVJITG75_js.isSameDay(d, value.to);
300
+ const sel = current.from && chunkMVJITG75_js.isSameDay(d, current.from) || current.to && chunkMVJITG75_js.isSameDay(d, current.to);
254
301
  const ir = inRange(d);
255
302
  const today = chunkMVJITG75_js.isSameDay(d, /* @__PURE__ */ new Date());
256
303
  const off = isDisabled(d);
@@ -279,11 +326,11 @@ function DateRangePicker({
279
326
  type: "button",
280
327
  className: "daterange__trigger",
281
328
  disabled,
282
- onClick: () => setOpen((o) => !o),
329
+ onClick: toggleOpen,
283
330
  "aria-haspopup": "dialog",
284
331
  "aria-expanded": open,
285
332
  children: [
286
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "daterange__icon", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.CalendarIcon, { size: 16 }) }),
333
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "daterange__icon", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.CalendarIcon, { size: 16 }) }),
287
334
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: label })
288
335
  ]
289
336
  }
@@ -302,23 +349,20 @@ function DateRangePicker({
302
349
  visibility: pos.ready ? "visible" : "hidden"
303
350
  },
304
351
  children: [
305
- presets && presets.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "daterange__presets", children: presets.map((p, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => {
306
- onChange(p.range());
307
- setOpen(false);
308
- }, children: p.label }) }, i)) }),
352
+ presets && presets.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "daterange__presets", children: presets.map((p, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => commit(p.range(), true), children: p.label }) }, i)) }),
309
353
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "daterange__panes", children: [
310
354
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "daterange__nav", children: [
311
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => setView((v) => chunkMVJITG75_js.addMonths(v, -1)), "aria-label": locale["calendar.prevMonth"], children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronLeft, { size: 16 }) }),
355
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => setView((v) => chunkMVJITG75_js.addMonths(v, -1)), "aria-label": locale["calendar.prevMonth"], children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronLeft, { size: 16 }) }),
312
356
  /* @__PURE__ */ jsxRuntime.jsx("span", {}),
313
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => setView((v) => chunkMVJITG75_js.addMonths(v, 1)), "aria-label": locale["calendar.nextMonth"], children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronRight, { size: 16 }) })
357
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => setView((v) => chunkMVJITG75_js.addMonths(v, 1)), "aria-label": locale["calendar.nextMonth"], children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronRight, { size: 16 }) })
314
358
  ] }),
315
359
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "daterange__months", children: [
316
360
  renderMonth(0),
317
361
  renderMonth(1)
318
362
  ] }),
319
363
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "daterange__actions", children: [
320
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "daterange__clear", onClick: () => onChange({ from: null, to: null }), children: locale["common.clear"] }),
321
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "daterange__apply", onClick: () => setOpen(false), disabled: !value.from || !value.to, children: locale["common.apply"] })
364
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "daterange__clear", onClick: clear, children: locale["common.clear"] }),
365
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "daterange__apply", onClick: () => commit(current), disabled: !current.from || !current.to, children: locale["common.apply"] })
322
366
  ] })
323
367
  ] })
324
368
  ]
@@ -347,7 +391,7 @@ function CommandPalette({
347
391
  placeholder,
348
392
  emptyMessage
349
393
  }) {
350
- const locale = chunkU6ZXX4WF_js.useLocale();
394
+ const locale = chunkHB5VGI2W_js.useLocale();
351
395
  const ph = placeholder ?? locale["picker.searchCommands"];
352
396
  const empty = emptyMessage ?? locale["common.noResults"];
353
397
  const [query, setQuery] = React__namespace.useState("");
@@ -418,7 +462,7 @@ function CommandPalette({
418
462
  if (e.target === e.currentTarget) onClose();
419
463
  }, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cmdk__panel", children: [
420
464
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cmdk__searchbar", children: [
421
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdk__icon", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.Search, { size: 16 }) }),
465
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdk__icon", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.Search, { size: 16 }) }),
422
466
  /* @__PURE__ */ jsxRuntime.jsx(
423
467
  "input",
424
468
  {
@@ -486,5 +530,5 @@ exports.CommandPalette = CommandPalette;
486
530
  exports.DateRangePicker = DateRangePicker;
487
531
  exports.MultiCombobox = MultiCombobox;
488
532
  exports.useCommandPalette = useCommandPalette;
489
- //# sourceMappingURL=chunk-UD37YQ4T.js.map
490
- //# sourceMappingURL=chunk-UD37YQ4T.js.map
533
+ //# sourceMappingURL=chunk-QSLBGCB5.js.map
534
+ //# sourceMappingURL=chunk-QSLBGCB5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/AdvancedPickers.tsx"],"names":["useLocale","React","usePopoverPosition","useDismiss","jsxs","cx","format","jsx","X","Portal","Check","resolveDateFormat","startOfMonth","buildMonthGrid","isSameDay","formatDate","CalendarIcon","addMonths","ChevronLeft","ChevronRight","Search"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,IAAM,OAAA,GAAU,CAAK,CAAA,EAA2B,CAAA,KAC9C,CAAA,CAAE,KAAA,CAAM,WAAA,EAAY,CAAE,QAAA,CAAS,CAAA,CAAE,WAAA,EAAa,CAAA;AAEzC,SAAS,aAAA,CAA0B;AAAA,EACxC,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,WAAA;AAAA,EAC1B,YAAA;AAAA,EAAc,MAAA,GAAS,OAAA;AAAA,EACvB,OAAA;AAAA,EAAS,QAAA;AAAA,EAAU,SAAA;AAAA,EAAW,EAAA;AAAA,EAAI,eAAA,GAAkB;AACtD,CAAA,EAA0B;AACxB,EAAA,MAAM,SAASA,0BAAA,EAAU;AACzB,EAAA,MAAM,EAAA,GAAK,WAAA,IAAe,MAAA,CAAO,eAAe,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,YAAA,IAAgB,MAAA,CAAO,kBAAkB,CAAA;AACvD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUC,0BAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUA,0BAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUA,0BAAS,CAAC,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAgBA,wBAAuB,IAAI,CAAA;AACjD,EAAA,MAAM,QAAA,GAAiBA,wBAAyB,IAAI,CAAA;AACpD,EAAA,MAAM,OAAA,GAAgBA,wBAAyB,IAAI,CAAA;AACnD,EAAA,MAAM,UAAgBA,gBAAA,CAAA,KAAA,EAAM;AAC5B,EAAA,MAAM,SAAA,GAAY,CAAA,EAAG,EAAA,IAAM,OAAO,CAAA,QAAA,CAAA;AAGlC,EAAA,MAAM,MAAA,GAAeA,yBAAQ,MAAM,IAAI,IAAI,KAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAE1D,EAAA,MAAM,QAAA,GAAiBA,gBAAA,CAAA,OAAA;AAAA,IACrB,MAAO,KAAA,GAAQ,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAM,MAAA,CAAO,CAAA,EAAG,KAAK,CAAC,CAAA,GAAI,OAAA;AAAA,IACzD,CAAC,OAAA,EAAS,KAAA,EAAO,MAAM;AAAA,GACzB;AAEA,EAAA,MAAM,GAAA,GAAMC,mCAAA,CAAmB,OAAA,EAAS,OAAA,EAAS;AAAA,IAC/C,IAAA;AAAA,IACA,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,gBAAA,EAAkB;AAAA,GACnB,CAAA;AAGD,EAAAC,2BAAA,CAAW;AAAA,IACT,IAAA;AAAA,IACA,SAAA,EAAW,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,IAC9B,IAAA,EAAM,CAAC,OAAA,EAAS,OAAO,CAAA;AAAA,IACvB,aAAA,EAAe;AAAA,GAChB,CAAA;AAED,EAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAS;AACvB,IAAA,IAAI,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,SACnD,QAAA,CAAS,CAAC,GAAG,KAAA,EAAO,CAAC,CAAC,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAA6C;AAC1D,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AAAE,MAAA,CAAA,CAAE,cAAA,EAAe;AAAG,MAAA,OAAA,CAAQ,IAAI,CAAA;AAAG,MAAA,SAAA,CAAU,CAAC,MAAM,IAAA,CAAK,GAAA,CAAI,SAAS,MAAA,GAAS,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,IAAG,CAAA,MAAA,IAC/G,CAAA,CAAE,GAAA,KAAQ,SAAA,EAAW;AAAE,MAAA,CAAA,CAAE,cAAA,EAAe;AAAG,MAAA,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,IAAG,CAAA,MAAA,IACjF,CAAA,CAAE,GAAA,KAAQ,OAAA,EAAS;AAC1B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,GAAA,GAAM,SAAS,MAAM,CAAA;AAC3B,MAAA,IAAI,GAAA,IAAO,CAAC,GAAA,CAAI,QAAA,EAAU;AAAE,QAAA,MAAA,CAAO,IAAI,KAAK,CAAA;AAAG,QAAA,QAAA,CAAS,EAAE,CAAA;AAAA,MAAG;AAAA,IAC/D,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU;AAAE,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IAAG,WACxC,CAAA,CAAE,GAAA,KAAQ,eAAe,CAAC,KAAA,IAAS,MAAM,MAAA,EAAQ;AAAE,MAAA,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,IAAG;AAAA,EAC5F,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,QAAQ,MAAA,CAAO,CAAC,MAAM,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,KAAK,CAAC,CAAA;AAC/D,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,KAAA,CAAM,CAAA,EAAG,eAAe,CAAA;AACtD,EAAA,MAAM,QAAA,GAAW,aAAA,CAAc,MAAA,GAAS,OAAA,CAAQ,MAAA;AAEhD,EAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,OAAA,EAAS,SAAA,EAAWC,mBAAA,CAAG,YAAA,EAAc,OAAA,IAAW,YAAA,EAAc,QAAA,IAAY,aAAA,EAAe,SAAS,CAAA,EAC1G,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EAAoB,OAAA,EAAS,MAAM,QAAA,CAAS,OAAA,EAAS,OAAM,EACvE,QAAA,EAAA;AAAA,MAAA,OAAA,CAAQ,IAAI,CAAC,CAAA,qBACZA,eAAA,CAAC,MAAA,EAAA,EAA2B,WAAU,kBAAA,EACnC,QAAA,EAAA;AAAA,QAAA,CAAA,CAAE,KAAA;AAAA,uCACF,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,YAAA,EAAYE,wBAAU,MAAA,CAAO,iBAAiB,CAAA,EAAG,EAAE,OAAO,CAAA,CAAE,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,UAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,UAAA,MAAA,CAAO,EAAE,KAAK,CAAA;AAAA,QAAG,CAAA,EAAG,QAAA,kBAAAC,cAAA,CAACC,kBAAA,EAAA,EAAE,IAAA,EAAM,IAAI,CAAA,EAAE;AAAA,OAAA,EAAA,EAF7J,MAAA,CAAO,CAAA,CAAE,KAAK,CAGzB,CACD,CAAA;AAAA,MACA,QAAA,GAAW,CAAA,oBAAKJ,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,yCAAA,EAA0C,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,QAAE;AAAA,OAAA,EAAS,CAAA;AAAA,sBACtFG,cAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,QAAA;AAAA,UACL,EAAA;AAAA,UACA,IAAA,EAAK,MAAA;AAAA,UACL,IAAA,EAAK,UAAA;AAAA,UACL,eAAA,EAAe,IAAA;AAAA,UACf,eAAA,EAAe,SAAA;AAAA,UACf,SAAA,EAAU,mBAAA;AAAA,UACV,WAAA,EAAa,aAAA,CAAc,MAAA,KAAW,CAAA,GAAI,EAAA,GAAK,EAAA;AAAA,UAC/C,QAAA;AAAA,UACA,KAAA,EAAO,KAAA;AAAA,UACP,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,UAC3B,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,YAAA,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAG,YAAA,OAAA,CAAQ,IAAI,CAAA;AAAG,YAAA,SAAA,CAAU,CAAC,CAAA;AAAA,UAAG,CAAA;AAAA,UAC1E,SAAA,EAAW;AAAA;AAAA;AACb,KAAA,EACF,CAAA;AAAA,IACC,IAAA,mCACEE,uBAAA,EAAA,EACD,QAAA,kBAAAF,cAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,OAAA;AAAA,QACL,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA,EAAK,SAAA;AAAA,QACL,sBAAA,EAAqB,MAAA;AAAA,QACrB,SAAA,EAAWF,mBAAA,CAAG,kBAAA,EAAoB,aAAa,CAAA;AAAA,QAC/C,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,OAAA;AAAA,UACV,KAAK,GAAA,CAAI,GAAA;AAAA,UACT,MAAM,GAAA,CAAI,IAAA;AAAA,UACV,OAAO,GAAA,CAAI,KAAA;AAAA,UACX,UAAA,EAAY,GAAA,CAAI,KAAA,GAAQ,SAAA,GAAY;AAAA,SACtC;AAAA,QAEC,QAAA,EAAA,QAAA,CAAS,MAAA,KAAW,CAAA,mBACnBE,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAA,KAAA,EAAM,CAAA,GAEzC,QAAA,CAAS,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AACrB,UAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA;AAClC,UAAA,uBACEH,eAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cAEC,IAAA,EAAK,QAAA;AAAA,cACL,eAAA,EAAe,OAAA;AAAA,cACf,iBAAe,CAAA,CAAE,QAAA;AAAA,cACjB,SAAA,EAAWC,mBAAA,CAAG,oBAAA,EAAsB,CAAA,KAAM,MAAA,IAAU,aAAa,OAAA,IAAW,aAAA,EAAe,CAAA,CAAE,QAAA,IAAY,aAAa,CAAA;AAAA,cACtH,YAAA,EAAc,MAAM,SAAA,CAAU,CAAC,CAAA;AAAA,cAC/B,WAAA,EAAa,CAAC,CAAA,KAAM;AAAE,gBAAA,CAAA,CAAE,cAAA,EAAe;AAAG,gBAAA,IAAI,CAAC,CAAA,CAAE,QAAA,EAAU,MAAA,CAAO,EAAE,KAAK,CAAA;AAAA,cAAG,CAAA;AAAA,cAE5E,QAAA,EAAA;AAAA,gCAAAE,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAWF,mBAAA,CAAG,mBAAA,EAAqB,WAAW,YAAY,CAAA,EAAG,aAAA,EAAY,MAAA,EAAQ,oCAAUE,cAAA,CAACG,sBAAA,EAAA,EAAM,IAAA,EAAM,EAAA,EAAI,IAAK,IAAA,EAAK,CAAA;AAAA,gCAC5HN,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EACd,QAAA,EAAA;AAAA,kCAAAG,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA4B,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA;AAAA,kBACnD,EAAE,WAAA,oBAAeA,cAAA,CAAC,UAAK,SAAA,EAAU,yBAAA,EAA2B,YAAE,WAAA,EAAY;AAAA,iBAAA,EAC7E;AAAA;AAAA,aAAA;AAAA,YAZK,MAAA,CAAO,EAAE,KAAK;AAAA,WAarB;AAAA,QAEJ,CAAC;AAAA;AAAA,KAEL,EACA;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAqCA,IAAM,WAAA,GAAyB,EAAE,IAAA,EAAM,IAAA,EAAM,IAAI,IAAA,EAAK;AAE/C,SAAS,eAAA,CAAgB;AAAA,EAC9B,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,YAAA;AAAA,EAAc,OAAA;AAAA,EAAS,YAAA;AAAA,EACxC,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,OAAA;AAAA,EAClB,OAAA;AAAA,EAAS,QAAA;AAAA,EAAU,SAAA;AAAA,EAAW,EAAA;AAAA,EAAI,QAAAD,OAAAA,GAAS;AAC7C,CAAA,EAAyB;AACvB,EAAA,MAAM,SAASN,0BAAA,EAAU;AACzB,EAAA,MAAM,QAAA,GAAW,OAAO,sBAAsB,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,OAAO,iBAAiB,CAAA;AACvC,EAAA,MAAM,GAAA,GAAMW,mCAAkBL,OAAM,CAAA;AACpC,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,CAAC,CAAC,OAAA;AACpB,EAAA,MAAM,OAAA,GAAU,YAAA,GAAgB,KAAA,GAAuB,YAAA,IAAgB,WAAA;AACvE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUL,0BAAoB,OAAO,CAAA;AAC3D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAUA,0BAAoB,OAAO,CAAA;AAEvE,EAAA,MAAM,KAAA,GAAQ,KAAA,EAAO,IAAA,EAAM,OAAA,EAAQ,IAAK,CAAA;AACxC,EAAA,MAAM,GAAA,GAAM,KAAA,EAAO,EAAA,EAAI,OAAA,EAAQ,IAAK,CAAA;AACpC,EAAMA,2BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,QAAA,CAAS,KAAkB,CAAA;AAC3B,IAAA,cAAA,CAAe,KAAkB,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,YAAA,EAAc,KAAA,EAAO,GAAG,CAAC,CAAA;AAG7B,EAAA,MAAM,OAAA,GAAqB,YAAA,IAAgB,CAAC,SAAA,GAAa,KAAA,GAAsB,KAAA;AAG/E,EAAA,MAAM,SAAA,GAAuB,YAAY,WAAA,GAAc,OAAA;AACvD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUA,0BAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUA,gBAAA,CAAA,QAAA,CAAS,MAAMW,6BAAA,CAAa,OAAA,CAAQ,IAAA,oBAAQ,IAAI,IAAA,EAAM,CAAC,CAAA;AACrF,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUX,0BAAsB,IAAI,CAAA;AAC1D,EAAA,MAAM,OAAA,GAAgBA,wBAAuB,IAAI,CAAA;AACjD,EAAA,MAAM,UAAA,GAAmBA,wBAAuB,IAAI,CAAA;AACpD,EAAA,MAAM,UAAA,GAAmBA,wBAA0B,IAAI,CAAA;AAKvD,EAAA,MAAM,GAAA,GAAMC,mCAAA,CAAmB,OAAA,EAAS,UAAA,EAAY;AAAA,IAClD,IAAA;AAAA,IACA,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,kBAAA,GAA2BD,6BAAY,MAAM;AACjD,IAAA,IAAI,SAAA,WAAoB,WAAW,CAAA;AACnC,IAAA,OAAA,CAAQ,KAAK,CAAA;AACb,IAAA,YAAA,GAAe,KAAK,CAAA;AAAA,EACtB,CAAA,EAAG,CAAC,SAAA,EAAW,WAAA,EAAa,YAAY,CAAC,CAAA;AAEzC,EAAAE,2BAAA,CAAW;AAAA,IACT,IAAA;AAAA,IACA,SAAA,EAAW,kBAAA;AAAA,IACX,IAAA,EAAM,CAAC,OAAA,EAAS,UAAU,CAAA;AAAA,IAC1B,cAAA,EAAgB;AAAA,GACjB,CAAA;AAKD,EAAA,MAAM,UAAA,GAAmBF,yBAAQ,MAAMY,+BAAA,CAAe,MAAM,CAAC,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AACtE,EAAA,MAAM,UAAA,GAAmBZ,yBAAQ,MAAMY,+BAAA,CAAe,MAAM,CAAC,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAEtE,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KACjB,OAAA,IAAW,CAAA,GAAI,IAAI,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAY,EAAG,OAAA,CAAQ,QAAA,EAAS,EAAG,OAAA,CAAQ,OAAA,EAAS,CAAA,IACpF,OAAA,IAAW,CAAA,GAAI,IAAI,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAY,EAAG,OAAA,CAAQ,QAAA,EAAS,EAAG,OAAA,CAAQ,SAAS,CAAA;AAEvF,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAY;AAC3B,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,EAAM,OAAO,KAAA;AAC1B,IAAA,MAAM,GAAA,GAAM,QAAQ,EAAA,IAAM,KAAA;AAC1B,IAAA,IAAI,CAAC,GAAA,EAAK,OAAOC,0BAAA,CAAU,CAAA,EAAG,QAAQ,IAAI,CAAA;AAC1C,IAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,IAAA,GAAO,GAAA,GAAM,QAAQ,IAAA,GAAO,GAAA;AAC9C,IAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,IAAA,GAAO,GAAA,GAAM,MAAM,OAAA,CAAQ,IAAA;AAC7C,IAAA,OAAO,CAAA,IAAK,IAAI,IAAA,CAAK,CAAA,CAAE,WAAA,IAAe,CAAA,CAAE,QAAA,EAAS,EAAG,CAAA,CAAE,OAAA,EAAS,KACxD,CAAA,IAAK,IAAI,IAAA,CAAK,CAAA,CAAE,WAAA,EAAY,EAAG,EAAE,QAAA,EAAS,EAAG,CAAA,CAAE,OAAA,EAAS,CAAA;AAAA,EACjE,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAY;AACzB,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,IAAS,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,EAAA,EAAK,IAAA,GAAO,EAAE,IAAA,EAAM,CAAA,EAAG,EAAA,EAAI,IAAA,EAAK;AAAA,SACzE;AACH,MAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,MAAA,IAAA,GAAO,CAAA,GAAI,IAAA,GAAO,EAAE,IAAA,EAAM,CAAA,EAAG,EAAA,EAAI,IAAA,EAAK,GAAI,EAAE,IAAA,EAAM,EAAA,EAAI,CAAA,EAAE;AAAA,IAC1D;AACA,IAAA,IAAI,SAAA,WAAoB,IAAI,CAAA;AAAA,oBACZ,IAAI,CAAA;AAAA,EACtB,CAAA;AAKA,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,EAAiB,UAAA,GAAa,KAAA,KAAU;AACtD,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAA,CAAS,IAAI,CAAA;AACb,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,IAAI,YAAA,aAAyB,IAAI,CAAA;AAAA,IACnC,WAAW,UAAA,EAAY;AACrB,MAAA,QAAA,GAAW,IAAI,CAAA;AAAA,IACjB;AACA,IAAA,OAAA,CAAQ,KAAK,CAAA;AACb,IAAA,YAAA,GAAe,KAAK,CAAA;AAAA,EACtB,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,IAAI,SAAA,WAAoB,WAAW,CAAA;AAAA,oBACnB,WAAW,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,IAAI,MAAM,kBAAA,EAAmB;AAAA,SACxB;AAAE,MAAA,OAAA,CAAQ,IAAI,CAAA;AAAG,MAAA,YAAA,GAAe,IAAI,CAAA;AAAA,IAAG;AAAA,EAC9C,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,GACpB,SAAA,CAAU,EAAA,GACR,CAAA,EAAGC,2BAAA,CAAW,SAAA,CAAU,IAAA,EAAM,GAAG,CAAC,CAAA,QAAA,EAAMA,2BAAA,CAAW,UAAU,EAAA,EAAI,GAAG,CAAC,CAAA,CAAA,GACrE,CAAA,EAAGA,2BAAA,CAAW,SAAA,CAAU,IAAA,EAAM,GAAG,CAAC,CAAA,cAAA,CAAA,GACpC,MAAA,CAAO,oBAAoB,CAAA;AAE/B,EAAA,MAAM,WAAA,GAAc,CAAC,MAAA,KAAmB;AACtC,IAAA,MAAM,EAAE,KAAA,EAAO,CAAA,EAAG,OAAM,GAAI,MAAA,KAAW,IAAI,UAAA,GAAa,UAAA;AACxD,IAAA,uBACEX,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kBAAA,EAAoB,QAAA,EAAA;AAAA,QAAA,MAAA,CAAO,CAAA,CAAE,UAAU,CAAA;AAAA,QAAE,GAAA;AAAA,QAAE,EAAE,WAAA;AAAY,OAAA,EAAE,CAAA;AAAA,sBAC1EA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBAAMG,cAAA,CAAC,UAAa,SAAA,EAAU,gBAAA,EAAkB,QAAA,EAAA,CAAA,EAAA,EAA/B,CAAiC,CAAO,CAAA;AAAA,QAC1E,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AACnB,UAAA,IAAI,CAAC,CAAA,EAAG,sCAAQ,MAAA,EAAA,EAAA,EAAU,CAAA,CAAA,EAAI,CAAC,CAAA,CAAI,CAAA;AACnC,UAAA,MAAM,GAAA,GAAO,OAAA,CAAQ,IAAA,IAAQO,0BAAA,CAAU,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA,IAAO,OAAA,CAAQ,EAAA,IAAMA,0BAAA,CAAU,CAAA,EAAG,QAAQ,EAAE,CAAA;AAClG,UAAA,MAAM,EAAA,GAAK,QAAQ,CAAC,CAAA;AACpB,UAAA,MAAM,KAAA,GAAQA,0BAAA,CAAU,CAAA,kBAAG,IAAI,MAAM,CAAA;AACrC,UAAA,MAAM,GAAA,GAAM,WAAW,CAAC,CAAA;AACxB,UAAA,uBACEP,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEC,IAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAWF,mBAAA,CAAG,gBAAA,EAAkB,GAAA,IAAO,aAAA,EAAe,EAAA,IAAM,CAAC,GAAA,IAAO,UAAA,EAAY,KAAA,IAAS,UAAA,EAAY,GAAA,IAAO,aAAa,CAAA;AAAA,cACzH,QAAA,EAAU,CAAC,CAAC,GAAA;AAAA,cACZ,YAAA,EAAc,MAAM,QAAA,CAAS,CAAC,CAAA;AAAA,cAC9B,OAAA,EAAS,MAAM,KAAA,CAAM,CAAC,CAAA;AAAA,cACtB,YAAE,OAAA;AAAQ,aAAA;AAAA,YANL;AAAA,WAMO;AAAA,QAElB,CAAC;AAAA,OAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACED,eAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,OAAA,EAAS,SAAA,EAAWC,mBAAA,CAAG,WAAA,EAAa,OAAA,IAAW,YAAA,EAAc,QAAA,IAAY,aAAA,EAAe,SAAS,CAAA,EACzG,QAAA,EAAA;AAAA,oBAAAD,eAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,EAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,oBAAA;AAAA,QACV,QAAA;AAAA,QACA,OAAA,EAAS,UAAA;AAAA,QACT,eAAA,EAAc,QAAA;AAAA,QACd,eAAA,EAAe,IAAA;AAAA,QAEf,QAAA,EAAA;AAAA,0BAAAG,cAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iBAAA,EAAkB,aAAA,EAAY,QAAO,QAAA,kBAAAA,cAAA,CAACS,6BAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI,CAAA,EAAE,CAAA;AAAA,0BAC/ET,cAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,KACf;AAAA,IACC,IAAA,mCACEE,uBAAA,EAAA,EACD,QAAA,kBAAAL,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,SAAA,EAAWC,mBAAA,CAAG,oBAAA,EAAsB,aAAa,CAAA;AAAA,QACjD,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAc,MAAM,QAAA,CAAS,IAAI,CAAA;AAAA,QACjC,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,OAAA;AAAA,UACV,KAAK,GAAA,CAAI,GAAA;AAAA,UACT,MAAM,GAAA,CAAI,IAAA;AAAA,UACV,UAAA,EAAY,GAAA,CAAI,KAAA,GAAQ,SAAA,GAAY;AAAA,SACtC;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,oBAC3BE,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,oBAAA,EACX,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,oCACd,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,MAAM,MAAA,CAAO,EAAE,KAAA,EAAM,EAAG,IAAI,CAAA,EAAI,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA,EAAA,EADhE,CAET,CACD,CAAA,EACH,CAAA;AAAA,0BAEFH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EACb,QAAA,EAAA;AAAA,8BAAAG,cAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,OAAA,EAAS,MAAM,OAAA,CAAQ,CAAC,MAAMU,0BAAA,CAAU,CAAA,EAAG,EAAE,CAAC,CAAA,EAAG,cAAY,MAAA,CAAO,oBAAoB,GAAG,QAAA,kBAAAV,cAAA,CAACW,4BAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI,CAAA,EAAE,CAAA;AAAA,6CACzI,MAAA,EAAA,EAAK,CAAA;AAAA,8BACNX,cAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,SAAS,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAMU,0BAAA,CAAU,CAAA,EAAG,CAAC,CAAC,CAAA,EAAG,cAAY,MAAA,CAAO,oBAAoB,GAAG,QAAA,kBAAAV,cAAA,CAACY,6BAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI,CAAA,EAAE;AAAA,aAAA,EAC5I,CAAA;AAAA,4BACAf,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACZ,QAAA,EAAA;AAAA,cAAA,WAAA,CAAY,CAAC,CAAA;AAAA,cACb,YAAY,CAAC;AAAA,aAAA,EAChB,CAAA;AAAA,4BACAA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,8BAAAG,cAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,oBAAmB,OAAA,EAAS,KAAA,EAAQ,QAAA,EAAA,MAAA,CAAO,cAAc,CAAA,EAAE,CAAA;AAAA,8BAC3FA,cAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,kBAAA,EAAmB,OAAA,EAAS,MAAM,MAAA,CAAO,OAAO,GAAG,QAAA,EAAU,CAAC,QAAQ,IAAA,IAAQ,CAAC,QAAQ,EAAA,EAAK,QAAA,EAAA,MAAA,CAAO,cAAc,CAAA,EAAE;AAAA,aAAA,EACrJ;AAAA,WAAA,EACF;AAAA;AAAA;AAAA,KACF,EACA;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAuBA,SAAS,aAAA,CAAc,GAAkB,EAAA,EAAY;AACnD,EAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,WAAA,EAAY,CAAE,MAAM,GAAG,CAAA;AACxC,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAClC,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC9B,EAAA,IAAI,CAAA,CAAE,GAAA,CAAI,WAAA,EAAY,KAAM,KAAK,OAAO,KAAA;AACxC,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,IAAI,MAAM,KAAA,IAAS,EAAE,EAAE,OAAA,IAAW,CAAA,CAAE,UAAU,OAAO,KAAA;AACrD,IAAA,IAAI,CAAA,KAAM,MAAA,IAAU,CAAC,CAAA,CAAE,SAAS,OAAO,KAAA;AACvC,IAAA,IAAI,CAAA,KAAM,MAAA,IAAU,CAAC,CAAA,CAAE,SAAS,OAAO,KAAA;AACvC,IAAA,IAAI,CAAA,KAAM,OAAA,IAAW,CAAC,CAAA,CAAE,UAAU,OAAO,KAAA;AACzC,IAAA,IAAI,CAAA,KAAM,KAAA,IAAS,CAAC,CAAA,CAAE,QAAQ,OAAO,KAAA;AAAA,EACvC;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,IAAA;AAAA,EAAM,OAAA;AAAA,EAAS,KAAA;AAAA,EACf,WAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,SAASP,0BAAA,EAAU;AACzB,EAAA,MAAM,EAAA,GAAK,WAAA,IAAe,MAAA,CAAO,uBAAuB,CAAA;AACxD,EAAA,MAAM,KAAA,GAAQ,YAAA,IAAgB,MAAA,CAAO,kBAAkB,CAAA;AACvD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUC,0BAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUA,0BAAS,CAAC,CAAA;AAC5C,EAAA,MAAM,QAAA,GAAiBA,wBAAyB,IAAI,CAAA;AACpD,EAAA,MAAM,OAAA,GAAgBA,wBAAyB,IAAI,CAAA;AAEnD,EAAA,MAAM,QAAA,GAAiBA,yBAAQ,MAAM;AACnC,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AACnC,IAAA,IAAI,CAAC,GAAG,OAAO,KAAA;AACf,IAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,EAAA,KAAO;AAC1B,MAAA,MAAM,MAAM,CAAC,EAAA,CAAG,KAAA,EAAO,EAAA,CAAG,aAAa,EAAA,CAAG,KAAA,EAAO,GAAI,EAAA,CAAG,YAAY,EAAG,EAAE,IAAA,CAAK,GAAG,EAAE,WAAA,EAAY;AAC/F,MAAA,OAAO,GAAA,CAAI,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AAGjB,EAAA,MAAM,OAAA,GAAgBA,yBAAQ,MAAM;AAClC,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,MAAM,GAAA,uBAAU,GAAA,EAA2B;AAC3C,IAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,MAAA,MAAM,CAAA,GAAI,GAAG,KAAA,IAAS,EAAA;AACtB,MAAA,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,EAAG;AAAE,QAAA,GAAA,CAAI,GAAA,CAAI,CAAA,EAAG,EAAE,CAAA;AAAG,QAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,MAAG;AAClD,MAAA,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,CAAG,IAAA,CAAK,EAAE,CAAA;AAAA,IACrB;AACA,IAAA,OAAO,EAAE,OAAO,GAAA,EAAI;AAAA,EACtB,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,IAAA,GAAO,QAAA;AAEb,EAAMA,2BAAU,MAAM;AACpB,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,QAAA,CAAS,EAAE,CAAA;AAAG,MAAA,SAAA,CAAU,CAAC,CAAA;AACzB,MAAA,qBAAA,CAAsB,MAAM,QAAA,CAAS,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA,IACvD;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAMA,2BAAU,MAAM;AAAE,IAAA,SAAA,CAAU,CAAC,CAAA;AAAA,EAAG,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEhD,EAAMA,2BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAqB;AAClC,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU,OAAA,EAAQ;AAAA,WAAA,IACvB,CAAA,CAAE,QAAQ,WAAA,EAAa;AAAE,QAAA,CAAA,CAAE,cAAA,EAAe;AAAG,QAAA,SAAA,CAAU,CAAC,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,MAAA,GAAS,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,MAAG,CAAA,MAAA,IACjG,CAAA,CAAE,GAAA,KAAQ,SAAA,EAAW;AAAE,QAAA,CAAA,CAAE,cAAA,EAAe;AAAG,QAAA,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,MAAG,CAAA,MAAA,IACjF,CAAA,CAAE,GAAA,KAAQ,OAAA,EAAS;AAC1B,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,MAAM,EAAA,GAAK,KAAK,MAAM,CAAA;AACtB,QAAA,IAAI,EAAA,EAAI;AAAE,UAAA,EAAA,CAAG,KAAA,EAAM;AAAG,UAAA,OAAA,EAAQ;AAAA,QAAG;AAAA,MACnC;AAAA,IACF,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,KAAK,CAAA;AAC1C,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,KAAK,CAAA;AAAA,EAC5D,GAAG,CAAC,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAC,CAAA;AAEhC,EAAMA,2BAAU,MAAM;AACpB,IAAA,MAAM,KAAK,OAAA,CAAQ,OAAA,EAAS,aAAA,CAAc,CAAA,eAAA,EAAkB,MAAM,CAAA,EAAA,CAAI,CAAA;AACtE,IAAA,EAAA,EAAI,cAAA,CAAe,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA;AAAA,EACzC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,uBACEM,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAgB,MAAK,QAAA,EAAS,YAAA,EAAW,MAAA,EAAO,YAAA,EAAY,MAAA,CAAO,uBAAuB,CAAA,EAAG,WAAA,EAAa,CAAC,CAAA,KAAM;AAAE,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,EAAe,OAAA,EAAQ;AAAA,EAAG,CAAA,EAC7K,QAAA,kBAAAH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iBAAA,EACb,QAAA,EAAA;AAAA,sBAAAG,cAAA,CAAC,MAAA,EAAA,EAAK,WAAU,YAAA,EAAa,aAAA,EAAY,QAAO,QAAA,kBAAAA,cAAA,CAACa,uBAAA,EAAA,EAAO,IAAA,EAAM,EAAA,EAAI,CAAA,EAAE,CAAA;AAAA,sBACpEb,cAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,aAAA;AAAA,UACV,KAAA,EAAO,KAAA;AAAA,UACP,WAAA,EAAa,EAAA;AAAA,UACb,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA,OAC1C;AAAA,sBACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAY,QAAA,EAAA,KAAA,EAAG;AAAA,KAAA,EAChC,CAAA;AAAA,oCACC,IAAA,EAAA,EAAG,GAAA,EAAK,SAAS,SAAA,EAAU,YAAA,EAAa,MAAK,SAAA,EAC3C,QAAA,EAAA;AAAA,MAAA,IAAA,CAAK,WAAW,CAAA,oBAAKA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,eAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MACxD,QAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,qBAClBH,eAAA,CAAOH,2BAAN,EACE,QAAA,EAAA;AAAA,QAAA,CAAA,mCAAM,IAAA,EAAA,EAAG,SAAA,EAAU,aAAA,EAAc,aAAA,EAAY,QAAQ,QAAA,EAAA,CAAA,EAAE,CAAA;AAAA,QACvD,QAAQ,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,CAAG,GAAA,CAAI,CAAC,EAAA,KAAO;AAC/B,UAAA,GAAA,EAAA;AACA,UAAA,MAAM,CAAA,GAAI,GAAA;AACV,UAAA,uBACEG,eAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cAEC,IAAA,EAAK,QAAA;AAAA,cACL,iBAAe,CAAA,KAAM,MAAA;AAAA,cACrB,cAAA,EAAc,CAAA;AAAA,cACd,SAAA,EAAWC,mBAAA,CAAG,YAAA,EAAc,CAAA,KAAM,UAAU,WAAW,CAAA;AAAA,cACvD,YAAA,EAAc,MAAM,SAAA,CAAU,CAAC,CAAA;AAAA,cAC/B,WAAA,EAAa,CAAC,CAAA,KAAM;AAAE,gBAAA,CAAA,CAAE,cAAA,EAAe;AAAG,gBAAA,EAAA,CAAG,KAAA,EAAM;AAAG,gBAAA,OAAA,EAAQ;AAAA,cAAG,CAAA;AAAA,cAEhE,QAAA,EAAA;AAAA,gBAAA,EAAA,CAAG,IAAA,mCAAS,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAkB,aAAA,EAAY,MAAA,EAAQ,aAAG,IAAA,EAAK,CAAA;AAAA,gCAC1ED,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EACd,QAAA,EAAA;AAAA,kCAAAG,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,EAAA,CAAG,KAAA,EAAM,CAAA;AAAA,kBAC5C,GAAG,WAAA,oBAAeA,cAAA,CAAC,UAAK,SAAA,EAAU,iBAAA,EAAmB,aAAG,WAAA,EAAY;AAAA,iBAAA,EACvE,CAAA;AAAA,gBACC,GAAG,QAAA,oBAAYA,cAAA,CAAC,SAAI,SAAA,EAAU,WAAA,EAAa,aAAG,QAAA,EAAS;AAAA;AAAA,aAAA;AAAA,YAbnD,EAAA,CAAG;AAAA,WAcV;AAAA,QAEJ,CAAC;AAAA,OAAA,EAAA,EAvBkB,CAAA,IAAK,QAwB1B,CACD;AAAA,KAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAMO,SAAS,kBAAkB,EAAE,MAAA,GAAS,OAAA,EAAQ,GAA8B,EAAC,EAAG;AACrF,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUN,0BAAS,KAAK,CAAA;AAC5C,EAAMA,2BAAU,MAAM;AACpB,IAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAqB;AAClC,MAAA,IAAI,aAAA,CAAc,CAAA,EAAG,MAAM,CAAA,EAAG;AAC5B,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,KAAK,CAAA;AAC1C,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,KAAK,CAAA;AAAA,EAC5D,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACX,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,MAAA,EAAQ,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA,EAAE;AACxF","file":"chunk-QSLBGCB5.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { CalendarIcon, ChevronLeft, ChevronRight, X, Check, Search } from './Icons';\nimport { resolveDateFormat, formatDate, startOfMonth, addMonths, isSameDay, buildMonthGrid, type DateFormat } from '../utils/dateFormat';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format as formatMsg } from '../locale/messages';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\n\n// ---------- MultiCombobox -----------------------------------------------\nexport interface MultiComboboxOption<T = string> {\n value: T;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\nexport interface MultiComboboxProps<T = string> {\n value: T[];\n onChange: (v: T[]) => void;\n options: MultiComboboxOption<T>[];\n placeholder?: string;\n emptyMessage?: string;\n filter?: (option: MultiComboboxOption<T>, query: string) => boolean;\n invalid?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n maxVisibleChips?: number;\n}\n\nconst dfilter = <T,>(o: MultiComboboxOption<T>, q: string) =>\n o.label.toLowerCase().includes(q.toLowerCase());\n\nexport function MultiCombobox<T = string>({\n value, onChange, options, placeholder,\n emptyMessage, filter = dfilter,\n invalid, disabled, className, id, maxVisibleChips = 3,\n}: MultiComboboxProps<T>) {\n const locale = useLocale();\n const ph = placeholder ?? locale['common.search'];\n const empty = emptyMessage ?? locale['common.noResults'];\n const [open, setOpen] = React.useState(false);\n const [query, setQuery] = React.useState('');\n const [active, setActive] = React.useState(0);\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n const reactId = React.useId();\n const listboxId = `${id ?? reactId}-listbox`;\n // Build the lookup Set once per `value` change, not on every keystroke or\n // hover-driven re-render.\n const selSet = React.useMemo(() => new Set(value), [value]);\n\n const filtered = React.useMemo(\n () => (query ? options.filter((o) => filter(o, query)) : options),\n [options, query, filter]\n );\n\n const pos = usePopoverPosition(wrapRef, listRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 4,\n matchAnchorWidth: true,\n });\n\n // Escape is handled by the input's onKeyDown; only outside-click here.\n useDismiss({\n open,\n onDismiss: () => setOpen(false),\n refs: [wrapRef, listRef],\n closeOnEscape: false,\n });\n\n const toggle = (v: T) => {\n if (selSet.has(v)) onChange(value.filter((x) => x !== v));\n else onChange([...value, v]);\n };\n\n const onKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') { e.preventDefault(); setOpen(true); setActive((a) => Math.min(filtered.length - 1, a + 1)); }\n else if (e.key === 'ArrowUp') { e.preventDefault(); setActive((a) => Math.max(0, a - 1)); }\n else if (e.key === 'Enter') {\n e.preventDefault();\n const opt = filtered[active];\n if (opt && !opt.disabled) { toggle(opt.value); setQuery(''); }\n } else if (e.key === 'Escape') { setOpen(false); }\n else if (e.key === 'Backspace' && !query && value.length) { onChange(value.slice(0, -1)); }\n };\n\n const selectedItems = options.filter((o) => selSet.has(o.value));\n const visible = selectedItems.slice(0, maxVisibleChips);\n const overflow = selectedItems.length - visible.length;\n\n return (\n <div ref={wrapRef} className={cx('multicombo', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <div className=\"multicombo__chips\" onClick={() => inputRef.current?.focus()}>\n {visible.map((o) => (\n <span key={String(o.value)} className=\"multicombo__chip\">\n {o.label}\n <button type=\"button\" aria-label={formatMsg(locale['combobox.remove'], { label: o.label })} onClick={(e) => { e.stopPropagation(); toggle(o.value); }}><X size={12} /></button>\n </span>\n ))}\n {overflow > 0 && <span className=\"multicombo__chip multicombo__chip--more\">+{overflow}</span>}\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={listboxId}\n className=\"multicombo__input\"\n placeholder={selectedItems.length === 0 ? ph : ''}\n disabled={disabled}\n value={query}\n onFocus={() => setOpen(true)}\n onChange={(e) => { setQuery(e.target.value); setOpen(true); setActive(0); }}\n onKeyDown={onKey}\n />\n </div>\n {open && (\n <Portal>\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n aria-multiselectable=\"true\"\n className={cx('multicombo__list', 'is-floating')}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n width: pos.width,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {filtered.length === 0 ? (\n <li className=\"multicombo__empty\">{empty}</li>\n ) : (\n filtered.map((o, i) => {\n const checked = selSet.has(o.value);\n return (\n <li\n key={String(o.value)}\n role=\"option\"\n aria-selected={checked}\n aria-disabled={o.disabled}\n className={cx('multicombo__option', i === active && 'is-active', checked && 'is-selected', o.disabled && 'is-disabled')}\n onMouseEnter={() => setActive(i)}\n onMouseDown={(e) => { e.preventDefault(); if (!o.disabled) toggle(o.value); }}\n >\n <span className={cx('multicombo__check', checked && 'is-checked')} aria-hidden=\"true\">{checked ? <Check size={14} /> : null}</span>\n <span className=\"multicombo__option-body\">\n <span className=\"multicombo__option-label\">{o.label}</span>\n {o.description && <span className=\"multicombo__option-desc\">{o.description}</span>}\n </span>\n </li>\n );\n })\n )}\n </ul>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- DateRangePicker --------------------------------------------\nexport interface DateRange { from: Date | null; to: Date | null }\n\nexport interface DateRangePickerProps {\n /** Controlled value. Omit to make the picker uncontrolled (see `defaultValue`). */\n value?: DateRange;\n /**\n * In legacy mode, fires on every day click. In apply mode (when `onApply` is\n * provided), fires only at apply time so a controlled `value` can stay in sync.\n */\n onChange?: (v: DateRange) => void;\n /** Initial value when uncontrolled. Ignored if `value` is provided. */\n defaultValue?: DateRange;\n /**\n * Opt-in: enables apply mode. Day clicks only mutate an internal draft; the\n * consumer is notified when the user confirms (button \"Apply\" or a preset).\n * Closing the popover without applying reverts the draft to the last applied\n * value. Useful when each commit triggers a server-side query.\n */\n onApply?: (v: DateRange) => void;\n /** Fires on open/close transitions. */\n onOpenChange?: (open: boolean) => void;\n minDate?: Date;\n maxDate?: Date;\n presets?: Array<{ label: string; range: () => DateRange }>;\n invalid?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n /**\n * Display format. Default `'auto'` derives from `configureBrand().locale`.\n */\n format?: DateFormat;\n}\n\nconst EMPTY_RANGE: DateRange = { from: null, to: null };\n\nexport function DateRangePicker({\n value, onChange, defaultValue, onApply, onOpenChange,\n minDate, maxDate, presets,\n invalid, disabled, className, id, format = 'auto',\n}: DateRangePickerProps) {\n const locale = useLocale();\n const weekdays = locale['picker.weekdaysShort'];\n const months = locale['calendar.months'];\n const fmt = resolveDateFormat(format);\n const isControlled = value !== undefined;\n const applyMode = !!onApply;\n const initial = isControlled ? (value as DateRange) : (defaultValue ?? EMPTY_RANGE);\n const [draft, setDraft] = React.useState<DateRange>(initial);\n const [lastApplied, setLastApplied] = React.useState<DateRange>(initial);\n // Resync draft/lastApplied when controlled `value` changes externally.\n const vFrom = value?.from?.getTime() ?? 0;\n const vTo = value?.to?.getTime() ?? 0;\n React.useEffect(() => {\n if (!isControlled) return;\n setDraft(value as DateRange);\n setLastApplied(value as DateRange);\n }, [isControlled, vFrom, vTo]);\n // Legacy-controlled (no `onApply`) keeps prior semantics: `value` drives render\n // directly. Otherwise the draft is truth.\n const current: DateRange = isControlled && !applyMode ? (value as DateRange) : draft;\n // The trigger label shows the last-committed range in apply mode; in legacy it\n // tracks `current` (so live edits stay reflected, as before).\n const displayed: DateRange = applyMode ? lastApplied : current;\n const [open, setOpen] = React.useState(false);\n const [view, setView] = React.useState(() => startOfMonth(initial.from ?? new Date()));\n const [hover, setHover] = React.useState<Date | null>(null);\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n // Portaled to body (escapes overflow ancestors) with flip/clamp and\n // scroll/resize reposition; Escape and outside-click return focus to the\n // trigger (a11y) — same primitive as MultiCombobox above.\n const pos = usePopoverPosition(wrapRef, popoverRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 6,\n });\n\n const closeWithoutCommit = React.useCallback(() => {\n if (applyMode) setDraft(lastApplied);\n setOpen(false);\n onOpenChange?.(false);\n }, [applyMode, lastApplied, onOpenChange]);\n\n useDismiss({\n open,\n onDismiss: closeWithoutCommit,\n refs: [wrapRef, popoverRef],\n returnFocusRef: triggerRef,\n });\n\n // Each panel renders ~42 Date cells. Without memoization, every\n // setHover() triggered a full rebuild of both panels' grids on every\n // mouse movement over the calendar. Memo keyed on `view` only.\n const monthGrid0 = React.useMemo(() => buildMonthGrid(view, 0), [view]);\n const monthGrid1 = React.useMemo(() => buildMonthGrid(view, 1), [view]);\n\n const isDisabled = (d: Date) =>\n (minDate && d < new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate())) ||\n (maxDate && d > new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()));\n\n const inRange = (d: Date) => {\n if (!current.from) return false;\n const end = current.to ?? hover;\n if (!end) return isSameDay(d, current.from);\n const a = current.from < end ? current.from : end;\n const b = current.from < end ? end : current.from;\n return d >= new Date(a.getFullYear(), a.getMonth(), a.getDate()) &&\n d <= new Date(b.getFullYear(), b.getMonth(), b.getDate());\n };\n\n const click = (d: Date) => {\n let next: DateRange;\n if (!current.from || (current.from && current.to)) next = { from: d, to: null };\n else {\n const from = current.from;\n next = d < from ? { from: d, to: from } : { from, to: d };\n }\n if (applyMode) setDraft(next);\n else onChange?.(next);\n };\n\n // Commits a range and closes. In apply mode this fires `onApply` (and `onChange`\n // when controlled, to keep `value` in sync). In legacy mode, only preset commits\n // propagate via `onChange`; the bare \"Apply\" button stays close-only as before.\n const commit = (next: DateRange, fromPreset = false) => {\n if (applyMode) {\n onApply!(next);\n setLastApplied(next);\n setDraft(next);\n if (isControlled) onChange?.(next);\n } else if (fromPreset) {\n onChange?.(next);\n }\n setOpen(false);\n onOpenChange?.(false);\n };\n\n const clear = () => {\n if (applyMode) setDraft(EMPTY_RANGE);\n else onChange?.(EMPTY_RANGE);\n };\n\n const toggleOpen = () => {\n if (open) closeWithoutCommit();\n else { setOpen(true); onOpenChange?.(true); }\n };\n\n const label = displayed.from\n ? displayed.to\n ? `${formatDate(displayed.from, fmt)} → ${formatDate(displayed.to, fmt)}`\n : `${formatDate(displayed.from, fmt)} → …`\n : locale['picker.selectRange'];\n\n const renderMonth = (offset: number) => {\n const { month: m, cells } = offset === 0 ? monthGrid0 : monthGrid1;\n return (\n <div className=\"daterange__month\">\n <div className=\"daterange__title\">{months[m.getMonth()]} {m.getFullYear()}</div>\n <div className=\"daterange__grid\">\n {weekdays.map((w, i) => <span key={i} className=\"daterange__dow\">{w}</span>)}\n {cells.map((d, i) => {\n if (!d) return <span key={`b${i}`} />;\n const sel = (current.from && isSameDay(d, current.from)) || (current.to && isSameDay(d, current.to));\n const ir = inRange(d);\n const today = isSameDay(d, new Date());\n const off = isDisabled(d);\n return (\n <button\n key={i}\n type=\"button\"\n className={cx('daterange__day', sel && 'is-selected', ir && !sel && 'is-range', today && 'is-today', off && 'is-disabled')}\n disabled={!!off}\n onMouseEnter={() => setHover(d)}\n onClick={() => click(d)}\n >{d.getDate()}</button>\n );\n })}\n </div>\n </div>\n );\n };\n\n return (\n <div ref={wrapRef} className={cx('daterange', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <button\n ref={triggerRef}\n id={id}\n type=\"button\"\n className=\"daterange__trigger\"\n disabled={disabled}\n onClick={toggleOpen}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n >\n <span className=\"daterange__icon\" aria-hidden=\"true\"><CalendarIcon size={16} /></span>\n <span>{label}</span>\n </button>\n {open && (\n <Portal>\n <div\n ref={popoverRef}\n className={cx('daterange__popover', 'is-floating')}\n role=\"dialog\"\n onMouseLeave={() => setHover(null)}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {presets && presets.length > 0 && (\n <ul className=\"daterange__presets\">\n {presets.map((p, i) => (\n <li key={i}>\n <button type=\"button\" onClick={() => commit(p.range(), true)}>{p.label}</button>\n </li>\n ))}\n </ul>\n )}\n <div className=\"daterange__panes\">\n <div className=\"daterange__nav\">\n <button type=\"button\" onClick={() => setView((v) => addMonths(v, -1))} aria-label={locale['calendar.prevMonth']}><ChevronLeft size={16} /></button>\n <span />\n <button type=\"button\" onClick={() => setView((v) => addMonths(v, 1))} aria-label={locale['calendar.nextMonth']}><ChevronRight size={16} /></button>\n </div>\n <div className=\"daterange__months\">\n {renderMonth(0)}\n {renderMonth(1)}\n </div>\n <div className=\"daterange__actions\">\n <button type=\"button\" className=\"daterange__clear\" onClick={clear}>{locale['common.clear']}</button>\n <button type=\"button\" className=\"daterange__apply\" onClick={() => commit(current)} disabled={!current.from || !current.to}>{locale['common.apply']}</button>\n </div>\n </div>\n </div>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- Command Palette (⌘K) ----------------------------------------\nexport interface CommandItem {\n id: string;\n label: string;\n description?: string;\n group?: string;\n icon?: React.ReactNode;\n shortcut?: string;\n keywords?: string[];\n onRun: () => void;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n items: CommandItem[];\n placeholder?: string;\n emptyMessage?: string;\n hotkey?: string; // 'mod+k'\n}\n\nfunction matchesHotkey(e: KeyboardEvent, hk: string) {\n const parts = hk.toLowerCase().split('+');\n const key = parts[parts.length - 1];\n const mods = parts.slice(0, -1);\n if (e.key.toLowerCase() !== key) return false;\n for (const m of mods) {\n if (m === 'mod' && !(e.metaKey || e.ctrlKey)) return false;\n if (m === 'ctrl' && !e.ctrlKey) return false;\n if (m === 'meta' && !e.metaKey) return false;\n if (m === 'shift' && !e.shiftKey) return false;\n if (m === 'alt' && !e.altKey) return false;\n }\n return true;\n}\n\nexport function CommandPalette({\n open, onClose, items,\n placeholder,\n emptyMessage,\n}: CommandPaletteProps) {\n const locale = useLocale();\n const ph = placeholder ?? locale['picker.searchCommands'];\n const empty = emptyMessage ?? locale['common.noResults'];\n const [query, setQuery] = React.useState('');\n const [active, setActive] = React.useState(0);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n\n const filtered = React.useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return items;\n return items.filter((it) => {\n const hay = [it.label, it.description, it.group, ...(it.keywords ?? [])].join(' ').toLowerCase();\n return hay.includes(q);\n });\n }, [items, query]);\n\n // group preserve order\n const grouped = React.useMemo(() => {\n const order: string[] = [];\n const map = new Map<string, CommandItem[]>();\n for (const it of filtered) {\n const g = it.group ?? '';\n if (!map.has(g)) { map.set(g, []); order.push(g); }\n map.get(g)!.push(it);\n }\n return { order, map };\n }, [filtered]);\n\n const flat = filtered;\n\n React.useEffect(() => {\n if (open) {\n setQuery(''); setActive(0);\n requestAnimationFrame(() => inputRef.current?.focus());\n }\n }, [open]);\n\n React.useEffect(() => { setActive(0); }, [query]);\n\n React.useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n else if (e.key === 'ArrowDown') { e.preventDefault(); setActive((a) => Math.min(flat.length - 1, a + 1)); }\n else if (e.key === 'ArrowUp') { e.preventDefault(); setActive((a) => Math.max(0, a - 1)); }\n else if (e.key === 'Enter') {\n e.preventDefault();\n const it = flat[active];\n if (it) { it.onRun(); onClose(); }\n }\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open, flat, active, onClose]);\n\n React.useEffect(() => {\n const el = listRef.current?.querySelector(`[data-cmd-idx=\"${active}\"]`);\n el?.scrollIntoView({ block: 'nearest' });\n }, [active]);\n\n if (!open) return null;\n let idx = -1;\n return (\n <div className=\"cmdk__overlay\" role=\"dialog\" aria-modal=\"true\" aria-label={locale['picker.commandPalette']} onMouseDown={(e) => { if (e.target === e.currentTarget) onClose(); }}>\n <div className=\"cmdk__panel\">\n <div className=\"cmdk__searchbar\">\n <span className=\"cmdk__icon\" aria-hidden=\"true\"><Search size={16} /></span>\n <input\n ref={inputRef}\n className=\"cmdk__input\"\n value={query}\n placeholder={ph}\n onChange={(e) => setQuery(e.target.value)}\n />\n <kbd className=\"cmdk__esc\">Esc</kbd>\n </div>\n <ul ref={listRef} className=\"cmdk__list\" role=\"listbox\">\n {flat.length === 0 && <li className=\"cmdk__empty\">{empty}</li>}\n {grouped.order.map((g) => (\n <React.Fragment key={g || '__none'}>\n {g && <li className=\"cmdk__group\" aria-hidden=\"true\">{g}</li>}\n {grouped.map.get(g)!.map((it) => {\n idx++;\n const i = idx;\n return (\n <li\n key={it.id}\n role=\"option\"\n aria-selected={i === active}\n data-cmd-idx={i}\n className={cx('cmdk__item', i === active && 'is-active')}\n onMouseEnter={() => setActive(i)}\n onMouseDown={(e) => { e.preventDefault(); it.onRun(); onClose(); }}\n >\n {it.icon && <span className=\"cmdk__item-icon\" aria-hidden=\"true\">{it.icon}</span>}\n <span className=\"cmdk__item-body\">\n <span className=\"cmdk__item-label\">{it.label}</span>\n {it.description && <span className=\"cmdk__item-desc\">{it.description}</span>}\n </span>\n {it.shortcut && <kbd className=\"cmdk__kbd\">{it.shortcut}</kbd>}\n </li>\n );\n })}\n </React.Fragment>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n\nexport interface UseCommandPaletteOptions {\n hotkey?: string; // default 'mod+k'\n}\n\nexport function useCommandPalette({ hotkey = 'mod+k' }: UseCommandPaletteOptions = {}) {\n const [open, setOpen] = React.useState(false);\n React.useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (matchesHotkey(e, hotkey)) {\n e.preventDefault();\n setOpen((o) => !o);\n }\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [hotkey]);\n return { open, setOpen, close: () => setOpen(false), toggle: () => setOpen((o) => !o) };\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- import { useLocale } from './chunk-PBWX4LU2.mjs';
2
+ import { useLocale } from './chunk-QCBC4ME5.mjs';
3
3
  import { Slot } from './chunk-IEPKSPBX.mjs';
4
- import { X } from './chunk-VHYTJD6Z.mjs';
4
+ import { X } from './chunk-BJGMROKL.mjs';
5
5
  import { cx } from './chunk-IEPCH3JB.mjs';
6
6
  import * as React from 'react';
7
7
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -158,5 +158,5 @@ function ProductCard({
158
158
  }
159
159
 
160
160
  export { Alert, Badge, Card, CardBody, CardFooter, CardHeader, Chip, ChipGroup, ProductCard, Skeleton, Spinner };
161
- //# sourceMappingURL=chunk-EHJNOVHL.mjs.map
162
- //# sourceMappingURL=chunk-EHJNOVHL.mjs.map
161
+ //# sourceMappingURL=chunk-RSY4ONVR.mjs.map
162
+ //# sourceMappingURL=chunk-RSY4ONVR.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Display.tsx"],"names":["Card","CardHeader","CardBody","CardFooter","ChipGroup"],"mappings":"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","file":"chunk-EHJNOVHL.mjs","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { Slot } from './Primitives';\nimport type { Extensible } from '../utils/types';\n\nexport type CategoryAccent = 'cat-1' | 'cat-2' | 'cat-3' | 'cat-4' | 'cat-5' | 'cat-6';\nexport type CardAccent =\n | 'brand' | 'secondary' | 'success' | 'warning' | 'danger' | 'info' | 'neutral'\n | CategoryAccent;\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n interactive?: boolean;\n accent?: Extensible<CardAccent>;\n /**\n * Render as the provided single child element instead of `<div>` (e.g.\n * a clickable card as `next/link`'s `<a>`). Card classes, ref and handlers\n * are merged onto it. Default `false` (identical behavior).\n */\n asChild?: boolean;\n}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(function Card(\n { interactive, accent, className, asChild = false, ...rest },\n ref\n) {\n const cls = cx(\n 'card',\n interactive && 'card--interactive',\n accent && `card--accent-${accent}`,\n className\n );\n if (asChild) {\n return <Slot ref={ref as React.Ref<HTMLElement>} className={cls} {...rest} />;\n }\n return <div ref={ref} className={cls} {...rest} />;\n});\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardHeader({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__header', className)} {...rest} />;\n }\n);\n\nexport const CardBody = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardBody({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__body', className)} {...rest} />;\n }\n);\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardFooter({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__footer', className)} {...rest} />;\n }\n);\n\n// ---------- Badge --------------------------------------------------------\nexport type BadgeVariant =\n | 'primary' | 'accent' | 'success' | 'warning' | 'danger' | 'info' | 'neutral'\n | CategoryAccent;\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: Extensible<BadgeVariant>;\n dot?: boolean;\n /**\n * Pulsing status dot. Lets ONE component cover a \"status\" column\n * (previously you had to mix `StatusIndicator` + `Badge`, which read\n * inconsistently). Implies a dot. Respects `prefers-reduced-motion`.\n */\n pulse?: boolean;\n /**\n * Typographic register. `'data'` (default) is the quiet data-chip:\n * sentence case, tinted, no hard border — it reads as metadata in a\n * dense table. `'label'` is the brand micro-label: uppercase texture\n * for eyebrows, kickers and short tags. Opt into `'label'` only when\n * the badge is a label, not a value.\n */\n tone?: 'data' | 'label';\n /**\n * Surface intensity, orthogonal to `variant` (which is the colour\n * role). `'soft'` (default) is the tinted chip. `'solid'` is a filled\n * chip (the variant's deep tone + white text). `'outline'` is a hairline\n * chip (transparent fill, the variant's deep tone for text + border).\n * `variant=\"neutral\" appearance=\"solid\"` is the dark/ink tag. Supersedes\n * the legacy `variant=\"solid\"` / `\"solid-orange\"` magic strings (still\n * supported, not removed).\n */\n appearance?: 'soft' | 'solid' | 'outline';\n}\n\nexport function Badge({\n variant = 'neutral', dot, pulse, tone = 'data', appearance = 'soft', className, children, ...rest\n}: BadgeProps) {\n const showDot = dot || pulse;\n return (\n <span\n className={cx(\n 'badge',\n `badge--${variant}`,\n tone === 'label' && 'badge--label',\n appearance !== 'soft' && `badge--app-${appearance}`,\n className\n )}\n {...rest}\n >\n {showDot && (\n <span\n className={cx('badge__dot', pulse && 'is-pulsing')}\n aria-hidden=\"true\"\n />\n )}\n {children}\n </span>\n );\n}\n\n// ---------- Alert --------------------------------------------------------\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\nexport interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n variant?: Extensible<AlertVariant>;\n title?: React.ReactNode;\n icon?: React.ReactNode;\n onClose?: () => void;\n}\n\nexport function Alert({ variant = 'info', title, icon, onClose, className, children, ...rest }: AlertProps) {\n const t = useLocale();\n return (\n <div role=\"alert\" className={cx('alert', `alert--${variant}`, className)} {...rest}>\n {icon && <span className=\"alert__icon\" aria-hidden=\"true\">{icon}</span>}\n <div className=\"alert__body\">\n {title && <div className=\"alert__title\">{title}</div>}\n {children && <div className=\"alert__desc\">{children}</div>}\n </div>\n {onClose && (\n <button type=\"button\" className=\"alert__close\" onClick={onClose} aria-label={t['alert.close']}>\n <X size={16} />\n </button>\n )}\n </div>\n );\n}\n\n// ---------- Skeleton & Spinner ------------------------------------------\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number | string;\n height?: number | string;\n rounded?: boolean;\n}\n\nexport function Skeleton({ width, height, rounded, className, style, ...rest }: SkeletonProps) {\n return (\n <div\n className={cx('skel', className)}\n style={{ width, height, borderRadius: rounded ? 999 : undefined, ...style }}\n aria-hidden=\"true\"\n {...rest}\n />\n );\n}\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: 'sm' | 'md' | 'lg';\n inverse?: boolean;\n}\n\nexport function Spinner({ size = 'md', inverse, className, ...rest }: SpinnerProps) {\n const t = useLocale();\n return (\n <span\n role=\"status\"\n aria-label={t['spinner.loading']}\n className={cx('spinner', size === 'lg' && 'spinner--lg', inverse && 'spinner--inverse', className)}\n {...rest}\n />\n );\n}\n\n// ---------- Chip + ChipGroup --------------------------------------------\nexport interface ChipProps extends React.HTMLAttributes<HTMLSpanElement> {\n active?: boolean;\n onRemove?: () => void;\n removeLabel?: string;\n}\n\nexport function Chip({ active, onRemove, removeLabel, className, children, ...rest }: ChipProps) {\n const t = useLocale();\n return (\n <span className={cx('chip', active && 'chip--active', className)} {...rest}>\n <span>{children}</span>\n {onRemove && (\n <button\n type=\"button\"\n className=\"chip__close\"\n aria-label={removeLabel ?? t['chip.remove']}\n onClick={(e) => { e.stopPropagation(); onRemove(); }}\n >\n <X size={12} />\n </button>\n )}\n </span>\n );\n}\n\nexport const ChipGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function ChipGroup({ className, style, ...rest }, ref) {\n return (\n <div\n ref={ref}\n className={cx('chip-group', className)}\n style={{ display: 'flex', flexWrap: 'wrap', gap: 8, ...style }}\n {...rest}\n />\n );\n }\n);\n\n// ---------- ProductCard -------------------------------------------------\nexport interface ProductCardProps extends React.HTMLAttributes<HTMLElement> {\n sku?: React.ReactNode;\n name: React.ReactNode;\n price?: React.ReactNode;\n image?: string;\n imageAlt?: string;\n tag?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nexport function ProductCard({\n sku, name, price, image, imageAlt, tag, footer, className, ...rest\n}: ProductCardProps) {\n return (\n <article className={cx('product-card', className)} {...rest}>\n {tag && <span className=\"product-card__tag\">{tag}</span>}\n <div className=\"product-card__media\">\n {image ? (\n <img src={image} alt={imageAlt ?? (typeof name === 'string' ? name : '')} />\n ) : (\n <div className=\"product-card__placeholder\">{sku ? `[ ${sku} ]` : 'SKU'}</div>\n )}\n </div>\n <div className=\"product-card__body\">\n {sku && <div className=\"product-card__sku\">{sku}</div>}\n <h4 className=\"product-card__title\">{name}</h4>\n {price && <div className=\"product-card__price\">{price}</div>}\n </div>\n {footer && <div className=\"product-card__footer\">{footer}</div>}\n </article>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Display.tsx"],"names":["Card","CardHeader","CardBody","CardFooter","ChipGroup"],"mappings":"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","file":"chunk-RSY4ONVR.mjs","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { Slot } from './Primitives';\nimport type { Extensible } from '../utils/types';\n\nexport type CategoryAccent = 'cat-1' | 'cat-2' | 'cat-3' | 'cat-4' | 'cat-5' | 'cat-6';\nexport type CardAccent =\n | 'brand' | 'secondary' | 'success' | 'warning' | 'danger' | 'info' | 'neutral'\n | CategoryAccent;\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n interactive?: boolean;\n accent?: Extensible<CardAccent>;\n /**\n * Render as the provided single child element instead of `<div>` (e.g.\n * a clickable card as `next/link`'s `<a>`). Card classes, ref and handlers\n * are merged onto it. Default `false` (identical behavior).\n */\n asChild?: boolean;\n}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(function Card(\n { interactive, accent, className, asChild = false, ...rest },\n ref\n) {\n const cls = cx(\n 'card',\n interactive && 'card--interactive',\n accent && `card--accent-${accent}`,\n className\n );\n if (asChild) {\n return <Slot ref={ref as React.Ref<HTMLElement>} className={cls} {...rest} />;\n }\n return <div ref={ref} className={cls} {...rest} />;\n});\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardHeader({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__header', className)} {...rest} />;\n }\n);\n\nexport const CardBody = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardBody({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__body', className)} {...rest} />;\n }\n);\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardFooter({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__footer', className)} {...rest} />;\n }\n);\n\n// ---------- Badge --------------------------------------------------------\nexport type BadgeVariant =\n | 'primary' | 'accent' | 'success' | 'warning' | 'danger' | 'info' | 'neutral'\n | CategoryAccent;\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: Extensible<BadgeVariant>;\n dot?: boolean;\n /**\n * Pulsing status dot. Lets ONE component cover a \"status\" column\n * (previously you had to mix `StatusIndicator` + `Badge`, which read\n * inconsistently). Implies a dot. Respects `prefers-reduced-motion`.\n */\n pulse?: boolean;\n /**\n * Typographic register. `'data'` (default) is the quiet data-chip:\n * sentence case, tinted, no hard border — it reads as metadata in a\n * dense table. `'label'` is the brand micro-label: uppercase texture\n * for eyebrows, kickers and short tags. Opt into `'label'` only when\n * the badge is a label, not a value.\n */\n tone?: 'data' | 'label';\n /**\n * Surface intensity, orthogonal to `variant` (which is the colour\n * role). `'soft'` (default) is the tinted chip. `'solid'` is a filled\n * chip (the variant's deep tone + white text). `'outline'` is a hairline\n * chip (transparent fill, the variant's deep tone for text + border).\n * `variant=\"neutral\" appearance=\"solid\"` is the dark/ink tag. Supersedes\n * the legacy `variant=\"solid\"` / `\"solid-orange\"` magic strings (still\n * supported, not removed).\n */\n appearance?: 'soft' | 'solid' | 'outline';\n}\n\nexport function Badge({\n variant = 'neutral', dot, pulse, tone = 'data', appearance = 'soft', className, children, ...rest\n}: BadgeProps) {\n const showDot = dot || pulse;\n return (\n <span\n className={cx(\n 'badge',\n `badge--${variant}`,\n tone === 'label' && 'badge--label',\n appearance !== 'soft' && `badge--app-${appearance}`,\n className\n )}\n {...rest}\n >\n {showDot && (\n <span\n className={cx('badge__dot', pulse && 'is-pulsing')}\n aria-hidden=\"true\"\n />\n )}\n {children}\n </span>\n );\n}\n\n// ---------- Alert --------------------------------------------------------\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\nexport interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n variant?: Extensible<AlertVariant>;\n title?: React.ReactNode;\n icon?: React.ReactNode;\n onClose?: () => void;\n}\n\nexport function Alert({ variant = 'info', title, icon, onClose, className, children, ...rest }: AlertProps) {\n const t = useLocale();\n return (\n <div role=\"alert\" className={cx('alert', `alert--${variant}`, className)} {...rest}>\n {icon && <span className=\"alert__icon\" aria-hidden=\"true\">{icon}</span>}\n <div className=\"alert__body\">\n {title && <div className=\"alert__title\">{title}</div>}\n {children && <div className=\"alert__desc\">{children}</div>}\n </div>\n {onClose && (\n <button type=\"button\" className=\"alert__close\" onClick={onClose} aria-label={t['alert.close']}>\n <X size={16} />\n </button>\n )}\n </div>\n );\n}\n\n// ---------- Skeleton & Spinner ------------------------------------------\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number | string;\n height?: number | string;\n rounded?: boolean;\n}\n\nexport function Skeleton({ width, height, rounded, className, style, ...rest }: SkeletonProps) {\n return (\n <div\n className={cx('skel', className)}\n style={{ width, height, borderRadius: rounded ? 999 : undefined, ...style }}\n aria-hidden=\"true\"\n {...rest}\n />\n );\n}\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: 'sm' | 'md' | 'lg';\n inverse?: boolean;\n}\n\nexport function Spinner({ size = 'md', inverse, className, ...rest }: SpinnerProps) {\n const t = useLocale();\n return (\n <span\n role=\"status\"\n aria-label={t['spinner.loading']}\n className={cx('spinner', size === 'lg' && 'spinner--lg', inverse && 'spinner--inverse', className)}\n {...rest}\n />\n );\n}\n\n// ---------- Chip + ChipGroup --------------------------------------------\nexport interface ChipProps extends React.HTMLAttributes<HTMLSpanElement> {\n active?: boolean;\n onRemove?: () => void;\n removeLabel?: string;\n}\n\nexport function Chip({ active, onRemove, removeLabel, className, children, ...rest }: ChipProps) {\n const t = useLocale();\n return (\n <span className={cx('chip', active && 'chip--active', className)} {...rest}>\n <span>{children}</span>\n {onRemove && (\n <button\n type=\"button\"\n className=\"chip__close\"\n aria-label={removeLabel ?? t['chip.remove']}\n onClick={(e) => { e.stopPropagation(); onRemove(); }}\n >\n <X size={12} />\n </button>\n )}\n </span>\n );\n}\n\nexport const ChipGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function ChipGroup({ className, style, ...rest }, ref) {\n return (\n <div\n ref={ref}\n className={cx('chip-group', className)}\n style={{ display: 'flex', flexWrap: 'wrap', gap: 8, ...style }}\n {...rest}\n />\n );\n }\n);\n\n// ---------- ProductCard -------------------------------------------------\nexport interface ProductCardProps extends React.HTMLAttributes<HTMLElement> {\n sku?: React.ReactNode;\n name: React.ReactNode;\n price?: React.ReactNode;\n image?: string;\n imageAlt?: string;\n tag?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nexport function ProductCard({\n sku, name, price, image, imageAlt, tag, footer, className, ...rest\n}: ProductCardProps) {\n return (\n <article className={cx('product-card', className)} {...rest}>\n {tag && <span className=\"product-card__tag\">{tag}</span>}\n <div className=\"product-card__media\">\n {image ? (\n <img src={image} alt={imageAlt ?? (typeof name === 'string' ? name : '')} />\n ) : (\n <div className=\"product-card__placeholder\">{sku ? `[ ${sku} ]` : 'SKU'}</div>\n )}\n </div>\n <div className=\"product-card__body\">\n {sku && <div className=\"product-card__sku\">{sku}</div>}\n <h4 className=\"product-card__title\">{name}</h4>\n {price && <div className=\"product-card__price\">{price}</div>}\n </div>\n {footer && <div className=\"product-card__footer\">{footer}</div>}\n </article>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { Check } from './chunk-VHYTJD6Z.mjs';
2
+ import { Check } from './chunk-BJGMROKL.mjs';
3
3
  import { cx } from './chunk-IEPCH3JB.mjs';
4
4
  import * as React from 'react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -139,5 +139,5 @@ var InputGroupAddon = React.forwardRef(
139
139
  );
140
140
 
141
141
  export { Checkbox, FormField, Input, InputGroup, InputGroupAddon, Label, Radio, Select, Switch, Textarea };
142
- //# sourceMappingURL=chunk-TS3WC3G4.mjs.map
143
- //# sourceMappingURL=chunk-TS3WC3G4.mjs.map
142
+ //# sourceMappingURL=chunk-SUQLII3F.mjs.map
143
+ //# sourceMappingURL=chunk-SUQLII3F.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Form.tsx"],"names":["Input","Textarea","Select","Checkbox","Radio","Switch","Label","InputGroup","InputGroupAddon"],"mappings":"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","file":"chunk-TS3WC3G4.mjs","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Check as CheckIcon } from './Icons';\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n invalid?: boolean;\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(function Input(\n { invalid, iconLeft, iconRight, className, ...rest },\n ref\n) {\n if (iconLeft || iconRight) {\n return (\n <div className={cx('input-wrap', invalid && 'is-invalid', className)}>\n {iconLeft && <span className=\"input-wrap__icon input-wrap__icon--left\" aria-hidden=\"true\">{iconLeft}</span>}\n <input\n ref={ref}\n className={cx('input', !!iconLeft && 'input--has-left', !!iconRight && 'input--has-right')}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n {iconRight && <span className=\"input-wrap__icon input-wrap__icon--right\" aria-hidden=\"true\">{iconRight}</span>}\n </div>\n );\n }\n return (\n <input\n ref={ref}\n className={cx('input', invalid && 'is-invalid', className)}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n );\n});\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n invalid?: boolean;\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n { invalid, className, ...rest },\n ref\n) {\n return (\n <textarea\n ref={ref}\n className={cx('textarea', invalid && 'is-invalid', className)}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n );\n});\n\nexport interface SelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {\n invalid?: boolean;\n}\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(function Select(\n { invalid, className, children, ...rest },\n ref\n) {\n return (\n <select\n ref={ref}\n className={cx('select', invalid && 'is-invalid', className)}\n aria-invalid={invalid || undefined}\n {...rest}\n >\n {children}\n </select>\n );\n});\n\nexport interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n /** Optional label rendered next to the checkbox. */\n children?: React.ReactNode;\n invalid?: boolean;\n /** Tri-state mark (e.g. select-all partially checked). HTML attribute is JS-only. */\n indeterminate?: boolean;\n}\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n { className, children, invalid, indeterminate, ...rest },\n ref\n) {\n // Bridge the forwarded ref with our internal ref so we can set the\n // indeterminate property (HTML doesn't expose it as an attribute).\n const innerRef = React.useRef<HTMLInputElement | null>(null);\n React.useEffect(() => {\n if (innerRef.current) innerRef.current.indeterminate = !!indeterminate;\n }, [indeterminate]);\n\n const setRef = (node: HTMLInputElement | null) => {\n innerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n };\n\n return (\n <label className={cx('check', invalid && 'is-invalid', className)}>\n <input\n ref={setRef}\n type=\"checkbox\"\n aria-invalid={invalid || undefined}\n aria-checked={indeterminate ? 'mixed' : undefined}\n {...rest}\n />\n <span className=\"check__box\" aria-hidden=\"true\">\n <CheckIcon size={14} strokeWidth={3} />\n </span>\n {children != null && <span>{children}</span>}\n </label>\n );\n});\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n /** Optional label rendered next to the radio. */\n children?: React.ReactNode;\n}\n\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(function Radio(\n { className, children, ...rest },\n ref\n) {\n return (\n <label className={cx('check', 'check--radio', className)}>\n <input ref={ref} type=\"radio\" {...rest} />\n <span className=\"check__box\" aria-hidden=\"true\" />\n {children != null && <span>{children}</span>}\n </label>\n );\n});\n\nexport interface SwitchProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n /** Optional label rendered next to the switch. */\n children?: React.ReactNode;\n invalid?: boolean;\n}\n\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n { className, children, invalid, ...rest },\n ref\n) {\n return (\n <label className={cx('switch', invalid && 'is-invalid', className)}>\n {/* role=\"switch\" overrides the native checkbox role so screen readers\n announce \"on/off\" semantics instead of \"checked/unchecked\". */}\n <input\n ref={ref}\n type=\"checkbox\"\n role=\"switch\"\n aria-invalid={invalid || undefined}\n {...rest}\n />\n <span className=\"switch__track\" aria-hidden=\"true\" />\n {children != null && <span>{children}</span>}\n </label>\n );\n});\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean;\n}\n\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(function Label(\n { required, className, children, ...rest },\n ref\n) {\n return (\n <label ref={ref} className={cx('label', className)} {...rest}>\n {children}\n {required && <span aria-label=\"requerido\" style={{ color: 'var(--color-danger)' }}> *</span>}\n </label>\n );\n});\n\nexport interface FormFieldProps {\n label?: React.ReactNode;\n hint?: React.ReactNode;\n error?: React.ReactNode;\n required?: boolean;\n /** Override the auto-generated id (e.g. when the input is rendered outside FormField). */\n htmlFor?: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FormField({ label, hint, error, required, htmlFor, children, className }: FormFieldProps) {\n const reactId = React.useId();\n const id = htmlFor ?? reactId;\n const hintId = hint ? `${id}-hint` : undefined;\n const errorId = error ? `${id}-error` : undefined;\n const describedBy = [hintId, errorId].filter(Boolean).join(' ') || undefined;\n\n // Inject id + aria-describedby into the single child element so screen readers\n // announce the helper/error text. Consumer-provided values win.\n const child = React.isValidElement(children)\n ? React.cloneElement(\n children as React.ReactElement<{ id?: string; 'aria-describedby'?: string }>,\n {\n id: (children.props as { id?: string }).id ?? id,\n 'aria-describedby':\n (children.props as { 'aria-describedby'?: string })['aria-describedby'] ?? describedBy,\n }\n )\n : children;\n\n return (\n <div className={cx('form-field', className)}>\n {label && (\n <Label htmlFor={id} required={required}>\n {label}\n </Label>\n )}\n {child}\n {hint && !error && <div id={hintId} className=\"form-field__hint\">{hint}</div>}\n {error && <div id={errorId} className=\"form-field__error\" role=\"alert\">{error}</div>}\n </div>\n );\n}\n\n// ---------- InputGroup --------------------------------------------------\n// Permite combinar un Input con addons a la izquierda/derecha.\n// Uso: <InputGroup><InputGroupAddon>$</InputGroupAddon><Input /></InputGroup>\nexport const InputGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function InputGroup({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('input-group', className)} {...rest} />;\n }\n);\n\nexport const InputGroupAddon = React.forwardRef<HTMLSpanElement, React.HTMLAttributes<HTMLSpanElement>>(\n function InputGroupAddon({ className, ...rest }, ref) {\n return <span ref={ref} className={cx('input-group__addon', className)} {...rest} />;\n }\n);\n"]}
1
+ {"version":3,"sources":["../src/components/Form.tsx"],"names":["Input","Textarea","Select","Checkbox","Radio","Switch","Label","InputGroup","InputGroupAddon"],"mappings":"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","file":"chunk-SUQLII3F.mjs","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Check as CheckIcon } from './Icons';\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n invalid?: boolean;\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(function Input(\n { invalid, iconLeft, iconRight, className, ...rest },\n ref\n) {\n if (iconLeft || iconRight) {\n return (\n <div className={cx('input-wrap', invalid && 'is-invalid', className)}>\n {iconLeft && <span className=\"input-wrap__icon input-wrap__icon--left\" aria-hidden=\"true\">{iconLeft}</span>}\n <input\n ref={ref}\n className={cx('input', !!iconLeft && 'input--has-left', !!iconRight && 'input--has-right')}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n {iconRight && <span className=\"input-wrap__icon input-wrap__icon--right\" aria-hidden=\"true\">{iconRight}</span>}\n </div>\n );\n }\n return (\n <input\n ref={ref}\n className={cx('input', invalid && 'is-invalid', className)}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n );\n});\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n invalid?: boolean;\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n { invalid, className, ...rest },\n ref\n) {\n return (\n <textarea\n ref={ref}\n className={cx('textarea', invalid && 'is-invalid', className)}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n );\n});\n\nexport interface SelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {\n invalid?: boolean;\n}\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(function Select(\n { invalid, className, children, ...rest },\n ref\n) {\n return (\n <select\n ref={ref}\n className={cx('select', invalid && 'is-invalid', className)}\n aria-invalid={invalid || undefined}\n {...rest}\n >\n {children}\n </select>\n );\n});\n\nexport interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n /** Optional label rendered next to the checkbox. */\n children?: React.ReactNode;\n invalid?: boolean;\n /** Tri-state mark (e.g. select-all partially checked). HTML attribute is JS-only. */\n indeterminate?: boolean;\n}\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n { className, children, invalid, indeterminate, ...rest },\n ref\n) {\n // Bridge the forwarded ref with our internal ref so we can set the\n // indeterminate property (HTML doesn't expose it as an attribute).\n const innerRef = React.useRef<HTMLInputElement | null>(null);\n React.useEffect(() => {\n if (innerRef.current) innerRef.current.indeterminate = !!indeterminate;\n }, [indeterminate]);\n\n const setRef = (node: HTMLInputElement | null) => {\n innerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n };\n\n return (\n <label className={cx('check', invalid && 'is-invalid', className)}>\n <input\n ref={setRef}\n type=\"checkbox\"\n aria-invalid={invalid || undefined}\n aria-checked={indeterminate ? 'mixed' : undefined}\n {...rest}\n />\n <span className=\"check__box\" aria-hidden=\"true\">\n <CheckIcon size={14} strokeWidth={3} />\n </span>\n {children != null && <span>{children}</span>}\n </label>\n );\n});\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n /** Optional label rendered next to the radio. */\n children?: React.ReactNode;\n}\n\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(function Radio(\n { className, children, ...rest },\n ref\n) {\n return (\n <label className={cx('check', 'check--radio', className)}>\n <input ref={ref} type=\"radio\" {...rest} />\n <span className=\"check__box\" aria-hidden=\"true\" />\n {children != null && <span>{children}</span>}\n </label>\n );\n});\n\nexport interface SwitchProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n /** Optional label rendered next to the switch. */\n children?: React.ReactNode;\n invalid?: boolean;\n}\n\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n { className, children, invalid, ...rest },\n ref\n) {\n return (\n <label className={cx('switch', invalid && 'is-invalid', className)}>\n {/* role=\"switch\" overrides the native checkbox role so screen readers\n announce \"on/off\" semantics instead of \"checked/unchecked\". */}\n <input\n ref={ref}\n type=\"checkbox\"\n role=\"switch\"\n aria-invalid={invalid || undefined}\n {...rest}\n />\n <span className=\"switch__track\" aria-hidden=\"true\" />\n {children != null && <span>{children}</span>}\n </label>\n );\n});\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean;\n}\n\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(function Label(\n { required, className, children, ...rest },\n ref\n) {\n return (\n <label ref={ref} className={cx('label', className)} {...rest}>\n {children}\n {required && <span aria-label=\"requerido\" style={{ color: 'var(--color-danger)' }}> *</span>}\n </label>\n );\n});\n\nexport interface FormFieldProps {\n label?: React.ReactNode;\n hint?: React.ReactNode;\n error?: React.ReactNode;\n required?: boolean;\n /** Override the auto-generated id (e.g. when the input is rendered outside FormField). */\n htmlFor?: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FormField({ label, hint, error, required, htmlFor, children, className }: FormFieldProps) {\n const reactId = React.useId();\n const id = htmlFor ?? reactId;\n const hintId = hint ? `${id}-hint` : undefined;\n const errorId = error ? `${id}-error` : undefined;\n const describedBy = [hintId, errorId].filter(Boolean).join(' ') || undefined;\n\n // Inject id + aria-describedby into the single child element so screen readers\n // announce the helper/error text. Consumer-provided values win.\n const child = React.isValidElement(children)\n ? React.cloneElement(\n children as React.ReactElement<{ id?: string; 'aria-describedby'?: string }>,\n {\n id: (children.props as { id?: string }).id ?? id,\n 'aria-describedby':\n (children.props as { 'aria-describedby'?: string })['aria-describedby'] ?? describedBy,\n }\n )\n : children;\n\n return (\n <div className={cx('form-field', className)}>\n {label && (\n <Label htmlFor={id} required={required}>\n {label}\n </Label>\n )}\n {child}\n {hint && !error && <div id={hintId} className=\"form-field__hint\">{hint}</div>}\n {error && <div id={errorId} className=\"form-field__error\" role=\"alert\">{error}</div>}\n </div>\n );\n}\n\n// ---------- InputGroup --------------------------------------------------\n// Permite combinar un Input con addons a la izquierda/derecha.\n// Uso: <InputGroup><InputGroupAddon>$</InputGroupAddon><Input /></InputGroup>\nexport const InputGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function InputGroup({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('input-group', className)} {...rest} />;\n }\n);\n\nexport const InputGroupAddon = React.forwardRef<HTMLSpanElement, React.HTMLAttributes<HTMLSpanElement>>(\n function InputGroupAddon({ className, ...rest }, ref) {\n return <span ref={ref} className={cx('input-group__addon', className)} {...rest} />;\n }\n);\n"]}