@mieweb/ui 0.7.3-dev.3 → 0.7.3-dev.31

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 (323) 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-3IMM2PM4.js +259 -0
  14. package/dist/chunk-3IMM2PM4.js.map +1 -0
  15. package/dist/chunk-3SHLOF4V.cjs +128 -0
  16. package/dist/chunk-3SHLOF4V.cjs.map +1 -0
  17. package/dist/chunk-3TXOFAXP.cjs +139 -0
  18. package/dist/chunk-3TXOFAXP.cjs.map +1 -0
  19. package/dist/{chunk-ZBI52NP2.cjs → chunk-56QJHQ5C.cjs} +156 -39
  20. package/dist/chunk-56QJHQ5C.cjs.map +1 -0
  21. package/dist/chunk-5JZIDILK.cjs +164 -0
  22. package/dist/chunk-5JZIDILK.cjs.map +1 -0
  23. package/dist/chunk-5MXO6PEV.cjs +78 -0
  24. package/dist/chunk-5MXO6PEV.cjs.map +1 -0
  25. package/dist/chunk-5QZ73PZC.js +62 -0
  26. package/dist/chunk-5QZ73PZC.js.map +1 -0
  27. package/dist/chunk-6NZXWKUE.js +3 -0
  28. package/dist/chunk-6NZXWKUE.js.map +1 -0
  29. package/dist/chunk-6SCQ7FKT.js +115 -0
  30. package/dist/chunk-6SCQ7FKT.js.map +1 -0
  31. package/dist/{chunk-KFLDXJEE.js → chunk-753Z3NXL.js} +46 -15
  32. package/dist/chunk-753Z3NXL.js.map +1 -0
  33. package/dist/{chunk-S3MKIDYG.cjs → chunk-7AECNMYV.cjs} +46 -15
  34. package/dist/chunk-7AECNMYV.cjs.map +1 -0
  35. package/dist/chunk-7IKLGH3Z.cjs +92 -0
  36. package/dist/chunk-7IKLGH3Z.cjs.map +1 -0
  37. package/dist/chunk-7L7OPISJ.cjs +291 -0
  38. package/dist/chunk-7L7OPISJ.cjs.map +1 -0
  39. package/dist/chunk-7RV6CAP6.cjs +106 -0
  40. package/dist/chunk-7RV6CAP6.cjs.map +1 -0
  41. package/dist/{chunk-LC7YHZXM.js → chunk-A5YOIJKL.js} +5 -5
  42. package/dist/{chunk-LC7YHZXM.js.map → chunk-A5YOIJKL.js.map} +1 -1
  43. package/dist/{chunk-CVZYOMEW.js → chunk-AESFOMSH.js} +325 -3
  44. package/dist/chunk-AESFOMSH.js.map +1 -0
  45. package/dist/{chunk-RBS3GHDZ.cjs → chunk-BOW7ZGI2.cjs} +4 -4
  46. package/dist/{chunk-RBS3GHDZ.cjs.map → chunk-BOW7ZGI2.cjs.map} +1 -1
  47. package/dist/{chunk-WUNWHOLA.cjs → chunk-BSDBI6H7.cjs} +116 -26
  48. package/dist/chunk-BSDBI6H7.cjs.map +1 -0
  49. package/dist/chunk-CG4ZKJLE.js +84 -0
  50. package/dist/chunk-CG4ZKJLE.js.map +1 -0
  51. package/dist/{chunk-Z4PECE5S.js → chunk-DX64KLSN.js} +2 -2
  52. package/dist/{chunk-Z4PECE5S.js.map → chunk-DX64KLSN.js.map} +1 -1
  53. package/dist/chunk-ELYGV32O.cjs +230 -0
  54. package/dist/chunk-ELYGV32O.cjs.map +1 -0
  55. package/dist/{chunk-QUUBTNMH.js → chunk-EPSB4WTL.js} +45 -15
  56. package/dist/chunk-EPSB4WTL.js.map +1 -0
  57. package/dist/chunk-F57VRLKP.js +708 -0
  58. package/dist/chunk-F57VRLKP.js.map +1 -0
  59. package/dist/{chunk-5IDYOJHO.cjs → chunk-G7EQ3JPX.cjs} +45 -15
  60. package/dist/chunk-G7EQ3JPX.cjs.map +1 -0
  61. package/dist/{chunk-FKLUSYFP.cjs → chunk-GQVL2JKQ.cjs} +4 -4
  62. package/dist/{chunk-FKLUSYFP.cjs.map → chunk-GQVL2JKQ.cjs.map} +1 -1
  63. package/dist/{chunk-3D4ITDLO.js → chunk-GXODR6V4.js} +3 -3
  64. package/dist/{chunk-3D4ITDLO.js.map → chunk-GXODR6V4.js.map} +1 -1
  65. package/dist/{chunk-AFGADE3B.js → chunk-H3YO5GBM.js} +117 -27
  66. package/dist/chunk-H3YO5GBM.js.map +1 -0
  67. package/dist/chunk-HK3AMH3Q.cjs +151 -0
  68. package/dist/chunk-HK3AMH3Q.cjs.map +1 -0
  69. package/dist/chunk-HQ3XPCHG.js +114 -0
  70. package/dist/chunk-HQ3XPCHG.js.map +1 -0
  71. package/dist/chunk-I44YNYI6.cjs +4 -0
  72. package/dist/chunk-I44YNYI6.cjs.map +1 -0
  73. package/dist/{chunk-EGWWTIWS.js → chunk-IILJGFI5.js} +125 -95
  74. package/dist/chunk-IILJGFI5.js.map +1 -0
  75. package/dist/{chunk-KRGKPUJH.js → chunk-IYXCFIMP.js} +8 -8
  76. package/dist/{chunk-KRGKPUJH.js.map → chunk-IYXCFIMP.js.map} +1 -1
  77. package/dist/{chunk-6J7UGYT5.cjs → chunk-JHGMZX4I.cjs} +47 -7
  78. package/dist/chunk-JHGMZX4I.cjs.map +1 -0
  79. package/dist/chunk-JHZW3Y62.js +142 -0
  80. package/dist/chunk-JHZW3Y62.js.map +1 -0
  81. package/dist/{chunk-JDHIBJ5K.cjs → chunk-JWTCEWQ4.cjs} +2 -2
  82. package/dist/{chunk-JDHIBJ5K.cjs.map → chunk-JWTCEWQ4.cjs.map} +1 -1
  83. package/dist/{chunk-URHXR5SC.cjs → chunk-KVE7PQ5P.cjs} +7 -7
  84. package/dist/{chunk-URHXR5SC.cjs.map → chunk-KVE7PQ5P.cjs.map} +1 -1
  85. package/dist/{chunk-MJFF4AXH.cjs → chunk-L6D4CKLV.cjs} +325 -3
  86. package/dist/chunk-L6D4CKLV.cjs.map +1 -0
  87. package/dist/chunk-L6MDULYB.js +87 -0
  88. package/dist/chunk-L6MDULYB.js.map +1 -0
  89. package/dist/{chunk-SYIFEJSF.cjs → chunk-LQHI44OZ.cjs} +13 -13
  90. package/dist/{chunk-SYIFEJSF.cjs.map → chunk-LQHI44OZ.cjs.map} +1 -1
  91. package/dist/{chunk-HIDV32ZX.js → chunk-LZU7YBXG.js} +3 -3
  92. package/dist/{chunk-HIDV32ZX.js.map → chunk-LZU7YBXG.js.map} +1 -1
  93. package/dist/chunk-N5O47VGS.cjs +109 -0
  94. package/dist/chunk-N5O47VGS.cjs.map +1 -0
  95. package/dist/chunk-NGSDBWKA.cjs +84 -0
  96. package/dist/chunk-NGSDBWKA.cjs.map +1 -0
  97. package/dist/chunk-NMBYU7D7.cjs +31 -0
  98. package/dist/chunk-NMBYU7D7.cjs.map +1 -0
  99. package/dist/{chunk-P6L74SKG.js → chunk-QGZC43L7.js} +47 -7
  100. package/dist/chunk-QGZC43L7.js.map +1 -0
  101. package/dist/{chunk-FTRGZOVJ.js → chunk-QHTDWIED.js} +3 -3
  102. package/dist/{chunk-FTRGZOVJ.js.map → chunk-QHTDWIED.js.map} +1 -1
  103. package/dist/chunk-RUGHNFQG.js +28 -0
  104. package/dist/chunk-RUGHNFQG.js.map +1 -0
  105. package/dist/{chunk-NQ2D2V6O.cjs → chunk-SK7H3Z67.cjs} +37 -37
  106. package/dist/{chunk-NQ2D2V6O.cjs.map → chunk-SK7H3Z67.cjs.map} +1 -1
  107. package/dist/{chunk-MO65V64I.js → chunk-TXRQQMG5.js} +2 -2
  108. package/dist/{chunk-MO65V64I.js.map → chunk-TXRQQMG5.js.map} +1 -1
  109. package/dist/{chunk-OAHORW4N.cjs → chunk-U5TTXN45.cjs} +127 -97
  110. package/dist/chunk-U5TTXN45.cjs.map +1 -0
  111. package/dist/chunk-WBGUYSWY.js +90 -0
  112. package/dist/chunk-WBGUYSWY.js.map +1 -0
  113. package/dist/{chunk-LJBWCUKP.cjs → chunk-WIYQI35R.cjs} +2 -2
  114. package/dist/{chunk-LJBWCUKP.cjs.map → chunk-WIYQI35R.cjs.map} +1 -1
  115. package/dist/chunk-WKSUL2ZN.js +56 -0
  116. package/dist/chunk-WKSUL2ZN.js.map +1 -0
  117. package/dist/chunk-X5ZPYYMS.js +105 -0
  118. package/dist/chunk-X5ZPYYMS.js.map +1 -0
  119. package/dist/{chunk-DLBV42JD.js → chunk-XBKOZRDO.js} +156 -39
  120. package/dist/chunk-XBKOZRDO.js.map +1 -0
  121. package/dist/{chunk-XB54G7WS.cjs → chunk-XJTFZLWH.cjs} +2 -86
  122. package/dist/chunk-XJTFZLWH.cjs.map +1 -0
  123. package/dist/chunk-XMECP2MD.js +208 -0
  124. package/dist/chunk-XMECP2MD.js.map +1 -0
  125. package/dist/{chunk-GTHNWP4P.js → chunk-XUVEF2RQ.js} +4 -87
  126. package/dist/chunk-XUVEF2RQ.js.map +1 -0
  127. package/dist/chunk-XWYKLEKG.js +269 -0
  128. package/dist/chunk-XWYKLEKG.js.map +1 -0
  129. package/dist/chunk-Y6YSJPVC.js +129 -0
  130. package/dist/chunk-Y6YSJPVC.js.map +1 -0
  131. package/dist/chunk-YVIH26FG.cjs +736 -0
  132. package/dist/chunk-YVIH26FG.cjs.map +1 -0
  133. package/dist/chunk-Z5S5JEJD.cjs +286 -0
  134. package/dist/chunk-Z5S5JEJD.cjs.map +1 -0
  135. package/dist/chunk-ZO4L6C2Y.cjs +137 -0
  136. package/dist/chunk-ZO4L6C2Y.cjs.map +1 -0
  137. package/dist/{collabKit-QZL4P5T5.js → collabKit-A643VH2I.js} +7 -3
  138. package/dist/collabKit-A643VH2I.js.map +1 -0
  139. package/dist/{collabKit-UF7E6V3N.cjs → collabKit-Q4A36LDA.cjs} +7 -3
  140. package/dist/collabKit-Q4A36LDA.cjs.map +1 -0
  141. package/dist/components/Accordion/index.cjs +13 -0
  142. package/dist/components/Accordion/index.cjs.map +1 -0
  143. package/dist/components/Accordion/index.d.cts +50 -0
  144. package/dist/components/Accordion/index.d.ts +50 -0
  145. package/dist/components/Accordion/index.js +4 -0
  146. package/dist/components/Accordion/index.js.map +1 -0
  147. package/dist/components/Alert/index.d.cts +1 -1
  148. package/dist/components/Alert/index.d.ts +1 -1
  149. package/dist/components/Autocomplete/index.cjs +4 -3
  150. package/dist/components/Autocomplete/index.d.cts +20 -3
  151. package/dist/components/Autocomplete/index.d.ts +20 -3
  152. package/dist/components/Autocomplete/index.js +3 -2
  153. package/dist/components/Badge/index.d.cts +1 -1
  154. package/dist/components/Badge/index.d.ts +1 -1
  155. package/dist/components/Card/index.d.cts +1 -1
  156. package/dist/components/Card/index.d.ts +1 -1
  157. package/dist/components/Checkbox/index.cjs +5 -4
  158. package/dist/components/Checkbox/index.d.cts +9 -1
  159. package/dist/components/Checkbox/index.d.ts +9 -1
  160. package/dist/components/Checkbox/index.js +2 -1
  161. package/dist/components/ClampedText/index.cjs +13 -0
  162. package/dist/components/ClampedText/index.cjs.map +1 -0
  163. package/dist/components/ClampedText/index.d.cts +33 -0
  164. package/dist/components/ClampedText/index.d.ts +33 -0
  165. package/dist/components/ClampedText/index.js +4 -0
  166. package/dist/components/ClampedText/index.js.map +1 -0
  167. package/dist/components/CopyButton/index.cjs +13 -0
  168. package/dist/components/CopyButton/index.cjs.map +1 -0
  169. package/dist/components/CopyButton/index.d.cts +29 -0
  170. package/dist/components/CopyButton/index.d.ts +29 -0
  171. package/dist/components/CopyButton/index.js +4 -0
  172. package/dist/components/CopyButton/index.js.map +1 -0
  173. package/dist/components/CustomizableDashboard/index.cjs +43 -0
  174. package/dist/components/CustomizableDashboard/index.cjs.map +1 -0
  175. package/dist/components/CustomizableDashboard/index.d.cts +195 -0
  176. package/dist/components/CustomizableDashboard/index.d.ts +195 -0
  177. package/dist/components/CustomizableDashboard/index.js +10 -0
  178. package/dist/components/CustomizableDashboard/index.js.map +1 -0
  179. package/dist/components/DateInput/index.cjs +4 -3
  180. package/dist/components/DateInput/index.d.cts +1 -0
  181. package/dist/components/DateInput/index.d.ts +1 -0
  182. package/dist/components/DateInput/index.js +3 -2
  183. package/dist/components/Dropdown/index.cjs +9 -8
  184. package/dist/components/Dropdown/index.js +3 -2
  185. package/dist/components/FilterSummaryBar/index.cjs +13 -0
  186. package/dist/components/FilterSummaryBar/index.cjs.map +1 -0
  187. package/dist/components/FilterSummaryBar/index.d.cts +53 -0
  188. package/dist/components/FilterSummaryBar/index.d.ts +53 -0
  189. package/dist/components/FilterSummaryBar/index.js +4 -0
  190. package/dist/components/FilterSummaryBar/index.js.map +1 -0
  191. package/dist/components/FreshnessBadge/index.cjs +25 -0
  192. package/dist/components/FreshnessBadge/index.cjs.map +1 -0
  193. package/dist/components/FreshnessBadge/index.d.cts +49 -0
  194. package/dist/components/FreshnessBadge/index.d.ts +49 -0
  195. package/dist/components/FreshnessBadge/index.js +4 -0
  196. package/dist/components/FreshnessBadge/index.js.map +1 -0
  197. package/dist/components/GlossaryTooltip/index.cjs +15 -0
  198. package/dist/components/GlossaryTooltip/index.cjs.map +1 -0
  199. package/dist/components/GlossaryTooltip/index.d.cts +64 -0
  200. package/dist/components/GlossaryTooltip/index.d.ts +64 -0
  201. package/dist/components/GlossaryTooltip/index.js +6 -0
  202. package/dist/components/GlossaryTooltip/index.js.map +1 -0
  203. package/dist/components/Input/index.cjs +20 -3
  204. package/dist/components/Input/index.d.cts +37 -2
  205. package/dist/components/Input/index.d.ts +37 -2
  206. package/dist/components/Input/index.js +2 -1
  207. package/dist/components/KeyboardShortcutsOverlay/index.cjs +21 -0
  208. package/dist/components/KeyboardShortcutsOverlay/index.cjs.map +1 -0
  209. package/dist/components/KeyboardShortcutsOverlay/index.d.cts +54 -0
  210. package/dist/components/KeyboardShortcutsOverlay/index.d.ts +54 -0
  211. package/dist/components/KeyboardShortcutsOverlay/index.js +8 -0
  212. package/dist/components/KeyboardShortcutsOverlay/index.js.map +1 -0
  213. package/dist/components/Markdown/index.cjs +10 -10
  214. package/dist/components/Markdown/index.js +2 -2
  215. package/dist/components/MediaEditor/index.cjs +10 -9
  216. package/dist/components/MediaEditor/index.js +5 -4
  217. package/dist/components/PhoneInput/index.cjs +5 -4
  218. package/dist/components/PhoneInput/index.js +3 -2
  219. package/dist/components/Progress/index.d.cts +1 -1
  220. package/dist/components/Progress/index.d.ts +1 -1
  221. package/dist/components/Radio/index.cjs +5 -4
  222. package/dist/components/Radio/index.d.cts +9 -1
  223. package/dist/components/Radio/index.d.ts +9 -1
  224. package/dist/components/Radio/index.js +2 -1
  225. package/dist/components/ReadingProgressBar/index.cjs +13 -0
  226. package/dist/components/ReadingProgressBar/index.cjs.map +1 -0
  227. package/dist/components/ReadingProgressBar/index.d.cts +20 -0
  228. package/dist/components/ReadingProgressBar/index.d.ts +20 -0
  229. package/dist/components/ReadingProgressBar/index.js +4 -0
  230. package/dist/components/ReadingProgressBar/index.js.map +1 -0
  231. package/dist/components/RichTextEditor/index.cjs +7 -6
  232. package/dist/components/RichTextEditor/index.js +4 -3
  233. package/dist/components/SectionSpyNav/index.cjs +15 -0
  234. package/dist/components/SectionSpyNav/index.cjs.map +1 -0
  235. package/dist/components/SectionSpyNav/index.d.cts +63 -0
  236. package/dist/components/SectionSpyNav/index.d.ts +63 -0
  237. package/dist/components/SectionSpyNav/index.js +6 -0
  238. package/dist/components/SectionSpyNav/index.js.map +1 -0
  239. package/dist/components/Select/index.cjs +5 -3
  240. package/dist/components/Select/index.d.cts +56 -9
  241. package/dist/components/Select/index.d.ts +56 -9
  242. package/dist/components/Select/index.js +3 -1
  243. package/dist/components/Slider/index.d.cts +2 -2
  244. package/dist/components/Slider/index.d.ts +2 -2
  245. package/dist/components/SourceTip/index.cjs +15 -0
  246. package/dist/components/SourceTip/index.cjs.map +1 -0
  247. package/dist/components/SourceTip/index.d.cts +58 -0
  248. package/dist/components/SourceTip/index.d.ts +58 -0
  249. package/dist/components/SourceTip/index.js +6 -0
  250. package/dist/components/SourceTip/index.js.map +1 -0
  251. package/dist/components/Sparkline/index.cjs +13 -0
  252. package/dist/components/Sparkline/index.cjs.map +1 -0
  253. package/dist/components/Sparkline/index.d.cts +53 -0
  254. package/dist/components/Sparkline/index.d.ts +53 -0
  255. package/dist/components/Sparkline/index.js +4 -0
  256. package/dist/components/Sparkline/index.js.map +1 -0
  257. package/dist/components/Spinner/index.d.cts +1 -1
  258. package/dist/components/Spinner/index.d.ts +1 -1
  259. package/dist/components/SuperChat/index.cjs +8 -7
  260. package/dist/components/SuperChat/index.cjs.map +1 -1
  261. package/dist/components/SuperChat/index.js +4 -3
  262. package/dist/components/SuperChat/index.js.map +1 -1
  263. package/dist/components/SuperChat/plugins/index.cjs +2 -22
  264. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  265. package/dist/components/SuperChat/plugins/index.js +1 -21
  266. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  267. package/dist/components/Text/index.d.cts +1 -1
  268. package/dist/components/Text/index.d.ts +1 -1
  269. package/dist/components/Textarea/index.cjs +5 -3
  270. package/dist/components/Textarea/index.d.cts +19 -1
  271. package/dist/components/Textarea/index.d.ts +19 -1
  272. package/dist/components/Textarea/index.js +3 -1
  273. package/dist/datavis.cjs +1 -1
  274. package/dist/datavis.js +1 -1
  275. package/dist/esheet.cjs +11 -10
  276. package/dist/esheet.cjs.map +1 -1
  277. package/dist/esheet.js +8 -7
  278. package/dist/esheet.js.map +1 -1
  279. package/dist/hooks/index.cjs +27 -17
  280. package/dist/hooks/index.d.cts +16 -1
  281. package/dist/hooks/index.d.ts +16 -1
  282. package/dist/hooks/index.js +3 -1
  283. package/dist/index.cjs +1026 -651
  284. package/dist/index.cjs.map +1 -1
  285. package/dist/index.d.cts +83 -10
  286. package/dist/index.d.ts +83 -10
  287. package/dist/index.js +316 -53
  288. package/dist/index.js.map +1 -1
  289. package/dist/kerebron.cjs +200 -68
  290. package/dist/kerebron.cjs.map +1 -1
  291. package/dist/kerebron.css +129 -0
  292. package/dist/kerebron.d.cts +52 -3
  293. package/dist/kerebron.d.ts +52 -3
  294. package/dist/kerebron.js +201 -69
  295. package/dist/kerebron.js.map +1 -1
  296. package/dist/styles.css +1 -1
  297. package/dist/tailwind-preset.cjs +4 -4
  298. package/dist/tailwind-preset.js +1 -1
  299. package/dist/utils/index.cjs +9 -9
  300. package/dist/utils/index.js +1 -1
  301. package/package.json +13 -4
  302. package/dist/chunk-5IDYOJHO.cjs.map +0 -1
  303. package/dist/chunk-6ECKH4DJ.cjs +0 -147
  304. package/dist/chunk-6ECKH4DJ.cjs.map +0 -1
  305. package/dist/chunk-6J7UGYT5.cjs.map +0 -1
  306. package/dist/chunk-AFGADE3B.js.map +0 -1
  307. package/dist/chunk-CVZYOMEW.js.map +0 -1
  308. package/dist/chunk-DLBV42JD.js.map +0 -1
  309. package/dist/chunk-EGWWTIWS.js.map +0 -1
  310. package/dist/chunk-GTHNWP4P.js.map +0 -1
  311. package/dist/chunk-KFLDXJEE.js.map +0 -1
  312. package/dist/chunk-MJFF4AXH.cjs.map +0 -1
  313. package/dist/chunk-OAHORW4N.cjs.map +0 -1
  314. package/dist/chunk-P6L74SKG.js.map +0 -1
  315. package/dist/chunk-QUUBTNMH.js.map +0 -1
  316. package/dist/chunk-S3MKIDYG.cjs.map +0 -1
  317. package/dist/chunk-WUNWHOLA.cjs.map +0 -1
  318. package/dist/chunk-XB54G7WS.cjs.map +0 -1
  319. package/dist/chunk-YXCE2HSK.js +0 -124
  320. package/dist/chunk-YXCE2HSK.js.map +0 -1
  321. package/dist/chunk-ZBI52NP2.cjs.map +0 -1
  322. package/dist/collabKit-QZL4P5T5.js.map +0 -1
  323. package/dist/collabKit-UF7E6V3N.cjs.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { floatingGroupLabelVariants, floatingGroupVariants } from './chunk-3IMM2PM4.js';
