@mieweb/ui 0.7.3 → 0.8.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. package/README.md +45 -24
  2. package/agent/README.md +20 -0
  3. package/agent/init-agent.mjs +61 -0
  4. package/agent/mieweb-ui.instructions.md +169 -0
  5. package/dist/ag-grid.cjs +11 -0
  6. package/dist/ag-grid.cjs.map +1 -1
  7. package/dist/ag-grid.d.cts +4 -0
  8. package/dist/ag-grid.d.ts +4 -0
  9. package/dist/ag-grid.js +11 -0
  10. package/dist/ag-grid.js.map +1 -1
  11. package/dist/brands/index.cjs +12 -12
  12. package/dist/brands/index.js +3 -3
  13. package/dist/{chunk-EGWWTIWS.js → chunk-2AB4PQYL.js} +126 -96
  14. package/dist/chunk-2AB4PQYL.js.map +1 -0
  15. package/dist/{chunk-NQ2D2V6O.cjs → chunk-2PEVRI26.cjs} +37 -37
  16. package/dist/{chunk-NQ2D2V6O.cjs.map → chunk-2PEVRI26.cjs.map} +1 -1
  17. package/dist/{chunk-6J7UGYT5.cjs → chunk-2SSAAE3I.cjs} +49 -9
  18. package/dist/chunk-2SSAAE3I.cjs.map +1 -0
  19. package/dist/chunk-3IMM2PM4.js +259 -0
  20. package/dist/chunk-3IMM2PM4.js.map +1 -0
  21. package/dist/{chunk-SYIFEJSF.cjs → chunk-3RADKLLD.cjs} +13 -13
  22. package/dist/{chunk-SYIFEJSF.cjs.map → chunk-3RADKLLD.cjs.map} +1 -1
  23. package/dist/chunk-3SHLOF4V.cjs +128 -0
  24. package/dist/chunk-3SHLOF4V.cjs.map +1 -0
  25. package/dist/chunk-3TXOFAXP.cjs +139 -0
  26. package/dist/chunk-3TXOFAXP.cjs.map +1 -0
  27. package/dist/{chunk-LJDBD2DD.cjs → chunk-5BPUZK2B.cjs} +386 -4
  28. package/dist/chunk-5BPUZK2B.cjs.map +1 -0
  29. package/dist/chunk-5JZIDILK.cjs +164 -0
  30. package/dist/chunk-5JZIDILK.cjs.map +1 -0
  31. package/dist/chunk-5MXO6PEV.cjs +78 -0
  32. package/dist/chunk-5MXO6PEV.cjs.map +1 -0
  33. package/dist/chunk-5QZ73PZC.js +62 -0
  34. package/dist/chunk-5QZ73PZC.js.map +1 -0
  35. package/dist/chunk-6GKX36JX.js +269 -0
  36. package/dist/chunk-6GKX36JX.js.map +1 -0
  37. package/dist/chunk-6NZXWKUE.js +3 -0
  38. package/dist/chunk-6NZXWKUE.js.map +1 -0
  39. package/dist/chunk-6SCQ7FKT.js +115 -0
  40. package/dist/chunk-6SCQ7FKT.js.map +1 -0
  41. package/dist/{chunk-KFLDXJEE.js → chunk-753Z3NXL.js} +46 -15
  42. package/dist/chunk-753Z3NXL.js.map +1 -0
  43. package/dist/{chunk-S3MKIDYG.cjs → chunk-7AECNMYV.cjs} +46 -15
  44. package/dist/chunk-7AECNMYV.cjs.map +1 -0
  45. package/dist/chunk-7IKLGH3Z.cjs +92 -0
  46. package/dist/chunk-7IKLGH3Z.cjs.map +1 -0
  47. package/dist/chunk-7RV6CAP6.cjs +106 -0
  48. package/dist/chunk-7RV6CAP6.cjs.map +1 -0
  49. package/dist/chunk-AHHFFXJR.cjs +230 -0
  50. package/dist/chunk-AHHFFXJR.cjs.map +1 -0
  51. package/dist/{chunk-HIDV32ZX.js → chunk-AHUYW673.js} +168 -9
  52. package/dist/chunk-AHUYW673.js.map +1 -0
  53. package/dist/{chunk-MYFZYUPR.cjs → chunk-AOHJILLU.cjs} +38 -3
  54. package/dist/chunk-AOHJILLU.cjs.map +1 -0
  55. package/dist/{chunk-DLBV42JD.js → chunk-ATOWMVZH.js} +157 -40
  56. package/dist/chunk-ATOWMVZH.js.map +1 -0
  57. package/dist/{chunk-WUNWHOLA.cjs → chunk-BSDBI6H7.cjs} +116 -26
  58. package/dist/chunk-BSDBI6H7.cjs.map +1 -0
  59. package/dist/chunk-CG4ZKJLE.js +84 -0
  60. package/dist/chunk-CG4ZKJLE.js.map +1 -0
  61. package/dist/{chunk-4PIW3Y5M.js → chunk-DJ4JPFWI.js} +3 -3
  62. package/dist/{chunk-4PIW3Y5M.js.map → chunk-DJ4JPFWI.js.map} +1 -1
  63. package/dist/{chunk-Z4PECE5S.js → chunk-DX64KLSN.js} +2 -2
  64. package/dist/{chunk-Z4PECE5S.js.map → chunk-DX64KLSN.js.map} +1 -1
  65. package/dist/{chunk-FDV7EQWH.js → chunk-EK6DYGFG.js} +3 -3
  66. package/dist/{chunk-FDV7EQWH.js.map → chunk-EK6DYGFG.js.map} +1 -1
  67. package/dist/{chunk-QUUBTNMH.js → chunk-EPSB4WTL.js} +45 -15
  68. package/dist/chunk-EPSB4WTL.js.map +1 -0
  69. package/dist/{chunk-KRGKPUJH.js → chunk-F2S6NV5N.js} +8 -8
  70. package/dist/{chunk-KRGKPUJH.js.map → chunk-F2S6NV5N.js.map} +1 -1
  71. package/dist/chunk-F57VRLKP.js +708 -0
  72. package/dist/chunk-F57VRLKP.js.map +1 -0
  73. package/dist/{chunk-26DPQUSB.cjs → chunk-G52YRAJC.cjs} +4 -4
  74. package/dist/{chunk-26DPQUSB.cjs.map → chunk-G52YRAJC.cjs.map} +1 -1
  75. package/dist/{chunk-5IDYOJHO.cjs → chunk-G7EQ3JPX.cjs} +45 -15
  76. package/dist/chunk-G7EQ3JPX.cjs.map +1 -0
  77. package/dist/{chunk-FKLUSYFP.cjs → chunk-GQVL2JKQ.cjs} +4 -4
  78. package/dist/{chunk-FKLUSYFP.cjs.map → chunk-GQVL2JKQ.cjs.map} +1 -1
  79. package/dist/{chunk-3D4ITDLO.js → chunk-GXODR6V4.js} +3 -3
  80. package/dist/{chunk-3D4ITDLO.js.map → chunk-GXODR6V4.js.map} +1 -1
  81. package/dist/{chunk-AFGADE3B.js → chunk-H3YO5GBM.js} +117 -27
  82. package/dist/chunk-H3YO5GBM.js.map +1 -0
  83. package/dist/chunk-HK3AMH3Q.cjs +151 -0
  84. package/dist/chunk-HK3AMH3Q.cjs.map +1 -0
  85. package/dist/chunk-HQ3XPCHG.js +114 -0
  86. package/dist/chunk-HQ3XPCHG.js.map +1 -0
  87. package/dist/chunk-I44YNYI6.cjs +4 -0
  88. package/dist/chunk-I44YNYI6.cjs.map +1 -0
  89. package/dist/chunk-JHZW3Y62.js +142 -0
  90. package/dist/chunk-JHZW3Y62.js.map +1 -0
  91. package/dist/{chunk-FTRGZOVJ.js → chunk-JQQABHDN.js} +3 -3
  92. package/dist/{chunk-FTRGZOVJ.js.map → chunk-JQQABHDN.js.map} +1 -1
  93. package/dist/chunk-JR4QIU54.cjs +291 -0
  94. package/dist/chunk-JR4QIU54.cjs.map +1 -0
  95. package/dist/{chunk-JDHIBJ5K.cjs → chunk-JWTCEWQ4.cjs} +2 -2
  96. package/dist/{chunk-JDHIBJ5K.cjs.map → chunk-JWTCEWQ4.cjs.map} +1 -1
  97. package/dist/{chunk-ZBI52NP2.cjs → chunk-K5GQPTTA.cjs} +158 -41
  98. package/dist/chunk-K5GQPTTA.cjs.map +1 -0
  99. package/dist/chunk-KFEN2SRZ.js +208 -0
  100. package/dist/chunk-KFEN2SRZ.js.map +1 -0
  101. package/dist/chunk-L6MDULYB.js +87 -0
  102. package/dist/chunk-L6MDULYB.js.map +1 -0
  103. package/dist/{chunk-RYQ3S3KO.cjs → chunk-LDCFNWJC.cjs} +5 -5
  104. package/dist/{chunk-RYQ3S3KO.cjs.map → chunk-LDCFNWJC.cjs.map} +1 -1
  105. package/dist/{chunk-LC7YHZXM.js → chunk-LDQ2T27A.js} +5 -5
  106. package/dist/{chunk-LC7YHZXM.js.map → chunk-LDQ2T27A.js.map} +1 -1
  107. package/dist/chunk-N5O47VGS.cjs +109 -0
  108. package/dist/chunk-N5O47VGS.cjs.map +1 -0
  109. package/dist/chunk-NGSDBWKA.cjs +84 -0
  110. package/dist/chunk-NGSDBWKA.cjs.map +1 -0
  111. package/dist/chunk-NMBYU7D7.cjs +31 -0
  112. package/dist/chunk-NMBYU7D7.cjs.map +1 -0
  113. package/dist/{chunk-SPWVKDGC.cjs → chunk-QMKYJ4AT.cjs} +4 -4
  114. package/dist/{chunk-SPWVKDGC.cjs.map → chunk-QMKYJ4AT.cjs.map} +1 -1
  115. package/dist/{chunk-RBS3GHDZ.cjs → chunk-QOJ4V7YX.cjs} +170 -10
  116. package/dist/chunk-QOJ4V7YX.cjs.map +1 -0
  117. package/dist/chunk-RUGHNFQG.js +28 -0
  118. package/dist/chunk-RUGHNFQG.js.map +1 -0
  119. package/dist/{chunk-P6L74SKG.js → chunk-SVZ4MQVQ.js} +48 -8
  120. package/dist/chunk-SVZ4MQVQ.js.map +1 -0
  121. package/dist/{chunk-URHXR5SC.cjs → chunk-TQZPYDUL.cjs} +7 -7
  122. package/dist/{chunk-URHXR5SC.cjs.map → chunk-TQZPYDUL.cjs.map} +1 -1
  123. package/dist/{chunk-MO65V64I.js → chunk-TXRQQMG5.js} +2 -2
  124. package/dist/{chunk-MO65V64I.js.map → chunk-TXRQQMG5.js.map} +1 -1
  125. package/dist/{chunk-EKRT7K2K.js → chunk-UJS3JTVT.js} +3 -3
  126. package/dist/{chunk-EKRT7K2K.js.map → chunk-UJS3JTVT.js.map} +1 -1
  127. package/dist/{chunk-6MMIWE7H.js → chunk-VQ5HJCTP.js} +386 -4
  128. package/dist/chunk-VQ5HJCTP.js.map +1 -0
  129. package/dist/chunk-WBGUYSWY.js +90 -0
  130. package/dist/chunk-WBGUYSWY.js.map +1 -0
  131. package/dist/{chunk-LJBWCUKP.cjs → chunk-WIYQI35R.cjs} +2 -2
  132. package/dist/{chunk-LJBWCUKP.cjs.map → chunk-WIYQI35R.cjs.map} +1 -1
  133. package/dist/chunk-WKSUL2ZN.js +56 -0
  134. package/dist/chunk-WKSUL2ZN.js.map +1 -0
  135. package/dist/{chunk-BOOJDRJO.js → chunk-WSNMQQ4P.js} +38 -3
  136. package/dist/chunk-WSNMQQ4P.js.map +1 -0
  137. package/dist/chunk-X5ZPYYMS.js +105 -0
  138. package/dist/chunk-X5ZPYYMS.js.map +1 -0
  139. package/dist/{chunk-XB54G7WS.cjs → chunk-XJTFZLWH.cjs} +2 -86
  140. package/dist/chunk-XJTFZLWH.cjs.map +1 -0
  141. package/dist/{chunk-GTHNWP4P.js → chunk-XUVEF2RQ.js} +4 -87
  142. package/dist/chunk-XUVEF2RQ.js.map +1 -0
  143. package/dist/chunk-Y6YSJPVC.js +129 -0
  144. package/dist/chunk-Y6YSJPVC.js.map +1 -0
  145. package/dist/{chunk-OAHORW4N.cjs → chunk-YRLCR76L.cjs} +129 -99
  146. package/dist/chunk-YRLCR76L.cjs.map +1 -0
  147. package/dist/chunk-YVIH26FG.cjs +736 -0
  148. package/dist/chunk-YVIH26FG.cjs.map +1 -0
  149. package/dist/chunk-Z5S5JEJD.cjs +286 -0
  150. package/dist/chunk-Z5S5JEJD.cjs.map +1 -0
  151. package/dist/chunk-ZO4L6C2Y.cjs +137 -0
  152. package/dist/chunk-ZO4L6C2Y.cjs.map +1 -0
  153. package/dist/{collabKit-QZL4P5T5.js → collabKit-A643VH2I.js} +7 -3
  154. package/dist/collabKit-A643VH2I.js.map +1 -0
  155. package/dist/{collabKit-UF7E6V3N.cjs → collabKit-Q4A36LDA.cjs} +7 -3
  156. package/dist/collabKit-Q4A36LDA.cjs.map +1 -0
  157. package/dist/components/Accordion/index.cjs +13 -0
  158. package/dist/components/Accordion/index.cjs.map +1 -0
  159. package/dist/components/Accordion/index.d.cts +50 -0
  160. package/dist/components/Accordion/index.d.ts +50 -0
  161. package/dist/components/Accordion/index.js +4 -0
  162. package/dist/components/Accordion/index.js.map +1 -0
  163. package/dist/components/Alert/index.d.cts +1 -1
  164. package/dist/components/Alert/index.d.ts +1 -1
  165. package/dist/components/Autocomplete/index.cjs +5 -4
  166. package/dist/components/Autocomplete/index.d.cts +20 -3
  167. package/dist/components/Autocomplete/index.d.ts +20 -3
  168. package/dist/components/Autocomplete/index.js +4 -3
  169. package/dist/components/Badge/index.d.cts +1 -1
  170. package/dist/components/Badge/index.d.ts +1 -1
  171. package/dist/components/Card/index.d.cts +1 -1
  172. package/dist/components/Card/index.d.ts +1 -1
  173. package/dist/components/Checkbox/index.cjs +5 -4
  174. package/dist/components/Checkbox/index.d.cts +9 -1
  175. package/dist/components/Checkbox/index.d.ts +9 -1
  176. package/dist/components/Checkbox/index.js +2 -1
  177. package/dist/components/ClampedText/index.cjs +13 -0
  178. package/dist/components/ClampedText/index.cjs.map +1 -0
  179. package/dist/components/ClampedText/index.d.cts +33 -0
  180. package/dist/components/ClampedText/index.d.ts +33 -0
  181. package/dist/components/ClampedText/index.js +4 -0
  182. package/dist/components/ClampedText/index.js.map +1 -0
  183. package/dist/components/CopyButton/index.cjs +13 -0
  184. package/dist/components/CopyButton/index.cjs.map +1 -0
  185. package/dist/components/CopyButton/index.d.cts +29 -0
  186. package/dist/components/CopyButton/index.d.ts +29 -0
  187. package/dist/components/CopyButton/index.js +4 -0
  188. package/dist/components/CopyButton/index.js.map +1 -0
  189. package/dist/components/CountryCodeDropdown/index.cjs +5 -5
  190. package/dist/components/CountryCodeDropdown/index.js +2 -2
  191. package/dist/components/CustomizableDashboard/index.cjs +43 -0
  192. package/dist/components/CustomizableDashboard/index.cjs.map +1 -0
  193. package/dist/components/CustomizableDashboard/index.d.cts +195 -0
  194. package/dist/components/CustomizableDashboard/index.d.ts +195 -0
  195. package/dist/components/CustomizableDashboard/index.js +10 -0
  196. package/dist/components/CustomizableDashboard/index.js.map +1 -0
  197. package/dist/components/DateInput/index.cjs +5 -4
  198. package/dist/components/DateInput/index.d.cts +1 -0
  199. package/dist/components/DateInput/index.d.ts +1 -0
  200. package/dist/components/DateInput/index.js +4 -3
  201. package/dist/components/Dropdown/index.cjs +14 -9
  202. package/dist/components/Dropdown/index.d.cts +38 -2
  203. package/dist/components/Dropdown/index.d.ts +38 -2
  204. package/dist/components/Dropdown/index.js +4 -3
  205. package/dist/components/FilterSummaryBar/index.cjs +13 -0
  206. package/dist/components/FilterSummaryBar/index.cjs.map +1 -0
  207. package/dist/components/FilterSummaryBar/index.d.cts +53 -0
  208. package/dist/components/FilterSummaryBar/index.d.ts +53 -0
  209. package/dist/components/FilterSummaryBar/index.js +4 -0
  210. package/dist/components/FilterSummaryBar/index.js.map +1 -0
  211. package/dist/components/FreshnessBadge/index.cjs +25 -0
  212. package/dist/components/FreshnessBadge/index.cjs.map +1 -0
  213. package/dist/components/FreshnessBadge/index.d.cts +49 -0
  214. package/dist/components/FreshnessBadge/index.d.ts +49 -0
  215. package/dist/components/FreshnessBadge/index.js +4 -0
  216. package/dist/components/FreshnessBadge/index.js.map +1 -0
  217. package/dist/components/GlossaryTooltip/index.cjs +15 -0
  218. package/dist/components/GlossaryTooltip/index.cjs.map +1 -0
  219. package/dist/components/GlossaryTooltip/index.d.cts +64 -0
  220. package/dist/components/GlossaryTooltip/index.d.ts +64 -0
  221. package/dist/components/GlossaryTooltip/index.js +6 -0
  222. package/dist/components/GlossaryTooltip/index.js.map +1 -0
  223. package/dist/components/Input/index.cjs +20 -3
  224. package/dist/components/Input/index.d.cts +37 -2
  225. package/dist/components/Input/index.d.ts +37 -2
  226. package/dist/components/Input/index.js +2 -1
  227. package/dist/components/KeyboardShortcutsOverlay/index.cjs +21 -0
  228. package/dist/components/KeyboardShortcutsOverlay/index.cjs.map +1 -0
  229. package/dist/components/KeyboardShortcutsOverlay/index.d.cts +54 -0
  230. package/dist/components/KeyboardShortcutsOverlay/index.d.ts +54 -0
  231. package/dist/components/KeyboardShortcutsOverlay/index.js +8 -0
  232. package/dist/components/KeyboardShortcutsOverlay/index.js.map +1 -0
  233. package/dist/components/Markdown/index.cjs +10 -10
  234. package/dist/components/Markdown/index.js +2 -2
  235. package/dist/components/MediaEditor/index.cjs +11 -10
  236. package/dist/components/MediaEditor/index.js +6 -5
  237. package/dist/components/PhoneInput/index.cjs +5 -4
  238. package/dist/components/PhoneInput/index.js +3 -2
  239. package/dist/components/Progress/index.d.cts +1 -1
  240. package/dist/components/Progress/index.d.ts +1 -1
  241. package/dist/components/Radio/index.cjs +5 -4
  242. package/dist/components/Radio/index.d.cts +9 -1
  243. package/dist/components/Radio/index.d.ts +9 -1
  244. package/dist/components/Radio/index.js +2 -1
  245. package/dist/components/ReadingProgressBar/index.cjs +13 -0
  246. package/dist/components/ReadingProgressBar/index.cjs.map +1 -0
  247. package/dist/components/ReadingProgressBar/index.d.cts +20 -0
  248. package/dist/components/ReadingProgressBar/index.d.ts +20 -0
  249. package/dist/components/ReadingProgressBar/index.js +4 -0
  250. package/dist/components/ReadingProgressBar/index.js.map +1 -0
  251. package/dist/components/RichTextEditor/index.cjs +8 -7
  252. package/dist/components/RichTextEditor/index.js +5 -4
  253. package/dist/components/SectionSpyNav/index.cjs +15 -0
  254. package/dist/components/SectionSpyNav/index.cjs.map +1 -0
  255. package/dist/components/SectionSpyNav/index.d.cts +63 -0
  256. package/dist/components/SectionSpyNav/index.d.ts +63 -0
  257. package/dist/components/SectionSpyNav/index.js +6 -0
  258. package/dist/components/SectionSpyNav/index.js.map +1 -0
  259. package/dist/components/Select/index.cjs +6 -4
  260. package/dist/components/Select/index.d.cts +56 -9
  261. package/dist/components/Select/index.d.ts +56 -9
  262. package/dist/components/Select/index.js +4 -2
  263. package/dist/components/Slider/index.d.cts +2 -2
  264. package/dist/components/Slider/index.d.ts +2 -2
  265. package/dist/components/SourceTip/index.cjs +15 -0
  266. package/dist/components/SourceTip/index.cjs.map +1 -0
  267. package/dist/components/SourceTip/index.d.cts +58 -0
  268. package/dist/components/SourceTip/index.d.ts +58 -0
  269. package/dist/components/SourceTip/index.js +6 -0
  270. package/dist/components/SourceTip/index.js.map +1 -0
  271. package/dist/components/Sparkline/index.cjs +13 -0
  272. package/dist/components/Sparkline/index.cjs.map +1 -0
  273. package/dist/components/Sparkline/index.d.cts +53 -0
  274. package/dist/components/Sparkline/index.d.ts +53 -0
  275. package/dist/components/Sparkline/index.js +4 -0
  276. package/dist/components/Sparkline/index.js.map +1 -0
  277. package/dist/components/Spinner/index.d.cts +1 -1
  278. package/dist/components/Spinner/index.d.ts +1 -1
  279. package/dist/components/SuperChat/index.cjs +252 -93
  280. package/dist/components/SuperChat/index.cjs.map +1 -1
  281. package/dist/components/SuperChat/index.d.cts +13 -5
  282. package/dist/components/SuperChat/index.d.ts +13 -5
  283. package/dist/components/SuperChat/index.js +249 -90
  284. package/dist/components/SuperChat/index.js.map +1 -1
  285. package/dist/components/SuperChat/plugins/index.cjs +6 -26
  286. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  287. package/dist/components/SuperChat/plugins/index.d.cts +2 -2
  288. package/dist/components/SuperChat/plugins/index.d.ts +2 -2
  289. package/dist/components/SuperChat/plugins/index.js +4 -24
  290. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  291. package/dist/components/Text/index.d.cts +1 -1
  292. package/dist/components/Text/index.d.ts +1 -1
  293. package/dist/components/Textarea/index.cjs +5 -3
  294. package/dist/components/Textarea/index.d.cts +19 -1
  295. package/dist/components/Textarea/index.d.ts +19 -1
  296. package/dist/components/Textarea/index.js +3 -1
  297. package/dist/datavis.cjs +1 -1
  298. package/dist/datavis.js +1 -1
  299. package/dist/esheet.cjs +12 -11
  300. package/dist/esheet.cjs.map +1 -1
  301. package/dist/esheet.js +9 -8
  302. package/dist/esheet.js.map +1 -1
  303. package/dist/hooks/index.cjs +29 -19
  304. package/dist/hooks/index.d.cts +17 -2
  305. package/dist/hooks/index.d.ts +17 -2
  306. package/dist/hooks/index.js +4 -2
  307. package/dist/index.cjs +2965 -2043
  308. package/dist/index.cjs.map +1 -1
  309. package/dist/index.d.cts +193 -48
  310. package/dist/index.d.ts +193 -48
  311. package/dist/index.js +2135 -1330
  312. package/dist/index.js.map +1 -1
  313. package/dist/kerebron.cjs +200 -68
  314. package/dist/kerebron.cjs.map +1 -1
  315. package/dist/kerebron.css +129 -0
  316. package/dist/kerebron.d.cts +52 -3
  317. package/dist/kerebron.d.ts +52 -3
  318. package/dist/kerebron.js +201 -69
  319. package/dist/kerebron.js.map +1 -1
  320. package/dist/styles.css +1 -1
  321. package/dist/tailwind-preset.cjs +4 -4
  322. package/dist/tailwind-preset.js +1 -1
  323. package/dist/{types-BoTeTPdH.d.ts → types-9vK_YdEb.d.ts} +12 -1
  324. package/dist/{types-DyIB9HYT.d.cts → types-DZDroUW8.d.cts} +12 -1
  325. package/dist/{useAnchoredPosition-C7PNglzD.d.cts → useAnchoredPosition-CKwLSQW8.d.cts} +10 -3
  326. package/dist/{useAnchoredPosition-C7PNglzD.d.ts → useAnchoredPosition-CKwLSQW8.d.ts} +10 -3
  327. package/dist/utils/index.cjs +9 -9
  328. package/dist/utils/index.js +1 -1
  329. package/package.json +13 -4
  330. package/dist/chunk-5IDYOJHO.cjs.map +0 -1
  331. package/dist/chunk-6ECKH4DJ.cjs +0 -147
  332. package/dist/chunk-6ECKH4DJ.cjs.map +0 -1
  333. package/dist/chunk-6J7UGYT5.cjs.map +0 -1
  334. package/dist/chunk-6MMIWE7H.js.map +0 -1
  335. package/dist/chunk-AFGADE3B.js.map +0 -1
  336. package/dist/chunk-BOOJDRJO.js.map +0 -1
  337. package/dist/chunk-DLBV42JD.js.map +0 -1
  338. package/dist/chunk-EGWWTIWS.js.map +0 -1
  339. package/dist/chunk-GTHNWP4P.js.map +0 -1
  340. package/dist/chunk-HIDV32ZX.js.map +0 -1
  341. package/dist/chunk-KFLDXJEE.js.map +0 -1
  342. package/dist/chunk-LJDBD2DD.cjs.map +0 -1
  343. package/dist/chunk-MYFZYUPR.cjs.map +0 -1
  344. package/dist/chunk-OAHORW4N.cjs.map +0 -1
  345. package/dist/chunk-P6L74SKG.js.map +0 -1
  346. package/dist/chunk-QUUBTNMH.js.map +0 -1
  347. package/dist/chunk-RBS3GHDZ.cjs.map +0 -1
  348. package/dist/chunk-S3MKIDYG.cjs.map +0 -1
  349. package/dist/chunk-WUNWHOLA.cjs.map +0 -1
  350. package/dist/chunk-XB54G7WS.cjs.map +0 -1
  351. package/dist/chunk-YXCE2HSK.js +0 -124
  352. package/dist/chunk-YXCE2HSK.js.map +0 -1
  353. package/dist/chunk-ZBI52NP2.cjs.map +0 -1
  354. package/dist/collabKit-QZL4P5T5.js.map +0 -1
  355. package/dist/collabKit-UF7E6V3N.cjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { useState, useEffect, useCallback, useRef } from 'react';
