@mieweb/ui 0.10.0-dev.9 → 0.11.0-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (807) hide show
  1. package/README.md +4 -4
  2. package/agent/mieweb-ui.instructions.md +77 -0
  3. package/dist/CsvBlock-CFXSDPBI.js +9 -0
  4. package/dist/{CsvBlock-UWPMTLE2.js.map → CsvBlock-CFXSDPBI.js.map} +1 -1
  5. package/dist/CsvBlock-RGO7JXHJ.cjs +18 -0
  6. package/dist/{CsvBlock-ROJCKJDP.cjs.map → CsvBlock-RGO7JXHJ.cjs.map} +1 -1
  7. package/dist/HtmlPreviewBlock-VBYXCXVT.cjs +18 -0
  8. package/dist/{HtmlPreviewBlock-DWFN6EUB.cjs.map → HtmlPreviewBlock-VBYXCXVT.cjs.map} +1 -1
  9. package/dist/HtmlPreviewBlock-Z2GCK325.js +9 -0
  10. package/dist/{HtmlPreviewBlock-ME5U3XNS.js.map → HtmlPreviewBlock-Z2GCK325.js.map} +1 -1
  11. package/dist/MermaidBlock-I2R2BQOX.cjs +18 -0
  12. package/dist/{MermaidBlock-D2UC5M55.cjs.map → MermaidBlock-I2R2BQOX.cjs.map} +1 -1
  13. package/dist/MermaidBlock-XCAK7IA5.js +9 -0
  14. package/dist/{MermaidBlock-2B6CPD6Y.js.map → MermaidBlock-XCAK7IA5.js.map} +1 -1
  15. package/dist/SurveyBlock-KI5JOWCL.js +9 -0
  16. package/dist/{SurveyBlock-4DO62RBT.js.map → SurveyBlock-KI5JOWCL.js.map} +1 -1
  17. package/dist/SurveyBlock-UKSGISRT.cjs +18 -0
  18. package/dist/{SurveyBlock-4CD4AYMJ.cjs.map → SurveyBlock-UKSGISRT.cjs.map} +1 -1
  19. package/dist/ag-grid.d.cts +142 -1
  20. package/dist/ag-grid.d.ts +142 -1
  21. package/dist/brands/bluehive.cjs +3 -3
  22. package/dist/brands/bluehive.css +3 -0
  23. package/dist/brands/bluehive.js +1 -1
  24. package/dist/brands/index.cjs +17 -17
  25. package/dist/brands/index.js +4 -4
  26. package/dist/{chunk-JYZW2PZS.cjs → chunk-254QK722.cjs} +7 -7
  27. package/dist/chunk-254QK722.cjs.map +1 -0
  28. package/dist/{chunk-4IS3QCOQ.cjs → chunk-2FZYZ4HT.cjs} +4 -3
  29. package/dist/chunk-2FZYZ4HT.cjs.map +1 -0
  30. package/dist/{chunk-VPIYTQCV.cjs → chunk-2I4IRQQG.cjs} +12 -5
  31. package/dist/chunk-2I4IRQQG.cjs.map +1 -0
  32. package/dist/{chunk-IT775BYG.js → chunk-2W73UQ3T.js} +4 -3
  33. package/dist/chunk-2W73UQ3T.js.map +1 -0
  34. package/dist/chunk-2X54ZLT6.js +874 -0
  35. package/dist/chunk-2X54ZLT6.js.map +1 -0
  36. package/dist/{chunk-5MCBWTIF.cjs → chunk-32ZCJOSR.cjs} +4 -4
  37. package/dist/{chunk-5MCBWTIF.cjs.map → chunk-32ZCJOSR.cjs.map} +1 -1
  38. package/dist/{chunk-WNJRS7Y7.cjs → chunk-3ZWCIPFT.cjs} +4 -2
  39. package/dist/chunk-3ZWCIPFT.cjs.map +1 -0
  40. package/dist/chunk-434L5RYF.js +314 -0
  41. package/dist/chunk-434L5RYF.js.map +1 -0
  42. package/dist/{chunk-TPWKM7JH.js → chunk-43K7OQ3E.js} +3 -3
  43. package/dist/{chunk-TPWKM7JH.js.map → chunk-43K7OQ3E.js.map} +1 -1
  44. package/dist/chunk-47P5QLX4.cjs +42 -0
  45. package/dist/chunk-47P5QLX4.cjs.map +1 -0
  46. package/dist/{chunk-CR2SDI23.cjs → chunk-4QYYWYFD.cjs} +8 -7
  47. package/dist/chunk-4QYYWYFD.cjs.map +1 -0
  48. package/dist/{chunk-76TBQDED.js → chunk-4RI3CQGE.js} +6 -6
  49. package/dist/{chunk-76TBQDED.js.map → chunk-4RI3CQGE.js.map} +1 -1
  50. package/dist/chunk-4ZB7RSMY.cjs +306 -0
  51. package/dist/chunk-4ZB7RSMY.cjs.map +1 -0
  52. package/dist/chunk-522WJIVI.js +99 -0
  53. package/dist/chunk-522WJIVI.js.map +1 -0
  54. package/dist/chunk-56VTM4OX.js +261 -0
  55. package/dist/chunk-56VTM4OX.js.map +1 -0
  56. package/dist/chunk-5HKZR6UG.js +248 -0
  57. package/dist/chunk-5HKZR6UG.js.map +1 -0
  58. package/dist/chunk-6BNZLN4B.cjs +548 -0
  59. package/dist/chunk-6BNZLN4B.cjs.map +1 -0
  60. package/dist/chunk-6N7NMOSV.js +233 -0
  61. package/dist/chunk-6N7NMOSV.js.map +1 -0
  62. package/dist/chunk-6TTCZY3P.cjs +4 -0
  63. package/dist/chunk-6TTCZY3P.cjs.map +1 -0
  64. package/dist/{chunk-YQDA366U.js → chunk-753ENNB6.js} +2 -2
  65. package/dist/{chunk-YQDA366U.js.map → chunk-753ENNB6.js.map} +1 -1
  66. package/dist/{chunk-N6IY47YA.cjs → chunk-7C5W744U.cjs} +8 -8
  67. package/dist/{chunk-N6IY47YA.cjs.map → chunk-7C5W744U.cjs.map} +1 -1
  68. package/dist/chunk-7E46YDOT.cjs +122 -0
  69. package/dist/chunk-7E46YDOT.cjs.map +1 -0
  70. package/dist/chunk-7HUTR6RX.js +178 -0
  71. package/dist/chunk-7HUTR6RX.js.map +1 -0
  72. package/dist/chunk-7IRTD4JT.cjs +61 -0
  73. package/dist/chunk-7IRTD4JT.cjs.map +1 -0
  74. package/dist/{chunk-KZFBQ7GY.js → chunk-7QW6TU4X.js} +3 -3
  75. package/dist/{chunk-KZFBQ7GY.js.map → chunk-7QW6TU4X.js.map} +1 -1
  76. package/dist/{chunk-MWVW4APN.cjs → chunk-7UTBDFFL.cjs} +4 -4
  77. package/dist/{chunk-MWVW4APN.cjs.map → chunk-7UTBDFFL.cjs.map} +1 -1
  78. package/dist/chunk-7WJ6MBF5.cjs +47 -0
  79. package/dist/chunk-7WJ6MBF5.cjs.map +1 -0
  80. package/dist/{chunk-FJ7YPVKV.js → chunk-7X6R3JIA.js} +3 -3
  81. package/dist/{chunk-FJ7YPVKV.js.map → chunk-7X6R3JIA.js.map} +1 -1
  82. package/dist/chunk-A4W5CSK7.cjs +216 -0
  83. package/dist/chunk-A4W5CSK7.cjs.map +1 -0
  84. package/dist/{chunk-2G75X6TS.cjs → chunk-AHHFFXJR.cjs} +3 -3
  85. package/dist/{chunk-2G75X6TS.cjs.map → chunk-AHHFFXJR.cjs.map} +1 -1
  86. package/dist/chunk-AJPFQF3H.cjs +896 -0
  87. package/dist/chunk-AJPFQF3H.cjs.map +1 -0
  88. package/dist/chunk-AMYFRY7K.js +3 -0
  89. package/dist/chunk-AMYFRY7K.js.map +1 -0
  90. package/dist/{chunk-VNYW4C4J.cjs → chunk-ANMX7YDL.cjs} +4 -84
  91. package/dist/chunk-ANMX7YDL.cjs.map +1 -0
  92. package/dist/chunk-ARIJ5OHW.cjs +139 -0
  93. package/dist/chunk-ARIJ5OHW.cjs.map +1 -0
  94. package/dist/{chunk-GD7EBGC4.cjs → chunk-ATRW3J5Z.cjs} +49 -19
  95. package/dist/chunk-ATRW3J5Z.cjs.map +1 -0
  96. package/dist/chunk-BJ6ABRSQ.cjs +256 -0
  97. package/dist/chunk-BJ6ABRSQ.cjs.map +1 -0
  98. package/dist/{chunk-G3JX3UAU.cjs → chunk-BWSZ2BHJ.cjs} +6 -6
  99. package/dist/{chunk-G3JX3UAU.cjs.map → chunk-BWSZ2BHJ.cjs.map} +1 -1
  100. package/dist/chunk-BXRQ6HEP.cjs +4 -0
  101. package/dist/chunk-BXRQ6HEP.cjs.map +1 -0
  102. package/dist/chunk-CBBKWRLG.js +213 -0
  103. package/dist/chunk-CBBKWRLG.js.map +1 -0
  104. package/dist/{chunk-UAMXCMST.cjs → chunk-CFI3TQMA.cjs} +3 -3
  105. package/dist/{chunk-UAMXCMST.cjs.map → chunk-CFI3TQMA.cjs.map} +1 -1
  106. package/dist/chunk-CLQW724U.cjs +271 -0
  107. package/dist/chunk-CLQW724U.cjs.map +1 -0
  108. package/dist/chunk-CPDNX3LS.cjs +47 -0
  109. package/dist/chunk-CPDNX3LS.cjs.map +1 -0
  110. package/dist/chunk-CVNPNZMX.js +44 -0
  111. package/dist/chunk-CVNPNZMX.js.map +1 -0
  112. package/dist/chunk-DGHS5IVD.js +305 -0
  113. package/dist/chunk-DGHS5IVD.js.map +1 -0
  114. package/dist/chunk-DHGCLPFZ.js +91 -0
  115. package/dist/chunk-DHGCLPFZ.js.map +1 -0
  116. package/dist/chunk-DO2YN46R.cjs +201 -0
  117. package/dist/chunk-DO2YN46R.cjs.map +1 -0
  118. package/dist/chunk-DVDT7TX7.js +151 -0
  119. package/dist/chunk-DVDT7TX7.js.map +1 -0
  120. package/dist/chunk-DXEPYK3I.cjs +92 -0
  121. package/dist/chunk-DXEPYK3I.cjs.map +1 -0
  122. package/dist/chunk-DXFP53KF.js +283 -0
  123. package/dist/chunk-DXFP53KF.js.map +1 -0
  124. package/dist/chunk-EACNRR3C.cjs +4 -0
  125. package/dist/chunk-EACNRR3C.cjs.map +1 -0
  126. package/dist/{chunk-TVTIGV7Q.js → chunk-EBKE4DLU.js} +18 -11
  127. package/dist/chunk-EBKE4DLU.js.map +1 -0
  128. package/dist/{chunk-ASSDGS4F.cjs → chunk-ECYIDXG6.cjs} +254 -4
  129. package/dist/chunk-ECYIDXG6.cjs.map +1 -0
  130. package/dist/chunk-EGPDT7SM.js +195 -0
  131. package/dist/chunk-EGPDT7SM.js.map +1 -0
  132. package/dist/chunk-EPCUPHEO.js +193 -0
  133. package/dist/chunk-EPCUPHEO.js.map +1 -0
  134. package/dist/{chunk-7ZXAQTV4.cjs → chunk-ERACGSDY.cjs} +8 -8
  135. package/dist/{chunk-7ZXAQTV4.cjs.map → chunk-ERACGSDY.cjs.map} +1 -1
  136. package/dist/{chunk-XCP454Q6.js → chunk-F4N67NAF.js} +12 -3
  137. package/dist/chunk-F4N67NAF.js.map +1 -0
  138. package/dist/{chunk-WGPLUCBD.js → chunk-F6W62K4J.js} +4 -4
  139. package/dist/{chunk-WGPLUCBD.js.map → chunk-F6W62K4J.js.map} +1 -1
  140. package/dist/{chunk-XVW5DPPP.js → chunk-F7SZSOB3.js} +4 -3
  141. package/dist/chunk-F7SZSOB3.js.map +1 -0
  142. package/dist/chunk-FBCDYTWM.js +385 -0
  143. package/dist/chunk-FBCDYTWM.js.map +1 -0
  144. package/dist/{chunk-KQUI4BGS.cjs → chunk-FBN2VHUV.cjs} +68 -61
  145. package/dist/chunk-FBN2VHUV.cjs.map +1 -0
  146. package/dist/{chunk-V7D3YGUV.js → chunk-FGLIP6YR.js} +4 -4
  147. package/dist/{chunk-V7D3YGUV.js.map → chunk-FGLIP6YR.js.map} +1 -1
  148. package/dist/{chunk-VU6UTJRM.js → chunk-FIKO4WR6.js} +3 -3
  149. package/dist/{chunk-VU6UTJRM.js.map → chunk-FIKO4WR6.js.map} +1 -1
  150. package/dist/{chunk-OD47TTAW.cjs → chunk-FMEA6WAY.cjs} +9 -9
  151. package/dist/{chunk-OD47TTAW.cjs.map → chunk-FMEA6WAY.cjs.map} +1 -1
  152. package/dist/chunk-FSGJXCBG.cjs +318 -0
  153. package/dist/chunk-FSGJXCBG.cjs.map +1 -0
  154. package/dist/chunk-FSWHZY3T.cjs +328 -0
  155. package/dist/chunk-FSWHZY3T.cjs.map +1 -0
  156. package/dist/chunk-FTEZNCRI.js +29 -0
  157. package/dist/chunk-FTEZNCRI.js.map +1 -0
  158. package/dist/{chunk-YVPC65ZJ.cjs → chunk-GF2BE4FB.cjs} +91 -32
  159. package/dist/chunk-GF2BE4FB.cjs.map +1 -0
  160. package/dist/{chunk-JEIW7BSV.cjs → chunk-GKDHMNUA.cjs} +2 -52
  161. package/dist/chunk-GKDHMNUA.cjs.map +1 -0
  162. package/dist/{chunk-URAQIF67.cjs → chunk-GM32IDVL.cjs} +6 -6
  163. package/dist/{chunk-URAQIF67.cjs.map → chunk-GM32IDVL.cjs.map} +1 -1
  164. package/dist/chunk-GVM6DTR5.js +90 -0
  165. package/dist/chunk-GVM6DTR5.js.map +1 -0
  166. package/dist/{chunk-SQHMGT4W.js → chunk-GW4RFJZ5.js} +7 -7
  167. package/dist/chunk-GW4RFJZ5.js.map +1 -0
  168. package/dist/chunk-GY5SP4ST.js +3 -0
  169. package/dist/chunk-GY5SP4ST.js.map +1 -0
  170. package/dist/{chunk-OCSCBB52.cjs → chunk-GYXSF6BJ.cjs} +10 -10
  171. package/dist/{chunk-OCSCBB52.cjs.map → chunk-GYXSF6BJ.cjs.map} +1 -1
  172. package/dist/chunk-H2Y7HZV5.js +3 -0
  173. package/dist/chunk-H2Y7HZV5.js.map +1 -0
  174. package/dist/chunk-H3P7POFC.cjs +337 -0
  175. package/dist/chunk-H3P7POFC.cjs.map +1 -0
  176. package/dist/{chunk-JID7AZTO.cjs → chunk-H3ROMJYI.cjs} +4 -4
  177. package/dist/{chunk-JID7AZTO.cjs.map → chunk-H3ROMJYI.cjs.map} +1 -1
  178. package/dist/{chunk-462XSCP3.cjs → chunk-HCIXGFWR.cjs} +4 -4
  179. package/dist/{chunk-462XSCP3.cjs.map → chunk-HCIXGFWR.cjs.map} +1 -1
  180. package/dist/{chunk-H4ZXMQQW.js → chunk-HDY7YQFX.js} +3 -3
  181. package/dist/{chunk-H4ZXMQQW.js.map → chunk-HDY7YQFX.js.map} +1 -1
  182. package/dist/chunk-HNFFFFYH.cjs +114 -0
  183. package/dist/chunk-HNFFFFYH.cjs.map +1 -0
  184. package/dist/chunk-HNXLLDPN.js +25 -0
  185. package/dist/chunk-HNXLLDPN.js.map +1 -0
  186. package/dist/{chunk-NV2CWBI2.cjs → chunk-IEY3ZJIT.cjs} +12 -3
  187. package/dist/chunk-IEY3ZJIT.cjs.map +1 -0
  188. package/dist/chunk-IEZXJWHJ.cjs +306 -0
  189. package/dist/chunk-IEZXJWHJ.cjs.map +1 -0
  190. package/dist/{chunk-3QEVGSFG.cjs → chunk-IGDO62KR.cjs} +5 -5
  191. package/dist/{chunk-3QEVGSFG.cjs.map → chunk-IGDO62KR.cjs.map} +1 -1
  192. package/dist/{chunk-N5O47VGS.cjs → chunk-IVGI353O.cjs} +2 -2
  193. package/dist/{chunk-N5O47VGS.cjs.map → chunk-IVGI353O.cjs.map} +1 -1
  194. package/dist/chunk-IWRBJHO3.cjs +51 -0
  195. package/dist/chunk-IWRBJHO3.cjs.map +1 -0
  196. package/dist/{chunk-2IZLKPUW.js → chunk-J2CKXXOW.js} +27 -6
  197. package/dist/chunk-J2CKXXOW.js.map +1 -0
  198. package/dist/{chunk-VILW53UZ.js → chunk-JMAZ2GKT.js} +3 -3
  199. package/dist/{chunk-VILW53UZ.js.map → chunk-JMAZ2GKT.js.map} +1 -1
  200. package/dist/{chunk-WWJIW2IH.cjs → chunk-JSXIB6EJ.cjs} +4 -4
  201. package/dist/{chunk-WWJIW2IH.cjs.map → chunk-JSXIB6EJ.cjs.map} +1 -1
  202. package/dist/{chunk-KRU6IGV7.js → chunk-JUJGWUAN.js} +28 -6
  203. package/dist/chunk-JUJGWUAN.js.map +1 -0
  204. package/dist/{chunk-FXO5ARBB.cjs → chunk-KDW6BD4O.cjs} +4 -4
  205. package/dist/{chunk-FXO5ARBB.cjs.map → chunk-KDW6BD4O.cjs.map} +1 -1
  206. package/dist/{chunk-Z5V7SAZ4.js → chunk-KFEN2SRZ.js} +3 -3
  207. package/dist/{chunk-Z5V7SAZ4.js.map → chunk-KFEN2SRZ.js.map} +1 -1
  208. package/dist/chunk-KIVEYQGA.cjs +319 -0
  209. package/dist/chunk-KIVEYQGA.cjs.map +1 -0
  210. package/dist/{chunk-XEAT7XJG.cjs → chunk-KQ6GLYFZ.cjs} +29 -13
  211. package/dist/chunk-KQ6GLYFZ.cjs.map +1 -0
  212. package/dist/{chunk-4A3W4TQF.js → chunk-KVTKSPX5.js} +254 -4
  213. package/dist/chunk-KVTKSPX5.js.map +1 -0
  214. package/dist/{chunk-6EN3IQQI.cjs → chunk-L5Y52F2E.cjs} +9 -9
  215. package/dist/chunk-L5Y52F2E.cjs.map +1 -0
  216. package/dist/chunk-L6K4PRZK.cjs +4 -0
  217. package/dist/chunk-L6K4PRZK.cjs.map +1 -0
  218. package/dist/chunk-LAN5VWGC.js +2540 -0
  219. package/dist/chunk-LAN5VWGC.js.map +1 -0
  220. package/dist/{chunk-7ZDPD5ZX.cjs → chunk-LC3JL2HB.cjs} +11 -7
  221. package/dist/chunk-LC3JL2HB.cjs.map +1 -0
  222. package/dist/chunk-LRAAJRE7.cjs +2707 -0
  223. package/dist/chunk-LRAAJRE7.cjs.map +1 -0
  224. package/dist/{chunk-OE5CKRUC.js → chunk-LX323IMT.js} +34 -4
  225. package/dist/chunk-LX323IMT.js.map +1 -0
  226. package/dist/chunk-M3VPGJMV.js +283 -0
  227. package/dist/chunk-M3VPGJMV.js.map +1 -0
  228. package/dist/{chunk-DVOQ3JNO.js → chunk-ME7EVT6F.js} +23 -9
  229. package/dist/chunk-ME7EVT6F.js.map +1 -0
  230. package/dist/{chunk-SQJFBZ42.js → chunk-MUYUFOGL.js} +8 -7
  231. package/dist/chunk-MUYUFOGL.js.map +1 -0
  232. package/dist/{chunk-VKELAMAZ.js → chunk-N54FYWG6.js} +27 -11
  233. package/dist/chunk-N54FYWG6.js.map +1 -0
  234. package/dist/chunk-N5JDL4VE.js +3 -0
  235. package/dist/chunk-N5JDL4VE.js.map +1 -0
  236. package/dist/{chunk-ZPSJ2UV6.cjs → chunk-NAH65KPK.cjs} +8 -8
  237. package/dist/{chunk-ZPSJ2UV6.cjs.map → chunk-NAH65KPK.cjs.map} +1 -1
  238. package/dist/{chunk-PYJDVWXM.js → chunk-NUB5HRKS.js} +3 -3
  239. package/dist/{chunk-PYJDVWXM.js.map → chunk-NUB5HRKS.js.map} +1 -1
  240. package/dist/{chunk-WNZAYBVB.cjs → chunk-O6BJMVGT.cjs} +48 -48
  241. package/dist/{chunk-WNZAYBVB.cjs.map → chunk-O6BJMVGT.cjs.map} +1 -1
  242. package/dist/{chunk-SVSHA7XV.js → chunk-O6XDA3SI.js} +31 -33
  243. package/dist/chunk-O6XDA3SI.js.map +1 -0
  244. package/dist/chunk-OIF34LEN.cjs +425 -0
  245. package/dist/chunk-OIF34LEN.cjs.map +1 -0
  246. package/dist/{chunk-J5CSLNCN.cjs → chunk-OODVC2UD.cjs} +2 -2
  247. package/dist/{chunk-J5CSLNCN.cjs.map → chunk-OODVC2UD.cjs.map} +1 -1
  248. package/dist/{chunk-LL6IWKI3.js → chunk-OW3SQJ7P.js} +3 -3
  249. package/dist/{chunk-LL6IWKI3.js.map → chunk-OW3SQJ7P.js.map} +1 -1
  250. package/dist/{chunk-ZGRCSNPK.js → chunk-OYUIEJPN.js} +17 -8
  251. package/dist/chunk-OYUIEJPN.js.map +1 -0
  252. package/dist/chunk-P22YCUVM.cjs +4 -0
  253. package/dist/chunk-P22YCUVM.cjs.map +1 -0
  254. package/dist/{chunk-CEQJGUAS.js → chunk-P4E3K3ND.js} +12 -5
  255. package/dist/chunk-P4E3K3ND.js.map +1 -0
  256. package/dist/{chunk-TMMVIUUN.js → chunk-P7D7BYFE.js} +4 -4
  257. package/dist/{chunk-TMMVIUUN.js.map → chunk-P7D7BYFE.js.map} +1 -1
  258. package/dist/{chunk-SGFYA22I.cjs → chunk-PINIBEIU.cjs} +21 -12
  259. package/dist/chunk-PINIBEIU.cjs.map +1 -0
  260. package/dist/{chunk-3T7QGLNB.js → chunk-PJEL5ZZV.js} +4 -2
  261. package/dist/chunk-PJEL5ZZV.js.map +1 -0
  262. package/dist/chunk-PWXDRFJL.cjs +218 -0
  263. package/dist/chunk-PWXDRFJL.cjs.map +1 -0
  264. package/dist/{chunk-XZNN3S3S.cjs → chunk-PYI2IWNX.cjs} +4 -4
  265. package/dist/{chunk-XZNN3S3S.cjs.map → chunk-PYI2IWNX.cjs.map} +1 -1
  266. package/dist/chunk-Q3YVLO52.cjs +174 -0
  267. package/dist/chunk-Q3YVLO52.cjs.map +1 -0
  268. package/dist/{chunk-MNILXWVY.js → chunk-QJ2L5RU6.js} +7 -7
  269. package/dist/{chunk-MNILXWVY.js.map → chunk-QJ2L5RU6.js.map} +1 -1
  270. package/dist/{chunk-X4LBUPJO.cjs → chunk-QX6AAVDE.cjs} +31 -33
  271. package/dist/chunk-QX6AAVDE.cjs.map +1 -0
  272. package/dist/{chunk-UV2FVNWT.cjs → chunk-RIUQP2QS.cjs} +5 -5
  273. package/dist/{chunk-UV2FVNWT.cjs.map → chunk-RIUQP2QS.cjs.map} +1 -1
  274. package/dist/chunk-RLVYWUXG.js +115 -0
  275. package/dist/chunk-RLVYWUXG.js.map +1 -0
  276. package/dist/{chunk-HACNIFO3.js → chunk-RM2HPQIC.js} +77 -14
  277. package/dist/chunk-RM2HPQIC.js.map +1 -0
  278. package/dist/{chunk-DEDN5HAG.js → chunk-RSJGTWLM.js} +3 -3
  279. package/dist/{chunk-DEDN5HAG.js.map → chunk-RSJGTWLM.js.map} +1 -1
  280. package/dist/{chunk-G4D6CLBT.js → chunk-RZSSQ7AT.js} +3 -3
  281. package/dist/{chunk-G4D6CLBT.js.map → chunk-RZSSQ7AT.js.map} +1 -1
  282. package/dist/{chunk-ENKFJJZX.js → chunk-S2JZL4JC.js} +6 -6
  283. package/dist/{chunk-ENKFJJZX.js.map → chunk-S2JZL4JC.js.map} +1 -1
  284. package/dist/{chunk-P7UMS4E6.cjs → chunk-S7AMZ4RD.cjs} +23 -9
  285. package/dist/chunk-S7AMZ4RD.cjs.map +1 -0
  286. package/dist/{chunk-VROIMIHB.cjs → chunk-SHBCUXFS.cjs} +28 -6
  287. package/dist/chunk-SHBCUXFS.cjs.map +1 -0
  288. package/dist/{chunk-RJ6NTJHC.js → chunk-SRMTRD7F.js} +3 -3
  289. package/dist/{chunk-RJ6NTJHC.js.map → chunk-SRMTRD7F.js.map} +1 -1
  290. package/dist/{chunk-IX6KFB3K.cjs → chunk-SW2E7XKY.cjs} +9 -9
  291. package/dist/{chunk-IX6KFB3K.cjs.map → chunk-SW2E7XKY.cjs.map} +1 -1
  292. package/dist/chunk-SZSRGUVO.js +402 -0
  293. package/dist/chunk-SZSRGUVO.js.map +1 -0
  294. package/dist/{chunk-NJ6MY6V5.js → chunk-T5BBZQ66.js} +3 -3
  295. package/dist/{chunk-NJ6MY6V5.js.map → chunk-T5BBZQ66.js.map} +1 -1
  296. package/dist/{chunk-HZ4MBUC3.js → chunk-TI3TQQ7F.js} +4 -53
  297. package/dist/chunk-TI3TQQ7F.js.map +1 -0
  298. package/dist/{chunk-ACCAXVOG.js → chunk-TJ4GWQPM.js} +137 -57
  299. package/dist/chunk-TJ4GWQPM.js.map +1 -0
  300. package/dist/{chunk-5JJ2DAE4.js → chunk-TWQSMUE6.js} +7 -3
  301. package/dist/chunk-TWQSMUE6.js.map +1 -0
  302. package/dist/{chunk-X4XPNTCZ.cjs → chunk-U2RS574O.cjs} +139 -59
  303. package/dist/chunk-U2RS574O.cjs.map +1 -0
  304. package/dist/{chunk-TAXD5ADA.cjs → chunk-UEDTZYGI.cjs} +3 -3
  305. package/dist/{chunk-TAXD5ADA.cjs.map → chunk-UEDTZYGI.cjs.map} +1 -1
  306. package/dist/{chunk-3QGS6CXD.js → chunk-UJDWFDKE.js} +3 -3
  307. package/dist/{chunk-3QGS6CXD.js.map → chunk-UJDWFDKE.js.map} +1 -1
  308. package/dist/{chunk-DZ5HFLRC.js → chunk-UNFDIBKJ.js} +3 -3
  309. package/dist/{chunk-DZ5HFLRC.js.map → chunk-UNFDIBKJ.js.map} +1 -1
  310. package/dist/{chunk-UQ3VVR6A.cjs → chunk-UPWIJC6I.cjs} +3 -3
  311. package/dist/{chunk-UQ3VVR6A.cjs.map → chunk-UPWIJC6I.cjs.map} +1 -1
  312. package/dist/chunk-UTIPENPW.cjs +286 -0
  313. package/dist/chunk-UTIPENPW.cjs.map +1 -0
  314. package/dist/{chunk-S7WCHDBO.js → chunk-VCI2Y7ST.js} +3 -3
  315. package/dist/{chunk-S7WCHDBO.js.map → chunk-VCI2Y7ST.js.map} +1 -1
  316. package/dist/{chunk-Y5HFM7LO.js → chunk-VOEXGDL5.js} +6 -6
  317. package/dist/chunk-VOEXGDL5.js.map +1 -0
  318. package/dist/{chunk-P2CA3XGI.js → chunk-VSRO4PAI.js} +23 -5
  319. package/dist/chunk-VSRO4PAI.js.map +1 -0
  320. package/dist/{chunk-L6MDULYB.js → chunk-VU3ZMJBN.js} +2 -2
  321. package/dist/{chunk-L6MDULYB.js.map → chunk-VU3ZMJBN.js.map} +1 -1
  322. package/dist/{chunk-XI34EGK5.cjs → chunk-VV2U36T6.cjs} +9 -9
  323. package/dist/{chunk-XI34EGK5.cjs.map → chunk-VV2U36T6.cjs.map} +1 -1
  324. package/dist/{chunk-VPWJCJCX.cjs → chunk-VXW7D5LR.cjs} +26 -8
  325. package/dist/chunk-VXW7D5LR.cjs.map +1 -0
  326. package/dist/{chunk-GOALNQZ2.js → chunk-WFBUBT54.js} +4 -83
  327. package/dist/chunk-WFBUBT54.js.map +1 -0
  328. package/dist/chunk-WQHBMZSC.js +295 -0
  329. package/dist/chunk-WQHBMZSC.js.map +1 -0
  330. package/dist/chunk-WSMBIXPU.cjs +2573 -0
  331. package/dist/chunk-WSMBIXPU.cjs.map +1 -0
  332. package/dist/chunk-X5JOEZVR.js +525 -0
  333. package/dist/chunk-X5JOEZVR.js.map +1 -0
  334. package/dist/chunk-XBAAHOCP.js +3 -0
  335. package/dist/chunk-XBAAHOCP.js.map +1 -0
  336. package/dist/chunk-XDU65GLW.js +21 -0
  337. package/dist/chunk-XDU65GLW.js.map +1 -0
  338. package/dist/{chunk-5GUOOLPR.cjs → chunk-XHK5VZ4L.cjs} +29 -8
  339. package/dist/chunk-XHK5VZ4L.cjs.map +1 -0
  340. package/dist/chunk-XI74P5F2.cjs +424 -0
  341. package/dist/chunk-XI74P5F2.cjs.map +1 -0
  342. package/dist/chunk-XNPDZANN.cjs +238 -0
  343. package/dist/chunk-XNPDZANN.cjs.map +1 -0
  344. package/dist/{chunk-XDIMTPZU.cjs → chunk-XPWFIDZM.cjs} +4 -3
  345. package/dist/chunk-XPWFIDZM.cjs.map +1 -0
  346. package/dist/{chunk-FS4VZUFV.cjs → chunk-XRVMYT5G.cjs} +77 -13
  347. package/dist/chunk-XRVMYT5G.cjs.map +1 -0
  348. package/dist/chunk-XXA4NZUC.js +3 -0
  349. package/dist/chunk-XXA4NZUC.js.map +1 -0
  350. package/dist/chunk-Y424YL55.js +59 -0
  351. package/dist/chunk-Y424YL55.js.map +1 -0
  352. package/dist/chunk-Y7ZJZLJY.js +2657 -0
  353. package/dist/chunk-Y7ZJZLJY.js.map +1 -0
  354. package/dist/chunk-YG7BR76Y.js +281 -0
  355. package/dist/chunk-YG7BR76Y.js.map +1 -0
  356. package/dist/chunk-YGS2TRMP.js +38 -0
  357. package/dist/chunk-YGS2TRMP.js.map +1 -0
  358. package/dist/chunk-YUMOM3KE.js +167 -0
  359. package/dist/chunk-YUMOM3KE.js.map +1 -0
  360. package/dist/chunk-YVKBXNPK.js +41 -0
  361. package/dist/chunk-YVKBXNPK.js.map +1 -0
  362. package/dist/chunk-YW2AKBLS.cjs +23 -0
  363. package/dist/chunk-YW2AKBLS.cjs.map +1 -0
  364. package/dist/{chunk-3M7TAXNR.js → chunk-YZCM7CXK.js} +3 -3
  365. package/dist/{chunk-3M7TAXNR.js.map → chunk-YZCM7CXK.js.map} +1 -1
  366. package/dist/chunk-Z3WMDVMR.cjs +46 -0
  367. package/dist/chunk-Z3WMDVMR.cjs.map +1 -0
  368. package/dist/chunk-ZNUMOJOI.cjs +4 -0
  369. package/dist/chunk-ZNUMOJOI.cjs.map +1 -0
  370. package/dist/components/Accordion/index.cjs +2 -2
  371. package/dist/components/Accordion/index.d.cts +6 -0
  372. package/dist/components/Accordion/index.d.ts +6 -0
  373. package/dist/components/Accordion/index.js +1 -1
  374. package/dist/components/ActionPlan/index.cjs +34 -0
  375. package/dist/components/ActionPlan/index.cjs.map +1 -0
  376. package/dist/components/ActionPlan/index.d.cts +65 -0
  377. package/dist/components/ActionPlan/index.d.ts +65 -0
  378. package/dist/components/ActionPlan/index.js +21 -0
  379. package/dist/components/ActionPlan/index.js.map +1 -0
  380. package/dist/components/ActivityFeed/index.cjs +31 -0
  381. package/dist/components/ActivityFeed/index.cjs.map +1 -0
  382. package/dist/components/ActivityFeed/index.d.cts +99 -0
  383. package/dist/components/ActivityFeed/index.d.ts +99 -0
  384. package/dist/components/ActivityFeed/index.js +18 -0
  385. package/dist/components/ActivityFeed/index.js.map +1 -0
  386. package/dist/components/Alert/index.d.cts +1 -1
  387. package/dist/components/Alert/index.d.ts +1 -1
  388. package/dist/components/AlertDialog/index.cjs +19 -5
  389. package/dist/components/AlertDialog/index.d.cts +94 -16
  390. package/dist/components/AlertDialog/index.d.ts +94 -16
  391. package/dist/components/AlertDialog/index.js +6 -4
  392. package/dist/components/AssociationList/index.cjs +29 -0
  393. package/dist/components/AssociationList/index.cjs.map +1 -0
  394. package/dist/components/AssociationList/index.d.cts +50 -0
  395. package/dist/components/AssociationList/index.d.ts +50 -0
  396. package/dist/components/AssociationList/index.js +16 -0
  397. package/dist/components/AssociationList/index.js.map +1 -0
  398. package/dist/components/AudioRecorder/index.d.cts +2 -2
  399. package/dist/components/AudioRecorder/index.d.ts +2 -2
  400. package/dist/components/Autocomplete/index.d.cts +8 -2
  401. package/dist/components/Autocomplete/index.d.ts +8 -2
  402. package/dist/components/Avatar/index.cjs +9 -7
  403. package/dist/components/Avatar/index.d.cts +46 -15
  404. package/dist/components/Avatar/index.d.ts +46 -15
  405. package/dist/components/Avatar/index.js +3 -1
  406. package/dist/components/AvatarGroup/index.cjs +20 -0
  407. package/dist/components/AvatarGroup/index.cjs.map +1 -0
  408. package/dist/components/AvatarGroup/index.d.cts +57 -0
  409. package/dist/components/AvatarGroup/index.d.ts +57 -0
  410. package/dist/components/AvatarGroup/index.js +7 -0
  411. package/dist/components/AvatarGroup/index.js.map +1 -0
  412. package/dist/components/Badge/index.cjs +3 -3
  413. package/dist/components/Badge/index.d.cts +16 -2
  414. package/dist/components/Badge/index.d.ts +16 -2
  415. package/dist/components/Badge/index.js +1 -1
  416. package/dist/components/BoardView/index.cjs +5 -4
  417. package/dist/components/BoardView/index.d.cts +2 -3
  418. package/dist/components/BoardView/index.d.ts +2 -3
  419. package/dist/components/BoardView/index.js +2 -1
  420. package/dist/components/Button/index.cjs +5 -3
  421. package/dist/components/Button/index.d.cts +2 -1
  422. package/dist/components/Button/index.d.ts +2 -1
  423. package/dist/components/Button/index.js +3 -1
  424. package/dist/components/CalendarHeatmap/index.cjs +18 -0
  425. package/dist/components/CalendarHeatmap/index.cjs.map +1 -0
  426. package/dist/components/CalendarHeatmap/index.d.cts +47 -0
  427. package/dist/components/CalendarHeatmap/index.d.ts +47 -0
  428. package/dist/components/CalendarHeatmap/index.js +5 -0
  429. package/dist/components/CalendarHeatmap/index.js.map +1 -0
  430. package/dist/components/CalendarView/index.cjs +6 -4
  431. package/dist/components/CalendarView/index.d.cts +1 -2
  432. package/dist/components/CalendarView/index.d.ts +1 -2
  433. package/dist/components/CalendarView/index.js +4 -2
  434. package/dist/components/Card/index.d.cts +3 -3
  435. package/dist/components/Card/index.d.ts +3 -3
  436. package/dist/components/ClampedText/index.cjs +3 -2
  437. package/dist/components/ClampedText/index.js +2 -1
  438. package/dist/components/CollabStatus/index.cjs +6 -4
  439. package/dist/components/CollabStatus/index.d.cts +11 -0
  440. package/dist/components/CollabStatus/index.d.ts +11 -0
  441. package/dist/components/CollabStatus/index.js +3 -1
  442. package/dist/components/Collapsible/index.cjs +6 -6
  443. package/dist/components/Collapsible/index.d.cts +6 -0
  444. package/dist/components/Collapsible/index.d.ts +6 -0
  445. package/dist/components/Collapsible/index.js +3 -3
  446. package/dist/components/CompletenessMeter/index.cjs +23 -0
  447. package/dist/components/CompletenessMeter/index.cjs.map +1 -0
  448. package/dist/components/CompletenessMeter/index.d.cts +52 -0
  449. package/dist/components/CompletenessMeter/index.d.ts +52 -0
  450. package/dist/components/CompletenessMeter/index.js +6 -0
  451. package/dist/components/CompletenessMeter/index.js.map +1 -0
  452. package/dist/components/CountryCodeDropdown/index.cjs +5 -5
  453. package/dist/components/CountryCodeDropdown/index.js +2 -2
  454. package/dist/components/CustomizableDashboard/index.cjs +12 -10
  455. package/dist/components/CustomizableDashboard/index.js +5 -3
  456. package/dist/components/DateInput/index.d.cts +36 -4
  457. package/dist/components/DateInput/index.d.ts +36 -4
  458. package/dist/components/Dropdown/index.cjs +12 -10
  459. package/dist/components/Dropdown/index.d.cts +6 -4
  460. package/dist/components/Dropdown/index.d.ts +6 -4
  461. package/dist/components/Dropdown/index.js +5 -3
  462. package/dist/components/EmailEditor/index.cjs +68 -0
  463. package/dist/components/EmailEditor/index.cjs.map +1 -0
  464. package/dist/components/EmailEditor/index.d.cts +347 -0
  465. package/dist/components/EmailEditor/index.d.ts +347 -0
  466. package/dist/components/EmailEditor/index.js +27 -0
  467. package/dist/components/EmailEditor/index.js.map +1 -0
  468. package/dist/components/FieldHistory/index.cjs +34 -0
  469. package/dist/components/FieldHistory/index.cjs.map +1 -0
  470. package/dist/components/FieldHistory/index.d.cts +66 -0
  471. package/dist/components/FieldHistory/index.d.ts +66 -0
  472. package/dist/components/FieldHistory/index.js +21 -0
  473. package/dist/components/FieldHistory/index.js.map +1 -0
  474. package/dist/components/FloatingWindow/index.cjs +6 -4
  475. package/dist/components/FloatingWindow/index.js +4 -2
  476. package/dist/components/GanttView/index.d.cts +1 -2
  477. package/dist/components/GanttView/index.d.ts +1 -2
  478. package/dist/components/GlossaryTooltip/index.cjs +3 -3
  479. package/dist/components/GlossaryTooltip/index.js +2 -2
  480. package/dist/components/InlineEdit/index.cjs +20 -0
  481. package/dist/components/InlineEdit/index.cjs.map +1 -0
  482. package/dist/components/InlineEdit/index.d.cts +56 -0
  483. package/dist/components/InlineEdit/index.d.ts +56 -0
  484. package/dist/components/InlineEdit/index.js +7 -0
  485. package/dist/components/InlineEdit/index.js.map +1 -0
  486. package/dist/components/KeyboardShortcutsOverlay/index.cjs +5 -5
  487. package/dist/components/KeyboardShortcutsOverlay/index.js +3 -3
  488. package/dist/components/ListView/index.cjs +6 -4
  489. package/dist/components/ListView/index.d.cts +91 -4
  490. package/dist/components/ListView/index.d.ts +91 -4
  491. package/dist/components/ListView/index.js +4 -2
  492. package/dist/components/LogoUploader/index.cjs +18 -0
  493. package/dist/components/LogoUploader/index.cjs.map +1 -0
  494. package/dist/components/LogoUploader/index.d.cts +49 -0
  495. package/dist/components/LogoUploader/index.d.ts +49 -0
  496. package/dist/components/LogoUploader/index.js +5 -0
  497. package/dist/components/LogoUploader/index.js.map +1 -0
  498. package/dist/components/Markdown/index.cjs +21 -19
  499. package/dist/components/Markdown/index.js +9 -7
  500. package/dist/components/MediaEditor/index.cjs +16 -14
  501. package/dist/components/MediaEditor/index.d.cts +91 -2
  502. package/dist/components/MediaEditor/index.d.ts +91 -2
  503. package/dist/components/MediaEditor/index.js +11 -9
  504. package/dist/components/MediaFeed/index.cjs +29 -0
  505. package/dist/components/MediaFeed/index.cjs.map +1 -0
  506. package/dist/components/MediaFeed/index.d.cts +104 -0
  507. package/dist/components/MediaFeed/index.d.ts +104 -0
  508. package/dist/components/MediaFeed/index.js +20 -0
  509. package/dist/components/MediaFeed/index.js.map +1 -0
  510. package/dist/components/MediaPlayer/index.cjs +8 -6
  511. package/dist/components/MediaPlayer/index.d.cts +19 -1
  512. package/dist/components/MediaPlayer/index.d.ts +19 -1
  513. package/dist/components/MediaPlayer/index.js +5 -3
  514. package/dist/components/MegaMenu/index.cjs +7 -5
  515. package/dist/components/MegaMenu/index.js +4 -2
  516. package/dist/components/Modal/index.cjs +10 -10
  517. package/dist/components/Modal/index.js +2 -2
  518. package/dist/components/Pagination/index.d.cts +1 -1
  519. package/dist/components/Pagination/index.d.ts +1 -1
  520. package/dist/components/PhiMask/index.cjs +18 -0
  521. package/dist/components/PhiMask/index.cjs.map +1 -0
  522. package/dist/components/PhiMask/index.d.cts +45 -0
  523. package/dist/components/PhiMask/index.d.ts +45 -0
  524. package/dist/components/PhiMask/index.js +5 -0
  525. package/dist/components/PhiMask/index.js.map +1 -0
  526. package/dist/components/Progress/index.cjs +6 -6
  527. package/dist/components/Progress/index.d.cts +8 -2
  528. package/dist/components/Progress/index.d.ts +8 -2
  529. package/dist/components/Progress/index.js +1 -1
  530. package/dist/components/PropertyList/index.cjs +25 -0
  531. package/dist/components/PropertyList/index.cjs.map +1 -0
  532. package/dist/components/PropertyList/index.d.cts +87 -0
  533. package/dist/components/PropertyList/index.d.ts +87 -0
  534. package/dist/components/PropertyList/index.js +12 -0
  535. package/dist/components/PropertyList/index.js.map +1 -0
  536. package/dist/components/Q/index.d.cts +2 -2
  537. package/dist/components/Q/index.d.ts +2 -2
  538. package/dist/components/QuickAction/index.d.cts +1 -1
  539. package/dist/components/QuickAction/index.d.ts +1 -1
  540. package/dist/components/RadialExplorer/index.cjs +7 -5
  541. package/dist/components/RadialExplorer/index.js +6 -4
  542. package/dist/components/Rating/index.cjs +28 -0
  543. package/dist/components/Rating/index.cjs.map +1 -0
  544. package/dist/components/Rating/index.d.cts +85 -0
  545. package/dist/components/Rating/index.d.ts +85 -0
  546. package/dist/components/Rating/index.js +7 -0
  547. package/dist/components/Rating/index.js.map +1 -0
  548. package/dist/components/RecordButton/index.d.cts +1 -1
  549. package/dist/components/RecordButton/index.d.ts +1 -1
  550. package/dist/components/RecordHeader/index.cjs +30 -0
  551. package/dist/components/RecordHeader/index.cjs.map +1 -0
  552. package/dist/components/RecordHeader/index.d.cts +96 -0
  553. package/dist/components/RecordHeader/index.d.ts +96 -0
  554. package/dist/components/RecordHeader/index.js +17 -0
  555. package/dist/components/RecordHeader/index.js.map +1 -0
  556. package/dist/components/RecordLayout/index.cjs +22 -0
  557. package/dist/components/RecordLayout/index.cjs.map +1 -0
  558. package/dist/components/RecordLayout/index.d.cts +40 -0
  559. package/dist/components/RecordLayout/index.d.ts +40 -0
  560. package/dist/components/RecordLayout/index.js +9 -0
  561. package/dist/components/RecordLayout/index.js.map +1 -0
  562. package/dist/components/RichTextEditor/index.cjs +12 -8
  563. package/dist/components/RichTextEditor/index.d.cts +12 -2
  564. package/dist/components/RichTextEditor/index.d.ts +12 -2
  565. package/dist/components/RichTextEditor/index.js +9 -5
  566. package/dist/components/ScrollArea/index.d.cts +1 -1
  567. package/dist/components/ScrollArea/index.d.ts +1 -1
  568. package/dist/components/SectionSpyNav/index.cjs +5 -3
  569. package/dist/components/SectionSpyNav/index.js +4 -2
  570. package/dist/components/Select/index.cjs +4 -4
  571. package/dist/components/Select/index.d.cts +2 -2
  572. package/dist/components/Select/index.d.ts +2 -2
  573. package/dist/components/Select/index.js +2 -2
  574. package/dist/components/Skeleton/index.d.cts +1 -1
  575. package/dist/components/Skeleton/index.d.ts +1 -1
  576. package/dist/components/Slider/index.d.cts +2 -2
  577. package/dist/components/Slider/index.d.ts +2 -2
  578. package/dist/components/SliderCalculator/index.cjs +4 -4
  579. package/dist/components/SliderCalculator/index.js +2 -2
  580. package/dist/components/SourceTip/index.cjs +3 -3
  581. package/dist/components/SourceTip/index.js +2 -2
  582. package/dist/components/Spinner/index.d.cts +2 -2
  583. package/dist/components/Spinner/index.d.ts +2 -2
  584. package/dist/components/SuperChat/index.cjs +735 -322
  585. package/dist/components/SuperChat/index.cjs.map +1 -1
  586. package/dist/components/SuperChat/index.d.cts +126 -8
  587. package/dist/components/SuperChat/index.d.ts +126 -8
  588. package/dist/components/SuperChat/index.js +721 -308
  589. package/dist/components/SuperChat/index.js.map +1 -1
  590. package/dist/components/SuperChat/plugins/index.cjs +8 -6
  591. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  592. package/dist/components/SuperChat/plugins/index.d.cts +2 -3
  593. package/dist/components/SuperChat/plugins/index.d.ts +2 -3
  594. package/dist/components/SuperChat/plugins/index.js +7 -5
  595. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  596. package/dist/components/Tabs/index.cjs +10 -7
  597. package/dist/components/Tabs/index.d.cts +12 -1
  598. package/dist/components/Tabs/index.d.ts +12 -1
  599. package/dist/components/Tabs/index.js +4 -1
  600. package/dist/components/TagEditor/index.cjs +22 -0
  601. package/dist/components/TagEditor/index.cjs.map +1 -0
  602. package/dist/components/TagEditor/index.d.cts +46 -0
  603. package/dist/components/TagEditor/index.d.ts +46 -0
  604. package/dist/components/TagEditor/index.js +9 -0
  605. package/dist/components/TagEditor/index.js.map +1 -0
  606. package/dist/components/Text/index.d.cts +3 -3
  607. package/dist/components/Text/index.d.ts +3 -3
  608. package/dist/components/Textarea/index.d.cts +2 -2
  609. package/dist/components/Textarea/index.d.ts +2 -2
  610. package/dist/components/ThemeProvider/index.cjs +9 -9
  611. package/dist/components/ThemeProvider/index.d.cts +3 -1
  612. package/dist/components/ThemeProvider/index.d.ts +3 -1
  613. package/dist/components/ThemeProvider/index.js +3 -3
  614. package/dist/components/Tooltip/index.cjs +3 -3
  615. package/dist/components/Tooltip/index.js +2 -2
  616. package/dist/components/TranscriptView/index.d.cts +85 -4
  617. package/dist/components/TranscriptView/index.d.ts +85 -4
  618. package/dist/components/UserPicker/index.cjs +24 -0
  619. package/dist/components/UserPicker/index.cjs.map +1 -0
  620. package/dist/components/UserPicker/index.d.cts +60 -0
  621. package/dist/components/UserPicker/index.d.ts +60 -0
  622. package/dist/components/UserPicker/index.js +11 -0
  623. package/dist/components/UserPicker/index.js.map +1 -0
  624. package/dist/components/VideoCard/index.cjs +4 -4
  625. package/dist/components/VideoCard/index.js +2 -2
  626. package/dist/components/ViewSet/index.cjs +10 -7
  627. package/dist/components/ViewSet/index.d.cts +120 -8
  628. package/dist/components/ViewSet/index.d.ts +120 -8
  629. package/dist/components/ViewSet/index.js +9 -6
  630. package/dist/components/ViewSwitcher/index.cjs +4 -3
  631. package/dist/components/ViewSwitcher/index.d.cts +1 -2
  632. package/dist/components/ViewSwitcher/index.d.ts +1 -2
  633. package/dist/components/ViewSwitcher/index.js +2 -1
  634. package/dist/components/YearTimeline/index.cjs +5 -5
  635. package/dist/components/YearTimeline/index.js +1 -1
  636. package/dist/datavis.cjs +6 -4
  637. package/dist/datavis.cjs.map +1 -1
  638. package/dist/datavis.d.cts +167 -13
  639. package/dist/datavis.d.ts +167 -13
  640. package/dist/datavis.js +4 -2
  641. package/dist/datavis.js.map +1 -1
  642. package/dist/deck.cjs +3374 -0
  643. package/dist/deck.cjs.map +1 -0
  644. package/dist/deck.d.cts +712 -0
  645. package/dist/deck.d.ts +712 -0
  646. package/dist/deck.js +3330 -0
  647. package/dist/deck.js.map +1 -0
  648. package/dist/esheet.cjs +20 -16
  649. package/dist/esheet.cjs.map +1 -1
  650. package/dist/esheet.d.cts +183 -1
  651. package/dist/esheet.d.ts +183 -1
  652. package/dist/esheet.js +17 -13
  653. package/dist/esheet.js.map +1 -1
  654. package/dist/globe.cjs +2 -2
  655. package/dist/globe.js +1 -1
  656. package/dist/{hey-buddy-INNUFFJJ.cjs → hey-buddy-5WOBYZRJ.cjs} +22 -11
  657. package/dist/hey-buddy-5WOBYZRJ.cjs.map +1 -0
  658. package/dist/{hey-buddy-V6FC5UKB.js → hey-buddy-AHUHCDBC.js} +22 -11
  659. package/dist/hey-buddy-AHUHCDBC.js.map +1 -0
  660. package/dist/hooks/index.cjs +88 -33
  661. package/dist/hooks/index.d.cts +592 -36
  662. package/dist/hooks/index.d.ts +592 -36
  663. package/dist/hooks/index.js +9 -6
  664. package/dist/icons-wBacj6BW.d.cts +142 -0
  665. package/dist/icons-wBacj6BW.d.ts +142 -0
  666. package/dist/index.cjs +2056 -1349
  667. package/dist/index.cjs.map +1 -1
  668. package/dist/index.d.cts +10401 -637
  669. package/dist/index.d.ts +10401 -637
  670. package/dist/index.js +674 -352
  671. package/dist/index.js.map +1 -1
  672. package/dist/kerebron.css +115 -0
  673. package/dist/maps.cjs +160 -0
  674. package/dist/maps.cjs.map +1 -0
  675. package/dist/maps.d.cts +42 -0
  676. package/dist/maps.d.ts +42 -0
  677. package/dist/maps.js +138 -0
  678. package/dist/maps.js.map +1 -0
  679. package/dist/motion.cjs +7 -7
  680. package/dist/motion.d.cts +186 -2
  681. package/dist/motion.d.ts +186 -2
  682. package/dist/motion.js +2 -2
  683. package/dist/org-chart.cjs +1303 -0
  684. package/dist/org-chart.cjs.map +1 -0
  685. package/dist/org-chart.d.cts +164 -0
  686. package/dist/org-chart.d.ts +164 -0
  687. package/dist/org-chart.js +1278 -0
  688. package/dist/org-chart.js.map +1 -0
  689. package/dist/q.d.cts +25 -3
  690. package/dist/q.d.ts +25 -3
  691. package/dist/styles/effects.css +133 -0
  692. package/dist/styles/init.css +22 -3
  693. package/dist/styles.css +1 -1
  694. package/dist/tailwind-preset.cjs +4 -4
  695. package/dist/tailwind-preset.js +1 -1
  696. package/dist/templates.cjs +156 -0
  697. package/dist/templates.cjs.map +1 -0
  698. package/dist/templates.d.cts +734 -0
  699. package/dist/templates.d.ts +734 -0
  700. package/dist/templates.js +11 -0
  701. package/dist/templates.js.map +1 -0
  702. package/dist/{types-CbWXIKbe.d.cts → types-CDeBNZiE.d.cts} +1 -28
  703. package/dist/{types-CbWXIKbe.d.ts → types-CDeBNZiE.d.ts} +1 -28
  704. package/dist/types-Cx1FHLq2.d.cts +548 -0
  705. package/dist/types-Cx1FHLq2.d.ts +548 -0
  706. package/dist/types-DsdZvEI1.d.cts +92 -0
  707. package/dist/types-DsdZvEI1.d.ts +92 -0
  708. package/dist/utils/index.cjs +9 -9
  709. package/dist/utils/index.d.cts +13 -2
  710. package/dist/utils/index.d.ts +13 -2
  711. package/dist/utils/index.js +1 -1
  712. package/package.json +79 -15
  713. package/dist/Animated-XmH6k8pZ.d.cts +0 -188
  714. package/dist/Animated-XmH6k8pZ.d.ts +0 -188
  715. package/dist/CsvBlock-ROJCKJDP.cjs +0 -16
  716. package/dist/CsvBlock-UWPMTLE2.js +0 -7
  717. package/dist/HtmlPreviewBlock-DWFN6EUB.cjs +0 -16
  718. package/dist/HtmlPreviewBlock-ME5U3XNS.js +0 -7
  719. package/dist/MedicationEditor-Bp4NLy7y.d.cts +0 -352
  720. package/dist/MedicationEditor-Bp4NLy7y.d.ts +0 -352
  721. package/dist/MermaidBlock-2B6CPD6Y.js +0 -7
  722. package/dist/MermaidBlock-D2UC5M55.cjs +0 -16
  723. package/dist/SurveyBlock-4CD4AYMJ.cjs +0 -16
  724. package/dist/SurveyBlock-4DO62RBT.js +0 -7
  725. package/dist/chunk-2IZLKPUW.js.map +0 -1
  726. package/dist/chunk-3T7QGLNB.js.map +0 -1
  727. package/dist/chunk-4A3W4TQF.js.map +0 -1
  728. package/dist/chunk-4IS3QCOQ.cjs.map +0 -1
  729. package/dist/chunk-5GUOOLPR.cjs.map +0 -1
  730. package/dist/chunk-5JJ2DAE4.js.map +0 -1
  731. package/dist/chunk-6EN3IQQI.cjs.map +0 -1
  732. package/dist/chunk-6HFFWEM3.cjs +0 -22
  733. package/dist/chunk-6HFFWEM3.cjs.map +0 -1
  734. package/dist/chunk-7ZDPD5ZX.cjs.map +0 -1
  735. package/dist/chunk-7ZVTLTJF.js +0 -109
  736. package/dist/chunk-7ZVTLTJF.js.map +0 -1
  737. package/dist/chunk-ACCAXVOG.js.map +0 -1
  738. package/dist/chunk-AR7AKDM2.cjs +0 -143
  739. package/dist/chunk-AR7AKDM2.cjs.map +0 -1
  740. package/dist/chunk-ASSDGS4F.cjs.map +0 -1
  741. package/dist/chunk-AWJBOND5.js +0 -130
  742. package/dist/chunk-AWJBOND5.js.map +0 -1
  743. package/dist/chunk-BMSG4NBH.js +0 -56
  744. package/dist/chunk-BMSG4NBH.js.map +0 -1
  745. package/dist/chunk-CEQJGUAS.js.map +0 -1
  746. package/dist/chunk-CR2SDI23.cjs.map +0 -1
  747. package/dist/chunk-DVOQ3JNO.js.map +0 -1
  748. package/dist/chunk-E4IBHYJ7.cjs +0 -80
  749. package/dist/chunk-E4IBHYJ7.cjs.map +0 -1
  750. package/dist/chunk-FS4VZUFV.cjs.map +0 -1
  751. package/dist/chunk-GD7EBGC4.cjs.map +0 -1
  752. package/dist/chunk-GOALNQZ2.js.map +0 -1
  753. package/dist/chunk-HACNIFO3.js.map +0 -1
  754. package/dist/chunk-HB7C7NB5.js +0 -20
  755. package/dist/chunk-HB7C7NB5.js.map +0 -1
  756. package/dist/chunk-HZ4MBUC3.js.map +0 -1
  757. package/dist/chunk-IT775BYG.js.map +0 -1
  758. package/dist/chunk-JEIW7BSV.cjs.map +0 -1
  759. package/dist/chunk-JYZW2PZS.cjs.map +0 -1
  760. package/dist/chunk-KQUI4BGS.cjs.map +0 -1
  761. package/dist/chunk-KRU6IGV7.js.map +0 -1
  762. package/dist/chunk-NV2CWBI2.cjs.map +0 -1
  763. package/dist/chunk-OE5CKRUC.js.map +0 -1
  764. package/dist/chunk-P2CA3XGI.js.map +0 -1
  765. package/dist/chunk-P7UMS4E6.cjs.map +0 -1
  766. package/dist/chunk-SGFYA22I.cjs.map +0 -1
  767. package/dist/chunk-SQHMGT4W.js.map +0 -1
  768. package/dist/chunk-SQJFBZ42.js.map +0 -1
  769. package/dist/chunk-SVSHA7XV.js.map +0 -1
  770. package/dist/chunk-TVTIGV7Q.js.map +0 -1
  771. package/dist/chunk-VKELAMAZ.js.map +0 -1
  772. package/dist/chunk-VNYW4C4J.cjs.map +0 -1
  773. package/dist/chunk-VOKVG3ER.js +0 -78
  774. package/dist/chunk-VOKVG3ER.js.map +0 -1
  775. package/dist/chunk-VPIYTQCV.cjs.map +0 -1
  776. package/dist/chunk-VPWJCJCX.cjs.map +0 -1
  777. package/dist/chunk-VROIMIHB.cjs.map +0 -1
  778. package/dist/chunk-WNJRS7Y7.cjs.map +0 -1
  779. package/dist/chunk-X4LBUPJO.cjs.map +0 -1
  780. package/dist/chunk-X4XPNTCZ.cjs.map +0 -1
  781. package/dist/chunk-XCP454Q6.js.map +0 -1
  782. package/dist/chunk-XDIMTPZU.cjs.map +0 -1
  783. package/dist/chunk-XEAT7XJG.cjs.map +0 -1
  784. package/dist/chunk-XVW5DPPP.js.map +0 -1
  785. package/dist/chunk-Y5HFM7LO.js.map +0 -1
  786. package/dist/chunk-YVL3XATO.cjs +0 -79
  787. package/dist/chunk-YVL3XATO.cjs.map +0 -1
  788. package/dist/chunk-YVPC65ZJ.cjs.map +0 -1
  789. package/dist/chunk-ZGRCSNPK.js.map +0 -1
  790. package/dist/hey-buddy-INNUFFJJ.cjs.map +0 -1
  791. package/dist/hey-buddy-V6FC5UKB.js.map +0 -1
  792. package/dist/html-MdxqSzjD.d.cts +0 -13
  793. package/dist/html-MdxqSzjD.d.ts +0 -13
  794. package/dist/orderRows-BUJYgSc7.d.cts +0 -221
  795. package/dist/orderRows-BUJYgSc7.d.ts +0 -221
  796. package/dist/transcript-Cg7uSW-C.d.cts +0 -84
  797. package/dist/transcript-Cg7uSW-C.d.ts +0 -84
  798. package/dist/types-B97JNRNQ.d.cts +0 -251
  799. package/dist/types-CnPEwzlp.d.cts +0 -254
  800. package/dist/types-CnPEwzlp.d.ts +0 -254
  801. package/dist/types-gZXrfLj6.d.ts +0 -251
  802. package/dist/useAnchoredPosition-CKwLSQW8.d.cts +0 -76
  803. package/dist/useAnchoredPosition-CKwLSQW8.d.ts +0 -76
  804. package/dist/useTheme-B9SWu6ui.d.cts +0 -24
  805. package/dist/useTheme-B9SWu6ui.d.ts +0 -24
  806. package/dist/useTranscriptEdits-CGzlemHT.d.cts +0 -182
  807. package/dist/useTranscriptEdits-D32bLs0l.d.ts +0 -182
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/RadialExplorer/RadialExplorer.tsx"],"names":[],"mappings":"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","file":"chunk-VOEXGDL5.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { ArrowRight } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Badge } from '../Badge';\nimport { buttonVariants } from '../Button';\nimport { usePrefersReducedMotion } from '../../hooks/usePrefersReducedMotion';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface RadialSpoke {\n id: string;\n /** Label under the tile. */\n label: string;\n /** Tile icon (Lucide, ~22px). */\n icon: React.ReactNode;\n /** Small caps tag above the detail heading. Defaults to `label`. */\n tag?: string;\n /** Detail heading. Defaults to `label`. */\n title?: string;\n description?: string;\n /** Detail media — a `VideoCard variant=\"plate\"`, an image, a chart. */\n media?: React.ReactNode;\n /** Caption under the media, e.g. \"AI Medical Assistant · 2:44\". */\n caption?: string;\n /** Primary CTA in the detail panel. */\n cta?: { label: string; href: string };\n /** Secondary \"Explore module →\" link. */\n href?: string;\n hrefLabel?: string;\n}\n\nexport interface RadialExplorerProps {\n spokes: RadialSpoke[];\n /** Centre node — a brand mark or product tile. */\n center: React.ReactNode;\n /** Small caps label over the whole explorer. */\n eyebrow?: string;\n /** Controlled active spoke. */\n activeId?: string | null;\n defaultActiveId?: string | null;\n onActiveChange?: (id: string | null) => void;\n /** Shown in the detail panel before any spoke is chosen. */\n welcome?: {\n tag?: string;\n title: string;\n description?: string;\n media?: React.ReactNode;\n cta?: { label: string; href: string };\n };\n /**\n * Auto-advance through the spokes until the visitor interacts. Default\n * 2200ms; pass 0 to disable. Skipped under `prefers-reduced-motion`.\n */\n attractMs?: number;\n /** Hint under the ring. Default \"Hover a module to preview\". */\n hint?: string;\n /** Orbit radius. Default `clamp(118px, 17vw, 188px)`. */\n radius?: string;\n /** Accessible name for the spoke group. Default \"Modules\". */\n groupLabel?: string;\n className?: string;\n}\n\n// =============================================================================\n// RadialExplorer\n// =============================================================================\n\n/**\n * A radial product explorer: a centre mark with N icon tiles orbiting it, a\n * glowing tracer ray from the core to the active tile, tab dots, and a detail\n * panel beside the ring that shows the active spoke's media, copy and CTAs\n * (with a welcome state before any pick). Auto-advances gently until the\n * visitor engages. Below `lg` the ring becomes a chip grid above the panel.\n * Ported from the Enterprise Health hero HUD.\n *\n * @example\n * ```tsx\n * <RadialExplorer\n * eyebrow=\"Explore the platform\"\n * center={<img src=\"/mark.svg\" alt=\"\" />}\n * spokes={[{ id: 'ehr', label: 'Certified EHR', icon: <FileText />, description: '…',\n * media: <VideoCard variant=\"plate\" title=\"EHR tour\" youtubeId=\"…\" duration=\"2:44\" />,\n * cta: { label: 'Request a demo', href: '/demo/' }, href: '/platform/ehr/' }]}\n * />\n * ```\n */\nexport function RadialExplorer({\n spokes,\n center,\n eyebrow,\n activeId: controlled,\n defaultActiveId = null,\n onActiveChange,\n welcome,\n attractMs = 2200,\n hint = 'Hover a module to preview',\n radius = 'clamp(118px, 17vw, 188px)',\n groupLabel = 'Modules',\n className,\n}: RadialExplorerProps) {\n const reduced = usePrefersReducedMotion();\n const [inner, setInner] = React.useState<string | null>(defaultActiveId);\n const [engaged, setEngaged] = React.useState(false);\n const activeId = controlled !== undefined ? controlled : inner;\n const id = React.useId();\n\n const select = React.useCallback(\n (next: string | null) => {\n setEngaged(true);\n if (controlled === undefined) setInner(next);\n onActiveChange?.(next);\n },\n [controlled, onActiveChange]\n );\n\n // Attract loop until the visitor interacts. Never runs in controlled mode:\n // `activeId` is owned by the host, so cycling it (or firing unsolicited\n // `onActiveChange` ticks) would fight the controlled API contract.\n React.useEffect(() => {\n if (\n controlled !== undefined ||\n engaged ||\n reduced ||\n !attractMs ||\n spokes.length === 0\n )\n return;\n let i = spokes.findIndex((s) => s.id === activeId);\n const t = window.setInterval(() => {\n i = (i + 1) % spokes.length;\n setInner(spokes[i].id);\n onActiveChange?.(spokes[i].id);\n }, attractMs);\n return () => window.clearInterval(t);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [engaged, reduced, attractMs, spokes.length, controlled]);\n\n const activeIndex = spokes.findIndex((s) => s.id === activeId);\n const active = activeIndex >= 0 ? spokes[activeIndex] : null;\n const step = 360 / Math.max(spokes.length, 1);\n const angle = (i: number) => `${i * step - 90}deg`;\n\n return (\n <section\n data-slot=\"radial-explorer\"\n style={{ '--re-r': radius } as React.CSSProperties}\n className={cn(\n 'grid gap-8 lg:grid-cols-[1.1fr_minmax(300px,380px)] lg:items-center',\n className\n )}\n aria-labelledby={eyebrow ? `${id}-eyebrow` : undefined}\n >\n <div className=\"flex flex-col items-center gap-5\">\n {eyebrow && (\n <p\n id={`${id}-eyebrow`}\n className=\"text-primary-800 dark:text-primary-300 text-[11px] font-bold tracking-[0.18em] uppercase\"\n >\n {eyebrow}\n </p>\n )}\n\n {/* Ring (lg+) */}\n <div\n role=\"group\"\n aria-label={groupLabel}\n data-slot=\"radial-explorer-ring\"\n className=\"relative hidden aspect-square w-[calc(var(--re-r)*2+120px)] place-items-center lg:grid\"\n >\n <span\n aria-hidden\n data-slot=\"radial-explorer-core\"\n className={cn(\n // rtl-ignore -- physical centering paired with -translate-x-1/2 is direction-independent; start-1/2 would break it in RTL\n 'absolute top-1/2 left-1/2 grid h-[100px] w-[100px] -translate-x-1/2 -translate-y-1/2 place-items-center rounded-[24%] border border-white/15 text-white shadow-[0_14px_30px_rgba(0,0,0,0.3),inset_0_1px_0_rgba(255,255,255,0.08)]',\n '[background:radial-gradient(90%_90%_at_24%_8%,color-mix(in_srgb,var(--mieweb-primary-400)_35%,transparent),transparent_60%),linear-gradient(145deg,var(--mieweb-primary-700)_0%,var(--mieweb-primary-900)_68%,var(--mieweb-primary-950)_100%)]',\n '[&>*]:h-[54px] [&>*]:w-[54px] [&>img]:object-contain'\n )}\n >\n {center}\n </span>\n\n {active && (\n <span\n aria-hidden\n data-slot=\"radial-explorer-ray\"\n style={{\n width: 'var(--re-r)',\n transform: `translateY(-50%) rotate(${angle(activeIndex)})`,\n }}\n className={cn(\n // rtl-ignore -- the ray is rotated to a computed angle from the physical center; origin/tip geometry must stay physical\n 'pointer-events-none absolute top-1/2 left-1/2 z-0 h-0.5 origin-left rounded-full transition-transform duration-500 [transition-timing-function:cubic-bezier(0.4,0.85,0.3,1)]',\n '[filter:drop-shadow(0_0_6px_color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-300))_55%,transparent))] [background:linear-gradient(90deg,transparent_4%,var(--mieweb-accent,var(--mieweb-primary-300))_94%)]',\n // rtl-ignore -- tip dot sits at the physical end of the rotated ray\n 'after:absolute after:top-1/2 after:-right-[3px] after:h-[7px] after:w-[7px] after:-translate-y-1/2 after:rounded-full after:bg-[var(--mieweb-accent,var(--mieweb-primary-300))] after:shadow-[0_0_9px_2px_color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-300))_70%,transparent)] after:content-[\"\"]'\n )}\n />\n )}\n\n {spokes.map((s, i) => {\n const on = s.id === activeId;\n return (\n <button\n key={s.id}\n type=\"button\"\n aria-pressed={on}\n data-slot=\"radial-explorer-spoke\"\n data-active={on || undefined}\n style={{\n transform: `translate(-50%,-50%) rotate(${angle(i)}) translate(var(--re-r)) rotate(calc(-1 * ${angle(i)}))`,\n }}\n onMouseEnter={() => select(s.id)}\n onFocus={() => select(s.id)}\n onClick={() => select(s.id)}\n // rtl-ignore -- spokes are placed by rotate/translate trig from the physical center; the wheel is rotationally symmetric\n className=\"group/spoke absolute top-1/2 left-1/2 grid w-24 justify-items-center gap-2 focus-visible:outline-none\"\n >\n <SpokeTile icon={s.icon} active={on} />\n <span\n className={cn(\n 'text-muted-foreground group-hover/spoke:text-primary-800 dark:group-hover/spoke:text-primary-200 text-[13px] font-semibold transition-colors',\n on && 'text-primary-800 dark:text-primary-200'\n )}\n >\n {s.label}\n </span>\n </button>\n );\n })}\n </div>\n\n {/* Chip grid (< lg) */}\n <div\n role=\"group\"\n aria-label={groupLabel}\n className=\"grid w-full grid-cols-3 gap-3 lg:hidden\"\n >\n {spokes.map((s) => {\n const on = s.id === activeId;\n return (\n <button\n key={s.id}\n type=\"button\"\n aria-pressed={on}\n data-slot=\"radial-explorer-chip\"\n onClick={() => select(s.id)}\n className=\"group/spoke grid justify-items-center gap-1.5 focus-visible:outline-none\"\n >\n <SpokeTile icon={s.icon} active={on} size=\"sm\" />\n <span\n className={cn(\n 'text-muted-foreground text-center text-xs font-semibold',\n on && 'text-primary-800 dark:text-primary-200'\n )}\n >\n {s.label}\n </span>\n </button>\n );\n })}\n </div>\n\n {/* dots + hint */}\n <div className=\"flex flex-col items-center gap-2\">\n <div role=\"group\" aria-label={groupLabel} className=\"flex gap-2\">\n {spokes.map((s, i) => (\n <button\n key={s.id}\n type=\"button\"\n aria-pressed={i === activeIndex}\n aria-label={s.label}\n onClick={() => select(s.id)}\n className={cn(\n 'h-2 rounded-full transition-all',\n i === activeIndex\n ? 'w-6 bg-[var(--mieweb-accent,var(--mieweb-primary-400))]'\n : 'bg-primary-300/60 hover:bg-primary-400 w-2'\n )}\n />\n ))}\n </div>\n {hint && (\n <p\n className={cn(\n 'text-muted-foreground text-xs transition-opacity',\n engaged && 'opacity-0'\n )}\n aria-hidden={engaged}\n >\n {hint}\n </p>\n )}\n </div>\n </div>\n\n {/* Detail */}\n <div\n data-slot=\"radial-explorer-detail\"\n aria-live={engaged ? 'polite' : 'off'}\n className=\"border-border bg-card text-card-foreground grid content-center gap-3.5 rounded-2xl border p-5 shadow-xl\"\n >\n {active ? (\n <Detail\n key={active.id}\n tag={active.tag ?? active.label}\n title={active.title ?? active.label}\n description={active.description}\n media={active.media}\n caption={active.caption}\n cta={active.cta}\n href={active.href}\n hrefLabel={active.hrefLabel ?? 'Explore module'}\n />\n ) : welcome ? (\n <Detail\n key=\"welcome\"\n tag={welcome.tag}\n title={welcome.title}\n description={welcome.description}\n media={welcome.media}\n cta={welcome.cta}\n />\n ) : null}\n </div>\n </section>\n );\n}\n\n// =============================================================================\n// Pieces\n// =============================================================================\n\nfunction SpokeTile({\n icon,\n active,\n size = 'md',\n}: {\n icon: React.ReactNode;\n active: boolean;\n size?: 'sm' | 'md';\n}) {\n return (\n <span\n aria-hidden\n className={cn(\n 'mie-fx-sheen relative grid place-items-center rounded-[17px] border transition-[transform,border-color,color,box-shadow,background] duration-200',\n size === 'md'\n ? 'h-[60px] w-[60px] [&>svg]:h-[22px] [&>svg]:w-[22px]'\n : 'h-12 w-12 rounded-xl [&>svg]:h-5 [&>svg]:w-5',\n 'border-border bg-primary-500/10 text-primary-800 dark:text-primary-300 shadow-md backdrop-blur-sm',\n 'group-hover/spoke:-translate-y-0.5 group-hover/spoke:scale-[1.04] group-hover/spoke:border-transparent group-hover/spoke:text-white group-hover/spoke:shadow-xl',\n 'group-hover/spoke:[background:linear-gradient(150deg,var(--mieweb-primary-700),var(--mieweb-primary-900))_padding-box,linear-gradient(135deg,var(--mieweb-accent,var(--mieweb-primary-300)),var(--mieweb-primary-200)_55%,var(--mieweb-accent,var(--mieweb-primary-300)))_border-box]',\n 'group-focus-visible/spoke:outline-primary-500 group-focus-visible/spoke:outline group-focus-visible/spoke:outline-2 group-focus-visible/spoke:outline-offset-[3px]',\n active &&\n '-translate-y-0.5 scale-[1.04] border-transparent text-white shadow-xl [background:linear-gradient(150deg,var(--mieweb-primary-700),var(--mieweb-primary-900))_padding-box,linear-gradient(135deg,var(--mieweb-accent,var(--mieweb-primary-300)),var(--mieweb-primary-200)_55%,var(--mieweb-accent,var(--mieweb-primary-300)))_border-box]'\n )}\n >\n {icon}\n </span>\n );\n}\n\nfunction Detail({\n tag,\n title,\n description,\n media,\n caption,\n cta,\n href,\n hrefLabel,\n}: {\n tag?: string;\n title: string;\n description?: string;\n media?: React.ReactNode;\n caption?: string;\n cta?: { label: string; href: string };\n href?: string;\n hrefLabel?: string;\n}) {\n return (\n <div className=\"grid gap-3.5 motion-safe:animate-[mie-fade-in_0.25s_ease-out]\">\n {media && <div data-slot=\"radial-explorer-media\">{media}</div>}\n {tag && (\n <Badge\n size=\"sm\"\n className=\"w-fit text-[10px] font-bold tracking-[0.14em] uppercase\"\n >\n {tag}\n </Badge>\n )}\n <h3 className=\"text-foreground text-2xl leading-tight font-semibold\">\n {title}\n </h3>\n {description && (\n <p className=\"text-muted-foreground text-[15px] leading-snug\">\n {description}\n </p>\n )}\n {caption && <p className=\"text-muted-foreground text-sm\">{caption}</p>}\n {(cta || href) && (\n <div className=\"mt-1 flex flex-wrap items-center gap-3\">\n {cta && (\n <a href={cta.href} className={buttonVariants({ effect: 'sheen' })}>\n {cta.label}\n <ArrowRight size={16} aria-hidden className=\"rtl:-scale-x-100\" />\n </a>\n )}\n {href && (\n <a\n href={href}\n className=\"text-primary-800 dark:text-primary-200 text-sm font-semibold underline-offset-4 hover:underline\"\n >\n {hrefLabel}\n </a>\n )}\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { usePrefersReducedMotion } from './chunk-HB7C7NB5.js';
2
- import { AnimatedPresence, Animated } from './chunk-XCP454Q6.js';
1
+ import { usePrefersReducedMotion } from './chunk-XDU65GLW.js';
2
+ import { AnimatedPresence, Animated } from './chunk-F4N67NAF.js';
3
3
  import { cn } from './chunk-TQONQSJO.js';