1
2
  import { cn } from './chunk-TQONQSJO.js';
2
3
  import * as React from 'react';
3
4
  import { cva } from 'class-variance-authority';
@@ -145,6 +146,7 @@ var Checkbox = React.forwardRef(
145
146
  Checkbox.displayName = "Checkbox";
146
147
  function CheckboxGroup({
147
148
  label,
149
+ labelVariant = "stacked",
148
150
  description,
149
151
  error,
150
152
  orientation = "vertical",
@@ -154,6 +156,19 @@ function CheckboxGroup({
154
156
  const groupId = React.useId();
155
157
  const descriptionId = `${groupId}-description`;
156
158
  const errorId = `${groupId}-error`;
159
+ const isFloating = labelVariant === "floating" && !!label;
160
+ const itemsElement = /* @__PURE__ */ jsx(
161
+ "div",
162
+ {
163
+ role: "group",
164
+ "data-slot": "checkbox-group-items",
165
+ className: cn(
166
+ "flex gap-4",
167
+ orientation === "vertical" && "flex-col gap-2"
168
+ ),
169
+ children
170
+ }
171
+ );
157
172
  return /* @__PURE__ */ jsxs(
158
173
  "fieldset",
159
174
  {
@@ -165,31 +180,47 @@ function CheckboxGroup({
165
180
  "legend",
166
181
  {
167
182
  "data-slot": "checkbox-group-legend",
168
- className: "text-foreground mb-1 text-sm font-medium",
183
+ className: cn(
184
+ // Legends are excluded from the fieldset's flex layout; explicit
185
+ // margin matches the stacked Input label's 6px gap.
186
+ "text-foreground mb-1.5 text-sm font-medium",
187
+ isFloating && "sr-only"
188
+ ),
169
189
  children: label
170
190
  }
171
191
  ),
192
+ isFloating ? /* @__PURE__ */ jsxs(
193
+ "div",
194
+ {
195
+ "data-slot": "checkbox-group-field",
196
+ className: floatingGroupVariants({ hasError: !!error }),
197
+ children: [
198
+ /* @__PURE__ */ jsx(
199
+ "span",
200
+ {
201
+ "aria-hidden": "true",
202
+ "data-slot": "checkbox-group-floating-label",
203
+ className: floatingGroupLabelVariants({ hasError: !!error }),
204
+ children: label
205
+ }
206
+ ),
207
+ itemsElement
208
+ ]
209
+ }
210
+ ) : null,
172
211
  description && /* @__PURE__ */ jsx(
173
212
  "p",
174
213
  {
175
214
  id: descriptionId,
176
215
  "data-slot": "checkbox-group-description",
177
- className: "text-muted-foreground mb-3 text-xs",
178
- children: description
179
- }
180
- ),
181
- /* @__PURE__ */ jsx(
182
- "div",
183
- {
184
- role: "group",
185
- "data-slot": "checkbox-group-items",
186
216
  className: cn(
187
- "flex gap-4",
188
- orientation === "vertical" && "flex-col gap-2"
217
+ "text-muted-foreground text-xs",
218
+ isFloating ? "mt-1" : "mb-3"
189
219
  ),
190
- children
220
+ children: description
191
221
  }
192
222
  ),
223
+ !isFloating && itemsElement,
193
224
  error && /* @__PURE__ */ jsx(
194
225
  "p",
195
226
  {
@@ -257,5 +288,5 @@ function MinusIcon({ size, className }) {
257
288
  }
258
289
 
259
290
  export { Checkbox, CheckboxGroup, checkboxVariants };
260
- //# sourceMappingURL=chunk-KFLDXJEE.js.map
261
- //# sourceMappingURL=chunk-KFLDXJEE.js.map
291
+ //# sourceMappingURL=chunk-753Z3NXL.js.map
292
+ //# sourceMappingURL=chunk-753Z3NXL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"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","file":"chunk-753Z3NXL.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport {\n floatingGroupVariants,\n floatingGroupLabelVariants,\n} from '../Input/Input';\n\nconst checkboxVariants = cva(\n [\n 'shrink-0 appearance-none',\n 'border-2 border-input rounded',\n 'bg-background',\n 'transition-all duration-150',\n 'cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'checked:bg-primary-800 checked:border-primary-500',\n 'indeterminate:bg-primary-800 indeterminate:border-primary-500',\n ],\n {\n variants: {\n size: {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport interface CheckboxProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>,\n VariantProps<typeof checkboxVariants> {\n /** Label for the checkbox */\n label?: string;\n /** Description text below the label */\n description?: string;\n /** Indeterminate state (neither checked nor unchecked) */\n indeterminate?: boolean;\n /** Error message */\n error?: string;\n /** Position of the label */\n labelPosition?: 'left' | 'right';\n}\n\n/**\n * An accessible checkbox component with support for indeterminate state.\n *\n * @example\n * ```tsx\n * <Checkbox label=\"Accept terms and conditions\" />\n * <Checkbox label=\"Newsletter\" description=\"Receive updates about new features\" />\n * <Checkbox indeterminate label=\"Select all\" />\n * ```\n */\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n size,\n label,\n description,\n indeterminate = false,\n error,\n labelPosition = 'right',\n id,\n disabled,\n ...props\n },\n ref\n ) => {\n const internalRef = React.useRef<HTMLInputElement>(null);\n const generatedId = React.useId();\n const checkboxId = id || generatedId;\n const descriptionId = `${checkboxId}-description`;\n const errorId = `${checkboxId}-error`;\n\n // Handle indeterminate state\n React.useEffect(() => {\n const checkbox = internalRef.current;\n if (checkbox) {\n checkbox.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n // Combine refs\n React.useImperativeHandle(ref, () => internalRef.current!);\n\n const checkboxElement = (\n <span\n data-slot=\"checkbox-indicator\"\n className=\"relative inline-flex items-center justify-center\"\n >\n <input\n ref={internalRef}\n data-slot=\"checkbox\"\n id={checkboxId}\n type=\"checkbox\"\n disabled={disabled}\n aria-describedby={\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n aria-invalid={!!error}\n className={cn('peer', checkboxVariants({ size }), className)}\n {...props}\n />\n {/* Custom check icon overlay */}\n <CheckIcon\n size={size}\n className=\"pointer-events-none absolute text-white opacity-0 transition-opacity peer-checked:opacity-100\"\n />\n {/* Custom indeterminate icon overlay */}\n <MinusIcon\n size={size}\n className=\"pointer-events-none absolute text-white opacity-0 transition-opacity peer-indeterminate:opacity-100\"\n />\n </span>\n );\n\n const labelElement = label && (\n <div className=\"flex flex-col\">\n <label\n htmlFor={checkboxId}\n data-slot=\"checkbox-label\"\n className={cn(\n 'text-foreground cursor-pointer text-sm font-medium select-none',\n disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n {label}\n </label>\n {description && (\n <p\n id={descriptionId}\n data-slot=\"checkbox-description\"\n className=\"text-muted-foreground mt-0.5 text-xs\"\n >\n {description}\n </p>\n )}\n </div>\n );\n\n return (\n <div data-slot=\"checkbox-wrapper\" className=\"flex flex-col gap-1\">\n <div\n data-slot=\"checkbox-row\"\n className={cn(\n 'flex gap-2',\n description ? 'items-start' : 'items-center',\n labelPosition === 'left' && 'flex-row-reverse'\n )}\n >\n {checkboxElement}\n {labelElement}\n </div>\n {error && (\n <p\n id={errorId}\n data-slot=\"checkbox-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n\n// ============================================================================\n// Checkbox Group\n// ============================================================================\n\nexport interface CheckboxGroupProps {\n /** Group label */\n label?: string;\n /**\n * How the group label is rendered.\n * - `stacked` (default): label above the options.\n * - `floating`: renders the group as a bordered field matching floating\n * inputs, with the label fixed in the floated position so mixed forms\n * stay vertically aligned.\n */\n labelVariant?: 'stacked' | 'floating';\n /** Description for the group */\n description?: string;\n /** Error message for the group */\n error?: string;\n /** Orientation of checkboxes */\n orientation?: 'horizontal' | 'vertical';\n /** Children checkboxes */\n children: React.ReactNode;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A container for grouping related checkboxes.\n *\n * @example\n * ```tsx\n * <CheckboxGroup label=\"Interests\" orientation=\"vertical\">\n * <Checkbox label=\"Sports\" />\n * <Checkbox label=\"Music\" />\n * <Checkbox label=\"Travel\" />\n * </CheckboxGroup>\n * ```\n */\nfunction CheckboxGroup({\n label,\n labelVariant = 'stacked',\n description,\n error,\n orientation = 'vertical',\n children,\n className,\n}: CheckboxGroupProps) {\n const groupId = React.useId();\n const descriptionId = `${groupId}-description`;\n const errorId = `${groupId}-error`;\n\n const isFloating = labelVariant === 'floating' && !!label;\n\n const itemsElement = (\n <div\n role=\"group\"\n data-slot=\"checkbox-group-items\"\n className={cn(\n 'flex gap-4',\n orientation === 'vertical' && 'flex-col gap-2'\n )}\n >\n {children}\n </div>\n );\n\n return (\n <fieldset\n data-slot=\"checkbox-group\"\n className={cn('flex flex-col', className)}\n aria-describedby={\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n >\n {label && (\n <legend\n data-slot=\"checkbox-group-legend\"\n className={cn(\n // Legends are excluded from the fieldset's flex layout; explicit\n // margin matches the stacked Input label's 6px gap.\n 'text-foreground mb-1.5 text-sm font-medium',\n isFloating && 'sr-only'\n )}\n >\n {label}\n </legend>\n )}\n {isFloating ? (\n <div\n data-slot=\"checkbox-group-field\"\n className={floatingGroupVariants({ hasError: !!error })}\n >\n <span\n aria-hidden=\"true\"\n data-slot=\"checkbox-group-floating-label\"\n className={floatingGroupLabelVariants({ hasError: !!error })}\n >\n {label}\n </span>\n {itemsElement}\n </div>\n ) : null}\n {description && (\n <p\n id={descriptionId}\n data-slot=\"checkbox-group-description\"\n className={cn(\n 'text-muted-foreground text-xs',\n isFloating ? 'mt-1' : 'mb-3'\n )}\n >\n {description}\n </p>\n )}\n {!isFloating && itemsElement}\n {error && (\n <p\n id={errorId}\n data-slot=\"checkbox-group-error\"\n className=\"text-destructive mt-2 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n </fieldset>\n );\n}\n\nCheckboxGroup.displayName = 'CheckboxGroup';\n\n// ============================================================================\n// Check Icon\n// ============================================================================\n\ninterface CheckIconProps {\n size?: 'sm' | 'md' | 'lg' | null;\n className?: string;\n}\n\nfunction CheckIcon({ size, className }: CheckIconProps) {\n const sizeMap = {\n sm: 10,\n md: 12,\n lg: 14,\n };\n const iconSize = sizeMap[size || 'md'];\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nfunction MinusIcon({ size, className }: CheckIconProps) {\n const sizeMap = {\n sm: 10,\n md: 12,\n lg: 14,\n };\n const iconSize = sizeMap[size || 'md'];\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M5 12h14\" />\n </svg>\n );\n}\n\nexport { Checkbox, CheckboxGroup, checkboxVariants };\n"]}
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var chunkZ5S5JEJD_cjs = require('./chunk-Z5S5JEJD.cjs');
3
4
  var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
4
5
  var React = require('react');
5
6
  var classVarianceAuthority = require('class-variance-authority');
@@ -167,6 +168,7 @@ var Checkbox = React__namespace.forwardRef(
167
168
  Checkbox.displayName = "Checkbox";
168
169
  function CheckboxGroup({
169
170
  label,
171
+ labelVariant = "stacked",
170
172
  description,
171
173
  error,
172
174
  orientation = "vertical",
@@ -176,6 +178,19 @@ function CheckboxGroup({
176
178
  const groupId = React__namespace.useId();
177
179
  const descriptionId = `${groupId}-description`;
178
180
  const errorId = `${groupId}-error`;
181
+ const isFloating = labelVariant === "floating" && !!label;
182
+ const itemsElement = /* @__PURE__ */ jsxRuntime.jsx(
183
+ "div",
184
+ {
185
+ role: "group",
186
+ "data-slot": "checkbox-group-items",
187
+ className: chunkS5RVSXDV_cjs.cn(
188
+ "flex gap-4",
189
+ orientation === "vertical" && "flex-col gap-2"
190
+ ),
191
+ children
192
+ }
193
+ );
179
194
  return /* @__PURE__ */ jsxRuntime.jsxs(
180
195
  "fieldset",
181
196
  {
@@ -187,31 +202,47 @@ function CheckboxGroup({
187
202
  "legend",
188
203
  {
189
204
  "data-slot": "checkbox-group-legend",
190
- className: "text-foreground mb-1 text-sm font-medium",
205
+ className: chunkS5RVSXDV_cjs.cn(
206
+ // Legends are excluded from the fieldset's flex layout; explicit
207
+ // margin matches the stacked Input label's 6px gap.
208
+ "text-foreground mb-1.5 text-sm font-medium",
209
+ isFloating && "sr-only"
210
+ ),
191
211
  children: label
192
212
  }
193
213
  ),
214
+ isFloating ? /* @__PURE__ */ jsxRuntime.jsxs(
215
+ "div",
216
+ {
217
+ "data-slot": "checkbox-group-field",
218
+ className: chunkZ5S5JEJD_cjs.floatingGroupVariants({ hasError: !!error }),
219
+ children: [
220
+ /* @__PURE__ */ jsxRuntime.jsx(
221
+ "span",
222
+ {
223
+ "aria-hidden": "true",
224
+ "data-slot": "checkbox-group-floating-label",
225
+ className: chunkZ5S5JEJD_cjs.floatingGroupLabelVariants({ hasError: !!error }),
226
+ children: label
227
+ }
228
+ ),
229
+ itemsElement
230
+ ]
231
+ }
232
+ ) : null,
194
233
  description && /* @__PURE__ */ jsxRuntime.jsx(
195
234
  "p",
196
235
  {
197
236
  id: descriptionId,
198
237
  "data-slot": "checkbox-group-description",
199
- className: "text-muted-foreground mb-3 text-xs",
200
- children: description
201
- }
202
- ),
203
- /* @__PURE__ */ jsxRuntime.jsx(
204
- "div",
205
- {
206
- role: "group",
207
- "data-slot": "checkbox-group-items",
208
238
  className: chunkS5RVSXDV_cjs.cn(
209
- "flex gap-4",
210
- orientation === "vertical" && "flex-col gap-2"
239
+ "text-muted-foreground text-xs",
240
+ isFloating ? "mt-1" : "mb-3"
211
241
  ),
212
- children
242
+ children: description
213
243
  }
214
244
  ),
245
+ !isFloating && itemsElement,
215
246
  error && /* @__PURE__ */ jsxRuntime.jsx(
216
247
  "p",
217
248
  {
@@ -281,5 +312,5 @@ function MinusIcon({ size, className }) {
281
312
  exports.Checkbox = Checkbox;
282
313
  exports.CheckboxGroup = CheckboxGroup;
283
314
  exports.checkboxVariants = checkboxVariants;
284
- //# sourceMappingURL=chunk-S3MKIDYG.cjs.map
285
- //# sourceMappingURL=chunk-S3MKIDYG.cjs.map
315
+ //# sourceMappingURL=chunk-7AECNMYV.cjs.map
316
+ //# sourceMappingURL=chunk-7AECNMYV.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Checkbox/Checkbox.tsx"],"names":["cva","React","jsxs","jsx","cn","floatingGroupVariants","floatingGroupLabelVariants"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,IAAM,gBAAA,GAAmBA,0BAAA;AAAA,EACvB;AAAA,IACE,0BAAA;AAAA,IACA,+BAAA;AAAA,IACA,eAAA;AAAA,IACA,6BAAA;AAAA,IACA,gBAAA;AAAA,IACA,qGAAA;AAAA,IACA,iDAAA;AAAA,IACA,mDAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;AA4BA,IAAM,QAAA,GAAiBC,gBAAA,CAAA,UAAA;AAAA,EACrB,CACE;AAAA,IACE,SAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA,GAAgB,KAAA;AAAA,IAChB,KAAA;AAAA,IACA,aAAA,GAAgB,OAAA;AAAA,IAChB,EAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,WAAA,GAAoBA,wBAAyB,IAAI,CAAA;AACvD,IAAA,MAAM,cAAoBA,gBAAA,CAAA,KAAA,EAAM;AAChC,IAAA,MAAM,aAAa,EAAA,IAAM,WAAA;AACzB,IAAA,MAAM,aAAA,GAAgB,GAAG,UAAU,CAAA,YAAA,CAAA;AACnC,IAAA,MAAM,OAAA,GAAU,GAAG,UAAU,CAAA,MAAA,CAAA;AAG7B,IAAMA,2BAAU,MAAM;AACpB,MAAA,MAAM,WAAW,WAAA,CAAY,OAAA;AAC7B,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS,aAAA,GAAgB,aAAA;AAAA,MAC3B;AAAA,IACF,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAGlB,IAAMA,gBAAA,CAAA,mBAAA,CAAoB,GAAA,EAAK,MAAM,WAAA,CAAY,OAAQ,CAAA;AAEzD,IAAA,MAAM,eAAA,mBACJC,eAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,oBAAA;AAAA,QACV,SAAA,EAAU,kDAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,WAAA;AAAA,cACL,WAAA,EAAU,UAAA;AAAA,cACV,EAAA,EAAI,UAAA;AAAA,cACJ,IAAA,EAAK,UAAA;AAAA,cACL,QAAA;AAAA,cACA,kBAAA,EACE,CAAC,WAAA,GAAc,aAAA,GAAgB,MAAM,KAAA,GAAQ,OAAA,GAAU,IAAI,CAAA,CACxD,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAAA,cAElB,cAAA,EAAc,CAAC,CAAC,KAAA;AAAA,cAChB,SAAA,EAAWC,qBAAG,MAAA,EAAQ,gBAAA,CAAiB,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,cAC1D,GAAG;AAAA;AAAA,WACN;AAAA,0BAEAD,cAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,IAAA;AAAA,cACA,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BAEAA,cAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,IAAA;AAAA,cACA,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AAAA,KACF;AAGF,IAAA,MAAM,YAAA,GAAe,KAAA,oBACnBD,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,cAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,UAAA;AAAA,UACT,WAAA,EAAU,gBAAA;AAAA,UACV,SAAA,EAAWC,oBAAA;AAAA,YACT,gEAAA;AAAA,YACA,QAAA,IAAY;AAAA,WACd;AAAA,UAEC,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,MACC,WAAA,oBACCD,cAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI,aAAA;AAAA,UACJ,WAAA,EAAU,sBAAA;AAAA,UACV,SAAA,EAAU,sCAAA;AAAA,UAET,QAAA,EAAA;AAAA;AAAA;AACH,KAAA,EAEJ,CAAA;AAGF,IAAA,uBACED,eAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,kBAAA,EAAmB,WAAU,qBAAA,EAC1C,QAAA,EAAA;AAAA,sBAAAA,eAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAU,cAAA;AAAA,UACV,SAAA,EAAWE,oBAAA;AAAA,YACT,YAAA;AAAA,YACA,cAAc,aAAA,GAAgB,cAAA;AAAA,YAC9B,kBAAkB,MAAA,IAAU;AAAA,WAC9B;AAAA,UAEC,QAAA,EAAA;AAAA,YAAA,eAAA;AAAA,YACA;AAAA;AAAA;AAAA,OACH;AAAA,MACC,KAAA,oBACCD,cAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI,OAAA;AAAA,UACJ,WAAA,EAAU,gBAAA;AAAA,UACV,SAAA,EAAU,wDAAA;AAAA,UACV,IAAA,EAAK,OAAA;AAAA,UAEJ,QAAA,EAAA;AAAA;AAAA;AACH,KAAA,EAEJ,CAAA;AAAA,EAEJ;AACF;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;AAyCvB,SAAS,aAAA,CAAc;AAAA,EACrB,KAAA;AAAA,EACA,YAAA,GAAe,SAAA;AAAA,EACf,WAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA,GAAc,UAAA;AAAA,EACd,QAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,UAAgBF,gBAAA,CAAA,KAAA,EAAM;AAC5B,EAAA,MAAM,aAAA,GAAgB,GAAG,OAAO,CAAA,YAAA,CAAA;AAChC,EAAA,MAAM,OAAA,GAAU,GAAG,OAAO,CAAA,MAAA,CAAA;AAE1B,EAAA,MAAM,UAAA,GAAa,YAAA,KAAiB,UAAA,IAAc,CAAC,CAAC,KAAA;AAEpD,EAAA,MAAM,YAAA,mBACJE,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAWC,oBAAA;AAAA,QACT,YAAA;AAAA,QACA,gBAAgB,UAAA,IAAc;AAAA,OAChC;AAAA,MAEC;AAAA;AAAA,GACH;AAGF,EAAA,uBACEF,eAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAWE,oBAAA,CAAG,eAAA,EAAiB,SAAS,CAAA;AAAA,MACxC,kBAAA,EACE,CAAC,WAAA,GAAc,aAAA,GAAgB,MAAM,KAAA,GAAQ,OAAA,GAAU,IAAI,CAAA,CACxD,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAAA,MAGjB,QAAA,EAAA;AAAA,QAAA,KAAA,oBACCD,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,uBAAA;AAAA,YACV,SAAA,EAAWC,oBAAA;AAAA;AAAA;AAAA,cAGT,4CAAA;AAAA,cACA,UAAA,IAAc;AAAA,aAChB;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAED,UAAA,mBACCF,eAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,sBAAA;AAAA,YACV,WAAWG,uCAAA,CAAsB,EAAE,UAAU,CAAC,CAAC,OAAO,CAAA;AAAA,YAEtD,QAAA,EAAA;AAAA,8BAAAF,cAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,aAAA,EAAY,MAAA;AAAA,kBACZ,WAAA,EAAU,+BAAA;AAAA,kBACV,WAAWG,4CAAA,CAA2B,EAAE,UAAU,CAAC,CAAC,OAAO,CAAA;AAAA,kBAE1D,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,cACC;AAAA;AAAA;AAAA,SACH,GACE,IAAA;AAAA,QACH,WAAA,oBACCH,cAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,aAAA;AAAA,YACJ,WAAA,EAAU,4BAAA;AAAA,YACV,SAAA,EAAWC,oBAAA;AAAA,cACT,+BAAA;AAAA,cACA,aAAa,MAAA,GAAS;AAAA,aACxB;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAED,CAAC,UAAA,IAAc,YAAA;AAAA,QACf,KAAA,oBACCD,cAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,OAAA;AAAA,YACJ,WAAA,EAAU,sBAAA;AAAA,YACV,SAAA,EAAU,+BAAA;AAAA,YACV,IAAA,EAAK,OAAA;AAAA,YAEJ,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;AAW5B,SAAS,SAAA,CAAU,EAAE,IAAA,EAAM,SAAA,EAAU,EAAmB;AACtD,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,EAAA,EAAI,EAAA;AAAA,IACJ,EAAA,EAAI,EAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AACA,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,IAAQ,IAAI,CAAA;AAErC,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,4BAAA;AAAA,MACN,KAAA,EAAO,QAAA;AAAA,MACP,MAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MACf,SAAA;AAAA,MACA,aAAA,EAAY,MAAA;AAAA,MAEZ,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iBAAA,EAAkB;AAAA;AAAA,GAC5B;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,IAAA,EAAM,SAAA,EAAU,EAAmB;AACtD,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,EAAA,EAAI,EAAA;AAAA,IACJ,EAAA,EAAI,EAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AACA,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,IAAQ,IAAI,CAAA;AAErC,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,4BAAA;AAAA,MACN,KAAA,EAAO,QAAA;AAAA,MACP,MAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MACf,SAAA;AAAA,MACA,aAAA,EAAY,MAAA;AAAA,MAEZ,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW;AAAA;AAAA,GACrB;AAEJ","file":"chunk-7AECNMYV.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport {\n floatingGroupVariants,\n floatingGroupLabelVariants,\n} from '../Input/Input';\n\nconst checkboxVariants = cva(\n [\n 'shrink-0 appearance-none',\n 'border-2 border-input rounded',\n 'bg-background',\n 'transition-all duration-150',\n 'cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'checked:bg-primary-800 checked:border-primary-500',\n 'indeterminate:bg-primary-800 indeterminate:border-primary-500',\n ],\n {\n variants: {\n size: {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport interface CheckboxProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>,\n VariantProps<typeof checkboxVariants> {\n /** Label for the checkbox */\n label?: string;\n /** Description text below the label */\n description?: string;\n /** Indeterminate state (neither checked nor unchecked) */\n indeterminate?: boolean;\n /** Error message */\n error?: string;\n /** Position of the label */\n labelPosition?: 'left' | 'right';\n}\n\n/**\n * An accessible checkbox component with support for indeterminate state.\n *\n * @example\n * ```tsx\n * <Checkbox label=\"Accept terms and conditions\" />\n * <Checkbox label=\"Newsletter\" description=\"Receive updates about new features\" />\n * <Checkbox indeterminate label=\"Select all\" />\n * ```\n */\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n size,\n label,\n description,\n indeterminate = false,\n error,\n labelPosition = 'right',\n id,\n disabled,\n ...props\n },\n ref\n ) => {\n const internalRef = React.useRef<HTMLInputElement>(null);\n const generatedId = React.useId();\n const checkboxId = id || generatedId;\n const descriptionId = `${checkboxId}-description`;\n const errorId = `${checkboxId}-error`;\n\n // Handle indeterminate state\n React.useEffect(() => {\n const checkbox = internalRef.current;\n if (checkbox) {\n checkbox.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n // Combine refs\n React.useImperativeHandle(ref, () => internalRef.current!);\n\n const checkboxElement = (\n <span\n data-slot=\"checkbox-indicator\"\n className=\"relative inline-flex items-center justify-center\"\n >\n <input\n ref={internalRef}\n data-slot=\"checkbox\"\n id={checkboxId}\n type=\"checkbox\"\n disabled={disabled}\n aria-describedby={\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n aria-invalid={!!error}\n className={cn('peer', checkboxVariants({ size }), className)}\n {...props}\n />\n {/* Custom check icon overlay */}\n <CheckIcon\n size={size}\n className=\"pointer-events-none absolute text-white opacity-0 transition-opacity peer-checked:opacity-100\"\n />\n {/* Custom indeterminate icon overlay */}\n <MinusIcon\n size={size}\n className=\"pointer-events-none absolute text-white opacity-0 transition-opacity peer-indeterminate:opacity-100\"\n />\n </span>\n );\n\n const labelElement = label && (\n <div className=\"flex flex-col\">\n <label\n htmlFor={checkboxId}\n data-slot=\"checkbox-label\"\n className={cn(\n 'text-foreground cursor-pointer text-sm font-medium select-none',\n disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n {label}\n </label>\n {description && (\n <p\n id={descriptionId}\n data-slot=\"checkbox-description\"\n className=\"text-muted-foreground mt-0.5 text-xs\"\n >\n {description}\n </p>\n )}\n </div>\n );\n\n return (\n <div data-slot=\"checkbox-wrapper\" className=\"flex flex-col gap-1\">\n <div\n data-slot=\"checkbox-row\"\n className={cn(\n 'flex gap-2',\n description ? 'items-start' : 'items-center',\n labelPosition === 'left' && 'flex-row-reverse'\n )}\n >\n {checkboxElement}\n {labelElement}\n </div>\n {error && (\n <p\n id={errorId}\n data-slot=\"checkbox-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n\n// ============================================================================\n// Checkbox Group\n// ============================================================================\n\nexport interface CheckboxGroupProps {\n /** Group label */\n label?: string;\n /**\n * How the group label is rendered.\n * - `stacked` (default): label above the options.\n * - `floating`: renders the group as a bordered field matching floating\n * inputs, with the label fixed in the floated position so mixed forms\n * stay vertically aligned.\n */\n labelVariant?: 'stacked' | 'floating';\n /** Description for the group */\n description?: string;\n /** Error message for the group */\n error?: string;\n /** Orientation of checkboxes */\n orientation?: 'horizontal' | 'vertical';\n /** Children checkboxes */\n children: React.ReactNode;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A container for grouping related checkboxes.\n *\n * @example\n * ```tsx\n * <CheckboxGroup label=\"Interests\" orientation=\"vertical\">\n * <Checkbox label=\"Sports\" />\n * <Checkbox label=\"Music\" />\n * <Checkbox label=\"Travel\" />\n * </CheckboxGroup>\n * ```\n */\nfunction CheckboxGroup({\n label,\n labelVariant = 'stacked',\n description,\n error,\n orientation = 'vertical',\n children,\n className,\n}: CheckboxGroupProps) {\n const groupId = React.useId();\n const descriptionId = `${groupId}-description`;\n const errorId = `${groupId}-error`;\n\n const isFloating = labelVariant === 'floating' && !!label;\n\n const itemsElement = (\n <div\n role=\"group\"\n data-slot=\"checkbox-group-items\"\n className={cn(\n 'flex gap-4',\n orientation === 'vertical' && 'flex-col gap-2'\n )}\n >\n {children}\n </div>\n );\n\n return (\n <fieldset\n data-slot=\"checkbox-group\"\n className={cn('flex flex-col', className)}\n aria-describedby={\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n >\n {label && (\n <legend\n data-slot=\"checkbox-group-legend\"\n className={cn(\n // Legends are excluded from the fieldset's flex layout; explicit\n // margin matches the stacked Input label's 6px gap.\n 'text-foreground mb-1.5 text-sm font-medium',\n isFloating && 'sr-only'\n )}\n >\n {label}\n </legend>\n )}\n {isFloating ? (\n <div\n data-slot=\"checkbox-group-field\"\n className={floatingGroupVariants({ hasError: !!error })}\n >\n <span\n aria-hidden=\"true\"\n data-slot=\"checkbox-group-floating-label\"\n className={floatingGroupLabelVariants({ hasError: !!error })}\n >\n {label}\n </span>\n {itemsElement}\n </div>\n ) : null}\n {description && (\n <p\n id={descriptionId}\n data-slot=\"checkbox-group-description\"\n className={cn(\n 'text-muted-foreground text-xs',\n isFloating ? 'mt-1' : 'mb-3'\n )}\n >\n {description}\n </p>\n )}\n {!isFloating && itemsElement}\n {error && (\n <p\n id={errorId}\n data-slot=\"checkbox-group-error\"\n className=\"text-destructive mt-2 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n </fieldset>\n );\n}\n\nCheckboxGroup.displayName = 'CheckboxGroup';\n\n// ============================================================================\n// Check Icon\n// ============================================================================\n\ninterface CheckIconProps {\n size?: 'sm' | 'md' | 'lg' | null;\n className?: string;\n}\n\nfunction CheckIcon({ size, className }: CheckIconProps) {\n const sizeMap = {\n sm: 10,\n md: 12,\n lg: 14,\n };\n const iconSize = sizeMap[size || 'md'];\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nfunction MinusIcon({ size, className }: CheckIconProps) {\n const sizeMap = {\n sm: 10,\n md: 12,\n lg: 14,\n };\n const iconSize = sizeMap[size || 'md'];\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M5 12h14\" />\n </svg>\n );\n}\n\nexport { Checkbox, CheckboxGroup, checkboxVariants };\n"]}
@@ -0,0 +1,92 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+
5
+ // src/hooks/useScrollSpy.ts
6
+ function useScrollSpy({
7
+ selectors,
8
+ ids,
9
+ rootMargin = "0px 0px -60% 0px",
10
+ threshold = 0,
11
+ root,
12
+ enabled = true
13
+ } = {}) {
14
+ const [activeId, setActiveId] = react.useState(null);
15
+ const visibleEntries = react.useRef(
16
+ /* @__PURE__ */ new Map()
17
+ );
18
+ const rootEl = root?.current ?? null;
19
+ react.useEffect(() => {
20
+ if (!enabled) return;
21
+ const container = rootEl ?? document;
22
+ function resolveElements() {
23
+ let els = [];
24
+ if (ids && ids.length > 0) {
25
+ els = ids.map((id) => document.getElementById(id)).filter((el) => el !== null);
26
+ } else if (selectors) {
27
+ els = Array.from(container.querySelectorAll(selectors));
28
+ }
29
+ return els.filter((el) => el.id);
30
+ }
31
+ let intersectionObserver = null;
32
+ let mutationObserver = null;
33
+ function startObserving() {
34
+ const elements = resolveElements();
35
+ if (elements.length === 0) return false;
36
+ intersectionObserver = new IntersectionObserver(
37
+ (entries2) => {
38
+ for (const entry of entries2) {
39
+ if (entry.isIntersecting) {
40
+ visibleEntries.current.set(entry.target.id, entry);
41
+ } else {
42
+ visibleEntries.current.delete(entry.target.id);
43
+ }
44
+ }
45
+ if (visibleEntries.current.size > 0) {
46
+ let topmost = null;
47
+ let topmostTop = Infinity;
48
+ for (const [id, entry] of visibleEntries.current) {
49
+ const top = entry.boundingClientRect.top;
50
+ if (top < topmostTop) {
51
+ topmostTop = top;
52
+ topmost = id;
53
+ }
54
+ }
55
+ if (topmost) {
56
+ setActiveId(topmost);
57
+ }
58
+ }
59
+ },
60
+ {
61
+ root: rootEl,
62
+ rootMargin,
63
+ threshold
64
+ }
65
+ );
66
+ for (const el of elements) {
67
+ intersectionObserver.observe(el);
68
+ }
69
+ mutationObserver?.disconnect();
70
+ mutationObserver = null;
71
+ return true;
72
+ }
73
+ if (!startObserving()) {
74
+ const watchRoot = rootEl ?? document.body;
75
+ mutationObserver = new MutationObserver(() => {
76
+ startObserving();
77
+ });
78
+ mutationObserver.observe(watchRoot, { childList: true, subtree: true });
79
+ }
80
+ const entries = visibleEntries.current;
81
+ return () => {
82
+ mutationObserver?.disconnect();
83
+ intersectionObserver?.disconnect();
84
+ entries.clear();
85
+ };
86
+ }, [selectors, ids, rootMargin, threshold, rootEl, enabled]);
87
+ return { activeId };
88
+ }
89
+
90
+ exports.useScrollSpy = useScrollSpy;
91
+ //# sourceMappingURL=chunk-7IKLGH3Z.cjs.map
92
+ //# sourceMappingURL=chunk-7IKLGH3Z.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useScrollSpy.ts"],"names":["useState","useRef","useEffect","entries"],"mappings":";;;;;AA8CO,SAAS,YAAA,CAAa;AAAA,EAC3B,SAAA;AAAA,EACA,GAAA;AAAA,EACA,UAAA,GAAa,kBAAA;AAAA,EACb,SAAA,GAAY,CAAA;AAAA,EACZ,IAAA;AAAA,EACA,OAAA,GAAU;AACZ,CAAA,GAAyB,EAAC,EAAuB;AAC/C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAC5D,EAAA,MAAM,cAAA,GAAiBC,YAAA;AAAA,wBACjB,GAAA;AAAI,GACV;AAGA,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,IAAW,IAAA;AAEhC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,YAAY,MAAA,IAAU,QAAA;AAG5B,IAAA,SAAS,eAAA,GAA6B;AACpC,MAAA,IAAI,MAAiB,EAAC;AACtB,MAAA,IAAI,GAAA,IAAO,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG;AACzB,QAAA,GAAA,GAAM,GAAA,CACH,GAAA,CAAI,CAAC,EAAA,KAAO,QAAA,CAAS,cAAA,CAAe,EAAE,CAAC,CAAA,CACvC,MAAA,CAAO,CAAC,EAAA,KAA0B,OAAO,IAAI,CAAA;AAAA,MAClD,WAAW,SAAA,EAAW;AACpB,QAAA,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,gBAAA,CAAiB,SAAS,CAAC,CAAA;AAAA,MACxD;AACA,MAAA,OAAO,GAAA,CAAI,MAAA,CAAO,CAAC,EAAA,KAAO,GAAG,EAAE,CAAA;AAAA,IACjC;AAEA,IAAA,IAAI,oBAAA,GAAoD,IAAA;AACxD,IAAA,IAAI,gBAAA,GAA4C,IAAA;AAEhD,IAAA,SAAS,cAAA,GAA0B;AACjC,MAAA,MAAM,WAAW,eAAA,EAAgB;AACjC,MAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAElC,MAAA,oBAAA,GAAuB,IAAI,oBAAA;AAAA,QACzB,CAACC,QAAAA,KAAY;AACX,UAAA,KAAA,MAAW,SAASA,QAAAA,EAAS;AAC3B,YAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,cAAA,cAAA,CAAe,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,IAAI,KAAK,CAAA;AAAA,YACnD,CAAA,MAAO;AACL,cAAA,cAAA,CAAe,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,EAAE,CAAA;AAAA,YAC/C;AAAA,UACF;AAGA,UAAA,IAAI,cAAA,CAAe,OAAA,CAAQ,IAAA,GAAO,CAAA,EAAG;AACnC,YAAA,IAAI,OAAA,GAAyB,IAAA;AAC7B,YAAA,IAAI,UAAA,GAAa,QAAA;AAEjB,YAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,eAAe,OAAA,EAAS;AAChD,cAAA,MAAM,GAAA,GAAM,MAAM,kBAAA,CAAmB,GAAA;AACrC,cAAA,IAAI,MAAM,UAAA,EAAY;AACpB,gBAAA,UAAA,GAAa,GAAA;AACb,gBAAA,OAAA,GAAU,EAAA;AAAA,cACZ;AAAA,YACF;AAEA,YAAA,IAAI,OAAA,EAAS;AACX,cAAA,WAAA,CAAY,OAAO,CAAA;AAAA,YACrB;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,UAAA;AAAA,UACA;AAAA;AACF,OACF;AAEA,MAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,QAAA,oBAAA,CAAqB,QAAQ,EAAE,CAAA;AAAA,MACjC;AAGA,MAAA,gBAAA,EAAkB,UAAA,EAAW;AAC7B,MAAA,gBAAA,GAAmB,IAAA;AACnB,MAAA,OAAO,IAAA;AAAA,IACT;AAIA,IAAA,IAAI,CAAC,gBAAe,EAAG;AACrB,MAAA,MAAM,SAAA,GAAY,UAAU,QAAA,CAAS,IAAA;AACrC,MAAA,gBAAA,GAAmB,IAAI,iBAAiB,MAAM;AAC5C,QAAA,cAAA,EAAe;AAAA,MACjB,CAAC,CAAA;AACD,MAAA,gBAAA,CAAiB,QAAQ,SAAA,EAAW,EAAE,WAAW,IAAA,EAAM,OAAA,EAAS,MAAM,CAAA;AAAA,IACxE;AAEA,IAAA,MAAM,UAAU,cAAA,CAAe,OAAA;AAC/B,IAAA,OAAO,MAAM;AACX,MAAA,gBAAA,EAAkB,UAAA,EAAW;AAC7B,MAAA,oBAAA,EAAsB,UAAA,EAAW;AACjC,MAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,IAChB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,GAAA,EAAK,YAAY,SAAA,EAAW,MAAA,EAAQ,OAAO,CAAC,CAAA;AAE3D,EAAA,OAAO,EAAE,QAAA,EAAS;AACpB","file":"chunk-7IKLGH3Z.cjs","sourcesContent":["import { useEffect, useState, useRef, type RefObject } from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseScrollSpyOptions {\n /** CSS selector for the elements to observe (e.g. 'h2, h3, h4') */\n selectors?: string;\n /** Explicit list of element IDs to observe (alternative to selectors) */\n ids?: string[];\n /** IntersectionObserver root margin (default: '0px 0px -60% 0px') */\n rootMargin?: string;\n /** IntersectionObserver threshold (default: 0) */\n threshold?: number | number[];\n /** Scroll container element ref. Defaults to document viewport. */\n root?: RefObject<HTMLElement | null>;\n /** Whether the hook is active (default: true) */\n enabled?: boolean;\n}\n\nexport interface UseScrollSpyReturn {\n /** The ID of the currently active (in-view) element */\n activeId: string | null;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\n/**\n * Tracks which section is currently in the viewport using IntersectionObserver.\n * Pairs naturally with `TableOfContents` to highlight the active heading.\n *\n * @example\n * ```tsx\n * function DocsPage() {\n * const { activeId } = useScrollSpy({ selectors: 'h2, h3' });\n * return (\n * <aside>\n * <TableOfContents activeId={activeId} />\n * </aside>\n * );\n * }\n * ```\n */\nexport function useScrollSpy({\n selectors,\n ids,\n rootMargin = '0px 0px -60% 0px',\n threshold = 0,\n root,\n enabled = true,\n}: UseScrollSpyOptions = {}): UseScrollSpyReturn {\n const [activeId, setActiveId] = useState<string | null>(null);\n const visibleEntries = useRef<Map<string, IntersectionObserverEntry>>(\n new Map()\n );\n\n // Track root.current so the effect re-runs when the ref attaches\n const rootEl = root?.current ?? null;\n\n useEffect(() => {\n if (!enabled) return;\n\n const container = rootEl ?? document;\n\n // Resolve target elements from the DOM\n function resolveElements(): Element[] {\n let els: Element[] = [];\n if (ids && ids.length > 0) {\n els = ids\n .map((id) => document.getElementById(id))\n .filter((el): el is HTMLElement => el !== null);\n } else if (selectors) {\n els = Array.from(container.querySelectorAll(selectors));\n }\n return els.filter((el) => el.id);\n }\n\n let intersectionObserver: IntersectionObserver | null = null;\n let mutationObserver: MutationObserver | null = null;\n\n function startObserving(): boolean {\n const elements = resolveElements();\n if (elements.length === 0) return false;\n\n intersectionObserver = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n visibleEntries.current.set(entry.target.id, entry);\n } else {\n visibleEntries.current.delete(entry.target.id);\n }\n }\n\n // Pick the topmost visible heading (by DOM order)\n if (visibleEntries.current.size > 0) {\n let topmost: string | null = null;\n let topmostTop = Infinity;\n\n for (const [id, entry] of visibleEntries.current) {\n const top = entry.boundingClientRect.top;\n if (top < topmostTop) {\n topmostTop = top;\n topmost = id;\n }\n }\n\n if (topmost) {\n setActiveId(topmost);\n }\n }\n },\n {\n root: rootEl,\n rootMargin,\n threshold,\n }\n );\n\n for (const el of elements) {\n intersectionObserver.observe(el);\n }\n\n // Elements found — stop watching for new DOM nodes\n mutationObserver?.disconnect();\n mutationObserver = null;\n return true;\n }\n\n // If target elements don't exist yet (e.g. headings mount after ToC),\n // watch for DOM changes and retry until they appear.\n if (!startObserving()) {\n const watchRoot = rootEl ?? document.body;\n mutationObserver = new MutationObserver(() => {\n startObserving();\n });\n mutationObserver.observe(watchRoot, { childList: true, subtree: true });\n }\n\n const entries = visibleEntries.current;\n return () => {\n mutationObserver?.disconnect();\n intersectionObserver?.disconnect();\n entries.clear();\n };\n }, [selectors, ids, rootMargin, threshold, rootEl, enabled]);\n\n return { activeId };\n}\n"]}