1
+ import { useState, useEffect, useCallback } from 'react';
2
2
 
3
3
  // src/hooks/useDirection.ts
4
4
  var RTL_LOCALES = ["ar", "he", "fa", "ur"];
@@ -124,90 +124,7 @@ function useIsLargeDesktop() {
124
124
  function useIsMobileOrTablet() {
125
125
  return useMediaQuery("(max-width: 1023px)");
126
126
  }
127
- function useScrollSpy({
128
- selectors,
129
- ids,
130
- rootMargin = "0px 0px -60% 0px",
131
- threshold = 0,
132
- root,
133
- enabled = true
134
- } = {}) {
135
- const [activeId, setActiveId] = useState(null);
136
- const visibleEntries = useRef(
137
- /* @__PURE__ */ new Map()
138
- );
139
- const rootEl = root?.current ?? null;
140
- useEffect(() => {
141
- if (!enabled) return;
142
- const container = rootEl ?? document;
143
- function resolveElements() {
144
- let els = [];
145
- if (ids && ids.length > 0) {
146
- els = ids.map((id) => document.getElementById(id)).filter((el) => el !== null);
147
- } else if (selectors) {
148
- els = Array.from(container.querySelectorAll(selectors));
149
- }
150
- return els.filter((el) => el.id);
151
- }
152
- let intersectionObserver = null;
153
- let mutationObserver = null;
154
- function startObserving() {
155
- const elements = resolveElements();
156
- if (elements.length === 0) return false;
157
- intersectionObserver = new IntersectionObserver(
158
- (entries2) => {
159
- for (const entry of entries2) {
160
- if (entry.isIntersecting) {
161
- visibleEntries.current.set(entry.target.id, entry);
162
- } else {
163
- visibleEntries.current.delete(entry.target.id);
164
- }
165
- }
166
- if (visibleEntries.current.size > 0) {
167
- let topmost = null;
168
- let topmostTop = Infinity;
169
- for (const [id, entry] of visibleEntries.current) {
170
- const top = entry.boundingClientRect.top;
171
- if (top < topmostTop) {
172
- topmostTop = top;
173
- topmost = id;
174
- }
175
- }
176
- if (topmost) {
177
- setActiveId(topmost);
178
- }
179
- }
180
- },
181
- {
182
- root: rootEl,
183
- rootMargin,
184
- threshold
185
- }
186
- );
187
- for (const el of elements) {
188
- intersectionObserver.observe(el);
189
- }
190
- mutationObserver?.disconnect();
191
- mutationObserver = null;
192
- return true;
193
- }
194
- if (!startObserving()) {
195
- const watchRoot = rootEl ?? document.body;
196
- mutationObserver = new MutationObserver(() => {
197
- startObserving();
198
- });
199
- mutationObserver.observe(watchRoot, { childList: true, subtree: true });
200
- }
201
- const entries = visibleEntries.current;
202
- return () => {
203
- mutationObserver?.disconnect();
204
- intersectionObserver?.disconnect();
205
- entries.clear();
206
- };
207
- }, [selectors, ids, rootMargin, threshold, rootEl, enabled]);
208
- return { activeId };
209
- }
210
127
 
211
- export { RTL_LOCALES, isRtlLocale, useCommandK, useDirection, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useMediaQuery, useScrollSpy };
212
- //# sourceMappingURL=chunk-GTHNWP4P.js.map
213
- //# sourceMappingURL=chunk-GTHNWP4P.js.map
128
+ export { RTL_LOCALES, isRtlLocale, useCommandK, useDirection, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useMediaQuery };
129
+ //# sourceMappingURL=chunk-XUVEF2RQ.js.map
130
+ //# sourceMappingURL=chunk-XUVEF2RQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useDirection.ts","../src/hooks/useKeyboardShortcut.ts","../src/hooks/useMediaQuery.ts"],"names":["useEffect","useState"],"mappings":"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","file":"chunk-XUVEF2RQ.js","sourcesContent":["import { useState, useEffect } from 'react';\nimport type { RefObject } from 'react';\n\nexport type Direction = 'ltr' | 'rtl';\n\n/** Locales whose primary script reads right-to-left. */\nexport const RTL_LOCALES = ['ar', 'he', 'fa', 'ur'] as const;\n\n/**\n * Returns true when the given locale (e.g. `ar`, `ar-SA`, `he_IL`) uses a\n * right-to-left script.\n */\nexport function isRtlLocale(locale: string): boolean {\n const lang = locale.toLowerCase().split(/[-_]/)[0];\n return (RTL_LOCALES as readonly string[]).includes(lang);\n}\n\nfunction resolveDirection(element?: HTMLElement | null): Direction {\n if (typeof document === 'undefined') return 'ltr';\n const target = element ?? document.documentElement;\n return getComputedStyle(target).direction === 'rtl' ? 'rtl' : 'ltr';\n}\n\n/**\n * Hook returning the effective text direction (`ltr` | `rtl`) inherited from\n * the nearest `dir` attribute — zero setup for consumers who set\n * `<html dir=\"rtl\">`.\n *\n * Use for JS-level direction logic that CSS logical properties can't cover:\n * inverting ArrowLeft/ArrowRight keyboard handling, popover/toast placement,\n * drag math, etc.\n *\n * @param elementRef - Optional ref; when provided, direction is resolved from\n * that element (respecting any local `dir` override) instead of `<html>`.\n *\n * @example\n * ```tsx\n * const direction = useDirection();\n * const nextKey = direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight';\n * ```\n */\nexport function useDirection(\n elementRef?: RefObject<HTMLElement | null>\n): Direction {\n const [direction, setDirection] = useState<Direction>(() =>\n resolveDirection(elementRef?.current)\n );\n\n useEffect(() => {\n const update = () => setDirection(resolveDirection(elementRef?.current));\n update();\n // dir changes are rare; observing the whole tree for just this attribute is cheap.\n const observer = new MutationObserver(update);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['dir'],\n subtree: true,\n });\n return () => observer.disconnect();\n }, [elementRef]);\n\n // Re-sync when a re-render points elementRef.current at a different node:\n // the MutationObserver only fires on `dir` attribute mutations, so a swapped\n // ref target with a different inherited direction would otherwise go stale.\n const currentElement = elementRef?.current ?? null;\n useEffect(() => {\n setDirection(resolveDirection(currentElement));\n }, [currentElement]);\n\n return direction;\n}\n","import { useEffect, useCallback } from 'react';\n\n/**\n * Options for keyboard shortcut hook\n */\nexport interface KeyboardShortcutOptions {\n /** Whether the shortcut is currently enabled (default: true) */\n enabled?: boolean;\n /** Modifier keys required (default: none) */\n modifiers?: {\n ctrl?: boolean;\n shift?: boolean;\n alt?: boolean;\n meta?: boolean;\n };\n /** Whether to prevent default browser behavior (default: true) */\n preventDefault?: boolean;\n /** Whether to stop event propagation (default: false) */\n stopPropagation?: boolean;\n /** Element types to ignore when the shortcut is pressed (default: ['INPUT', 'TEXTAREA', 'SELECT']) */\n ignoreInputs?: boolean;\n}\n\n/**\n * Hook that triggers a callback when a specific keyboard shortcut is pressed.\n * Supports modifier keys (Ctrl, Shift, Alt, Meta) and ignores input fields by default.\n *\n * @param key - The key to listen for (e.g., 'k', 'Enter', 'Escape', '/')\n * @param callback - Function to call when the shortcut is pressed\n * @param options - Configuration options\n *\n * @example\n * ```tsx\n * // Cmd/Ctrl+K to open search\n * useKeyboardShortcut('k', openSearch, { modifiers: { meta: true, ctrl: true } });\n *\n * // Forward slash to focus search (ignoring when typing)\n * useKeyboardShortcut('/', focusSearch);\n *\n * // Escape to close modal\n * useKeyboardShortcut('Escape', closeModal);\n * ```\n */\nexport function useKeyboardShortcut(\n key: string,\n callback: (event: KeyboardEvent) => void,\n options: KeyboardShortcutOptions = {}\n): void {\n const {\n enabled = true,\n modifiers = {},\n preventDefault = true,\n stopPropagation = false,\n ignoreInputs = true,\n } = options;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n // Check if we should ignore input fields\n if (ignoreInputs) {\n const target = event.target as HTMLElement;\n const tagName = target.tagName.toUpperCase();\n if (\n tagName === 'INPUT' ||\n tagName === 'TEXTAREA' ||\n tagName === 'SELECT' ||\n target.isContentEditable\n ) {\n return;\n }\n }\n\n // Check modifiers\n const { ctrl, shift, alt, meta } = modifiers;\n\n // For Cmd+K style shortcuts, allow either meta (Mac) or ctrl (Windows/Linux)\n const metaOrCtrl = meta || ctrl;\n if (metaOrCtrl) {\n if (!(event.metaKey || event.ctrlKey)) return;\n } else {\n // If no meta/ctrl modifier specified, ensure neither is pressed\n if (event.metaKey || event.ctrlKey) return;\n }\n\n if (shift && !event.shiftKey) return;\n if (alt && !event.altKey) return;\n\n // Check key match (case-insensitive for letters)\n const eventKey =\n event.key.length === 1 ? event.key.toLowerCase() : event.key;\n const targetKey = key.length === 1 ? key.toLowerCase() : key;\n if (eventKey !== targetKey) return;\n\n if (preventDefault) {\n event.preventDefault();\n }\n if (stopPropagation) {\n event.stopPropagation();\n }\n\n callback(event);\n },\n [key, callback, modifiers, preventDefault, stopPropagation, ignoreInputs]\n );\n\n useEffect(() => {\n if (!enabled) return;\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [handleKeyDown, enabled]);\n}\n\n/**\n * Hook for the common Cmd/Ctrl+K shortcut pattern (command palette, search, etc.)\n *\n * @param callback - Function to call when Cmd/Ctrl+K is pressed\n * @param enabled - Whether the shortcut is active (default: true)\n *\n * @example\n * ```tsx\n * useCommandK(() => setIsOpen(true));\n * ```\n */\nexport function useCommandK(callback: () => void, enabled = true): void {\n useKeyboardShortcut('k', callback, {\n enabled,\n modifiers: { meta: true, ctrl: true },\n ignoreInputs: false, // Cmd+K should work even in inputs\n });\n}\n","import { useState, useEffect } from 'react';\n\n/**\n * Hook that tracks whether a media query matches.\n * Uses the native `matchMedia` API for efficient media query tracking.\n *\n * @param query - CSS media query string (e.g., '(min-width: 768px)')\n * @returns Boolean indicating whether the media query matches\n *\n * @example\n * ```tsx\n * function ResponsiveComponent() {\n * const isMobile = useMediaQuery('(max-width: 767px)');\n * const isTablet = useMediaQuery('(min-width: 768px) and (max-width: 1023px)');\n * const isDesktop = useMediaQuery('(min-width: 1024px)');\n *\n * return (\n * <div>\n * {isMobile && <MobileLayout />}\n * {isTablet && <TabletLayout />}\n * {isDesktop && <DesktopLayout />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useMediaQuery(query: string): boolean {\n // Initialize with null to indicate SSR/initial state\n const [matches, setMatches] = useState<boolean>(() => {\n // Check if we're in a browser environment\n if (typeof window === 'undefined') return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia(query);\n\n // Set initial value\n setMatches(mediaQuery.matches);\n\n // Handler for media query changes\n const handler = (event: MediaQueryListEvent) => {\n setMatches(event.matches);\n };\n\n // Modern browsers use addEventListener\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handler);\n return () => mediaQuery.removeEventListener('change', handler);\n }\n\n // Fallback for older browsers\n mediaQuery.addListener(handler);\n return () => mediaQuery.removeListener(handler);\n }, [query]);\n\n return matches;\n}\n\n/**\n * Preset breakpoint hooks following common responsive design patterns\n */\n\n/** Returns true when viewport is smaller than 640px (mobile) */\nexport function useIsMobile(): boolean {\n return useMediaQuery('(max-width: 639px)');\n}\n\n/** Returns true when viewport is 640px-767px (large mobile / small tablet) */\nexport function useIsSmallTablet(): boolean {\n return useMediaQuery('(min-width: 640px) and (max-width: 767px)');\n}\n\n/** Returns true when viewport is 768px-1023px (tablet) */\nexport function useIsTablet(): boolean {\n return useMediaQuery('(min-width: 768px) and (max-width: 1023px)');\n}\n\n/** Returns true when viewport is 1024px or larger (desktop) */\nexport function useIsDesktop(): boolean {\n return useMediaQuery('(min-width: 1024px)');\n}\n\n/** Returns true when viewport is 1280px or larger (large desktop) */\nexport function useIsLargeDesktop(): boolean {\n return useMediaQuery('(min-width: 1280px)');\n}\n\n/** Returns true when viewport is smaller than 1024px (mobile/tablet) */\nexport function useIsMobileOrTablet(): boolean {\n return useMediaQuery('(max-width: 1023px)');\n}\n"]}
@@ -0,0 +1,129 @@
1
+ import { cn } from './chunk-TQONQSJO.js';
2
+ import * as React from 'react';
3
+ import { ChevronDown } from 'lucide-react';
4
+ import { cva } from 'class-variance-authority';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ var accordionVariants = cva("", {
8
+ variants: {
9
+ variant: {
10
+ // Each item is its own card with spacing between
11
+ separated: "flex flex-col gap-3",
12
+ // One bordered list with dividers
13
+ joined: "border-border divide-border divide-y rounded-lg border"
14
+ }
15
+ },
16
+ defaultVariants: {
17
+ variant: "separated"
18
+ }
19
+ });
20
+ var itemVariants = cva("overflow-hidden", {
21
+ variants: {
22
+ variant: {
23
+ separated: "border-border bg-card rounded-lg border",
24
+ joined: "bg-card first:rounded-t-lg last:rounded-b-lg"
25
+ }
26
+ },
27
+ defaultVariants: {
28
+ variant: "separated"
29
+ }
30
+ });
31
+ var Accordion = React.forwardRef(
32
+ function Accordion2({
33
+ items,
34
+ type = "single",
35
+ defaultOpenIds,
36
+ openIds: controlledOpen,
37
+ onOpenChange,
38
+ collapsible = true,
39
+ headingLevel: Heading = "h3",
40
+ variant,
41
+ className,
42
+ ...props
43
+ }, ref) {
44
+ const baseId = React.useId();
45
+ const [internalOpen, setInternalOpen] = React.useState(
46
+ () => defaultOpenIds ?? []
47
+ );
48
+ const rawOpen = controlledOpen ?? internalOpen;
49
+ const open = React.useMemo(
50
+ () => type === "single" ? rawOpen.slice(0, 1) : rawOpen,
51
+ [type, rawOpen]
52
+ );
53
+ const openSet = React.useMemo(() => new Set(open), [open]);
54
+ const toggle = (id) => {
55
+ let next;
56
+ if (openSet.has(id)) {
57
+ if (type === "single" && !collapsible) return;
58
+ next = open.filter((o) => o !== id);
59
+ } else {
60
+ next = type === "single" ? [id] : [...open, id];
61
+ }
62
+ if (controlledOpen === void 0) setInternalOpen(next);
63
+ onOpenChange?.(next);
64
+ };
65
+ return /* @__PURE__ */ jsx(
66
+ "div",
67
+ {
68
+ ref,
69
+ className: cn(accordionVariants({ variant }), className),
70
+ ...props,
71
+ children: items.map((item) => {
72
+ const isOpen = openSet.has(item.id);
73
+ const triggerId = `${baseId}-${item.id}-trigger`;
74
+ const panelId = `${baseId}-${item.id}-panel`;
75
+ return /* @__PURE__ */ jsxs("div", { className: cn(itemVariants({ variant })), children: [
76
+ /* @__PURE__ */ jsx(Heading, { className: "m-0", children: /* @__PURE__ */ jsxs(
77
+ "button",
78
+ {
79
+ type: "button",
80
+ id: triggerId,
81
+ "aria-expanded": isOpen,
82
+ "aria-controls": panelId,
83
+ disabled: item.disabled,
84
+ onClick: () => toggle(item.id),
85
+ className: cn(
86
+ "hover:bg-muted/60 flex w-full items-center justify-between gap-4 px-5 py-4 text-start transition-colors",
87
+ "focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none focus-visible:ring-inset",
88
+ "disabled:pointer-events-none disabled:opacity-50"
89
+ ),
90
+ children: [
91
+ /* @__PURE__ */ jsx("span", { className: "text-foreground min-w-0 text-sm font-semibold", children: item.title }),
92
+ /* @__PURE__ */ jsx(
93
+ ChevronDown,
94
+ {
95
+ "aria-hidden": "true",
96
+ className: cn(
97
+ "text-muted-foreground h-5 w-5 shrink-0 transition-transform duration-200",
98
+ isOpen && "rotate-180"
99
+ )
100
+ }
101
+ )
102
+ ]
103
+ }
104
+ ) }),
105
+ /* @__PURE__ */ jsx(
106
+ "div",
107
+ {
108
+ id: panelId,
109
+ role: "region",
110
+ "aria-labelledby": triggerId,
111
+ "aria-hidden": !isOpen,
112
+ inert: !isOpen || void 0,
113
+ className: cn(
114
+ "grid transition-[grid-template-rows] duration-200 ease-out",
115
+ isOpen ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
116
+ ),
117
+ children: /* @__PURE__ */ jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "text-muted-foreground px-5 pb-4 text-sm leading-relaxed", children: item.content }) })
118
+ }
119
+ )
120
+ ] }, item.id);
121
+ })
122
+ }
123
+ );
124
+ }
125
+ );
126
+
127
+ export { Accordion };
128
+ //# sourceMappingURL=chunk-Y6YSJPVC.js.map
129
+ //# sourceMappingURL=chunk-Y6YSJPVC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Accordion/Accordion.tsx"],"names":["Accordion"],"mappings":"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","file":"chunk-Y6YSJPVC.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// =============================================================================\n// Variants\n// =============================================================================\n\nconst accordionVariants = cva('', {\n variants: {\n variant: {\n // Each item is its own card with spacing between\n separated: 'flex flex-col gap-3',\n // One bordered list with dividers\n joined: 'border-border divide-border divide-y rounded-lg border',\n },\n },\n defaultVariants: {\n variant: 'separated',\n },\n});\n\nconst itemVariants = cva('overflow-hidden', {\n variants: {\n variant: {\n separated: 'border-border bg-card rounded-lg border',\n joined: 'bg-card first:rounded-t-lg last:rounded-b-lg',\n },\n },\n defaultVariants: {\n variant: 'separated',\n },\n});\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface AccordionItem {\n /** Stable id used for open state and aria wiring. */\n id: string;\n /** Header label (e.g. an FAQ question). */\n title: React.ReactNode;\n /** Panel content (e.g. the answer). */\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface AccordionProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>,\n VariantProps<typeof accordionVariants> {\n items: AccordionItem[];\n /** `single` keeps at most one panel open; `multiple` allows any number. */\n type?: 'single' | 'multiple';\n /** Ids open initially (uncontrolled). */\n defaultOpenIds?: string[];\n /** Controlled open ids. Changes reported via `onOpenChange`. */\n openIds?: string[];\n onOpenChange?: (openIds: string[]) => void;\n /** In `single` mode, allow closing the open panel (default true). */\n collapsible?: boolean;\n /** Heading level wrapping each trigger for document outline (default h3). */\n headingLevel?: 'h2' | 'h3' | 'h4';\n}\n\n// =============================================================================\n// Accordion\n// =============================================================================\n\n/**\n * A vertically stacked set of expandable panels — FAQ lists, settings\n * groups, progressive disclosure. Panels animate open to their natural\n * height (CSS grid rows, no max-height clipping), and headers are real\n * buttons inside headings with full `aria-expanded`/`aria-controls` wiring.\n *\n * @example\n * ```tsx\n * <Accordion\n * type=\"single\"\n * items={[\n * { id: 'pricing', title: 'How is pricing calculated?', content: <p>…</p> },\n * { id: 'billing', title: 'When am I billed?', content: <p>…</p> },\n * ]}\n * />\n * ```\n */\nexport const Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n function Accordion(\n {\n items,\n type = 'single',\n defaultOpenIds,\n openIds: controlledOpen,\n onOpenChange,\n collapsible = true,\n headingLevel: Heading = 'h3',\n variant,\n className,\n ...props\n },\n ref\n ) {\n const baseId = React.useId();\n const [internalOpen, setInternalOpen] = React.useState<string[]>(\n () => defaultOpenIds ?? []\n );\n const rawOpen = controlledOpen ?? internalOpen;\n // Single mode keeps at most one panel open, even if defaultOpenIds or a\n // controlled openIds array hands us several.\n const open = React.useMemo(\n () => (type === 'single' ? rawOpen.slice(0, 1) : rawOpen),\n [type, rawOpen]\n );\n const openSet = React.useMemo(() => new Set(open), [open]);\n\n const toggle = (id: string) => {\n let next: string[];\n if (openSet.has(id)) {\n if (type === 'single' && !collapsible) return;\n next = open.filter((o) => o !== id);\n } else {\n next = type === 'single' ? [id] : [...open, id];\n }\n if (controlledOpen === undefined) setInternalOpen(next);\n onOpenChange?.(next);\n };\n\n return (\n <div\n ref={ref}\n className={cn(accordionVariants({ variant }), className)}\n {...props}\n >\n {items.map((item) => {\n const isOpen = openSet.has(item.id);\n const triggerId = `${baseId}-${item.id}-trigger`;\n const panelId = `${baseId}-${item.id}-panel`;\n return (\n <div key={item.id} className={cn(itemVariants({ variant }))}>\n <Heading className=\"m-0\">\n <button\n type=\"button\"\n id={triggerId}\n aria-expanded={isOpen}\n aria-controls={panelId}\n disabled={item.disabled}\n onClick={() => toggle(item.id)}\n className={cn(\n 'hover:bg-muted/60 flex w-full items-center justify-between gap-4 px-5 py-4 text-start transition-colors',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none focus-visible:ring-inset',\n 'disabled:pointer-events-none disabled:opacity-50'\n )}\n >\n <span className=\"text-foreground min-w-0 text-sm font-semibold\">\n {item.title}\n </span>\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\n 'text-muted-foreground h-5 w-5 shrink-0 transition-transform duration-200',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n </Heading>\n {/* grid-rows 0fr→1fr animates to natural height without a max-height clip;\n collapsed panels are hidden from AT and unfocusable via aria-hidden + inert */}\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n aria-hidden={!isOpen}\n inert={!isOpen || undefined}\n className={cn(\n 'grid transition-[grid-template-rows] duration-200 ease-out',\n isOpen ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\n )}\n >\n <div className=\"overflow-hidden\">\n <div className=\"text-muted-foreground px-5 pb-4 text-sm leading-relaxed\">\n {item.content}\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n);\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunk6ECKH4DJ_cjs = require('./chunk-6ECKH4DJ.cjs');
4
- var chunkMYFZYUPR_cjs = require('./chunk-MYFZYUPR.cjs');
3
+ var chunkZ5S5JEJD_cjs = require('./chunk-Z5S5JEJD.cjs');
4
+ var chunkAOHJILLU_cjs = require('./chunk-AOHJILLU.cjs');
5
5
  var chunkCW75IKA6_cjs = require('./chunk-CW75IKA6.cjs');