4
4
  import * as React from 'react';
5
5
  import { jsx } from 'react/jsx-runtime';
@@ -21,6 +21,7 @@ var Collapsible = React.forwardRef(
21
21
  defaultOpen = false,
22
22
  onOpenChange,
23
23
  disabled,
24
+ storageKey,
24
25
  children,
25
26
  ...props
26
27
  }, ref) => {
@@ -28,12 +29,29 @@ var Collapsible = React.forwardRef(
28
29
  const generatedId = React.useId();
29
30
  const isControlled = controlledOpen !== void 0;
30
31
  const open = isControlled ? controlledOpen : uncontrolledOpen;
32
+ const persists = Boolean(storageKey) && !isControlled;
33
+ React.useEffect(() => {
34
+ if (!persists || !storageKey) return;
35
+ try {
36
+ const stored = window.localStorage.getItem(storageKey);
37
+ if (stored === "true" || stored === "false") {
38
+ setUncontrolledOpen(stored === "true");
39
+ }
40
+ } catch {
41
+ }
42
+ }, [persists, storageKey]);
31
43
  const toggle = React.useCallback(() => {
32
44
  if (disabled) return;
33
45
  const next = !open;
34
46
  if (!isControlled) setUncontrolledOpen(next);
47
+ if (persists && storageKey) {
48
+ try {
49
+ window.localStorage.setItem(storageKey, String(next));
50
+ } catch {
51
+ }
52
+ }
35
53
  onOpenChange?.(next);
36
- }, [disabled, open, isControlled, onOpenChange]);
54
+ }, [disabled, open, isControlled, persists, storageKey, onOpenChange]);
37
55
  const value = React.useMemo(
38
56
  () => ({
39
57
  open,
@@ -123,5 +141,5 @@ var CollapsibleContent = React.forwardRef(({ className, forceMount, children, ..
123
141
  CollapsibleContent.displayName = "CollapsibleContent";
124
142
 
125
143
  export { Collapsible, CollapsibleContent, CollapsibleTrigger };
126
- //# sourceMappingURL=chunk-P2CA3XGI.js.map
127
- //# sourceMappingURL=chunk-P2CA3XGI.js.map
144
+ //# sourceMappingURL=chunk-VSRO4PAI.js.map
145
+ //# sourceMappingURL=chunk-VSRO4PAI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Collapsible/Collapsible.tsx"],"names":[],"mappings":"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","file":"chunk-VSRO4PAI.js","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Animated, AnimatedPresence } from '../../motion';\nimport { usePrefersReducedMotion } from '../../hooks/usePrefersReducedMotion';\n\ninterface CollapsibleContextValue {\n open: boolean;\n toggle: () => void;\n disabled?: boolean;\n contentId: string;\n triggerId: string;\n}\n\nconst CollapsibleContext = React.createContext<CollapsibleContextValue | null>(\n null\n);\n\nfunction useCollapsibleContext(component: string): CollapsibleContextValue {\n const ctx = React.useContext(CollapsibleContext);\n if (!ctx) {\n throw new Error(`${component} must be used within a <Collapsible>`);\n }\n return ctx;\n}\n\nexport interface CollapsibleProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Controlled open state */\n open?: boolean;\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Callback fired when the open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Disables toggling */\n disabled?: boolean;\n /**\n * Persists the open state in `localStorage` under this key (uncontrolled\n * only). Restored after mount, so server and hydration renders use\n * `defaultOpen`.\n */\n storageKey?: string;\n}\n\n/**\n * An interactive component that expands and collapses its content.\n *\n * @example\n * ```tsx\n * <Collapsible>\n * <CollapsibleTrigger>Toggle</CollapsibleTrigger>\n * <CollapsibleContent>Hidden content</CollapsibleContent>\n * </Collapsible>\n * ```\n */\nconst Collapsible = React.forwardRef<HTMLDivElement, CollapsibleProps>(\n (\n {\n className,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n disabled,\n storageKey,\n children,\n ...props\n },\n ref\n ) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const generatedId = React.useId();\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n const persists = Boolean(storageKey) && !isControlled;\n\n React.useEffect(() => {\n if (!persists || !storageKey) return;\n try {\n const stored = window.localStorage.getItem(storageKey);\n if (stored === 'true' || stored === 'false') {\n setUncontrolledOpen(stored === 'true');\n }\n } catch {\n // Storage can be blocked (privacy mode, sandboxed iframe).\n }\n }, [persists, storageKey]);\n\n const toggle = React.useCallback(() => {\n if (disabled) return;\n const next = !open;\n if (!isControlled) setUncontrolledOpen(next);\n if (persists && storageKey) {\n try {\n window.localStorage.setItem(storageKey, String(next));\n } catch {\n // Storage can be blocked or full; state still updates in memory.\n }\n }\n onOpenChange?.(next);\n }, [disabled, open, isControlled, persists, storageKey, onOpenChange]);\n\n const value = React.useMemo<CollapsibleContextValue>(\n () => ({\n open,\n toggle,\n disabled,\n contentId: `${generatedId}-content`,\n triggerId: `${generatedId}-trigger`,\n }),\n [open, toggle, disabled, generatedId]\n );\n\n return (\n <CollapsibleContext.Provider value={value}>\n <div\n ref={ref}\n data-slot=\"collapsible\"\n data-state={open ? 'open' : 'closed'}\n className={cn(className)}\n {...props}\n >\n {children}\n </div>\n </CollapsibleContext.Provider>\n );\n }\n);\n\nCollapsible.displayName = 'Collapsible';\n\nexport type CollapsibleTriggerProps =\n React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst CollapsibleTrigger = React.forwardRef<\n HTMLButtonElement,\n CollapsibleTriggerProps\n>(({ className, onClick, children, ...props }, ref) => {\n const { open, toggle, disabled, contentId, triggerId } =\n useCollapsibleContext('CollapsibleTrigger');\n\n return (\n <button\n ref={ref}\n type=\"button\"\n id={triggerId}\n data-slot=\"collapsible-trigger\"\n aria-expanded={open}\n aria-controls={contentId}\n data-state={open ? 'open' : 'closed'}\n disabled={disabled}\n onClick={(e) => {\n toggle();\n onClick?.(e);\n }}\n className={cn(className)}\n {...props}\n >\n {children}\n </button>\n );\n});\n\nCollapsibleTrigger.displayName = 'CollapsibleTrigger';\n\nexport interface CollapsibleContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Keep content mounted when collapsed (hidden via CSS) */\n forceMount?: boolean;\n}\n\nconst CollapsibleContent = React.forwardRef<\n HTMLDivElement,\n CollapsibleContentProps\n>(({ className, forceMount, children, ...props }, ref) => {\n const { open, contentId, triggerId } =\n useCollapsibleContext('CollapsibleContent');\n const prefersReducedMotion = usePrefersReducedMotion();\n\n const sharedProps = {\n id: contentId,\n role: 'region' as const,\n 'aria-labelledby': triggerId,\n 'data-slot': 'collapsible-content',\n 'data-state': open ? ('open' as const) : ('closed' as const),\n };\n\n /*\n * `forceMount` keeps the old instant behaviour, deliberately.\n *\n * It exists so consumers can keep collapsed content in the DOM, and it relies\n * on `hidden` to keep that content out of the tab order and the accessibility\n * tree. `hidden` is `display: none`, which an animated height cannot run\n * through — and dropping it for the duration would leave keyboard users able\n * to tab into content that is visually collapsed. Sequencing `hidden` around\n * the animation is the real fix; until then, not animating is the safe\n * answer, and the default (unmounting) path below covers the common case.\n */\n if (forceMount) {\n return (\n <div\n ref={ref}\n {...sharedProps}\n hidden={!open}\n className={cn(className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n return (\n <AnimatedPresence initial={false}>\n {open && (\n <Animated\n key=\"collapsible-content\"\n ref={ref as React.Ref<HTMLElement>}\n preset=\"collapse\"\n mode=\"presence\"\n // `collapse` animates height, which `MotionConfig reducedMotion=\"user\"`\n // does not treat as a transform or layout animation and so leaves\n // running. Honouring the preference is the component's job here.\n enabled={!prefersReducedMotion}\n {...sharedProps}\n // Content must be clipped or it spills past the box while the height\n // is still travelling.\n className={cn('overflow-hidden', className)}\n {...props}\n >\n {children}\n </Animated>\n )}\n </AnimatedPresence>\n );\n});\n\nCollapsibleContent.displayName = 'CollapsibleContent';\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n"]}
@@ -83,5 +83,5 @@ var ClampedText = React.forwardRef(
83
83
  );
84
84
 
85
85
  export { ClampedText };
86
- //# sourceMappingURL=chunk-L6MDULYB.js.map
87
- //# sourceMappingURL=chunk-L6MDULYB.js.map
86
+ //# sourceMappingURL=chunk-VU3ZMJBN.js.map
87
+ //# sourceMappingURL=chunk-VU3ZMJBN.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ClampedText/ClampedText.tsx"],"names":["ClampedText"],"mappings":";;;;AA0BA,IAAM,UAAA,GAAqC;AAAA,EACzC,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAcO,IAAM,WAAA,GAAoB,KAAA,CAAA,UAAA;AAAA,EAC/B,SAASA,YAAAA,CACP;AAAA,IACE,IAAA;AAAA,IACA,KAAA,GAAQ,CAAA;AAAA,IACR,SAAA,GAAY,GAAA;AAAA,IACZ,aAAA,GAAgB,WAAA;AAAA,IAChB,aAAA,GAAgB,WAAA;AAAA,IAChB,aAAA,GAAgB,WAAA;AAAA,IAChB,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,EACA;AACA,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAE5C,IAAA,IAAI,IAAA,CAAK,UAAU,SAAA,EAAW;AAC5B,MAAA,uBACE,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,SAAS,CAAA;AAAA,UACzD,GAAG,KAAA;AAAA,UAEH,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,IAEJ;AAEA,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,0CAAA;AAAA,gBACA,CAAC,IAAA,KAAS,UAAA,CAAW,KAAK,CAAA,IAAK,cAAA;AAAA,eACjC;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,IAAA;AAAA,gBACA,CAAC,IAAA,oBACA,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,aAAA,EAAY,MAAA;AAAA,oBACZ,SAAA,EAAW,EAAA;AAAA,sBACT,qFAAA;AAAA,sBACA;AAAA;AACF;AAAA;AACF;AAAA;AAAA,WAEJ;AAAA,0BACA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,eAAA,EAAe,IAAA;AAAA,cACf,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,gBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,gBAAA,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,cACnB,CAAA;AAAA,cACA,SAAA,EAAU,wIAAA;AAAA,cAET,iBAAO,aAAA,GAAgB;AAAA;AAAA;AAC1B;AAAA;AAAA,KACF;AAAA,EAEJ;AACF","file":"chunk-L6MDULYB.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ClampedTextProps extends React.HTMLAttributes<HTMLElement> {\n /** The long text to clamp. */\n text: string;\n /** Lines visible while collapsed (2–8, default 6). */\n lines?: 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Skip the clamp entirely below this character count (default 280). */\n threshold?: number;\n /** Toggle labels, overridable for i18n. */\n showMoreLabel?: string;\n showLessLabel?: string;\n /**\n * Gradient start for the fade at the clamp edge — match it to the\n * surface behind the text (default `from-card`).\n */\n fadeClassName?: string;\n}\n\n// Static map so Tailwind sees every clamp utility it must generate.\n// 7/8 are beyond Tailwind 3's core 1–6 scale — the preset extends\n// theme.lineClamp so TW3 consumers generate them too (TW4 accepts any\n// integer as a bare value).\nconst LINE_CLAMP: Record<number, string> = {\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n 5: 'line-clamp-5',\n 6: 'line-clamp-6',\n 7: 'line-clamp-7',\n 8: 'line-clamp-8',\n};\n\n/**\n * Clamps long text to N lines with a fade-out gradient and a\n * Show more / Show less toggle. Short text renders inline with no\n * toggle, so brief values stay flat. Pure presentation — ideal for\n * free-text fields (messages, notes, descriptions) inside detail\n * panels and modals.\n *\n * @example\n * ```tsx\n * <ClampedText text={note.body} lines={4} />\n * ```\n */\nexport const ClampedText = React.forwardRef<HTMLElement, ClampedTextProps>(\n function ClampedText(\n {\n text,\n lines = 6,\n threshold = 280,\n showMoreLabel = 'Show more',\n showLessLabel = 'Show less',\n fadeClassName = 'from-card',\n className,\n ...props\n },\n ref\n ) {\n const [open, setOpen] = React.useState(false);\n\n if (text.length <= threshold) {\n return (\n <span\n ref={ref as React.ForwardedRef<HTMLSpanElement>}\n className={cn('break-words whitespace-pre-wrap', className)}\n {...props}\n >\n {text}\n </span>\n );\n }\n\n return (\n <div\n ref={ref as React.ForwardedRef<HTMLDivElement>}\n className={className}\n {...props}\n >\n <div\n className={cn(\n 'relative break-words whitespace-pre-wrap',\n !open && (LINE_CLAMP[lines] ?? 'line-clamp-6')\n )}\n >\n {text}\n {!open && (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute inset-x-0 bottom-0 h-6 bg-gradient-to-t to-transparent',\n fadeClassName\n )}\n />\n )}\n </div>\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={(e) => {\n e.stopPropagation();\n setOpen((v) => !v);\n }}\n className=\"text-primary-800 hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-300 mt-1 text-[11px] font-medium hover:underline\"\n >\n {open ? showLessLabel : showMoreLabel}\n </button>\n </div>\n );\n }\n);\n"]}
1
+ {"version":3,"sources":["../src/components/ClampedText/ClampedText.tsx"],"names":["ClampedText"],"mappings":";;;;AA0BA,IAAM,UAAA,GAAqC;AAAA,EACzC,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG,cAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAcO,IAAM,WAAA,GAAoB,KAAA,CAAA,UAAA;AAAA,EAC/B,SAASA,YAAAA,CACP;AAAA,IACE,IAAA;AAAA,IACA,KAAA,GAAQ,CAAA;AAAA,IACR,SAAA,GAAY,GAAA;AAAA,IACZ,aAAA,GAAgB,WAAA;AAAA,IAChB,aAAA,GAAgB,WAAA;AAAA,IAChB,aAAA,GAAgB,WAAA;AAAA,IAChB,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,EACA;AACA,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAE5C,IAAA,IAAI,IAAA,CAAK,UAAU,SAAA,EAAW;AAC5B,MAAA,uBACE,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,SAAS,CAAA;AAAA,UACzD,GAAG,KAAA;AAAA,UAEH,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,IAEJ;AAEA,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,0CAAA;AAAA,gBACA,CAAC,IAAA,KAAS,UAAA,CAAW,KAAK,CAAA,IAAK,cAAA;AAAA,eACjC;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,IAAA;AAAA,gBACA,CAAC,IAAA,oBACA,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,aAAA,EAAY,MAAA;AAAA,oBACZ,SAAA,EAAW,EAAA;AAAA,sBACT,qFAAA;AAAA,sBACA;AAAA;AACF;AAAA;AACF;AAAA;AAAA,WAEJ;AAAA,0BACA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,eAAA,EAAe,IAAA;AAAA,cACf,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,gBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,gBAAA,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,cACnB,CAAA;AAAA,cACA,SAAA,EAAU,wIAAA;AAAA,cAET,iBAAO,aAAA,GAAgB;AAAA;AAAA;AAC1B;AAAA;AAAA,KACF;AAAA,EAEJ;AACF","file":"chunk-VU3ZMJBN.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ClampedTextProps extends React.HTMLAttributes<HTMLElement> {\n /** The long text to clamp. */\n text: string;\n /** Lines visible while collapsed (2–8, default 6). */\n lines?: 2 | 3 | 4 | 5 | 6 | 7 | 8;\n /** Skip the clamp entirely below this character count (default 280). */\n threshold?: number;\n /** Toggle labels, overridable for i18n. */\n showMoreLabel?: string;\n showLessLabel?: string;\n /**\n * Gradient start for the fade at the clamp edge — match it to the\n * surface behind the text (default `from-card`).\n */\n fadeClassName?: string;\n}\n\n// Static map so Tailwind sees every clamp utility it must generate.\n// 7/8 are beyond Tailwind 3's core 1–6 scale — the preset extends\n// theme.lineClamp so TW3 consumers generate them too (TW4 accepts any\n// integer as a bare value).\nconst LINE_CLAMP: Record<number, string> = {\n 2: 'line-clamp-2',\n 3: 'line-clamp-3',\n 4: 'line-clamp-4',\n 5: 'line-clamp-5',\n 6: 'line-clamp-6',\n 7: 'line-clamp-7',\n 8: 'line-clamp-8',\n};\n\n/**\n * Clamps long text to N lines with a fade-out gradient and a\n * Show more / Show less toggle. Short text renders inline with no\n * toggle, so brief values stay flat. Pure presentation — ideal for\n * free-text fields (messages, notes, descriptions) inside detail\n * panels and modals.\n *\n * @example\n * ```tsx\n * <ClampedText text={note.body} lines={4} />\n * ```\n */\nexport const ClampedText = React.forwardRef<HTMLElement, ClampedTextProps>(\n function ClampedText(\n {\n text,\n lines = 6,\n threshold = 280,\n showMoreLabel = 'Show more',\n showLessLabel = 'Show less',\n fadeClassName = 'from-card',\n className,\n ...props\n },\n ref\n ) {\n const [open, setOpen] = React.useState(false);\n\n if (text.length <= threshold) {\n return (\n <span\n ref={ref as React.ForwardedRef<HTMLSpanElement>}\n className={cn('break-words whitespace-pre-wrap', className)}\n {...props}\n >\n {text}\n </span>\n );\n }\n\n return (\n <div\n ref={ref as React.ForwardedRef<HTMLDivElement>}\n className={className}\n {...props}\n >\n <div\n className={cn(\n 'relative break-words whitespace-pre-wrap',\n !open && (LINE_CLAMP[lines] ?? 'line-clamp-6')\n )}\n >\n {text}\n {!open && (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute inset-x-0 bottom-0 h-6 bg-gradient-to-t to-transparent',\n fadeClassName\n )}\n />\n )}\n </div>\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={(e) => {\n e.stopPropagation();\n setOpen((v) => !v);\n }}\n className=\"text-primary-800 hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-300 mt-1 text-[11px] font-medium hover:underline\"\n >\n {open ? showLessLabel : showMoreLabel}\n </button>\n </div>\n );\n }\n);\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk7ZDPD5ZX_cjs = require('./chunk-7ZDPD5ZX.cjs');
3
+ var chunkLC3JL2HB_cjs = require('./chunk-LC3JL2HB.cjs');
4
4
  var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
5
5
  var React = require('react');
6
6
  var lucideReact = require('lucide-react');
@@ -81,7 +81,7 @@ function KeyboardShortcutsOverlay({
81
81
  ] });
82
82
  const footer = hint === null ? null : hint ?? defaultHint;
83
83
  return /* @__PURE__ */ jsxRuntime.jsxs(
84
- chunk7ZDPD5ZX_cjs.Modal,
84
+ chunkLC3JL2HB_cjs.Modal,
85
85
  {
86
86
  open,
87
87
  onOpenChange: (o) => {
@@ -90,14 +90,14 @@ function KeyboardShortcutsOverlay({
90
90
  size: "sm",
91
91
  "aria-label": title,
92
92
  children: [
93
- /* @__PURE__ */ jsxRuntime.jsxs(chunk7ZDPD5ZX_cjs.ModalHeader, { children: [
94
- /* @__PURE__ */ jsxRuntime.jsxs(chunk7ZDPD5ZX_cjs.ModalTitle, { className: "flex items-center gap-2 text-sm", children: [
93
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLC3JL2HB_cjs.ModalHeader, { children: [
94
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLC3JL2HB_cjs.ModalTitle, { className: "flex items-center gap-2 text-sm", children: [
95
95
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Keyboard, { "aria-hidden": "true", className: "text-primary-500 h-4 w-4" }),
96
96
  title
97
97
  ] }),
98
- /* @__PURE__ */ jsxRuntime.jsx(chunk7ZDPD5ZX_cjs.ModalClose, {})
98
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLC3JL2HB_cjs.ModalClose, {})
99
99
  ] }),
100
- /* @__PURE__ */ jsxRuntime.jsxs(chunk7ZDPD5ZX_cjs.ModalBody, { className: "flex flex-col gap-4", children: [
100
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLC3JL2HB_cjs.ModalBody, { className: "flex flex-col gap-4", children: [
101
101
  shortcuts && /* @__PURE__ */ jsxRuntime.jsx(
102
102
  ShortcutList,
103
103
  {
@@ -116,7 +116,7 @@ function KeyboardShortcutsOverlay({
116
116
  )
117
117
  ] }, group.title))
118
118
  ] }),
119
- footer && /* @__PURE__ */ jsxRuntime.jsx(chunk7ZDPD5ZX_cjs.ModalFooter, { className: "text-muted-foreground justify-center text-[11px]", children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: footer }) })
119
+ footer && /* @__PURE__ */ jsxRuntime.jsx(chunkLC3JL2HB_cjs.ModalFooter, { className: "text-muted-foreground justify-center text-[11px]", children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: footer }) })
120
120
  ]
121
121
  }
122
122
  );
@@ -124,5 +124,5 @@ function KeyboardShortcutsOverlay({
124
124
 
125
125
  exports.Kbd = Kbd;
126
126
  exports.KeyboardShortcutsOverlay = KeyboardShortcutsOverlay;
127
- //# sourceMappingURL=chunk-XI34EGK5.cjs.map
128
- //# sourceMappingURL=chunk-XI34EGK5.cjs.map
127
+ //# sourceMappingURL=chunk-VV2U36T6.cjs.map
128
+ //# sourceMappingURL=chunk-VV2U36T6.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/KeyboardShortcutsOverlay/KeyboardShortcutsOverlay.tsx"],"names":["React","Kbd","jsx","cn","jsxs","Fragment","Modal","ModalHeader","ModalTitle","Keyboard","ModalClose","ModalBody","ModalFooter"],"mappings":"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","file":"chunk-XI34EGK5.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Keyboard } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport {\n Modal,\n ModalHeader,\n ModalTitle,\n ModalClose,\n ModalBody,\n ModalFooter,\n} from '../Modal';\n\n// =============================================================================\n// Kbd\n// =============================================================================\n\nexport type KbdProps = React.HTMLAttributes<HTMLElement>;\n\n/** A keyboard-key chip: `<Kbd>⌘K</Kbd>`. */\nexport const Kbd = React.forwardRef<HTMLElement, KbdProps>(function Kbd(\n { className, ...props },\n ref\n) {\n return (\n <kbd\n ref={ref}\n className={cn(\n 'border-border bg-muted text-foreground rounded border px-1.5 py-0.5 font-mono text-[11px]',\n className\n )}\n {...props}\n />\n );\n});\n\n// =============================================================================\n// KeyboardShortcutsOverlay\n// =============================================================================\n\nexport interface ShortcutDef {\n /** Key or alternatives — `\"j\"`, `[\"j\", \"↓\"]`, `\"⌘K\"`. */\n keys: string | string[];\n description: string;\n}\n\nexport interface ShortcutGroup {\n title: string;\n shortcuts: ShortcutDef[];\n}\n\nexport interface KeyboardShortcutsOverlayProps {\n open: boolean;\n onClose: () => void;\n /** Flat list of shortcuts, or use `groups` for sectioned help. */\n shortcuts?: ShortcutDef[];\n /** Sectioned shortcuts with group headings. */\n groups?: ShortcutGroup[];\n title?: string;\n /** Footer hint. Pass `null` to hide it. */\n hint?: React.ReactNode | null;\n /** Joins key alternatives (default \"or\"), overridable for i18n. */\n alternativesLabel?: string;\n}\n\nfunction Keys({\n keys,\n alternativesLabel,\n}: {\n keys: string | string[];\n alternativesLabel: string;\n}) {\n const list = Array.isArray(keys) ? keys : keys.split(' / ');\n return (\n <span className=\"flex shrink-0 items-center gap-1\">\n {list.map((k, i) => (\n <React.Fragment key={`${k}-${i}`}>\n <Kbd>{k}</Kbd>\n {i < list.length - 1 && (\n <span className=\"text-muted-foreground mx-0.5 text-xs\">\n {alternativesLabel}\n </span>\n )}\n </React.Fragment>\n ))}\n </span>\n );\n}\n\nfunction ShortcutList({\n shortcuts,\n alternativesLabel,\n}: {\n shortcuts: ShortcutDef[];\n alternativesLabel: string;\n}) {\n return (\n <ul className=\"flex list-none flex-col gap-2 p-0\">\n {shortcuts.map((s) => (\n <li\n key={`${s.description}-${String(s.keys)}`}\n className=\"text-foreground flex items-center justify-between gap-4 text-sm\"\n >\n <span className=\"min-w-0\">{s.description}</span>\n <Keys keys={s.keys} alternativesLabel={alternativesLabel} />\n </li>\n ))}\n </ul>\n );\n}\n\n/**\n * The `?` keyboard-shortcuts help dialog: a list of shortcut rows\n * (optionally grouped) with `Kbd` chips for each key. Pairs with the\n * `useKeyboardShortcut` hook, which handles the binding — this component\n * only renders the help.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = useState(false);\n * useKeyboardShortcut('?', () => setOpen((v) => !v), {\n * modifiers: { shift: true },\n * });\n *\n * <KeyboardShortcutsOverlay\n * open={open}\n * onClose={() => setOpen(false)}\n * shortcuts={[\n * { keys: ['j', '↓'], description: 'Next record' },\n * { keys: '⌘K', description: 'Command palette' },\n * ]}\n * />\n * ```\n */\nexport function KeyboardShortcutsOverlay({\n open,\n onClose,\n shortcuts,\n groups,\n title = 'Keyboard shortcuts',\n hint,\n alternativesLabel = 'or',\n}: KeyboardShortcutsOverlayProps) {\n const defaultHint = (\n <>\n Press <Kbd>?</Kbd> anytime to toggle this help\n </>\n );\n const footer = hint === null ? null : (hint ?? defaultHint);\n\n return (\n <Modal\n open={open}\n onOpenChange={(o) => {\n if (!o) onClose();\n }}\n size=\"sm\"\n aria-label={title}\n >\n <ModalHeader>\n <ModalTitle className=\"flex items-center gap-2 text-sm\">\n <Keyboard aria-hidden=\"true\" className=\"text-primary-500 h-4 w-4\" />\n {title}\n </ModalTitle>\n <ModalClose />\n </ModalHeader>\n <ModalBody className=\"flex flex-col gap-4\">\n {shortcuts && (\n <ShortcutList\n shortcuts={shortcuts}\n alternativesLabel={alternativesLabel}\n />\n )}\n {groups?.map((group) => (\n <div key={group.title} className=\"flex flex-col gap-2\">\n <h3 className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n {group.title}\n </h3>\n <ShortcutList\n shortcuts={group.shortcuts}\n alternativesLabel={alternativesLabel}\n />\n </div>\n ))}\n </ModalBody>\n {footer && (\n <ModalFooter className=\"text-muted-foreground justify-center text-[11px]\">\n <span>{footer}</span>\n </ModalFooter>\n )}\n </Modal>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/KeyboardShortcutsOverlay/KeyboardShortcutsOverlay.tsx"],"names":["React","Kbd","jsx","cn","jsxs","Fragment","Modal","ModalHeader","ModalTitle","Keyboard","ModalClose","ModalBody","ModalFooter"],"mappings":"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","file":"chunk-VV2U36T6.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Keyboard } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport {\n Modal,\n ModalHeader,\n ModalTitle,\n ModalClose,\n ModalBody,\n ModalFooter,\n} from '../Modal';\n\n// =============================================================================\n// Kbd\n// =============================================================================\n\nexport type KbdProps = React.HTMLAttributes<HTMLElement>;\n\n/** A keyboard-key chip: `<Kbd>⌘K</Kbd>`. */\nexport const Kbd = React.forwardRef<HTMLElement, KbdProps>(function Kbd(\n { className, ...props },\n ref\n) {\n return (\n <kbd\n ref={ref}\n className={cn(\n 'border-border bg-muted text-foreground rounded border px-1.5 py-0.5 font-mono text-[11px]',\n className\n )}\n {...props}\n />\n );\n});\n\n// =============================================================================\n// KeyboardShortcutsOverlay\n// =============================================================================\n\nexport interface ShortcutDef {\n /** Key or alternatives — `\"j\"`, `[\"j\", \"↓\"]`, `\"⌘K\"`. */\n keys: string | string[];\n description: string;\n}\n\nexport interface ShortcutGroup {\n title: string;\n shortcuts: ShortcutDef[];\n}\n\nexport interface KeyboardShortcutsOverlayProps {\n open: boolean;\n onClose: () => void;\n /** Flat list of shortcuts, or use `groups` for sectioned help. */\n shortcuts?: ShortcutDef[];\n /** Sectioned shortcuts with group headings. */\n groups?: ShortcutGroup[];\n title?: string;\n /** Footer hint. Pass `null` to hide it. */\n hint?: React.ReactNode | null;\n /** Joins key alternatives (default \"or\"), overridable for i18n. */\n alternativesLabel?: string;\n}\n\nfunction Keys({\n keys,\n alternativesLabel,\n}: {\n keys: string | string[];\n alternativesLabel: string;\n}) {\n const list = Array.isArray(keys) ? keys : keys.split(' / ');\n return (\n <span className=\"flex shrink-0 items-center gap-1\">\n {list.map((k, i) => (\n <React.Fragment key={`${k}-${i}`}>\n <Kbd>{k}</Kbd>\n {i < list.length - 1 && (\n <span className=\"text-muted-foreground mx-0.5 text-xs\">\n {alternativesLabel}\n </span>\n )}\n </React.Fragment>\n ))}\n </span>\n );\n}\n\nfunction ShortcutList({\n shortcuts,\n alternativesLabel,\n}: {\n shortcuts: ShortcutDef[];\n alternativesLabel: string;\n}) {\n return (\n <ul className=\"flex list-none flex-col gap-2 p-0\">\n {shortcuts.map((s) => (\n <li\n key={`${s.description}-${String(s.keys)}`}\n className=\"text-foreground flex items-center justify-between gap-4 text-sm\"\n >\n <span className=\"min-w-0\">{s.description}</span>\n <Keys keys={s.keys} alternativesLabel={alternativesLabel} />\n </li>\n ))}\n </ul>\n );\n}\n\n/**\n * The `?` keyboard-shortcuts help dialog: a list of shortcut rows\n * (optionally grouped) with `Kbd` chips for each key. Pairs with the\n * `useKeyboardShortcut` hook, which handles the binding — this component\n * only renders the help.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = useState(false);\n * useKeyboardShortcut('?', () => setOpen((v) => !v), {\n * modifiers: { shift: true },\n * });\n *\n * <KeyboardShortcutsOverlay\n * open={open}\n * onClose={() => setOpen(false)}\n * shortcuts={[\n * { keys: ['j', '↓'], description: 'Next record' },\n * { keys: '⌘K', description: 'Command palette' },\n * ]}\n * />\n * ```\n */\nexport function KeyboardShortcutsOverlay({\n open,\n onClose,\n shortcuts,\n groups,\n title = 'Keyboard shortcuts',\n hint,\n alternativesLabel = 'or',\n}: KeyboardShortcutsOverlayProps) {\n const defaultHint = (\n <>\n Press <Kbd>?</Kbd> anytime to toggle this help\n </>\n );\n const footer = hint === null ? null : (hint ?? defaultHint);\n\n return (\n <Modal\n open={open}\n onOpenChange={(o) => {\n if (!o) onClose();\n }}\n size=\"sm\"\n aria-label={title}\n >\n <ModalHeader>\n <ModalTitle className=\"flex items-center gap-2 text-sm\">\n <Keyboard aria-hidden=\"true\" className=\"text-primary-500 h-4 w-4\" />\n {title}\n </ModalTitle>\n <ModalClose />\n </ModalHeader>\n <ModalBody className=\"flex flex-col gap-4\">\n {shortcuts && (\n <ShortcutList\n shortcuts={shortcuts}\n alternativesLabel={alternativesLabel}\n />\n )}\n {groups?.map((group) => (\n <div key={group.title} className=\"flex flex-col gap-2\">\n <h3 className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n {group.title}\n </h3>\n <ShortcutList\n shortcuts={group.shortcuts}\n alternativesLabel={alternativesLabel}\n />\n </div>\n ))}\n </ModalBody>\n {footer && (\n <ModalFooter className=\"text-muted-foreground justify-center text-[11px]\">\n <span>{footer}</span>\n </ModalFooter>\n )}\n </Modal>\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunk6HFFWEM3_cjs = require('./chunk-6HFFWEM3.cjs');
4
- var chunkNV2CWBI2_cjs = require('./chunk-NV2CWBI2.cjs');
3
+ var chunkYW2AKBLS_cjs = require('./chunk-YW2AKBLS.cjs');
4
+ var chunkIEY3ZJIT_cjs = require('./chunk-IEY3ZJIT.cjs');
5
5
  var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
6
6
  var React = require('react');
7
7
  var jsxRuntime = require('react/jsx-runtime');
@@ -43,6 +43,7 @@ var Collapsible = React__namespace.forwardRef(
43
43
  defaultOpen = false,
44
44
  onOpenChange,
45
45
  disabled,
46
+ storageKey,
46
47
  children,
47
48
  ...props
48
49
  }, ref) => {
@@ -50,12 +51,29 @@ var Collapsible = React__namespace.forwardRef(
50
51
  const generatedId = React__namespace.useId();
51
52
  const isControlled = controlledOpen !== void 0;
52
53
  const open = isControlled ? controlledOpen : uncontrolledOpen;
54
+ const persists = Boolean(storageKey) && !isControlled;
55
+ React__namespace.useEffect(() => {
56
+ if (!persists || !storageKey) return;
57
+ try {
58
+ const stored = window.localStorage.getItem(storageKey);
59
+ if (stored === "true" || stored === "false") {
60
+ setUncontrolledOpen(stored === "true");
61
+ }
62
+ } catch {
63
+ }
64
+ }, [persists, storageKey]);
53
65
  const toggle = React__namespace.useCallback(() => {
54
66
  if (disabled) return;
55
67
  const next = !open;
56
68
  if (!isControlled) setUncontrolledOpen(next);
69
+ if (persists && storageKey) {
70
+ try {
71
+ window.localStorage.setItem(storageKey, String(next));
72
+ } catch {
73
+ }
74
+ }
57
75
  onOpenChange?.(next);
58
- }, [disabled, open, isControlled, onOpenChange]);
76
+ }, [disabled, open, isControlled, persists, storageKey, onOpenChange]);
59
77
  const value = React__namespace.useMemo(
60
78
  () => ({
61
79
  open,
@@ -106,7 +124,7 @@ var CollapsibleTrigger = React__namespace.forwardRef(({ className, onClick, chil
106
124
  CollapsibleTrigger.displayName = "CollapsibleTrigger";
107
125
  var CollapsibleContent = React__namespace.forwardRef(({ className, forceMount, children, ...props }, ref) => {
108
126
  const { open, contentId, triggerId } = useCollapsibleContext("CollapsibleContent");
109
- const prefersReducedMotion = chunk6HFFWEM3_cjs.usePrefersReducedMotion();
127
+ const prefersReducedMotion = chunkYW2AKBLS_cjs.usePrefersReducedMotion();
110
128
  const sharedProps = {
111
129
  id: contentId,
112
130
  role: "region",
@@ -127,8 +145,8 @@ var CollapsibleContent = React__namespace.forwardRef(({ className, forceMount, c
127
145
  }
128
146
  );
129
147
  }
130
- return /* @__PURE__ */ jsxRuntime.jsx(chunkNV2CWBI2_cjs.AnimatedPresence, { initial: false, children: open && /* @__PURE__ */ jsxRuntime.jsx(
131
- chunkNV2CWBI2_cjs.Animated,
148
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkIEY3ZJIT_cjs.AnimatedPresence, { initial: false, children: open && /* @__PURE__ */ jsxRuntime.jsx(
149
+ chunkIEY3ZJIT_cjs.Animated,
132
150
  {
133
151
  ref,
134
152
  preset: "collapse",
@@ -147,5 +165,5 @@ CollapsibleContent.displayName = "CollapsibleContent";
147
165
  exports.Collapsible = Collapsible;
148
166
  exports.CollapsibleContent = CollapsibleContent;
149
167
  exports.CollapsibleTrigger = CollapsibleTrigger;
150
- //# sourceMappingURL=chunk-VPWJCJCX.cjs.map
151
- //# sourceMappingURL=chunk-VPWJCJCX.cjs.map
168
+ //# sourceMappingURL=chunk-VXW7D5LR.cjs.map
169
+ //# sourceMappingURL=chunk-VXW7D5LR.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Collapsible/Collapsible.tsx"],"names":["React","jsx","cn","usePrefersReducedMotion","AnimatedPresence","Animated"],"mappings":"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","file":"chunk-VXW7D5LR.cjs","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Animated, AnimatedPresence } from '../../motion';\nimport { usePrefersReducedMotion } from '../../hooks/usePrefersReducedMotion';\n\ninterface CollapsibleContextValue {\n open: boolean;\n toggle: () => void;\n disabled?: boolean;\n contentId: string;\n triggerId: string;\n}\n\nconst CollapsibleContext = React.createContext<CollapsibleContextValue | null>(\n null\n);\n\nfunction useCollapsibleContext(component: string): CollapsibleContextValue {\n const ctx = React.useContext(CollapsibleContext);\n if (!ctx) {\n throw new Error(`${component} must be used within a <Collapsible>`);\n }\n return ctx;\n}\n\nexport interface CollapsibleProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Controlled open state */\n open?: boolean;\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Callback fired when the open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Disables toggling */\n disabled?: boolean;\n /**\n * Persists the open state in `localStorage` under this key (uncontrolled\n * only). Restored after mount, so server and hydration renders use\n * `defaultOpen`.\n */\n storageKey?: string;\n}\n\n/**\n * An interactive component that expands and collapses its content.\n *\n * @example\n * ```tsx\n * <Collapsible>\n * <CollapsibleTrigger>Toggle</CollapsibleTrigger>\n * <CollapsibleContent>Hidden content</CollapsibleContent>\n * </Collapsible>\n * ```\n */\nconst Collapsible = React.forwardRef<HTMLDivElement, CollapsibleProps>(\n (\n {\n className,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n disabled,\n storageKey,\n children,\n ...props\n },\n ref\n ) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const generatedId = React.useId();\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n const persists = Boolean(storageKey) && !isControlled;\n\n React.useEffect(() => {\n if (!persists || !storageKey) return;\n try {\n const stored = window.localStorage.getItem(storageKey);\n if (stored === 'true' || stored === 'false') {\n setUncontrolledOpen(stored === 'true');\n }\n } catch {\n // Storage can be blocked (privacy mode, sandboxed iframe).\n }\n }, [persists, storageKey]);\n\n const toggle = React.useCallback(() => {\n if (disabled) return;\n const next = !open;\n if (!isControlled) setUncontrolledOpen(next);\n if (persists && storageKey) {\n try {\n window.localStorage.setItem(storageKey, String(next));\n } catch {\n // Storage can be blocked or full; state still updates in memory.\n }\n }\n onOpenChange?.(next);\n }, [disabled, open, isControlled, persists, storageKey, onOpenChange]);\n\n const value = React.useMemo<CollapsibleContextValue>(\n () => ({\n open,\n toggle,\n disabled,\n contentId: `${generatedId}-content`,\n triggerId: `${generatedId}-trigger`,\n }),\n [open, toggle, disabled, generatedId]\n );\n\n return (\n <CollapsibleContext.Provider value={value}>\n <div\n ref={ref}\n data-slot=\"collapsible\"\n data-state={open ? 'open' : 'closed'}\n className={cn(className)}\n {...props}\n >\n {children}\n </div>\n </CollapsibleContext.Provider>\n );\n }\n);\n\nCollapsible.displayName = 'Collapsible';\n\nexport type CollapsibleTriggerProps =\n React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst CollapsibleTrigger = React.forwardRef<\n HTMLButtonElement,\n CollapsibleTriggerProps\n>(({ className, onClick, children, ...props }, ref) => {\n const { open, toggle, disabled, contentId, triggerId } =\n useCollapsibleContext('CollapsibleTrigger');\n\n return (\n <button\n ref={ref}\n type=\"button\"\n id={triggerId}\n data-slot=\"collapsible-trigger\"\n aria-expanded={open}\n aria-controls={contentId}\n data-state={open ? 'open' : 'closed'}\n disabled={disabled}\n onClick={(e) => {\n toggle();\n onClick?.(e);\n }}\n className={cn(className)}\n {...props}\n >\n {children}\n </button>\n );\n});\n\nCollapsibleTrigger.displayName = 'CollapsibleTrigger';\n\nexport interface CollapsibleContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Keep content mounted when collapsed (hidden via CSS) */\n forceMount?: boolean;\n}\n\nconst CollapsibleContent = React.forwardRef<\n HTMLDivElement,\n CollapsibleContentProps\n>(({ className, forceMount, children, ...props }, ref) => {\n const { open, contentId, triggerId } =\n useCollapsibleContext('CollapsibleContent');\n const prefersReducedMotion = usePrefersReducedMotion();\n\n const sharedProps = {\n id: contentId,\n role: 'region' as const,\n 'aria-labelledby': triggerId,\n 'data-slot': 'collapsible-content',\n 'data-state': open ? ('open' as const) : ('closed' as const),\n };\n\n /*\n * `forceMount` keeps the old instant behaviour, deliberately.\n *\n * It exists so consumers can keep collapsed content in the DOM, and it relies\n * on `hidden` to keep that content out of the tab order and the accessibility\n * tree. `hidden` is `display: none`, which an animated height cannot run\n * through — and dropping it for the duration would leave keyboard users able\n * to tab into content that is visually collapsed. Sequencing `hidden` around\n * the animation is the real fix; until then, not animating is the safe\n * answer, and the default (unmounting) path below covers the common case.\n */\n if (forceMount) {\n return (\n <div\n ref={ref}\n {...sharedProps}\n hidden={!open}\n className={cn(className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n return (\n <AnimatedPresence initial={false}>\n {open && (\n <Animated\n key=\"collapsible-content\"\n ref={ref as React.Ref<HTMLElement>}\n preset=\"collapse\"\n mode=\"presence\"\n // `collapse` animates height, which `MotionConfig reducedMotion=\"user\"`\n // does not treat as a transform or layout animation and so leaves\n // running. Honouring the preference is the component's job here.\n enabled={!prefersReducedMotion}\n {...sharedProps}\n // Content must be clipped or it spills past the box while the height\n // is still travelling.\n className={cn('overflow-hidden', className)}\n {...props}\n >\n {children}\n </Animated>\n )}\n </AnimatedPresence>\n );\n});\n\nCollapsibleContent.displayName = 'CollapsibleContent';\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n"]}
@@ -1,6 +1,6 @@
1
+ import { buttonVariants } from './chunk-GVM6DTR5.js';
1
2
  import { cn } from './chunk-TQONQSJO.js';
2
3
  import * as React from 'react';
3
- import { cva } from 'class-variance-authority';
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
5
 
6
6
  // src/components/Button/button-critical.ts
@@ -35,85 +35,6 @@ function injectButtonCriticalStyles() {
35
35
  style.textContent = CRITICAL_CSS;
36
36
  document.head.appendChild(style);
37
37
  }
38
- var buttonVariants = cva(
39
- // Base styles
40
- [
41
- "inline-flex items-center justify-center gap-2",
42
- "min-w-0 whitespace-nowrap",
43
- "font-semibold transition-all duration-200",
44
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
45
- "disabled:pointer-events-none disabled:opacity-50",
46
- "active:scale-[0.98]"
47
- ],
48
- {
49
- variants: {
50
- variant: {
51
- primary: [
52
- "bg-primary-800 text-white",
53
- "hover:bg-primary-900",
54
- "active:bg-primary-950"
55
- ],
56
- secondary: [
57
- "bg-neutral-200 text-neutral-900",
58
- "hover:bg-neutral-300",
59
- "active:bg-neutral-400",
60
- "dark:bg-neutral-700 dark:text-neutral-100",
61
- "dark:hover:bg-neutral-600",
62
- "dark:active:bg-neutral-500"
63
- ],
64
- ghost: [
65
- "bg-transparent text-neutral-600",
66
- "hover:bg-neutral-100",
67
- "active:bg-neutral-200",
68
- "dark:text-neutral-400",
69
- "dark:hover:bg-neutral-800",
70
- "dark:active:bg-neutral-700"
71
- ],
72
- outline: [
73
- "border-2 border-primary-800 text-primary-800 bg-transparent",
74
- "hover:bg-primary-50 hover:text-primary-900",
75
- "active:bg-primary-100",
76
- "dark:border-primary-400 dark:text-primary-400",
77
- "dark:hover:bg-primary-950",
78
- "dark:active:bg-primary-900"
79
- ],
80
- danger: [
81
- "bg-red-600 text-white",
82
- "hover:bg-red-700",
83
- "active:bg-red-800"
84
- ],
85
- link: [
86
- "text-primary-800 underline-offset-4",
87
- "hover:underline hover:text-primary-900",
88
- "active:text-primary-950",
89
- "dark:text-primary-400"
90
- ]
91
- },
92
- size: {
93
- sm: "h-8 px-3 text-sm rounded-md",
94
- md: "h-10 px-4 text-base rounded-lg",
95
- lg: "h-12 px-6 text-lg rounded-xl",
96
- icon: "h-10 w-10 rounded-lg"
97
- },
98
- fullWidth: {
99
- true: "w-full",
100
- false: ""
101
- },
102
- /** Opt-in hover motion (see src/styles/effects.css). */
103
- effect: {
104
- none: "",
105
- sheen: "mie-fx-sheen hover:-translate-y-0.5",
106
- orbit: "mie-fx-orbit hover:-translate-y-0.5"
107
- }
108
- },
109
- defaultVariants: {
110
- variant: "primary",
111
- size: "md",
112
- fullWidth: false,
113
- effect: "none"
114
- }
115
- }
116
- );
117
38
  var labelClasses = "truncate [&_svg]:inline-block [&_svg]:align-middle";
118
39
  var Button = React.forwardRef(
119
40
  ({
@@ -233,6 +154,6 @@ function LoadingSpinner() {
233
154
  );
234
155
  }
235
156
 
236
- export { Button, buttonVariants };
237
- //# sourceMappingURL=chunk-GOALNQZ2.js.map
238
- //# sourceMappingURL=chunk-GOALNQZ2.js.map
157
+ export { Button };
158
+ //# sourceMappingURL=chunk-WFBUBT54.js.map
159
+ //# sourceMappingURL=chunk-WFBUBT54.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Button/button-critical.ts","../src/components/Button/Button.tsx"],"names":[],"mappings":"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","file":"chunk-WFBUBT54.js","sourcesContent":["/**\n * Self-healing structural CSS for Button.\n *\n * Button layout relies on Tailwind utilities (`inline-flex`,\n * `whitespace-nowrap`, ...). Consumer apps with a stale safelist copy or a\n * missing `@source` line never generate those classes, so the button falls\n * back to `inline-block` and the icon stacks above the label.\n *\n * Injecting these rules from the component guarantees every consumer gets\n * correct button structure just by upgrading the library — no app-side\n * changes required.\n *\n * Override safety, by consumer setup:\n * - Tailwind 4: utilities live in `@layer utilities`. The structural rules\n * below join that same layer, so conflicts resolve by specificity — and\n * every selector is wrapped in `:where()` (zero specificity), so real\n * utilities (`hidden`, `gap-0`, ...) always win. (A new layer name can't\n * be used: layers declared later outrank `utilities`.)\n * - Tailwind 3 / no Tailwind: consumer CSS is unlayered, and unlayered\n * always beats layered, so the structural rules stay a pure fallback.\n */\n\nconst STYLE_ID = 'mieweb-ui-button-critical';\n\nconst CRITICAL_CSS = [\n '@layer utilities{',\n // Structure: keep icon + label on one line (matches the base utilities\n // inline-flex items-center justify-center gap-2 min-w-0 whitespace-nowrap).\n `:where(button[data-slot='button']){display:inline-flex;flex-wrap:nowrap;align-items:center;justify-content:center;gap:0.5rem;min-width:0;white-space:nowrap;}`,\n // Icons and the loading spinner never shrink (matches shrink-0).\n `:where(button[data-slot='button']) > :where([data-slot='button-icon'],svg){flex-shrink:0;}`,\n // Label truncates instead of wrapping/overflowing (matches truncate).\n `:where(button[data-slot='button']) > :where([data-slot='button-label']){min-width:0;overflow:hidden;text-overflow:ellipsis;}`,\n '}',\n // Icons passed as children land inside the label span; Tailwind preflight\n // makes SVGs display:block, which forces line breaks inside the inline\n // label. Restore inline flow. This rule is deliberately UNLAYERED at\n // specificity (0,2,2): it must beat Tailwind 3's unlayered preflight\n // `svg{display:block}` (0,0,1) — layering it would neuter the fix for\n // exactly the broken-TW3 apps it exists for. It also outranks the\n // (0,1,1) [&_svg]:inline-block utility on the label, but both declare\n // the same values, so they never conflict. Known tradeoff:\n // display utilities on an SVG inside the label slot won't win; consumers\n // should conditionally render icons instead.\n `button[data-slot='button'] [data-slot='button-label'] svg{display:inline-block;vertical-align:middle;}`,\n].join('');\n\n/** Injects the critical Button styles once per document. SSR-safe. */\nexport function injectButtonCriticalStyles(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = CRITICAL_CSS;\n document.head.appendChild(style);\n}\n","import * as React from 'react';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { injectButtonCriticalStyles } from './button-critical';\nimport { buttonVariants } from './button-variants';\n\n/**\n * Label wrapper classes. Icons passed as `children` (rather than\n * leftIcon/rightIcon) land inside this span; preflight makes SVGs\n * display:block which would force line breaks inside the inline span,\n * so restore inline flow for them.\n */\nconst labelClasses = 'truncate [&_svg]:inline-block [&_svg]:align-middle';\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Optional icon element to render before the button text */\n leftIcon?: React.ReactElement | null;\n /** Optional icon element to render after the button text */\n rightIcon?: React.ReactElement | null;\n /** Shows a loading spinner and disables the button */\n isLoading?: boolean;\n /** Accessible label for the loading state */\n loadingText?: string;\n}\n\n/**\n * A versatile button component with multiple variants and sizes.\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" size=\"md\">Click me</Button>\n * <Button variant=\"danger\" leftIcon={<TrashIcon />}>Delete</Button>\n * <Button variant=\"ghost\" isLoading loadingText=\"Saving...\">Save</Button>\n * <Button effect=\"sheen\">Request a demo</Button>\n * <Button variant=\"outline\" effect=\"orbit\">Watch the film</Button>\n * ```\n */\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n fullWidth,\n effect,\n leftIcon,\n rightIcon,\n isLoading,\n loadingText,\n disabled,\n children,\n title,\n ...props\n },\n ref\n ) => {\n const resolvedSize = size ?? 'md';\n const labelRef = React.useRef<HTMLSpanElement>(null);\n const innerRef = React.useRef<HTMLButtonElement>(null);\n React.useImperativeHandle(ref, () => innerRef.current as HTMLButtonElement);\n\n // Guarantees correct icon/label layout even when the consumer's Tailwind\n // build is missing our utility classes. See button-critical.ts.\n React.useInsertionEffect(() => {\n injectButtonCriticalStyles();\n }, []);\n\n // When the label truncates, expose the full text as a native tooltip.\n // A consumer-provided `title` always takes precedence.\n React.useLayoutEffect(() => {\n const label = labelRef.current;\n const button = innerRef.current;\n if (!label || !button || title !== undefined) return;\n\n const update = () => {\n if (label.scrollWidth > label.clientWidth) {\n button.title = label.textContent ?? '';\n } else {\n button.removeAttribute('title');\n }\n };\n\n update();\n if (typeof globalThis.ResizeObserver === 'undefined') return;\n const observer = new globalThis.ResizeObserver(update);\n observer.observe(label);\n return () => observer.disconnect();\n }, [title, children, isLoading, loadingText]);\n\n return (\n <button\n data-slot=\"button\"\n data-size={resolvedSize}\n data-variant={variant ?? 'primary'}\n className={cn(\n buttonVariants({ variant, size: resolvedSize, fullWidth, effect }),\n className\n )}\n ref={innerRef}\n disabled={disabled || isLoading}\n aria-busy={isLoading}\n title={title}\n {...props}\n >\n {isLoading ? (\n <>\n <LoadingSpinner />\n <span\n ref={labelRef}\n data-slot=\"button-label\"\n className={labelClasses}\n >\n {loadingText || children}\n </span>\n </>\n ) : (\n <>\n {React.isValidElement(leftIcon) && (\n <span data-slot=\"button-icon\" className=\"shrink-0\">\n {leftIcon}\n </span>\n )}\n <span\n ref={labelRef}\n data-slot=\"button-label\"\n className={labelClasses}\n >\n {children}\n </span>\n {React.isValidElement(rightIcon) && (\n <span data-slot=\"button-icon\" className=\"shrink-0\">\n {rightIcon}\n </span>\n )}\n </>\n )}\n </button>\n );\n }\n);\n\nButton.displayName = 'Button';\n\n/**\n * Simple loading spinner for the button\n */\nfunction LoadingSpinner() {\n return (\n <svg\n className=\"h-4 w-4 shrink-0 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n );\n}\n\nexport { Button, buttonVariants };\n"]}