@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
@@ -0,0 +1,708 @@
1
+ import { Switch } from './chunk-AQ564XO7.js';
2
+ import { Sheet, SheetHeader, SheetTitle, SheetDescription, SheetBody, SheetFooter } from './chunk-LMBXJZLG.js';
3
+ import { Button } from './chunk-D2GID3YK.js';
4
+ import { cn } from './chunk-TQONQSJO.js';
5
+ import * as React2 from 'react';
6
+ import { createPortal } from 'react-dom';
7
+ import { useSensors, useSensor, PointerSensor, KeyboardSensor, DndContext, pointerWithin, closestCenter, rectIntersection, useDroppable } from '@dnd-kit/core';
8
+ import { sortableKeyboardCoordinates, arrayMove, SortableContext, verticalListSortingStrategy, useSortable } from '@dnd-kit/sortable';
9
+ import { CSS } from '@dnd-kit/utilities';
10
+ import { SlidersHorizontal, Columns3, Columns2, Square, RotateCcw, GripVertical } from 'lucide-react';
11
+ import { jsxs, jsx } from 'react/jsx-runtime';
12
+
13
+ function DashboardCustomizePanel({
14
+ open,
15
+ onOpenChange,
16
+ widgets,
17
+ hiddenIds,
18
+ onToggleWidget,
19
+ onReset,
20
+ title = "Customize dashboard",
21
+ description = "Choose which widgets appear on this dashboard. Drag a widget by its handle to rearrange it."
22
+ }) {
23
+ const hidden = React2.useMemo(() => new Set(hiddenIds), [hiddenIds]);
24
+ const groups = React2.useMemo(() => {
25
+ const map = /* @__PURE__ */ new Map();
26
+ for (const w of widgets) {
27
+ const key = w.category ?? "";
28
+ const list = map.get(key);
29
+ if (list) list.push(w);
30
+ else map.set(key, [w]);
31
+ }
32
+ return Array.from(map.entries());
33
+ }, [widgets]);
34
+ const visibleCount = widgets.length - hidden.size;
35
+ return /* @__PURE__ */ jsxs(
36
+ Sheet,
37
+ {
38
+ open,
39
+ onOpenChange,
40
+ side: "end",
41
+ "aria-label": title,
42
+ children: [
43
+ /* @__PURE__ */ jsx(SheetHeader, { children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
44
+ /* @__PURE__ */ jsx(SheetTitle, { children: title }),
45
+ /* @__PURE__ */ jsx(SheetDescription, { children: description })
46
+ ] }) }),
47
+ /* @__PURE__ */ jsxs(SheetBody, { className: "flex flex-col gap-5", children: [
48
+ /* @__PURE__ */ jsxs("p", { className: "text-muted-foreground text-xs font-medium", children: [
49
+ visibleCount,
50
+ " of ",
51
+ widgets.length,
52
+ " widgets shown"
53
+ ] }),
54
+ groups.map(([category, items]) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
55
+ category && /* @__PURE__ */ jsx("h3", { className: "text-muted-foreground pb-1 text-xs font-semibold tracking-wide uppercase", children: category }),
56
+ /* @__PURE__ */ jsx("ul", { className: "flex list-none flex-col gap-1 p-0", children: items.map((widget) => {
57
+ const isVisible = !hidden.has(widget.id);
58
+ return /* @__PURE__ */ jsxs(
59
+ "li",
60
+ {
61
+ className: cn(
62
+ "border-border flex items-center gap-3 rounded-lg border p-3 transition-colors",
63
+ isVisible ? "bg-card" : "bg-muted/50"
64
+ ),
65
+ children: [
66
+ widget.icon && /* @__PURE__ */ jsx(
67
+ "span",
68
+ {
69
+ className: cn(
70
+ "shrink-0",
71
+ isVisible ? "text-primary-600 dark:text-primary-400" : "text-muted-foreground"
72
+ ),
73
+ children: widget.icon
74
+ }
75
+ ),
76
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 flex-col", children: [
77
+ /* @__PURE__ */ jsx(
78
+ "span",
79
+ {
80
+ className: cn(
81
+ "truncate text-sm font-medium",
82
+ isVisible ? "text-foreground" : "text-muted-foreground"
83
+ ),
84
+ children: widget.title
85
+ }
86
+ ),
87
+ widget.description && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground truncate text-xs", children: widget.description })
88
+ ] }),
89
+ /* @__PURE__ */ jsx(
90
+ Switch,
91
+ {
92
+ checked: isVisible,
93
+ onCheckedChange: (checked) => onToggleWidget(widget.id, checked),
94
+ "aria-label": `Show ${widget.title}`
95
+ }
96
+ )
97
+ ]
98
+ },
99
+ widget.id
100
+ );
101
+ }) })
102
+ ] }, category || "general"))
103
+ ] }),
104
+ onReset && /* @__PURE__ */ jsx(SheetFooter, { children: /* @__PURE__ */ jsx(
105
+ Button,
106
+ {
107
+ variant: "outline",
108
+ size: "sm",
109
+ onClick: onReset,
110
+ leftIcon: /* @__PURE__ */ jsx(RotateCcw, { "aria-hidden": "true", className: "h-4 w-4" }),
111
+ children: "Reset layout"
112
+ }
113
+ ) })
114
+ ]
115
+ }
116
+ );
117
+ }
118
+ var COL_IDS = ["column-0", "column-1", "column-2"];
119
+ var DEFAULT_HANDLE_SELECTOR = '[data-slot="dashboard-widget-header"]';
120
+ var HEADER_LAYOUT_CLASSES = [
121
+ "flex",
122
+ "flex-row",
123
+ "flex-nowrap",
124
+ "items-center",
125
+ "[&>:nth-child(2)]:ms-auto"
126
+ ];
127
+ function orderStorageKey(base) {
128
+ return `${base}-portlet-order`;
129
+ }
130
+ function layoutStorageKey(base) {
131
+ return `${base}-dashboard-layout`;
132
+ }
133
+ function hiddenStorageKey(base) {
134
+ return `${base}-dashboard-hidden`;
135
+ }
136
+ function loadHidden(base) {
137
+ if (!base) return null;
138
+ try {
139
+ const raw = localStorage.getItem(hiddenStorageKey(base));
140
+ const parsed = raw ? JSON.parse(raw) : null;
141
+ return Array.isArray(parsed) ? parsed.filter((v) => typeof v === "string") : null;
142
+ } catch {
143
+ return null;
144
+ }
145
+ }
146
+ function saveHidden(base, ids) {
147
+ if (!base) return;
148
+ try {
149
+ localStorage.setItem(hiddenStorageKey(base), JSON.stringify(ids));
150
+ } catch {
151
+ }
152
+ }
153
+ function loadLayout(base) {
154
+ if (!base) return null;
155
+ try {
156
+ const raw = localStorage.getItem(layoutStorageKey(base));
157
+ const val = raw ? Number(raw) : null;
158
+ return val === 1 || val === 2 || val === 3 ? val : null;
159
+ } catch {
160
+ return null;
161
+ }
162
+ }
163
+ function saveLayout(base, mode) {
164
+ if (!base) return;
165
+ try {
166
+ localStorage.setItem(layoutStorageKey(base), String(mode));
167
+ } catch {
168
+ }
169
+ }
170
+ function sanitizeSlot(value) {
171
+ return Array.isArray(value) ? value.filter((v) => typeof v === "string") : [];
172
+ }
173
+ function loadOrder(base) {
174
+ if (!base) return null;
175
+ try {
176
+ const raw = localStorage.getItem(orderStorageKey(base));
177
+ if (!raw) return null;
178
+ const parsed = JSON.parse(raw);
179
+ return [
180
+ sanitizeSlot(parsed[0]),
181
+ sanitizeSlot(parsed[1]),
182
+ sanitizeSlot(parsed[2])
183
+ ];
184
+ } catch {
185
+ return null;
186
+ }
187
+ }
188
+ function saveOrder(base, order) {
189
+ if (!base) return;
190
+ try {
191
+ const record = {};
192
+ order.forEach((ids, i) => {
193
+ record[i] = ids;
194
+ });
195
+ localStorage.setItem(orderStorageKey(base), JSON.stringify(record));
196
+ } catch {
197
+ }
198
+ }
199
+ function mergeColumnOrder(columns, saved) {
200
+ const allIds = new Set(
201
+ [...columns[0], ...columns[1], ...columns[2]].map((p) => p.id)
202
+ );
203
+ const result = [[], [], []];
204
+ const placed = /* @__PURE__ */ new Set();
205
+ for (let i = 0; i < 3; i++) {
206
+ for (const id of saved?.[i] ?? []) {
207
+ if (allIds.has(id) && !placed.has(id)) {
208
+ result[i].push(id);
209
+ placed.add(id);
210
+ }
211
+ }
212
+ }
213
+ for (let i = 0; i < 3; i++) {
214
+ for (const item of columns[i]) {
215
+ if (!placed.has(item.id)) {
216
+ result[i].push(item.id);
217
+ placed.add(item.id);
218
+ }
219
+ }
220
+ }
221
+ return result;
222
+ }
223
+ function buildItemMap(columns) {
224
+ const map = /* @__PURE__ */ new Map();
225
+ for (const col of columns) {
226
+ for (const item of col) map.set(item.id, item);
227
+ }
228
+ return map;
229
+ }
230
+ function findColumn(colOrder, itemId) {
231
+ return colOrder.findIndex((ids) => ids.includes(itemId));
232
+ }
233
+ function moveAcrossColumns(order, activeId, overId) {
234
+ const colIdx = COL_IDS.indexOf(overId);
235
+ const sourceCol = findColumn(order, activeId);
236
+ if (sourceCol === -1) return order;
237
+ const targetCol = colIdx !== -1 ? colIdx : findColumn(order, overId);
238
+ if (targetCol === -1 || sourceCol === targetCol) return order;
239
+ const next = order.map((col) => [...col]);
240
+ next[sourceCol] = next[sourceCol].filter((id) => id !== activeId);
241
+ const overIdx = colIdx !== -1 ? -1 : next[targetCol].indexOf(overId);
242
+ if (overIdx === -1) {
243
+ next[targetCol].push(activeId);
244
+ } else {
245
+ next[targetCol].splice(overIdx, 0, activeId);
246
+ }
247
+ return next;
248
+ }
249
+ function reorderOnDrop(order, activeId, overId, crossedColumns) {
250
+ const isColumnTarget = COL_IDS.indexOf(overId) !== -1;
251
+ if (isColumnTarget || overId === activeId) return order;
252
+ const col = findColumn(order, activeId);
253
+ if (col === -1 || findColumn(order, overId) !== col) return order;
254
+ const oldIdx = order[col].indexOf(activeId);
255
+ const newIdx = order[col].indexOf(overId);
256
+ if (oldIdx === -1 || newIdx === -1) return order;
257
+ if (crossedColumns && newIdx === oldIdx + 1) return order;
258
+ const next = order.map((c) => [...c]);
259
+ next[col] = arrayMove(next[col], oldIdx, newIdx);
260
+ return next;
261
+ }
262
+ function consolidateColumns(order, mode) {
263
+ if (mode >= 3 || requiredColumns(order) <= mode) return order;
264
+ if (mode === 1) return [[...order[0], ...order[1], ...order[2]], [], []];
265
+ return [[...order[0]], [...order[1], ...order[2]], []];
266
+ }
267
+ function requiredColumns(order) {
268
+ return Math.max(
269
+ 1,
270
+ ...order.map((ids, i) => ids.length > 0 ? i + 1 : 0)
271
+ );
272
+ }
273
+ var collisionDetection = (args) => {
274
+ const pw = pointerWithin(args);
275
+ if (pw.length > 0) return pw;
276
+ const cc = closestCenter(args);
277
+ if (cc.length > 0) return cc;
278
+ return rectIntersection(args);
279
+ };
280
+ function SortablePortlet({
281
+ id,
282
+ handleSelector,
283
+ children
284
+ }) {
285
+ const {
286
+ attributes,
287
+ listeners,
288
+ setNodeRef,
289
+ transform,
290
+ transition,
291
+ isDragging
292
+ } = useSortable({ id });
293
+ const wrapperRef = React2.useRef(null);
294
+ const [headerEl, setHeaderEl] = React2.useState(null);
295
+ const [searched, setSearched] = React2.useState(false);
296
+ const style = {
297
+ transform: CSS.Transform.toString(transform),
298
+ transition,
299
+ opacity: isDragging ? 0.4 : 1
300
+ };
301
+ React2.useEffect(() => {
302
+ const container = wrapperRef.current;
303
+ if (!container) return;
304
+ let rafId = 0;
305
+ const findHeader = () => {
306
+ const header = container.querySelector(handleSelector);
307
+ if (header instanceof HTMLElement) {
308
+ header.classList.add(...HEADER_LAYOUT_CLASSES);
309
+ setHeaderEl(header);
310
+ observer.disconnect();
311
+ } else {
312
+ setHeaderEl(null);
313
+ }
314
+ setSearched(true);
315
+ };
316
+ const observer = new MutationObserver(() => {
317
+ cancelAnimationFrame(rafId);
318
+ rafId = requestAnimationFrame(findHeader);
319
+ });
320
+ findHeader();
321
+ observer.observe(container, { childList: true, subtree: true });
322
+ return () => {
323
+ cancelAnimationFrame(rafId);
324
+ observer.disconnect();
325
+ };
326
+ }, [handleSelector]);
327
+ const handle = /* @__PURE__ */ jsx(
328
+ "button",
329
+ {
330
+ type: "button",
331
+ className: cn(
332
+ "inline-flex h-7 w-6 shrink-0 cursor-grab touch-none items-center justify-center rounded border-none bg-transparent",
333
+ "text-muted-foreground hover:bg-muted hover:text-foreground active:cursor-grabbing",
334
+ "opacity-40 transition-opacity group-hover/portlet:opacity-100 focus-visible:opacity-100",
335
+ "[@media(hover:none)]:opacity-100",
336
+ !headerEl && "bg-card/80 absolute end-2 top-2 z-10 shadow-sm"
337
+ ),
338
+ "aria-label": "Drag to reorder",
339
+ ...attributes,
340
+ ...listeners,
341
+ children: /* @__PURE__ */ jsx(GripVertical, { "aria-hidden": "true", className: "h-4 w-4" })
342
+ }
343
+ );
344
+ return /* @__PURE__ */ jsxs(
345
+ "div",
346
+ {
347
+ ref: (node) => {
348
+ setNodeRef(node);
349
+ wrapperRef.current = node;
350
+ },
351
+ style,
352
+ className: "group/portlet relative min-w-0",
353
+ children: [
354
+ /* @__PURE__ */ jsx("div", { className: "w-full min-w-0", children }),
355
+ headerEl ? createPortal(handle, headerEl) : searched ? handle : null
356
+ ]
357
+ }
358
+ );
359
+ }
360
+ function DroppableColumn({
361
+ id,
362
+ items,
363
+ columnIndex,
364
+ handleSelector,
365
+ flatten,
366
+ dragActive
367
+ }) {
368
+ const { setNodeRef, isOver } = useDroppable({ id });
369
+ const ids = items.map((p) => p.id);
370
+ return /* @__PURE__ */ jsx(SortableContext, { items: ids, strategy: verticalListSortingStrategy, children: /* @__PURE__ */ jsxs(
371
+ "div",
372
+ {
373
+ ref: setNodeRef,
374
+ className: cn(
375
+ "flex min-h-16 min-w-0 flex-col gap-3",
376
+ flatten && "max-lg:contents"
377
+ ),
378
+ role: "group",
379
+ "aria-label": `Dashboard column ${columnIndex + 1}`,
380
+ children: [
381
+ items.map((item) => /* @__PURE__ */ jsx(
382
+ SortablePortlet,
383
+ {
384
+ id: item.id,
385
+ handleSelector,
386
+ children: item.node
387
+ },
388
+ item.id
389
+ )),
390
+ items.length === 0 && dragActive && /* @__PURE__ */ jsx(
391
+ "div",
392
+ {
393
+ "aria-hidden": "true",
394
+ className: cn(
395
+ "border-border text-muted-foreground flex min-h-32 items-center justify-center rounded-lg border-2 border-dashed text-sm font-medium transition-colors",
396
+ isOver && "border-primary-500 bg-primary-500/10 text-primary-600"
397
+ ),
398
+ children: "Drop here"
399
+ }
400
+ )
401
+ ]
402
+ }
403
+ ) });
404
+ }
405
+ var CustomizableDashboard = React2.forwardRef(function CustomizableDashboard2({
406
+ columns,
407
+ title,
408
+ storageKey,
409
+ ariaLabel,
410
+ toolbarSlot,
411
+ defaultOrder,
412
+ order: controlledOrder,
413
+ onOrderChange,
414
+ defaultLayout = 3,
415
+ layout: controlledLayout,
416
+ onLayoutChange,
417
+ dragHandleSelector = DEFAULT_HANDLE_SELECTOR,
418
+ widgets,
419
+ defaultHiddenIds,
420
+ hiddenIds: controlledHidden,
421
+ onHiddenChange,
422
+ customizeLabel = "Customize",
423
+ className
424
+ }, ref) {
425
+ const itemMap = React2.useMemo(() => buildItemMap(columns), [columns]);
426
+ const [internalLayout, setInternalLayout] = React2.useState(defaultLayout);
427
+ const layoutMode = controlledLayout ?? internalLayout;
428
+ const [colOrder, setColOrder] = React2.useState(
429
+ () => consolidateColumns(
430
+ mergeColumnOrder(columns, controlledOrder ?? defaultOrder ?? null),
431
+ controlledLayout ?? defaultLayout
432
+ )
433
+ );
434
+ const [activeId, setActiveId] = React2.useState(null);
435
+ const [internalHidden, setInternalHidden] = React2.useState(
436
+ () => defaultHiddenIds ?? []
437
+ );
438
+ const hiddenList = controlledHidden ?? internalHidden;
439
+ const hiddenSet = React2.useMemo(() => new Set(hiddenList), [hiddenList]);
440
+ const [panelOpen, setPanelOpen] = React2.useState(false);
441
+ const prevColOrder = React2.useRef(colOrder);
442
+ const layoutModeRef = React2.useRef(layoutMode);
443
+ layoutModeRef.current = layoutMode;
444
+ const colOrderRef = React2.useRef(colOrder);
445
+ colOrderRef.current = colOrder;
446
+ const columnsRef = React2.useRef(columns);
447
+ columnsRef.current = columns;
448
+ const draggingRef = React2.useRef(false);
449
+ React2.useEffect(() => {
450
+ if (!storageKey) return;
451
+ if (controlledLayout === void 0) {
452
+ const savedLayout = loadLayout(storageKey);
453
+ if (savedLayout !== null) setInternalLayout(savedLayout);
454
+ }
455
+ if (controlledOrder === void 0) {
456
+ const savedOrder = loadOrder(storageKey);
457
+ if (savedOrder) {
458
+ setColOrder(mergeColumnOrder(columnsRef.current, savedOrder));
459
+ }
460
+ }
461
+ if (controlledHidden === void 0) {
462
+ const savedHidden = loadHidden(storageKey);
463
+ if (savedHidden) setInternalHidden(savedHidden);
464
+ }
465
+ }, [storageKey]);
466
+ React2.useEffect(() => {
467
+ if (draggingRef.current) return;
468
+ setColOrder((prev) => {
469
+ const next = consolidateColumns(
470
+ mergeColumnOrder(columns, controlledOrder ?? prev),
471
+ layoutMode
472
+ );
473
+ return JSON.stringify(next) === JSON.stringify(prev) ? prev : next;
474
+ });
475
+ }, [columns, controlledOrder, layoutMode]);
476
+ const setLayout = React2.useCallback(
477
+ (mode) => {
478
+ if (controlledLayout === void 0) setInternalLayout(mode);
479
+ saveLayout(storageKey, mode);
480
+ onLayoutChange?.(mode);
481
+ },
482
+ [controlledLayout, storageKey, onLayoutChange]
483
+ );
484
+ const commitOrder = React2.useCallback(
485
+ (next) => {
486
+ saveOrder(storageKey, next);
487
+ onOrderChange?.(next);
488
+ const occupied = requiredColumns(next);
489
+ if (occupied < layoutModeRef.current) {
490
+ setLayout(occupied);
491
+ }
492
+ },
493
+ [storageKey, onOrderChange, setLayout]
494
+ );
495
+ const handleLayoutChange = React2.useCallback(
496
+ (mode) => {
497
+ setLayout(mode);
498
+ const next = consolidateColumns(colOrderRef.current, mode);
499
+ if (next !== colOrderRef.current) {
500
+ setColOrder(next);
501
+ saveOrder(storageKey, next);
502
+ onOrderChange?.(next);
503
+ }
504
+ },
505
+ [setLayout, storageKey, onOrderChange]
506
+ );
507
+ const sensors = useSensors(
508
+ useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),
509
+ useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates })
510
+ );
511
+ const resolve = (ids) => ids.filter((id) => !hiddenSet.has(id)).map((id) => itemMap.get(id)).filter(Boolean);
512
+ const handleDragStart = React2.useCallback(
513
+ (event) => {
514
+ prevColOrder.current = colOrder;
515
+ draggingRef.current = true;
516
+ setActiveId(String(event.active.id));
517
+ },
518
+ [colOrder]
519
+ );
520
+ const handleDragOver = React2.useCallback((event) => {
521
+ const { active, over } = event;
522
+ if (!over) return;
523
+ const next = moveAcrossColumns(
524
+ colOrderRef.current,
525
+ String(active.id),
526
+ String(over.id)
527
+ );
528
+ if (next !== colOrderRef.current) setColOrder(next);
529
+ }, []);
530
+ const handleDragEnd = React2.useCallback(
531
+ (event) => {
532
+ const { active, over } = event;
533
+ draggingRef.current = false;
534
+ setActiveId(null);
535
+ if (!over) {
536
+ setColOrder(prevColOrder.current);
537
+ return;
538
+ }
539
+ const activeItemId = String(active.id);
540
+ const crossedColumns = findColumn(prevColOrder.current, activeItemId) !== findColumn(colOrderRef.current, activeItemId);
541
+ const next = reorderOnDrop(
542
+ colOrderRef.current,
543
+ activeItemId,
544
+ String(over.id),
545
+ crossedColumns
546
+ );
547
+ if (next !== colOrderRef.current) setColOrder(next);
548
+ if (JSON.stringify(next) !== JSON.stringify(prevColOrder.current)) {
549
+ commitOrder(next);
550
+ }
551
+ },
552
+ [commitOrder]
553
+ );
554
+ const handleDragCancel = React2.useCallback(() => {
555
+ draggingRef.current = false;
556
+ setActiveId(null);
557
+ setColOrder(prevColOrder.current);
558
+ }, []);
559
+ const setHidden = React2.useCallback(
560
+ (ids) => {
561
+ if (controlledHidden === void 0) setInternalHidden(ids);
562
+ saveHidden(storageKey, ids);
563
+ onHiddenChange?.(ids);
564
+ },
565
+ [controlledHidden, storageKey, onHiddenChange]
566
+ );
567
+ const handleToggleWidget = React2.useCallback(
568
+ (id, visible) => {
569
+ setHidden(
570
+ visible ? hiddenList.filter((h) => h !== id) : [...hiddenList, id]
571
+ );
572
+ },
573
+ [hiddenList, setHidden]
574
+ );
575
+ const handleReset = React2.useCallback(() => {
576
+ if (storageKey) {
577
+ try {
578
+ localStorage.removeItem(orderStorageKey(storageKey));
579
+ localStorage.removeItem(layoutStorageKey(storageKey));
580
+ localStorage.removeItem(hiddenStorageKey(storageKey));
581
+ } catch {
582
+ }
583
+ }
584
+ const next = mergeColumnOrder(columns, defaultOrder ?? null);
585
+ setColOrder(next);
586
+ onOrderChange?.(next);
587
+ if (controlledLayout === void 0) setInternalLayout(defaultLayout);
588
+ onLayoutChange?.(defaultLayout);
589
+ const hidden = defaultHiddenIds ?? [];
590
+ if (controlledHidden === void 0) setInternalHidden(hidden);
591
+ onHiddenChange?.(hidden);
592
+ }, [
593
+ storageKey,
594
+ columns,
595
+ defaultOrder,
596
+ onOrderChange,
597
+ controlledLayout,
598
+ defaultLayout,
599
+ onLayoutChange,
600
+ defaultHiddenIds,
601
+ controlledHidden,
602
+ onHiddenChange
603
+ ]);
604
+ const cols = [
605
+ resolve(colOrder[0]),
606
+ resolve(colOrder[1]),
607
+ resolve(colOrder[2])
608
+ ];
609
+ const visibleCols = layoutMode === 1 ? [cols[0]] : layoutMode === 2 ? [cols[0], cols[1]] : cols;
610
+ const toolbar = /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-3 pb-2", children: [
611
+ title && /* @__PURE__ */ jsx("h2", { className: "text-foreground me-auto text-lg font-semibold", children: title }),
612
+ widgets && widgets.length > 0 && /* @__PURE__ */ jsx(
613
+ Button,
614
+ {
615
+ variant: "outline",
616
+ size: "sm",
617
+ onClick: () => setPanelOpen(true),
618
+ "aria-haspopup": "dialog",
619
+ leftIcon: /* @__PURE__ */ jsx(SlidersHorizontal, { "aria-hidden": "true", className: "h-4 w-4" }),
620
+ children: customizeLabel
621
+ }
622
+ ),
623
+ /* @__PURE__ */ jsx(
624
+ "div",
625
+ {
626
+ className: "border-border bg-muted flex gap-0.5 rounded-md border p-0.5 max-md:hidden",
627
+ role: "radiogroup",
628
+ "aria-label": "Column layout",
629
+ children: [3, 2, 1].map((mode) => {
630
+ const Icon = mode === 3 ? Columns3 : mode === 2 ? Columns2 : Square;
631
+ return /* @__PURE__ */ jsx(
632
+ "button",
633
+ {
634
+ type: "button",
635
+ className: cn(
636
+ "flex h-7 w-7 items-center justify-center rounded transition-colors",
637
+ layoutMode === mode ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:bg-background hover:text-foreground"
638
+ ),
639
+ onClick: () => handleLayoutChange(mode),
640
+ role: "radio",
641
+ "aria-checked": layoutMode === mode,
642
+ "aria-label": `${mode} column layout`,
643
+ title: `${mode} column${mode > 1 ? "s" : ""}`,
644
+ children: /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", className: "h-4 w-4" })
645
+ },
646
+ mode
647
+ );
648
+ })
649
+ }
650
+ )
651
+ ] });
652
+ return /* @__PURE__ */ jsxs(
653
+ DndContext,
654
+ {
655
+ sensors,
656
+ collisionDetection,
657
+ onDragStart: handleDragStart,
658
+ onDragOver: handleDragOver,
659
+ onDragEnd: handleDragEnd,
660
+ onDragCancel: handleDragCancel,
661
+ children: [
662
+ toolbarSlot ? createPortal(toolbar, toolbarSlot) : toolbar,
663
+ /* @__PURE__ */ jsx(
664
+ "div",
665
+ {
666
+ ref,
667
+ className: cn(
668
+ "grid items-start gap-3",
669
+ layoutMode === 3 && "grid-cols-1 md:grid-cols-2 lg:grid-cols-3",
670
+ layoutMode === 2 && "grid-cols-1 md:grid-cols-2",
671
+ layoutMode === 1 && "grid-cols-1",
672
+ className
673
+ ),
674
+ role: "region",
675
+ "aria-label": ariaLabel ?? "Dashboard",
676
+ children: visibleCols.map((col, i) => /* @__PURE__ */ jsx(
677
+ DroppableColumn,
678
+ {
679
+ id: COL_IDS[i],
680
+ items: col,
681
+ columnIndex: i,
682
+ handleSelector: dragHandleSelector,
683
+ flatten: layoutMode === 3,
684
+ dragActive: activeId !== null
685
+ },
686
+ COL_IDS[i]
687
+ ))
688
+ }
689
+ ),
690
+ widgets && widgets.length > 0 && /* @__PURE__ */ jsx(
691
+ DashboardCustomizePanel,
692
+ {
693
+ open: panelOpen,
694
+ onOpenChange: setPanelOpen,
695
+ widgets,
696
+ hiddenIds: hiddenList,
697
+ onToggleWidget: handleToggleWidget,
698
+ onReset: handleReset
699
+ }
700
+ )
701
+ ]
702
+ }
703
+ );
704
+ });
705
+
706
+ export { CustomizableDashboard, DashboardCustomizePanel, consolidateColumns, mergeColumnOrder, moveAcrossColumns, reorderOnDrop, requiredColumns };
707
+ //# sourceMappingURL=chunk-F57VRLKP.js.map
708
+ //# sourceMappingURL=chunk-F57VRLKP.js.map