6
6
  var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
7
7
  var React = require('react');
@@ -35,11 +35,6 @@ var widthClasses = {
35
35
  fixed: "w-44"
36
36
  // ~176px - enough for MM/DD/YYYY + calendar icon
37
37
  };
38
- var sizeClasses = {
39
- sm: "h-8 text-sm",
40
- md: "h-10 text-base",
41
- lg: "h-12 text-lg"
42
- };
43
38
  var MONTH_NAMES = [
44
39
  "January",
45
40
  "February",
@@ -222,7 +217,7 @@ var DateInput = React__namespace.forwardRef(
222
217
  anchorRef: buttonRef,
223
218
  floatingRef: calendarRef,
224
219
  style: calendarStyle
225
- } = chunkMYFZYUPR_cjs.useAnchoredPosition({
220
+ } = chunkAOHJILLU_cjs.useAnchoredPosition({
226
221
  open: isCalendarOpen,
227
222
  placement: "bottom-end"
228
223
  });
@@ -655,7 +650,7 @@ var DateInput = React__namespace.forwardRef(
655
650
  };
656
651
  if (inputType === "year") {
657
652
  return /* @__PURE__ */ jsxRuntime.jsx(
658
- chunk6ECKH4DJ_cjs.Input,
653
+ chunkZ5S5JEJD_cjs.Input,
659
654
  {
660
655
  ref,
661
656
  type: inputType === "year" ? "text" : inputType,
@@ -675,107 +670,142 @@ var DateInput = React__namespace.forwardRef(
675
670
  );
676
671
  }
677
672
  if (showCalendar || inputType !== "date") {
678
- const { label, helperText, hideLabel, required, size, ...inputProps } = props;
673
+ const {
674
+ label,
675
+ labelVariant,
676
+ helperText,
677
+ hideLabel,
678
+ required,
679
+ requiredVariant,
680
+ size,
681
+ placeholder: placeholderProp,
682
+ ...inputProps
683
+ } = props;
679
684
  const resolvedSize = size ?? "md";
680
685
  const inputId = inputProps.id || generatedId;
681
686
  const errorId = `${inputId}-error`;
682
687
  const helperId = `${inputId}-helper`;
683
688
  const showError = hasError || !!localError;
684
689
  const errorMessage = error || localError;
685
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkS5RVSXDV_cjs.cn("flex flex-col gap-1.5", widthClasses[width]), children: [
686
- label && /* @__PURE__ */ jsxRuntime.jsxs(
687
- "label",
688
- {
689
- htmlFor: inputId,
690
- className: chunkS5RVSXDV_cjs.cn(
691
- "text-foreground text-sm font-medium",
692
- hideLabel && "sr-only"
690
+ const isFloating = labelVariant === "floating" && !!label && !hideLabel;
691
+ const requiredMark = required && /* @__PURE__ */ jsxRuntime.jsx(chunkZ5S5JEJD_cjs.RequiredMark, { variant: requiredVariant });
692
+ return /* @__PURE__ */ jsxRuntime.jsxs(
693
+ "div",
694
+ {
695
+ "data-slot": "input-wrapper",
696
+ className: chunkS5RVSXDV_cjs.cn("flex flex-col gap-1.5", widthClasses[width]),
697
+ children: [
698
+ label && !isFloating && /* @__PURE__ */ jsxRuntime.jsxs(
699
+ "label",
700
+ {
701
+ "data-slot": "input-label",
702
+ htmlFor: inputId,
703
+ className: chunkS5RVSXDV_cjs.cn(
704
+ "text-foreground text-sm font-medium",
705
+ hideLabel && "sr-only"
706
+ ),
707
+ children: [
708
+ label,
709
+ requiredMark
710
+ ]
711
+ }
693
712
  ),
694
- children: [
695
- label,
696
- required && /* @__PURE__ */ jsxRuntime.jsx(
697
- "span",
713
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
714
+ /* @__PURE__ */ jsxRuntime.jsx(
715
+ "input",
698
716
  {
699
- className: "ml-1",
700
- style: { color: "#ef4444" },
701
- "aria-hidden": "true",
702
- children: "*"
717
+ "data-slot": "input",
718
+ ref,
719
+ id: inputId,
720
+ type: "text",
721
+ inputMode: inputType === "date" ? "numeric" : void 0,
722
+ autoComplete,
723
+ placeholder: isFloating ? " " : placeholderProp ?? (inputType === "month" ? "Select month" : inputType === "time" ? "Select time" : inputType === "datetime-local" ? "Select date and time" : placeholder),
724
+ value: formatPickerValue(displayValue, inputType, timeFormat),
725
+ onChange: handleChange,
726
+ onBlur: inputType === "date" ? handleBlur : onBlur,
727
+ onClick: (event) => {
728
+ onClick?.(event);
729
+ setIsCalendarOpen(true);
730
+ },
731
+ readOnly: !isFormattedDate,
732
+ required,
733
+ "aria-invalid": showError,
734
+ "aria-describedby": [errorMessage ? errorId : null, helperText ? helperId : null].filter(Boolean).join(" ") || void 0,
735
+ className: chunkS5RVSXDV_cjs.cn(
736
+ chunkZ5S5JEJD_cjs.inputVariants({
737
+ size: resolvedSize,
738
+ hasError: showError,
739
+ labelVariant: isFloating ? "floating" : "stacked"
740
+ }),
741
+ "pr-10",
742
+ className
743
+ ),
744
+ ...inputProps
703
745
  }
704
- )
705
- ]
706
- }
707
- ),
708
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
709
- /* @__PURE__ */ jsxRuntime.jsx(
710
- "input",
711
- {
712
- ref,
713
- id: inputId,
714
- type: "text",
715
- inputMode: inputType === "date" ? "numeric" : void 0,
716
- autoComplete,
717
- placeholder: inputType === "month" ? "Select month" : inputType === "time" ? "Select time" : inputType === "datetime-local" ? "Select date and time" : placeholder,
718
- value: formatPickerValue(displayValue, inputType, timeFormat),
719
- onChange: handleChange,
720
- onBlur: inputType === "date" ? handleBlur : onBlur,
721
- onClick: (event) => {
722
- onClick?.(event);
723
- setIsCalendarOpen(true);
724
- },
725
- readOnly: !isFormattedDate,
726
- "aria-invalid": showError,
727
- "aria-describedby": [errorMessage ? errorId : null, helperText ? helperId : null].filter(Boolean).join(" ") || void 0,
728
- className: chunkS5RVSXDV_cjs.cn(
729
- "w-full px-3 py-2",
730
- "rounded-lg border",
731
- "bg-background text-foreground",
732
- "placeholder:text-muted-foreground",
733
- "transition-colors duration-200",
734
- "focus:ring-ring focus:border-transparent focus:ring-2 focus:outline-none",
735
- "disabled:cursor-not-allowed disabled:opacity-50",
736
- sizeClasses[resolvedSize],
737
- showError ? "border-destructive focus:ring-destructive" : "border-input",
738
- "pr-10",
739
- className
740
746
  ),
741
- ...inputProps
742
- }
743
- ),
744
- /* @__PURE__ */ jsxRuntime.jsx(
745
- "button",
746
- {
747
- ref: buttonRef,
748
- type: "button",
749
- onClick: () => setIsCalendarOpen(!isCalendarOpen),
750
- className: chunkS5RVSXDV_cjs.cn(
751
- "absolute top-1/2 right-3 -translate-y-1/2",
752
- "text-muted-foreground hover:text-foreground",
753
- "focus:text-foreground focus:outline-none",
754
- "transition-colors"
747
+ isFloating && /* @__PURE__ */ jsxRuntime.jsxs(
748
+ "label",
749
+ {
750
+ "data-slot": "input-label",
751
+ htmlFor: inputId,
752
+ className: chunkZ5S5JEJD_cjs.floatingLabelVariants({
753
+ size: resolvedSize,
754
+ hasError: showError
755
+ }),
756
+ children: [
757
+ label,
758
+ requiredMark
759
+ ]
760
+ }
755
761
  ),
756
- "aria-label": inputType === "time" ? "Open time picker" : "Open calendar",
757
- "aria-expanded": isCalendarOpen,
758
- "aria-haspopup": "dialog",
759
- children: inputType === "time" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { size: 18 }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Calendar, { size: 18 })
760
- }
761
- )
762
- ] }),
763
- isCalendarOpen && reactDom.createPortal(renderCalendar(), document.body),
764
- errorMessage && /* @__PURE__ */ jsxRuntime.jsx(
765
- "p",
766
- {
767
- id: errorId,
768
- className: "text-sm",
769
- style: { color: "#ef4444" },
770
- role: "alert",
771
- children: errorMessage
772
- }
773
- ),
774
- helperText && !errorMessage && /* @__PURE__ */ jsxRuntime.jsx("p", { id: helperId, className: "text-muted-foreground text-sm", children: helperText })
775
- ] });
762
+ /* @__PURE__ */ jsxRuntime.jsx(
763
+ "button",
764
+ {
765
+ "data-slot": "date-input-trigger",
766
+ ref: buttonRef,
767
+ type: "button",
768
+ onClick: () => setIsCalendarOpen(!isCalendarOpen),
769
+ className: chunkS5RVSXDV_cjs.cn(
770
+ "absolute top-1/2 right-3 -translate-y-1/2",
771
+ "text-muted-foreground hover:text-foreground",
772
+ "focus:text-foreground focus:outline-none",
773
+ "transition-colors"
774
+ ),
775
+ "aria-label": inputType === "time" ? "Open time picker" : "Open calendar",
776
+ "aria-expanded": isCalendarOpen,
777
+ "aria-haspopup": "dialog",
778
+ children: inputType === "time" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { size: 18 }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Calendar, { size: 18 })
779
+ }
780
+ )
781
+ ] }),
782
+ isCalendarOpen && reactDom.createPortal(renderCalendar(), document.body),
783
+ errorMessage && /* @__PURE__ */ jsxRuntime.jsx(
784
+ "p",
785
+ {
786
+ id: errorId,
787
+ "data-slot": "input-error",
788
+ className: "text-sm",
789
+ style: { color: "#ef4444" },
790
+ role: "alert",
791
+ children: errorMessage
792
+ }
793
+ ),
794
+ helperText && !errorMessage && /* @__PURE__ */ jsxRuntime.jsx(
795
+ "p",
796
+ {
797
+ id: helperId,
798
+ "data-slot": "input-helper",
799
+ className: "text-muted-foreground text-sm",
800
+ children: helperText
801
+ }
802
+ )
803
+ ]
804
+ }
805
+ );
776
806
  }
777
807
  return /* @__PURE__ */ jsxRuntime.jsx(
778
- chunk6ECKH4DJ_cjs.Input,
808
+ chunkZ5S5JEJD_cjs.Input,
779
809
  {
780
810
  ref,
781
811
  type: "text",
@@ -830,5 +860,5 @@ function ChevronRightIcon() {
830
860
  }
831
861
 
832
862
  exports.DateInput = DateInput;
833
- //# sourceMappingURL=chunk-OAHORW4N.cjs.map
834
- //# sourceMappingURL=chunk-OAHORW4N.cjs.map
863
+ //# sourceMappingURL=chunk-YRLCR76L.cjs.map
864
+ //# sourceMappingURL=chunk-YRLCR76L.cjs.map