@mieweb/ui 0.10.0-dev.31 → 0.10.0-dev.33

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 (493) hide show
  1. package/dist/CsvBlock-CFXSDPBI.js +9 -0
  2. package/dist/{CsvBlock-VLMG7GUO.js.map → CsvBlock-CFXSDPBI.js.map} +1 -1
  3. package/dist/CsvBlock-RGO7JXHJ.cjs +18 -0
  4. package/dist/{CsvBlock-FX5YNGNE.cjs.map → CsvBlock-RGO7JXHJ.cjs.map} +1 -1
  5. package/dist/HtmlPreviewBlock-VBYXCXVT.cjs +18 -0
  6. package/dist/{HtmlPreviewBlock-UO37JQ3K.cjs.map → HtmlPreviewBlock-VBYXCXVT.cjs.map} +1 -1
  7. package/dist/HtmlPreviewBlock-Z2GCK325.js +9 -0
  8. package/dist/{HtmlPreviewBlock-5JE7L3GR.js.map → HtmlPreviewBlock-Z2GCK325.js.map} +1 -1
  9. package/dist/MermaidBlock-I2R2BQOX.cjs +18 -0
  10. package/dist/{MermaidBlock-RZ75RPZA.cjs.map → MermaidBlock-I2R2BQOX.cjs.map} +1 -1
  11. package/dist/MermaidBlock-XCAK7IA5.js +9 -0
  12. package/dist/{MermaidBlock-3XHFBAMV.js.map → MermaidBlock-XCAK7IA5.js.map} +1 -1
  13. package/dist/SurveyBlock-KI5JOWCL.js +9 -0
  14. package/dist/{SurveyBlock-MUVJ3JUI.js.map → SurveyBlock-KI5JOWCL.js.map} +1 -1
  15. package/dist/SurveyBlock-UKSGISRT.cjs +18 -0
  16. package/dist/{SurveyBlock-VH47YXZC.cjs.map → SurveyBlock-UKSGISRT.cjs.map} +1 -1
  17. package/dist/brands/index.cjs +7 -7
  18. package/dist/brands/index.js +2 -2
  19. package/dist/{chunk-6ZPTZTKN.js → chunk-24AFHH4J.js} +3 -3
  20. package/dist/{chunk-6ZPTZTKN.js.map → chunk-24AFHH4J.js.map} +1 -1
  21. package/dist/{chunk-BNH4SXJB.js → chunk-2X54ZLT6.js} +6 -6
  22. package/dist/{chunk-BNH4SXJB.js.map → chunk-2X54ZLT6.js.map} +1 -1
  23. package/dist/{chunk-TYE5K5WV.cjs → chunk-32ZCJOSR.cjs} +4 -4
  24. package/dist/{chunk-TYE5K5WV.cjs.map → chunk-32ZCJOSR.cjs.map} +1 -1
  25. package/dist/chunk-47P5QLX4.cjs +42 -0
  26. package/dist/chunk-47P5QLX4.cjs.map +1 -0
  27. package/dist/chunk-4ZB7RSMY.cjs +306 -0
  28. package/dist/chunk-4ZB7RSMY.cjs.map +1 -0
  29. package/dist/chunk-56VTM4OX.js +261 -0
  30. package/dist/chunk-56VTM4OX.js.map +1 -0
  31. package/dist/{chunk-D22GE27K.js → chunk-5A4SL436.js} +4 -4
  32. package/dist/{chunk-D22GE27K.js.map → chunk-5A4SL436.js.map} +1 -1
  33. package/dist/chunk-6BNZLN4B.cjs +548 -0
  34. package/dist/chunk-6BNZLN4B.cjs.map +1 -0
  35. package/dist/chunk-6JSFT2J5.js +130 -0
  36. package/dist/chunk-6JSFT2J5.js.map +1 -0
  37. package/dist/chunk-6N7NMOSV.js +233 -0
  38. package/dist/chunk-6N7NMOSV.js.map +1 -0
  39. package/dist/chunk-6TTCZY3P.cjs +4 -0
  40. package/dist/chunk-6TTCZY3P.cjs.map +1 -0
  41. package/dist/{chunk-TTSSUOEV.cjs → chunk-7C5W744U.cjs} +8 -8
  42. package/dist/{chunk-TTSSUOEV.cjs.map → chunk-7C5W744U.cjs.map} +1 -1
  43. package/dist/chunk-7HUTR6RX.js +178 -0
  44. package/dist/chunk-7HUTR6RX.js.map +1 -0
  45. package/dist/chunk-7IRTD4JT.cjs +61 -0
  46. package/dist/chunk-7IRTD4JT.cjs.map +1 -0
  47. package/dist/{chunk-YU55JD35.js → chunk-7QW6TU4X.js} +3 -3
  48. package/dist/{chunk-YU55JD35.js.map → chunk-7QW6TU4X.js.map} +1 -1
  49. package/dist/chunk-7WJ6MBF5.cjs +47 -0
  50. package/dist/chunk-7WJ6MBF5.cjs.map +1 -0
  51. package/dist/chunk-A4W5CSK7.cjs +216 -0
  52. package/dist/chunk-A4W5CSK7.cjs.map +1 -0
  53. package/dist/{chunk-WXFGHDTV.cjs → chunk-AJPFQF3H.cjs} +18 -18
  54. package/dist/{chunk-WXFGHDTV.cjs.map → chunk-AJPFQF3H.cjs.map} +1 -1
  55. package/dist/chunk-AMYFRY7K.js +3 -0
  56. package/dist/chunk-AMYFRY7K.js.map +1 -0
  57. package/dist/{chunk-X6A27RGO.cjs → chunk-ANMX7YDL.cjs} +2 -2
  58. package/dist/{chunk-X6A27RGO.cjs.map → chunk-ANMX7YDL.cjs.map} +1 -1
  59. package/dist/{chunk-DVOQ3JNO.js → chunk-B4CKCNWD.js} +16 -8
  60. package/dist/chunk-B4CKCNWD.js.map +1 -0
  61. package/dist/chunk-BJ6ABRSQ.cjs +256 -0
  62. package/dist/chunk-BJ6ABRSQ.cjs.map +1 -0
  63. package/dist/chunk-BXRQ6HEP.cjs +4 -0
  64. package/dist/chunk-BXRQ6HEP.cjs.map +1 -0
  65. package/dist/{chunk-TJCX4OML.cjs → chunk-C77FAR3F.cjs} +2 -2
  66. package/dist/{chunk-TJCX4OML.cjs.map → chunk-C77FAR3F.cjs.map} +1 -1
  67. package/dist/chunk-CBBKWRLG.js +213 -0
  68. package/dist/chunk-CBBKWRLG.js.map +1 -0
  69. package/dist/{chunk-ZTMYKAVU.cjs → chunk-CCAVJSWL.cjs} +49 -48
  70. package/dist/chunk-CCAVJSWL.cjs.map +1 -0
  71. package/dist/chunk-CPDNX3LS.cjs +47 -0
  72. package/dist/chunk-CPDNX3LS.cjs.map +1 -0
  73. package/dist/chunk-CVNPNZMX.js +44 -0
  74. package/dist/chunk-CVNPNZMX.js.map +1 -0
  75. package/dist/chunk-DHGCLPFZ.js +91 -0
  76. package/dist/chunk-DHGCLPFZ.js.map +1 -0
  77. package/dist/chunk-DO2YN46R.cjs +201 -0
  78. package/dist/chunk-DO2YN46R.cjs.map +1 -0
  79. package/dist/chunk-DVDT7TX7.js +151 -0
  80. package/dist/chunk-DVDT7TX7.js.map +1 -0
  81. package/dist/{chunk-R5Z7AOVU.cjs → chunk-DZ3JTMKM.cjs} +9 -9
  82. package/dist/{chunk-R5Z7AOVU.cjs.map → chunk-DZ3JTMKM.cjs.map} +1 -1
  83. package/dist/chunk-EACNRR3C.cjs +4 -0
  84. package/dist/chunk-EACNRR3C.cjs.map +1 -0
  85. package/dist/{chunk-E2PBPQGS.js → chunk-EEOGIGIA.js} +2 -2
  86. package/dist/{chunk-E2PBPQGS.js.map → chunk-EEOGIGIA.js.map} +1 -1
  87. package/dist/chunk-EPCUPHEO.js +193 -0
  88. package/dist/chunk-EPCUPHEO.js.map +1 -0
  89. package/dist/chunk-EPTP3VKT.js +283 -0
  90. package/dist/chunk-EPTP3VKT.js.map +1 -0
  91. package/dist/{chunk-HIZWOAWY.cjs → chunk-ERACGSDY.cjs} +8 -8
  92. package/dist/{chunk-HIZWOAWY.cjs.map → chunk-ERACGSDY.cjs.map} +1 -1
  93. package/dist/{chunk-VOQJHSXN.cjs → chunk-F2FOG4EG.cjs} +9 -9
  94. package/dist/{chunk-VOQJHSXN.cjs.map → chunk-F2FOG4EG.cjs.map} +1 -1
  95. package/dist/{chunk-GBUVIGD5.js → chunk-F3EWRDIT.js} +99 -3
  96. package/dist/chunk-F3EWRDIT.js.map +1 -0
  97. package/dist/{chunk-GVLNXPJX.js → chunk-FGLIP6YR.js} +4 -4
  98. package/dist/{chunk-GVLNXPJX.js.map → chunk-FGLIP6YR.js.map} +1 -1
  99. package/dist/chunk-FKGFOBC2.js +314 -0
  100. package/dist/chunk-FKGFOBC2.js.map +1 -0
  101. package/dist/chunk-FSGJXCBG.cjs +318 -0
  102. package/dist/chunk-FSGJXCBG.cjs.map +1 -0
  103. package/dist/chunk-FTEZNCRI.js +29 -0
  104. package/dist/chunk-FTEZNCRI.js.map +1 -0
  105. package/dist/{chunk-COM7RNZU.cjs → chunk-FYQZWLAM.cjs} +2 -2
  106. package/dist/{chunk-COM7RNZU.cjs.map → chunk-FYQZWLAM.cjs.map} +1 -1
  107. package/dist/{chunk-YVPC65ZJ.cjs → chunk-GF2BE4FB.cjs} +91 -32
  108. package/dist/chunk-GF2BE4FB.cjs.map +1 -0
  109. package/dist/{chunk-JEIW7BSV.cjs → chunk-GKDHMNUA.cjs} +2 -52
  110. package/dist/chunk-GKDHMNUA.cjs.map +1 -0
  111. package/dist/{chunk-N7C4OEP7.cjs → chunk-GM32IDVL.cjs} +6 -6
  112. package/dist/{chunk-N7C4OEP7.cjs.map → chunk-GM32IDVL.cjs.map} +1 -1
  113. package/dist/chunk-GY5SP4ST.js +3 -0
  114. package/dist/chunk-GY5SP4ST.js.map +1 -0
  115. package/dist/chunk-H2Y7HZV5.js +3 -0
  116. package/dist/chunk-H2Y7HZV5.js.map +1 -0
  117. package/dist/chunk-H3QPREIJ.js +195 -0
  118. package/dist/chunk-H3QPREIJ.js.map +1 -0
  119. package/dist/{chunk-QOVJ6Z6R.js → chunk-HDY7YQFX.js} +3 -3
  120. package/dist/{chunk-QOVJ6Z6R.js.map → chunk-HDY7YQFX.js.map} +1 -1
  121. package/dist/chunk-HNFFFFYH.cjs +114 -0
  122. package/dist/chunk-HNFFFFYH.cjs.map +1 -0
  123. package/dist/chunk-HNXLLDPN.js +25 -0
  124. package/dist/chunk-HNXLLDPN.js.map +1 -0
  125. package/dist/chunk-I2MMUFCN.cjs +154 -0
  126. package/dist/chunk-I2MMUFCN.cjs.map +1 -0
  127. package/dist/{chunk-GYXUS65N.cjs → chunk-IGDO62KR.cjs} +5 -5
  128. package/dist/{chunk-GYXUS65N.cjs.map → chunk-IGDO62KR.cjs.map} +1 -1
  129. package/dist/{chunk-HC3NAN55.cjs → chunk-IPL2O2OL.cjs} +19 -19
  130. package/dist/{chunk-HC3NAN55.cjs.map → chunk-IPL2O2OL.cjs.map} +1 -1
  131. package/dist/chunk-ISUIKUX7.cjs +337 -0
  132. package/dist/chunk-ISUIKUX7.cjs.map +1 -0
  133. package/dist/{chunk-N5O47VGS.cjs → chunk-IVGI353O.cjs} +2 -2
  134. package/dist/{chunk-N5O47VGS.cjs.map → chunk-IVGI353O.cjs.map} +1 -1
  135. package/dist/chunk-IWRBJHO3.cjs +51 -0
  136. package/dist/chunk-IWRBJHO3.cjs.map +1 -0
  137. package/dist/{chunk-BIQ7GSO2.js → chunk-JMAZ2GKT.js} +3 -3
  138. package/dist/{chunk-BIQ7GSO2.js.map → chunk-JMAZ2GKT.js.map} +1 -1
  139. package/dist/{chunk-KRU6IGV7.js → chunk-JUJGWUAN.js} +28 -6
  140. package/dist/chunk-JUJGWUAN.js.map +1 -0
  141. package/dist/{chunk-BUT6MF5K.cjs → chunk-KQ6GLYFZ.cjs} +4 -4
  142. package/dist/{chunk-BUT6MF5K.cjs.map → chunk-KQ6GLYFZ.cjs.map} +1 -1
  143. package/dist/chunk-L6K4PRZK.cjs +4 -0
  144. package/dist/chunk-L6K4PRZK.cjs.map +1 -0
  145. package/dist/{chunk-T4L7Q5FA.cjs → chunk-LC3JL2HB.cjs} +6 -2
  146. package/dist/chunk-LC3JL2HB.cjs.map +1 -0
  147. package/dist/{chunk-P7UMS4E6.cjs → chunk-LC7PVBXH.cjs} +16 -8
  148. package/dist/chunk-LC7PVBXH.cjs.map +1 -0
  149. package/dist/chunk-LRRSD7LR.js +248 -0
  150. package/dist/chunk-LRRSD7LR.js.map +1 -0
  151. package/dist/chunk-LSMS6DY7.cjs +331 -0
  152. package/dist/chunk-LSMS6DY7.cjs.map +1 -0
  153. package/dist/chunk-M3VPGJMV.js +283 -0
  154. package/dist/chunk-M3VPGJMV.js.map +1 -0
  155. package/dist/{chunk-QURJVPRH.cjs → chunk-MJJJDQ5P.cjs} +46 -2
  156. package/dist/chunk-MJJJDQ5P.cjs.map +1 -0
  157. package/dist/{chunk-2JICT4A2.js → chunk-N54FYWG6.js} +3 -3
  158. package/dist/{chunk-2JICT4A2.js.map → chunk-N54FYWG6.js.map} +1 -1
  159. package/dist/chunk-N5JDL4VE.js +3 -0
  160. package/dist/chunk-N5JDL4VE.js.map +1 -0
  161. package/dist/{chunk-KGKBZN3T.cjs → chunk-NAH65KPK.cjs} +8 -8
  162. package/dist/{chunk-KGKBZN3T.cjs.map → chunk-NAH65KPK.cjs.map} +1 -1
  163. package/dist/{chunk-NKV76R65.cjs → chunk-O6BJMVGT.cjs} +45 -45
  164. package/dist/{chunk-NKV76R65.cjs.map → chunk-O6BJMVGT.cjs.map} +1 -1
  165. package/dist/{chunk-SVSHA7XV.js → chunk-O6XDA3SI.js} +31 -33
  166. package/dist/chunk-O6XDA3SI.js.map +1 -0
  167. package/dist/chunk-OIF34LEN.cjs +425 -0
  168. package/dist/chunk-OIF34LEN.cjs.map +1 -0
  169. package/dist/chunk-ORCCJ5VY.cjs +218 -0
  170. package/dist/chunk-ORCCJ5VY.cjs.map +1 -0
  171. package/dist/{chunk-CRS2CQWM.js → chunk-OSTSZDQC.js} +3 -3
  172. package/dist/{chunk-CRS2CQWM.js.map → chunk-OSTSZDQC.js.map} +1 -1
  173. package/dist/chunk-P22YCUVM.cjs +4 -0
  174. package/dist/chunk-P22YCUVM.cjs.map +1 -0
  175. package/dist/chunk-P55LNEDH.cjs +306 -0
  176. package/dist/chunk-P55LNEDH.cjs.map +1 -0
  177. package/dist/{chunk-R6KPWIGO.js → chunk-P7D7BYFE.js} +4 -4
  178. package/dist/{chunk-R6KPWIGO.js.map → chunk-P7D7BYFE.js.map} +1 -1
  179. package/dist/{chunk-GU5OS7JJ.cjs → chunk-PYI2IWNX.cjs} +4 -4
  180. package/dist/{chunk-GU5OS7JJ.cjs.map → chunk-PYI2IWNX.cjs.map} +1 -1
  181. package/dist/chunk-Q3YVLO52.cjs +174 -0
  182. package/dist/chunk-Q3YVLO52.cjs.map +1 -0
  183. package/dist/{chunk-K34DXMLZ.js → chunk-QJ2L5RU6.js} +7 -7
  184. package/dist/{chunk-K34DXMLZ.js.map → chunk-QJ2L5RU6.js.map} +1 -1
  185. package/dist/{chunk-X4LBUPJO.cjs → chunk-QX6AAVDE.cjs} +31 -33
  186. package/dist/chunk-QX6AAVDE.cjs.map +1 -0
  187. package/dist/{chunk-LFPJ3OUM.cjs → chunk-RIUQP2QS.cjs} +5 -5
  188. package/dist/{chunk-LFPJ3OUM.cjs.map → chunk-RIUQP2QS.cjs.map} +1 -1
  189. package/dist/{chunk-JHG3ELS2.js → chunk-RPFATYUI.js} +2 -2
  190. package/dist/{chunk-JHG3ELS2.js.map → chunk-RPFATYUI.js.map} +1 -1
  191. package/dist/{chunk-FZURBQJ2.js → chunk-RSJGTWLM.js} +3 -3
  192. package/dist/{chunk-FZURBQJ2.js.map → chunk-RSJGTWLM.js.map} +1 -1
  193. package/dist/{chunk-XBTKZCZF.js → chunk-RZSSQ7AT.js} +3 -3
  194. package/dist/{chunk-XBTKZCZF.js.map → chunk-RZSSQ7AT.js.map} +1 -1
  195. package/dist/{chunk-SD7ONW6S.js → chunk-S2JZL4JC.js} +5 -5
  196. package/dist/{chunk-SD7ONW6S.js.map → chunk-S2JZL4JC.js.map} +1 -1
  197. package/dist/{chunk-VROIMIHB.cjs → chunk-SHBCUXFS.cjs} +28 -6
  198. package/dist/chunk-SHBCUXFS.cjs.map +1 -0
  199. package/dist/{chunk-JELTRRR5.cjs → chunk-SW2E7XKY.cjs} +9 -9
  200. package/dist/{chunk-JELTRRR5.cjs.map → chunk-SW2E7XKY.cjs.map} +1 -1
  201. package/dist/chunk-SZSRGUVO.js +402 -0
  202. package/dist/chunk-SZSRGUVO.js.map +1 -0
  203. package/dist/{chunk-HZ4MBUC3.js → chunk-TI3TQQ7F.js} +4 -53
  204. package/dist/chunk-TI3TQQ7F.js.map +1 -0
  205. package/dist/{chunk-MLAWXPRY.js → chunk-TKWNXAFI.js} +46 -2
  206. package/dist/chunk-TKWNXAFI.js.map +1 -0
  207. package/dist/{chunk-H2IAMSHK.js → chunk-TVEJKKIM.js} +3 -3
  208. package/dist/{chunk-H2IAMSHK.js.map → chunk-TVEJKKIM.js.map} +1 -1
  209. package/dist/{chunk-LHBWRMNC.cjs → chunk-TVU4KB27.cjs} +130 -12
  210. package/dist/chunk-TVU4KB27.cjs.map +1 -0
  211. package/dist/{chunk-ENMXHZNE.js → chunk-TWQSMUE6.js} +6 -2
  212. package/dist/chunk-TWQSMUE6.js.map +1 -0
  213. package/dist/{chunk-ZYL4SNOR.js → chunk-UJDWFDKE.js} +3 -3
  214. package/dist/{chunk-ZYL4SNOR.js.map → chunk-UJDWFDKE.js.map} +1 -1
  215. package/dist/{chunk-4HC2IBOX.js → chunk-UNFDIBKJ.js} +3 -3
  216. package/dist/{chunk-4HC2IBOX.js.map → chunk-UNFDIBKJ.js.map} +1 -1
  217. package/dist/chunk-UTIPENPW.cjs +286 -0
  218. package/dist/chunk-UTIPENPW.cjs.map +1 -0
  219. package/dist/{chunk-IYWG72DM.js → chunk-VEE46VTX.js} +4 -4
  220. package/dist/{chunk-IYWG72DM.js.map → chunk-VEE46VTX.js.map} +1 -1
  221. package/dist/{chunk-Y4E2WRUR.cjs → chunk-VFFV7EMT.cjs} +6 -6
  222. package/dist/{chunk-Y4E2WRUR.cjs.map → chunk-VFFV7EMT.cjs.map} +1 -1
  223. package/dist/chunk-VNEAQCY2.js +308 -0
  224. package/dist/chunk-VNEAQCY2.js.map +1 -0
  225. package/dist/chunk-VOYLX32A.cjs +271 -0
  226. package/dist/chunk-VOYLX32A.cjs.map +1 -0
  227. package/dist/{chunk-7ZV67VZE.js → chunk-VSRO4PAI.js} +21 -3
  228. package/dist/chunk-VSRO4PAI.js.map +1 -0
  229. package/dist/{chunk-L6MDULYB.js → chunk-VU3ZMJBN.js} +2 -2
  230. package/dist/{chunk-L6MDULYB.js.map → chunk-VU3ZMJBN.js.map} +1 -1
  231. package/dist/{chunk-CPPUT74P.cjs → chunk-VV2U36T6.cjs} +9 -9
  232. package/dist/{chunk-CPPUT74P.cjs.map → chunk-VV2U36T6.cjs.map} +1 -1
  233. package/dist/{chunk-35Y4ILCU.cjs → chunk-VXW7D5LR.cjs} +21 -3
  234. package/dist/chunk-VXW7D5LR.cjs.map +1 -0
  235. package/dist/{chunk-7YO7DNUV.js → chunk-WFBUBT54.js} +2 -2
  236. package/dist/{chunk-7YO7DNUV.js.map → chunk-WFBUBT54.js.map} +1 -1
  237. package/dist/chunk-WQHBMZSC.js +295 -0
  238. package/dist/chunk-WQHBMZSC.js.map +1 -0
  239. package/dist/chunk-X5JOEZVR.js +525 -0
  240. package/dist/chunk-X5JOEZVR.js.map +1 -0
  241. package/dist/chunk-XBAAHOCP.js +3 -0
  242. package/dist/chunk-XBAAHOCP.js.map +1 -0
  243. package/dist/chunk-XNPDZANN.cjs +238 -0
  244. package/dist/chunk-XNPDZANN.cjs.map +1 -0
  245. package/dist/chunk-XXA4NZUC.js +3 -0
  246. package/dist/chunk-XXA4NZUC.js.map +1 -0
  247. package/dist/chunk-Y424YL55.js +59 -0
  248. package/dist/chunk-Y424YL55.js.map +1 -0
  249. package/dist/chunk-YGS2TRMP.js +38 -0
  250. package/dist/chunk-YGS2TRMP.js.map +1 -0
  251. package/dist/{chunk-JBIGSP2T.js → chunk-YMILRSRO.js} +6 -5
  252. package/dist/chunk-YMILRSRO.js.map +1 -0
  253. package/dist/chunk-YUMOM3KE.js +167 -0
  254. package/dist/chunk-YUMOM3KE.js.map +1 -0
  255. package/dist/{chunk-3KPDQG5O.cjs → chunk-ZG6FXMDX.cjs} +5 -5
  256. package/dist/{chunk-3KPDQG5O.cjs.map → chunk-ZG6FXMDX.cjs.map} +1 -1
  257. package/dist/chunk-ZNUMOJOI.cjs +4 -0
  258. package/dist/chunk-ZNUMOJOI.cjs.map +1 -0
  259. package/dist/components/Accordion/index.cjs +2 -2
  260. package/dist/components/Accordion/index.d.cts +6 -0
  261. package/dist/components/Accordion/index.d.ts +6 -0
  262. package/dist/components/Accordion/index.js +1 -1
  263. package/dist/components/ActionPlan/index.cjs +34 -0
  264. package/dist/components/ActionPlan/index.cjs.map +1 -0
  265. package/dist/components/ActionPlan/index.d.cts +65 -0
  266. package/dist/components/ActionPlan/index.d.ts +65 -0
  267. package/dist/components/ActionPlan/index.js +21 -0
  268. package/dist/components/ActionPlan/index.js.map +1 -0
  269. package/dist/components/ActivityFeed/index.cjs +31 -0
  270. package/dist/components/ActivityFeed/index.cjs.map +1 -0
  271. package/dist/components/ActivityFeed/index.d.cts +99 -0
  272. package/dist/components/ActivityFeed/index.d.ts +99 -0
  273. package/dist/components/ActivityFeed/index.js +18 -0
  274. package/dist/components/ActivityFeed/index.js.map +1 -0
  275. package/dist/components/AlertDialog/index.cjs +17 -4
  276. package/dist/components/AlertDialog/index.d.cts +66 -13
  277. package/dist/components/AlertDialog/index.d.ts +66 -13
  278. package/dist/components/AlertDialog/index.js +4 -3
  279. package/dist/components/AssociationList/index.cjs +29 -0
  280. package/dist/components/AssociationList/index.cjs.map +1 -0
  281. package/dist/components/AssociationList/index.d.cts +50 -0
  282. package/dist/components/AssociationList/index.d.ts +50 -0
  283. package/dist/components/AssociationList/index.js +16 -0
  284. package/dist/components/AssociationList/index.js.map +1 -0
  285. package/dist/components/Avatar/index.cjs +9 -7
  286. package/dist/components/Avatar/index.d.cts +45 -14
  287. package/dist/components/Avatar/index.d.ts +45 -14
  288. package/dist/components/Avatar/index.js +3 -1
  289. package/dist/components/AvatarGroup/index.cjs +20 -0
  290. package/dist/components/AvatarGroup/index.cjs.map +1 -0
  291. package/dist/components/AvatarGroup/index.d.cts +57 -0
  292. package/dist/components/AvatarGroup/index.d.ts +57 -0
  293. package/dist/components/AvatarGroup/index.js +7 -0
  294. package/dist/components/AvatarGroup/index.js.map +1 -0
  295. package/dist/components/Button/index.cjs +3 -2
  296. package/dist/components/Button/index.js +2 -1
  297. package/dist/components/CalendarHeatmap/index.cjs +18 -0
  298. package/dist/components/CalendarHeatmap/index.cjs.map +1 -0
  299. package/dist/components/CalendarHeatmap/index.d.cts +47 -0
  300. package/dist/components/CalendarHeatmap/index.d.ts +47 -0
  301. package/dist/components/CalendarHeatmap/index.js +5 -0
  302. package/dist/components/CalendarHeatmap/index.js.map +1 -0
  303. package/dist/components/CalendarView/index.cjs +5 -4
  304. package/dist/components/CalendarView/index.js +3 -2
  305. package/dist/components/ClampedText/index.cjs +3 -2
  306. package/dist/components/ClampedText/index.js +2 -1
  307. package/dist/components/CollabStatus/index.cjs +6 -4
  308. package/dist/components/CollabStatus/index.d.cts +11 -0
  309. package/dist/components/CollabStatus/index.d.ts +11 -0
  310. package/dist/components/CollabStatus/index.js +3 -1
  311. package/dist/components/Collapsible/index.cjs +4 -4
  312. package/dist/components/Collapsible/index.d.cts +6 -0
  313. package/dist/components/Collapsible/index.d.ts +6 -0
  314. package/dist/components/Collapsible/index.js +1 -1
  315. package/dist/components/CompletenessMeter/index.cjs +22 -0
  316. package/dist/components/CompletenessMeter/index.cjs.map +1 -0
  317. package/dist/components/CompletenessMeter/index.d.cts +52 -0
  318. package/dist/components/CompletenessMeter/index.d.ts +52 -0
  319. package/dist/components/CompletenessMeter/index.js +5 -0
  320. package/dist/components/CompletenessMeter/index.js.map +1 -0
  321. package/dist/components/CustomizableDashboard/index.cjs +10 -9
  322. package/dist/components/CustomizableDashboard/index.js +3 -2
  323. package/dist/components/DateInput/index.d.cts +36 -4
  324. package/dist/components/DateInput/index.d.ts +36 -4
  325. package/dist/components/Dropdown/index.cjs +9 -8
  326. package/dist/components/Dropdown/index.js +2 -1
  327. package/dist/components/FieldHistory/index.cjs +34 -0
  328. package/dist/components/FieldHistory/index.cjs.map +1 -0
  329. package/dist/components/FieldHistory/index.d.cts +66 -0
  330. package/dist/components/FieldHistory/index.d.ts +66 -0
  331. package/dist/components/FieldHistory/index.js +21 -0
  332. package/dist/components/FieldHistory/index.js.map +1 -0
  333. package/dist/components/FloatingWindow/index.cjs +5 -4
  334. package/dist/components/FloatingWindow/index.js +3 -2
  335. package/dist/components/InlineEdit/index.cjs +20 -0
  336. package/dist/components/InlineEdit/index.cjs.map +1 -0
  337. package/dist/components/InlineEdit/index.d.cts +56 -0
  338. package/dist/components/InlineEdit/index.d.ts +56 -0
  339. package/dist/components/InlineEdit/index.js +7 -0
  340. package/dist/components/InlineEdit/index.js.map +1 -0
  341. package/dist/components/KeyboardShortcutsOverlay/index.cjs +4 -4
  342. package/dist/components/KeyboardShortcutsOverlay/index.js +2 -2
  343. package/dist/components/ListView/index.cjs +5 -4
  344. package/dist/components/ListView/index.js +3 -2
  345. package/dist/components/LogoUploader/index.cjs +18 -0
  346. package/dist/components/LogoUploader/index.cjs.map +1 -0
  347. package/dist/components/LogoUploader/index.d.cts +49 -0
  348. package/dist/components/LogoUploader/index.d.ts +49 -0
  349. package/dist/components/LogoUploader/index.js +5 -0
  350. package/dist/components/LogoUploader/index.js.map +1 -0
  351. package/dist/components/Markdown/index.cjs +17 -16
  352. package/dist/components/Markdown/index.js +8 -7
  353. package/dist/components/MediaEditor/index.cjs +10 -9
  354. package/dist/components/MediaEditor/index.js +5 -4
  355. package/dist/components/MediaFeed/index.cjs +9 -6
  356. package/dist/components/MediaFeed/index.js +8 -5
  357. package/dist/components/MediaPlayer/index.cjs +6 -5
  358. package/dist/components/MediaPlayer/index.js +3 -2
  359. package/dist/components/MegaMenu/index.cjs +2 -1
  360. package/dist/components/MegaMenu/index.js +2 -1
  361. package/dist/components/Modal/index.cjs +9 -9
  362. package/dist/components/Modal/index.js +1 -1
  363. package/dist/components/PhiMask/index.cjs +18 -0
  364. package/dist/components/PhiMask/index.cjs.map +1 -0
  365. package/dist/components/PhiMask/index.d.cts +45 -0
  366. package/dist/components/PhiMask/index.d.ts +45 -0
  367. package/dist/components/PhiMask/index.js +5 -0
  368. package/dist/components/PhiMask/index.js.map +1 -0
  369. package/dist/components/PhoneInput/index.d.cts +3 -36
  370. package/dist/components/PhoneInput/index.d.ts +3 -36
  371. package/dist/components/PropertyList/index.cjs +25 -0
  372. package/dist/components/PropertyList/index.cjs.map +1 -0
  373. package/dist/components/PropertyList/index.d.cts +71 -0
  374. package/dist/components/PropertyList/index.d.ts +71 -0
  375. package/dist/components/PropertyList/index.js +12 -0
  376. package/dist/components/PropertyList/index.js.map +1 -0
  377. package/dist/components/RadialExplorer/index.cjs +2 -1
  378. package/dist/components/RadialExplorer/index.js +2 -1
  379. package/dist/components/Rating/index.cjs +28 -0
  380. package/dist/components/Rating/index.cjs.map +1 -0
  381. package/dist/components/Rating/index.d.cts +85 -0
  382. package/dist/components/Rating/index.d.ts +85 -0
  383. package/dist/components/Rating/index.js +7 -0
  384. package/dist/components/Rating/index.js.map +1 -0
  385. package/dist/components/RecordHeader/index.cjs +29 -0
  386. package/dist/components/RecordHeader/index.cjs.map +1 -0
  387. package/dist/components/RecordHeader/index.d.cts +86 -0
  388. package/dist/components/RecordHeader/index.d.ts +86 -0
  389. package/dist/components/RecordHeader/index.js +16 -0
  390. package/dist/components/RecordHeader/index.js.map +1 -0
  391. package/dist/components/RecordLayout/index.cjs +21 -0
  392. package/dist/components/RecordLayout/index.cjs.map +1 -0
  393. package/dist/components/RecordLayout/index.d.cts +40 -0
  394. package/dist/components/RecordLayout/index.d.ts +40 -0
  395. package/dist/components/RecordLayout/index.js +8 -0
  396. package/dist/components/RecordLayout/index.js.map +1 -0
  397. package/dist/components/RichTextEditor/index.cjs +8 -6
  398. package/dist/components/RichTextEditor/index.js +5 -3
  399. package/dist/components/SectionSpyNav/index.cjs +2 -1
  400. package/dist/components/SectionSpyNav/index.js +2 -1
  401. package/dist/components/SuperChat/index.cjs +23 -19
  402. package/dist/components/SuperChat/index.cjs.map +1 -1
  403. package/dist/components/SuperChat/index.js +11 -7
  404. package/dist/components/SuperChat/index.js.map +1 -1
  405. package/dist/components/SuperChat/plugins/index.cjs +5 -4
  406. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  407. package/dist/components/SuperChat/plugins/index.js +4 -3
  408. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  409. package/dist/components/Tabs/index.cjs +9 -7
  410. package/dist/components/Tabs/index.d.cts +12 -1
  411. package/dist/components/Tabs/index.d.ts +12 -1
  412. package/dist/components/Tabs/index.js +3 -1
  413. package/dist/components/TagEditor/index.cjs +20 -0
  414. package/dist/components/TagEditor/index.cjs.map +1 -0
  415. package/dist/components/TagEditor/index.d.cts +46 -0
  416. package/dist/components/TagEditor/index.d.ts +46 -0
  417. package/dist/components/TagEditor/index.js +7 -0
  418. package/dist/components/TagEditor/index.js.map +1 -0
  419. package/dist/components/UserPicker/index.cjs +24 -0
  420. package/dist/components/UserPicker/index.cjs.map +1 -0
  421. package/dist/components/UserPicker/index.d.cts +60 -0
  422. package/dist/components/UserPicker/index.d.ts +60 -0
  423. package/dist/components/UserPicker/index.js +11 -0
  424. package/dist/components/UserPicker/index.js.map +1 -0
  425. package/dist/components/ViewSet/index.cjs +6 -5
  426. package/dist/components/ViewSet/index.d.cts +2 -1
  427. package/dist/components/ViewSet/index.d.ts +2 -1
  428. package/dist/components/ViewSet/index.js +5 -4
  429. package/dist/components/ViewSwitcher/index.d.cts +39 -4
  430. package/dist/components/ViewSwitcher/index.d.ts +39 -4
  431. package/dist/datavis.cjs +3 -2
  432. package/dist/datavis.cjs.map +1 -1
  433. package/dist/datavis.js +2 -1
  434. package/dist/datavis.js.map +1 -1
  435. package/dist/esheet.cjs +9 -7
  436. package/dist/esheet.cjs.map +1 -1
  437. package/dist/esheet.js +6 -4
  438. package/dist/esheet.js.map +1 -1
  439. package/dist/hooks/index.cjs +53 -27
  440. package/dist/hooks/index.d.cts +91 -6
  441. package/dist/hooks/index.d.ts +91 -6
  442. package/dist/hooks/index.js +5 -3
  443. package/dist/index.cjs +1391 -847
  444. package/dist/index.cjs.map +1 -1
  445. package/dist/index.d.cts +1253 -168
  446. package/dist/index.d.ts +1253 -168
  447. package/dist/index.js +539 -171
  448. package/dist/index.js.map +1 -1
  449. package/dist/org-chart.cjs +1302 -0
  450. package/dist/org-chart.cjs.map +1 -0
  451. package/dist/org-chart.d.cts +164 -0
  452. package/dist/org-chart.d.ts +164 -0
  453. package/dist/org-chart.js +1277 -0
  454. package/dist/org-chart.js.map +1 -0
  455. package/dist/styles.css +1 -1
  456. package/dist/tailwind-preset.cjs +4 -4
  457. package/dist/tailwind-preset.js +1 -1
  458. package/dist/{index-DoYYWsNc.d.cts → types-CDeBNZiE.d.cts} +1 -36
  459. package/dist/{index-DoYYWsNc.d.ts → types-CDeBNZiE.d.ts} +1 -36
  460. package/package.json +22 -2
  461. package/dist/CsvBlock-FX5YNGNE.cjs +0 -17
  462. package/dist/CsvBlock-VLMG7GUO.js +0 -8
  463. package/dist/HtmlPreviewBlock-5JE7L3GR.js +0 -8
  464. package/dist/HtmlPreviewBlock-UO37JQ3K.cjs +0 -17
  465. package/dist/MermaidBlock-3XHFBAMV.js +0 -8
  466. package/dist/MermaidBlock-RZ75RPZA.cjs +0 -17
  467. package/dist/SurveyBlock-MUVJ3JUI.js +0 -8
  468. package/dist/SurveyBlock-VH47YXZC.cjs +0 -17
  469. package/dist/chunk-35Y4ILCU.cjs.map +0 -1
  470. package/dist/chunk-6N6LIAUJ.cjs +0 -80
  471. package/dist/chunk-6N6LIAUJ.cjs.map +0 -1
  472. package/dist/chunk-7ZV67VZE.js.map +0 -1
  473. package/dist/chunk-7ZVTLTJF.js +0 -109
  474. package/dist/chunk-7ZVTLTJF.js.map +0 -1
  475. package/dist/chunk-DVOQ3JNO.js.map +0 -1
  476. package/dist/chunk-ENMXHZNE.js.map +0 -1
  477. package/dist/chunk-GBUVIGD5.js.map +0 -1
  478. package/dist/chunk-HZ4MBUC3.js.map +0 -1
  479. package/dist/chunk-JBIGSP2T.js.map +0 -1
  480. package/dist/chunk-JEIW7BSV.cjs.map +0 -1
  481. package/dist/chunk-KRU6IGV7.js.map +0 -1
  482. package/dist/chunk-LHBWRMNC.cjs.map +0 -1
  483. package/dist/chunk-MLAWXPRY.js.map +0 -1
  484. package/dist/chunk-P7UMS4E6.cjs.map +0 -1
  485. package/dist/chunk-QURJVPRH.cjs.map +0 -1
  486. package/dist/chunk-SVSHA7XV.js.map +0 -1
  487. package/dist/chunk-T4L7Q5FA.cjs.map +0 -1
  488. package/dist/chunk-UBSH27C2.js +0 -78
  489. package/dist/chunk-UBSH27C2.js.map +0 -1
  490. package/dist/chunk-VROIMIHB.cjs.map +0 -1
  491. package/dist/chunk-X4LBUPJO.cjs.map +0 -1
  492. package/dist/chunk-YVPC65ZJ.cjs.map +0 -1
  493. package/dist/chunk-ZTMYKAVU.cjs.map +0 -1
@@ -0,0 +1,318 @@
1
+ 'use strict';
2
+
3
+ var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
4
+ var React = require('react');
5
+ var classVarianceAuthority = require('class-variance-authority');
6
+ var lucideReact = require('lucide-react');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
+
29
+ var defaultLogoUploaderLabels = {
30
+ upload: "Upload logo",
31
+ replace: "Replace logo",
32
+ remove: "Remove logo",
33
+ dropHint: "Drop an image or click to browse",
34
+ uploading: "Uploading\u2026",
35
+ removing: "Removing\u2026",
36
+ invalidType: "That file type is not supported.",
37
+ tooLarge: (maxBytes) => `Files must be ${formatBytes(maxBytes)} or smaller.`,
38
+ uploadFailed: "Upload failed. Try again.",
39
+ removeFailed: "Could not remove the logo. Try again.",
40
+ previewAlt: "Current logo"
41
+ };
42
+ function formatBytes(bytes) {
43
+ if (bytes < 1024) return `${bytes} B`;
44
+ const kb = bytes / 1024;
45
+ if (kb < 1024) return `${Math.round(kb)} KB`;
46
+ return `${Math.round(kb / 1024 * 10) / 10} MB`;
47
+ }
48
+ function safeImageSrc(url) {
49
+ const trimmed = url?.trim();
50
+ if (!trimmed) return null;
51
+ const scheme = /^([a-z][a-z\d+.-]*):/i.exec(trimmed)?.[1].toLowerCase();
52
+ if (!scheme || ["http", "https", "blob"].includes(scheme)) return trimmed;
53
+ return /^data:image\//i.test(trimmed) ? trimmed : null;
54
+ }
55
+ function matchesAccept(file, accept) {
56
+ return accept.split(",").map((token) => token.trim().toLowerCase()).some((token) => {
57
+ if (!token) return false;
58
+ if (token.startsWith(".")) return file.name.toLowerCase().endsWith(token);
59
+ if (token.endsWith("/*")) return file.type.startsWith(token.slice(0, -1));
60
+ return file.type === token;
61
+ });
62
+ }
63
+ function FilePreview({ file, alt }) {
64
+ const canvasRef = React__namespace.useRef(null);
65
+ React__namespace.useEffect(() => {
66
+ if (typeof globalThis.createImageBitmap !== "function") return;
67
+ let cancelled = false;
68
+ globalThis.createImageBitmap(file).then((bitmap) => {
69
+ const canvas = canvasRef.current;
70
+ if (!cancelled && canvas) {
71
+ canvas.width = bitmap.width;
72
+ canvas.height = bitmap.height;
73
+ canvas.getContext("2d")?.drawImage(bitmap, 0, 0);
74
+ }
75
+ bitmap.close();
76
+ }).catch(() => {
77
+ });
78
+ return () => {
79
+ cancelled = true;
80
+ };
81
+ }, [file]);
82
+ return /* @__PURE__ */ jsxRuntime.jsx(
83
+ "canvas",
84
+ {
85
+ ref: canvasRef,
86
+ role: "img",
87
+ "aria-label": alt,
88
+ className: "h-full w-full object-contain"
89
+ }
90
+ );
91
+ }
92
+ var targetVariants = classVarianceAuthority.cva(
93
+ [
94
+ "relative flex cursor-pointer items-center justify-center overflow-hidden border-2 border-dashed bg-muted/40 text-muted-foreground",
95
+ "transition-colors motion-reduce:transition-none hover:border-primary-500 hover:text-foreground",
96
+ "peer-focus-visible:ring-ring peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2",
97
+ "peer-disabled:cursor-not-allowed peer-disabled:opacity-50"
98
+ ],
99
+ {
100
+ variants: {
101
+ shape: { square: "rounded-lg", circle: "rounded-full" },
102
+ size: { sm: "h-16 w-16", md: "h-24 w-24", lg: "h-32 w-32" },
103
+ dragging: {
104
+ true: "border-primary-500 bg-primary-500/10",
105
+ false: "border-border"
106
+ },
107
+ filled: { true: "border-solid bg-card", false: "" }
108
+ },
109
+ defaultVariants: {
110
+ shape: "square",
111
+ size: "md",
112
+ dragging: false,
113
+ filled: false
114
+ }
115
+ }
116
+ );
117
+ var LogoUploader = React__namespace.forwardRef(
118
+ function LogoUploader2({
119
+ value,
120
+ onUpload,
121
+ onRemove,
122
+ accept = "image/*",
123
+ maxSizeBytes,
124
+ disabled,
125
+ shape,
126
+ size,
127
+ labels: labelOverrides,
128
+ className,
129
+ ...props
130
+ }, ref) {
131
+ const labels = { ...defaultLogoUploaderLabels, ...labelOverrides };
132
+ const [busy, setBusy] = React__namespace.useState(
133
+ null
134
+ );
135
+ const [preview, setPreview] = React__namespace.useState(null);
136
+ const [localFile, setLocalFile] = React__namespace.useState(null);
137
+ const [error, setError] = React__namespace.useState(null);
138
+ const [dragging, setDragging] = React__namespace.useState(false);
139
+ const inputRef = React__namespace.useRef(null);
140
+ const generation = React__namespace.useRef(0);
141
+ const id = React__namespace.useId();
142
+ const inputId = `${id}-input`;
143
+ const errorId = `${id}-error`;
144
+ React__namespace.useEffect(() => {
145
+ generation.current += 1;
146
+ setPreview(null);
147
+ setLocalFile(null);
148
+ }, [value]);
149
+ const shown = localFile ? null : safeImageSrc(preview ?? value);
150
+ const filled = !!localFile || !!shown;
151
+ const inactive = disabled || busy !== null;
152
+ const refocusInput = React__namespace.useRef(false);
153
+ React__namespace.useEffect(() => {
154
+ if (busy === null && refocusInput.current) {
155
+ refocusInput.current = false;
156
+ inputRef.current?.focus();
157
+ }
158
+ }, [busy]);
159
+ const handleFile = async (file) => {
160
+ if (!file || inactive) return;
161
+ if (!matchesAccept(file, accept)) return setError(labels.invalidType);
162
+ if (maxSizeBytes !== void 0 && file.size > maxSizeBytes) {
163
+ return setError(labels.tooLarge(maxSizeBytes));
164
+ }
165
+ setError(null);
166
+ const request = ++generation.current;
167
+ setPreview(null);
168
+ setLocalFile(file);
169
+ setBusy("uploading");
170
+ try {
171
+ const url = await onUpload(file);
172
+ if (url && request === generation.current) {
173
+ setLocalFile(null);
174
+ setPreview(url);
175
+ }
176
+ } catch {
177
+ if (request === generation.current) {
178
+ setLocalFile(null);
179
+ setError(labels.uploadFailed);
180
+ }
181
+ } finally {
182
+ setBusy(null);
183
+ }
184
+ };
185
+ const handleRemove = async () => {
186
+ if (!onRemove || inactive) return;
187
+ setError(null);
188
+ setBusy("removing");
189
+ try {
190
+ await onRemove();
191
+ setPreview(null);
192
+ setLocalFile(null);
193
+ } catch {
194
+ setError(labels.removeFailed);
195
+ } finally {
196
+ refocusInput.current = true;
197
+ setBusy(null);
198
+ }
199
+ };
200
+ return /* @__PURE__ */ jsxRuntime.jsxs(
201
+ "div",
202
+ {
203
+ ref,
204
+ "data-slot": "logo-uploader",
205
+ "aria-busy": busy !== null || void 0,
206
+ className: chunkS5RVSXDV_cjs.cn("inline-flex flex-col items-start gap-2", className),
207
+ ...props,
208
+ children: [
209
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
210
+ /* @__PURE__ */ jsxRuntime.jsx(
211
+ "input",
212
+ {
213
+ ref: inputRef,
214
+ id: inputId,
215
+ type: "file",
216
+ accept,
217
+ disabled: inactive,
218
+ "aria-label": filled ? labels.replace : labels.upload,
219
+ "aria-describedby": error ? errorId : void 0,
220
+ "aria-invalid": error ? true : void 0,
221
+ onChange: (e) => {
222
+ void handleFile(e.target.files?.[0]);
223
+ e.target.value = "";
224
+ },
225
+ className: "peer sr-only"
226
+ }
227
+ ),
228
+ /* @__PURE__ */ jsxRuntime.jsxs(
229
+ "label",
230
+ {
231
+ htmlFor: inputId,
232
+ "data-slot": "logo-uploader-target",
233
+ onDragOver: (e) => {
234
+ e.preventDefault();
235
+ if (!inactive) setDragging(true);
236
+ },
237
+ onDragLeave: () => setDragging(false),
238
+ onDrop: (e) => {
239
+ e.preventDefault();
240
+ setDragging(false);
241
+ void handleFile(e.dataTransfer.files?.[0]);
242
+ },
243
+ className: targetVariants({
244
+ shape,
245
+ size,
246
+ dragging,
247
+ filled
248
+ }),
249
+ children: [
250
+ localFile ? /* @__PURE__ */ jsxRuntime.jsx(FilePreview, { file: localFile, alt: labels.previewAlt }) : shown ? /* @__PURE__ */ jsxRuntime.jsx(
251
+ "img",
252
+ {
253
+ src: shown,
254
+ alt: labels.previewAlt,
255
+ className: "h-full w-full object-contain"
256
+ }
257
+ ) : /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-col items-center gap-1 px-2 text-center text-xs", children: [
258
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ImagePlus, { "aria-hidden": "true", className: "h-5 w-5" }),
259
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: labels.dropHint })
260
+ ] }),
261
+ busy && /* @__PURE__ */ jsxRuntime.jsxs(
262
+ "span",
263
+ {
264
+ role: "status",
265
+ className: "bg-background/70 absolute inset-0 flex items-center justify-center",
266
+ children: [
267
+ /* @__PURE__ */ jsxRuntime.jsx(
268
+ lucideReact.Loader2,
269
+ {
270
+ "aria-hidden": "true",
271
+ className: "text-foreground h-5 w-5 animate-spin motion-reduce:animate-none"
272
+ }
273
+ ),
274
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: busy === "uploading" ? labels.uploading : labels.removing })
275
+ ]
276
+ }
277
+ )
278
+ ]
279
+ }
280
+ ),
281
+ filled && onRemove && /* @__PURE__ */ jsxRuntime.jsx(
282
+ "button",
283
+ {
284
+ type: "button",
285
+ "aria-label": labels.remove,
286
+ title: labels.remove,
287
+ disabled: inactive,
288
+ onClick: () => void handleRemove(),
289
+ className: chunkS5RVSXDV_cjs.cn(
290
+ "border-border bg-card text-muted-foreground absolute -end-2 -top-2 rounded-full border p-1 shadow-sm",
291
+ "hover:text-destructive focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none",
292
+ "disabled:cursor-not-allowed disabled:opacity-50"
293
+ ),
294
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { "aria-hidden": "true", className: "h-3.5 w-3.5" })
295
+ }
296
+ )
297
+ ] }),
298
+ error && /* @__PURE__ */ jsxRuntime.jsx(
299
+ "p",
300
+ {
301
+ id: errorId,
302
+ role: "alert",
303
+ "data-slot": "logo-uploader-error",
304
+ className: "text-destructive-700 dark:text-destructive-400 text-sm",
305
+ children: error
306
+ }
307
+ )
308
+ ]
309
+ }
310
+ );
311
+ }
312
+ );
313
+ LogoUploader.displayName = "LogoUploader";
314
+
315
+ exports.LogoUploader = LogoUploader;
316
+ exports.defaultLogoUploaderLabels = defaultLogoUploaderLabels;
317
+ //# sourceMappingURL=chunk-FSGJXCBG.cjs.map
318
+ //# sourceMappingURL=chunk-FSGJXCBG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/LogoUploader/LogoUploader.tsx"],"names":["React","jsx","cva","LogoUploader","jsxs","cn","ImagePlus","Loader2","Trash2"],"mappings":"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","file":"chunk-FSGJXCBG.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { ImagePlus, Loader2, Trash2 } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface LogoUploaderLabels {\n /** Accessible name of the file input. */\n upload: string;\n replace: string;\n remove: string;\n /** Text inside the empty drop target. */\n dropHint: string;\n uploading: string;\n removing: string;\n invalidType: string;\n tooLarge: (maxBytes: number) => string;\n uploadFailed: string;\n removeFailed: string;\n /** Alt text of the preview image. */\n previewAlt: string;\n}\n\nexport const defaultLogoUploaderLabels: LogoUploaderLabels = {\n upload: 'Upload logo',\n replace: 'Replace logo',\n remove: 'Remove logo',\n dropHint: 'Drop an image or click to browse',\n uploading: 'Uploading…',\n removing: 'Removing…',\n invalidType: 'That file type is not supported.',\n tooLarge: (maxBytes) => `Files must be ${formatBytes(maxBytes)} or smaller.`,\n uploadFailed: 'Upload failed. Try again.',\n removeFailed: 'Could not remove the logo. Try again.',\n previewAlt: 'Current logo',\n};\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n const kb = bytes / 1024;\n if (kb < 1024) return `${Math.round(kb)} KB`;\n return `${Math.round((kb / 1024) * 10) / 10} MB`;\n}\n\n/** Relative URLs, http(s), blob: and data:image/ only — nothing else reaches `<img src>`. */\nfunction safeImageSrc(url: string | null | undefined): string | null {\n const trimmed = url?.trim();\n if (!trimmed) return null;\n const scheme = /^([a-z][a-z\\d+.-]*):/i.exec(trimmed)?.[1].toLowerCase();\n if (!scheme || ['http', 'https', 'blob'].includes(scheme)) return trimmed;\n return /^data:image\\//i.test(trimmed) ? trimmed : null;\n}\n\n/** True when `file` matches an `accept` attribute value. */\nfunction matchesAccept(file: File, accept: string): boolean {\n return accept\n .split(',')\n .map((token) => token.trim().toLowerCase())\n .some((token) => {\n if (!token) return false;\n if (token.startsWith('.')) return file.name.toLowerCase().endsWith(token);\n if (token.endsWith('/*')) return file.type.startsWith(token.slice(0, -1));\n return file.type === token;\n });\n}\n\n/**\n * Local preview of a picked file. Drawn to a canvas so the file never becomes\n * an `<img src>` string (no object URL to sanitize or revoke).\n */\nfunction FilePreview({ file, alt }: { file: File; alt: string }) {\n const canvasRef = React.useRef<HTMLCanvasElement>(null);\n React.useEffect(() => {\n // Without the API (older engines, jsdom) the target keeps its spinner,\n // same as an undecodable image.\n if (typeof globalThis.createImageBitmap !== 'function') return;\n let cancelled = false;\n globalThis\n .createImageBitmap(file)\n .then((bitmap) => {\n const canvas = canvasRef.current;\n if (!cancelled && canvas) {\n canvas.width = bitmap.width;\n canvas.height = bitmap.height;\n canvas.getContext('2d')?.drawImage(bitmap, 0, 0);\n }\n bitmap.close();\n })\n .catch(() => {\n // Undecodable image: the target keeps its border and spinner.\n });\n return () => {\n cancelled = true;\n };\n }, [file]);\n return (\n <canvas\n ref={canvasRef}\n role=\"img\"\n aria-label={alt}\n className=\"h-full w-full object-contain\"\n />\n );\n}\n\nconst targetVariants = cva(\n [\n 'relative flex cursor-pointer items-center justify-center overflow-hidden border-2 border-dashed bg-muted/40 text-muted-foreground',\n 'transition-colors motion-reduce:transition-none hover:border-primary-500 hover:text-foreground',\n 'peer-focus-visible:ring-ring peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2',\n 'peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n ],\n {\n variants: {\n shape: { square: 'rounded-lg', circle: 'rounded-full' },\n size: { sm: 'h-16 w-16', md: 'h-24 w-24', lg: 'h-32 w-32' },\n dragging: {\n true: 'border-primary-500 bg-primary-500/10',\n false: 'border-border',\n },\n filled: { true: 'border-solid bg-card', false: '' },\n },\n defaultVariants: {\n shape: 'square',\n size: 'md',\n dragging: false,\n filled: false,\n },\n }\n);\n\nexport interface LogoUploaderProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>,\n Pick<VariantProps<typeof targetVariants>, 'shape' | 'size'> {\n /** URL of the current logo. */\n value?: string | null;\n /** Upload the file. Resolve with the new URL to preview it until `value` updates. */\n onUpload: (file: File) => Promise<string | void>;\n /** Remove the logo. Omit to hide the remove button. */\n onRemove?: () => void | Promise<void>;\n /** `accept` attribute for the file input. */\n accept?: string;\n /** Reject files larger than this. */\n maxSizeBytes?: number;\n disabled?: boolean;\n /** Translatable strings. */\n labels?: Partial<LogoUploaderLabels>;\n}\n\n/**\n * Square or circular logo drop target with click-to-browse, preview and\n * remove.\n */\nexport const LogoUploader = React.forwardRef<HTMLDivElement, LogoUploaderProps>(\n function LogoUploader(\n {\n value,\n onUpload,\n onRemove,\n accept = 'image/*',\n maxSizeBytes,\n disabled,\n shape,\n size,\n labels: labelOverrides,\n className,\n ...props\n },\n ref\n ) {\n const labels = { ...defaultLogoUploaderLabels, ...labelOverrides };\n const [busy, setBusy] = React.useState<'uploading' | 'removing' | null>(\n null\n );\n const [preview, setPreview] = React.useState<string | null>(null);\n const [localFile, setLocalFile] = React.useState<File | null>(null);\n const [error, setError] = React.useState<string | null>(null);\n const [dragging, setDragging] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement>(null);\n // Bumped by each upload and each new `value`; stale uploads check it.\n const generation = React.useRef(0);\n const id = React.useId();\n const inputId = `${id}-input`;\n const errorId = `${id}-error`;\n\n // A fresh `value` from the caller supersedes any local preview.\n React.useEffect(() => {\n generation.current += 1;\n setPreview(null);\n setLocalFile(null);\n }, [value]);\n\n const shown = localFile ? null : safeImageSrc(preview ?? value);\n const filled = !!localFile || !!shown;\n const inactive = disabled || busy !== null;\n\n // The input is disabled while busy, so focus it once it re-enables.\n const refocusInput = React.useRef(false);\n React.useEffect(() => {\n if (busy === null && refocusInput.current) {\n refocusInput.current = false;\n inputRef.current?.focus();\n }\n }, [busy]);\n\n const handleFile = async (file: File | undefined) => {\n if (!file || inactive) return;\n if (!matchesAccept(file, accept)) return setError(labels.invalidType);\n if (maxSizeBytes !== undefined && file.size > maxSizeBytes) {\n return setError(labels.tooLarge(maxSizeBytes));\n }\n setError(null);\n const request = ++generation.current;\n setPreview(null);\n setLocalFile(file);\n setBusy('uploading');\n try {\n const url = await onUpload(file);\n if (url && request === generation.current) {\n setLocalFile(null);\n setPreview(url);\n }\n } catch {\n if (request === generation.current) {\n setLocalFile(null);\n setError(labels.uploadFailed);\n }\n } finally {\n setBusy(null);\n }\n };\n\n const handleRemove = async () => {\n if (!onRemove || inactive) return;\n setError(null);\n setBusy('removing');\n try {\n await onRemove();\n setPreview(null);\n setLocalFile(null);\n } catch {\n setError(labels.removeFailed);\n } finally {\n refocusInput.current = true;\n setBusy(null);\n }\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"logo-uploader\"\n aria-busy={busy !== null || undefined}\n className={cn('inline-flex flex-col items-start gap-2', className)}\n {...props}\n >\n <div className=\"relative\">\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n accept={accept}\n disabled={inactive}\n aria-label={filled ? labels.replace : labels.upload}\n aria-describedby={error ? errorId : undefined}\n aria-invalid={error ? true : undefined}\n onChange={(e) => {\n void handleFile(e.target.files?.[0]);\n e.target.value = '';\n }}\n className=\"peer sr-only\"\n />\n <label\n htmlFor={inputId}\n data-slot=\"logo-uploader-target\"\n onDragOver={(e) => {\n e.preventDefault();\n if (!inactive) setDragging(true);\n }}\n onDragLeave={() => setDragging(false)}\n onDrop={(e) => {\n e.preventDefault();\n setDragging(false);\n void handleFile(e.dataTransfer.files?.[0]);\n }}\n className={targetVariants({\n shape,\n size,\n dragging,\n filled,\n })}\n >\n {localFile ? (\n <FilePreview file={localFile} alt={labels.previewAlt} />\n ) : shown ? (\n <img\n src={shown}\n alt={labels.previewAlt}\n className=\"h-full w-full object-contain\"\n />\n ) : (\n <span className=\"flex flex-col items-center gap-1 px-2 text-center text-xs\">\n <ImagePlus aria-hidden=\"true\" className=\"h-5 w-5\" />\n <span>{labels.dropHint}</span>\n </span>\n )}\n {busy && (\n <span\n role=\"status\"\n className=\"bg-background/70 absolute inset-0 flex items-center justify-center\"\n >\n <Loader2\n aria-hidden=\"true\"\n className=\"text-foreground h-5 w-5 animate-spin motion-reduce:animate-none\"\n />\n <span className=\"sr-only\">\n {busy === 'uploading' ? labels.uploading : labels.removing}\n </span>\n </span>\n )}\n </label>\n {filled && onRemove && (\n <button\n type=\"button\"\n aria-label={labels.remove}\n title={labels.remove}\n disabled={inactive}\n onClick={() => void handleRemove()}\n className={cn(\n 'border-border bg-card text-muted-foreground absolute -end-2 -top-2 rounded-full border p-1 shadow-sm',\n 'hover:text-destructive focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50'\n )}\n >\n <Trash2 aria-hidden=\"true\" className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n {error && (\n <p\n id={errorId}\n role=\"alert\"\n data-slot=\"logo-uploader-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n >\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nLogoUploader.displayName = 'LogoUploader';\n"]}
@@ -0,0 +1,29 @@
1
+ import * as React from 'react';
2
+
3
+ // src/components/ActivityFeed/usePendingOverrides.ts
4
+ function usePendingOverrides() {
5
+ const [overrides, setOverrides] = React.useState(
6
+ () => /* @__PURE__ */ new Map()
7
+ );
8
+ const run = React.useCallback(
9
+ async (id, value, action) => {
10
+ setOverrides((prev) => new Map(prev).set(id, value));
11
+ try {
12
+ await action();
13
+ } catch {
14
+ } finally {
15
+ setOverrides((prev) => {
16
+ const next = new Map(prev);
17
+ next.delete(id);
18
+ return next;
19
+ });
20
+ }
21
+ },
22
+ []
23
+ );
24
+ return [overrides, run];
25
+ }
26
+
27
+ export { usePendingOverrides };
28
+ //# sourceMappingURL=chunk-FTEZNCRI.js.map
29
+ //# sourceMappingURL=chunk-FTEZNCRI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ActivityFeed/usePendingOverrides.ts"],"names":[],"mappings":";;;AASO,SAAS,mBAAA,GAGd;AACA,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAU,KAAA,CAAA,QAAA;AAAA,IACtC,0BAAU,GAAA;AAAI,GAChB;AAEA,EAAA,MAAM,GAAA,GAAY,KAAA,CAAA,WAAA;AAAA,IAChB,OAAO,EAAA,EAAY,KAAA,EAAU,MAAA,KAAuC;AAClE,MAAA,YAAA,CAAa,CAAC,SAAS,IAAI,GAAA,CAAI,IAAI,CAAA,CAAE,GAAA,CAAI,EAAA,EAAI,KAAK,CAAC,CAAA;AACnD,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,EAAO;AAAA,MACf,CAAA,CAAA,MAAQ;AAAA,MAER,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,CAAC,IAAA,KAAS;AACrB,UAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,UAAA,IAAA,CAAK,OAAO,EAAE,CAAA;AACd,UAAA,OAAO,IAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO,CAAC,WAAW,GAAG,CAAA;AACxB","file":"chunk-FTEZNCRI.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\n\n/**\n * Optimistic per-id state for async callbacks: `run` sets an override, awaits\n * the action, then drops it — on success the caller's props take over, on\n * rejection the previous value shows again. Surfacing the error is the caller's job.\n */\nexport function usePendingOverrides<V>(): [\n ReadonlyMap<string, V>,\n (id: string, value: V, action: () => void | Promise<void>) => Promise<void>,\n] {\n const [overrides, setOverrides] = React.useState<ReadonlyMap<string, V>>(\n () => new Map()\n );\n\n const run = React.useCallback(\n async (id: string, value: V, action: () => void | Promise<void>) => {\n setOverrides((prev) => new Map(prev).set(id, value));\n try {\n await action();\n } catch {\n // Restored below; the caller owns error reporting.\n } finally {\n setOverrides((prev) => {\n const next = new Map(prev);\n next.delete(id);\n return next;\n });\n }\n },\n []\n );\n\n return [overrides, run];\n}\n"]}
@@ -13,5 +13,5 @@ var brands = {
13
13
  };
14
14
 
15
15
  exports.brands = brands;
16
- //# sourceMappingURL=chunk-COM7RNZU.cjs.map
17
- //# sourceMappingURL=chunk-COM7RNZU.cjs.map
16
+ //# sourceMappingURL=chunk-FYQZWLAM.cjs.map
17
+ //# sourceMappingURL=chunk-FYQZWLAM.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/brands/index.ts"],"names":[],"mappings":";;;AAkCO,IAAM,MAAA,GAAS;AAAA,EACpB,QAAA,EAAU,MAAM,OAAO,uBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAAA,EAChE,IAAA,EAAM,MAAM,OAAO,mBAAQ,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA;AAAA,EACpD,OAAA,EAAS,MAAM,OAAO,wBAAW,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,CAAA;AAAA,EAC7D,mBAAA,EAAqB,MACnB,OAAO,kCAAqB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,qBAAqB,CAAA;AAAA,EACnE,MAAA,EAAQ,MAAM,OAAO,uBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,MAAA,EAAQ,MAAM,OAAO,qBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,UAAA,EAAY,MAAM,OAAO,2BAAc,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAAA,EACtE,QAAA,EAAU,MAAM,OAAO,yBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa;AAClE","file":"chunk-COM7RNZU.cjs","sourcesContent":["/**\n * @mieweb/ui Brand System\n *\n * Export all brand-related types, utilities, and configurations.\n */\n\n// Types and utilities\nexport type {\n BrandConfig,\n BrandColors,\n BrandTypography,\n BrandBorderRadius,\n BrandBoxShadow,\n ColorScale,\n SemanticColors,\n} from './types';\n\nexport {\n generateBrandCSS,\n generateTailwindTheme,\n createBrandPreset,\n} from './types';\n\n// Brand configurations\nexport { bluehiveBrand } from './bluehive';\nexport { ccmeBrand } from './ccme';\nexport { defaultBrand } from './default';\nexport { enterpriseHealthBrand } from './enterprise-health';\nexport { miewebBrand } from './mieweb';\nexport { ozwellBrand } from './ozwell';\nexport { wagglelineBrand } from './waggleline';\nexport { webchartBrand } from './webchart';\n\n// All brands for iteration\nexport const brands = {\n bluehive: () => import('./bluehive').then((m) => m.bluehiveBrand),\n ccme: () => import('./ccme').then((m) => m.ccmeBrand),\n default: () => import('./default').then((m) => m.defaultBrand),\n 'enterprise-health': () =>\n import('./enterprise-health').then((m) => m.enterpriseHealthBrand),\n mieweb: () => import('./mieweb').then((m) => m.miewebBrand),\n ozwell: () => import('./ozwell').then((m) => m.ozwellBrand),\n waggleline: () => import('./waggleline').then((m) => m.wagglelineBrand),\n webchart: () => import('./webchart').then((m) => m.webchartBrand),\n} as const;\n"]}
1
+ {"version":3,"sources":["../src/brands/index.ts"],"names":[],"mappings":";;;AAkCO,IAAM,MAAA,GAAS;AAAA,EACpB,QAAA,EAAU,MAAM,OAAO,uBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAAA,EAChE,IAAA,EAAM,MAAM,OAAO,mBAAQ,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA;AAAA,EACpD,OAAA,EAAS,MAAM,OAAO,wBAAW,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,CAAA;AAAA,EAC7D,mBAAA,EAAqB,MACnB,OAAO,kCAAqB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,qBAAqB,CAAA;AAAA,EACnE,MAAA,EAAQ,MAAM,OAAO,uBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,MAAA,EAAQ,MAAM,OAAO,qBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,UAAA,EAAY,MAAM,OAAO,2BAAc,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAAA,EACtE,QAAA,EAAU,MAAM,OAAO,yBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa;AAClE","file":"chunk-FYQZWLAM.cjs","sourcesContent":["/**\n * @mieweb/ui Brand System\n *\n * Export all brand-related types, utilities, and configurations.\n */\n\n// Types and utilities\nexport type {\n BrandConfig,\n BrandColors,\n BrandTypography,\n BrandBorderRadius,\n BrandBoxShadow,\n ColorScale,\n SemanticColors,\n} from './types';\n\nexport {\n generateBrandCSS,\n generateTailwindTheme,\n createBrandPreset,\n} from './types';\n\n// Brand configurations\nexport { bluehiveBrand } from './bluehive';\nexport { ccmeBrand } from './ccme';\nexport { defaultBrand } from './default';\nexport { enterpriseHealthBrand } from './enterprise-health';\nexport { miewebBrand } from './mieweb';\nexport { ozwellBrand } from './ozwell';\nexport { wagglelineBrand } from './waggleline';\nexport { webchartBrand } from './webchart';\n\n// All brands for iteration\nexport const brands = {\n bluehive: () => import('./bluehive').then((m) => m.bluehiveBrand),\n ccme: () => import('./ccme').then((m) => m.ccmeBrand),\n default: () => import('./default').then((m) => m.defaultBrand),\n 'enterprise-health': () =>\n import('./enterprise-health').then((m) => m.enterpriseHealthBrand),\n mieweb: () => import('./mieweb').then((m) => m.miewebBrand),\n ozwell: () => import('./ozwell').then((m) => m.ozwellBrand),\n waggleline: () => import('./waggleline').then((m) => m.wagglelineBrand),\n webchart: () => import('./webchart').then((m) => m.webchartBrand),\n} as const;\n"]}
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var React2 = require('react');
3
+ var chunkCPDNX3LS_cjs = require('./chunk-CPDNX3LS.cjs');
4
+ var React = require('react');
4
5
 
5
6
  function _interopNamespace(e) {
6
7
  if (e && e.__esModule) return e;
@@ -20,27 +21,8 @@ function _interopNamespace(e) {
20
21
  return Object.freeze(n);
21
22
  }
22
23
 
23
- var React2__namespace = /*#__PURE__*/_interopNamespace(React2);
24
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
24
25
 
25
- // src/hooks/useLiveAnnouncement.ts
26
- function useLiveAnnouncement() {
27
- const [message, setMessage] = React2__namespace.useState("");
28
- const timerRef = React2__namespace.useRef(
29
- void 0
30
- );
31
- const announce = React2__namespace.useCallback((next) => {
32
- setMessage("");
33
- if (timerRef.current !== void 0) clearTimeout(timerRef.current);
34
- timerRef.current = setTimeout(() => setMessage(next), 50);
35
- }, []);
36
- React2__namespace.useEffect(
37
- () => () => {
38
- if (timerRef.current !== void 0) clearTimeout(timerRef.current);
39
- },
40
- []
41
- );
42
- return [message, announce];
43
- }
44
26
  function reorderIds(ids, draggedId, targetId, after) {
45
27
  if (draggedId === targetId) return ids;
46
28
  if (!ids.includes(draggedId)) return ids;
@@ -50,24 +32,90 @@ function reorderIds(ids, draggedId, targetId, after) {
50
32
  without.splice(after ? idx + 1 : idx, 0, draggedId);
51
33
  return without;
52
34
  }
35
+ function moveIdBy(ids, id, delta) {
36
+ const from = ids.indexOf(id);
37
+ if (from === -1) return ids;
38
+ const to = Math.max(0, Math.min(ids.length - 1, from + delta));
39
+ if (to === from) return ids;
40
+ const next = ids.filter((i) => i !== id);
41
+ next.splice(to, 0, id);
42
+ return next;
43
+ }
44
+ var DEFAULT_DRAG_REORDER_LABELS = {
45
+ moveUp: "Move up",
46
+ moveDown: "Move down",
47
+ moved: (position, total) => `Moved to position ${position} of ${total}`
48
+ };
53
49
  function useDragReorder({
54
50
  ids,
55
51
  onReorder,
56
- canDropOn
52
+ canDropOn,
53
+ keyboard = false,
54
+ announce,
55
+ getDragPreview,
56
+ labels: labelsProp
57
57
  }) {
58
- const [draggingId, setDraggingId] = React2__namespace.useState(null);
59
- const draggingRef = React2__namespace.useRef(null);
60
- const [over, setOver] = React2__namespace.useState(null);
58
+ const labels = { ...DEFAULT_DRAG_REORDER_LABELS, ...labelsProp };
59
+ const [announcement, announceLive] = chunkCPDNX3LS_cjs.useLiveAnnouncement();
60
+ const [draggingId, setDraggingId] = React__namespace.useState(null);
61
+ const draggingRef = React__namespace.useRef(null);
62
+ const [over, setOver] = React__namespace.useState(null);
61
63
  const enabled = Boolean(onReorder);
62
- const reset = React2__namespace.useCallback(() => {
64
+ const reset = React__namespace.useCallback(() => {
63
65
  draggingRef.current = null;
64
66
  setDraggingId(null);
65
67
  setOver(null);
66
68
  }, []);
67
- const rowProps = React2__namespace.useCallback(
69
+ const reachable = (id, delta) => {
70
+ const from = ids.indexOf(id);
71
+ if (!enabled || from === -1) return 0;
72
+ const step = Math.sign(delta);
73
+ let reach = 0;
74
+ while (reach !== delta) {
75
+ const t = from + reach + step;
76
+ if (t < 0 || t >= ids.length || canDropOn && !canDropOn(id, ids[t]))
77
+ break;
78
+ reach += step;
79
+ }
80
+ return reach;
81
+ };
82
+ const moveBy = (id, delta) => {
83
+ const next = moveIdBy(ids, id, reachable(id, delta));
84
+ if (next === ids) return;
85
+ onReorder?.(next);
86
+ const message = labels.moved(next.indexOf(id) + 1, next.length, id);
87
+ if (announce) announce(message);
88
+ else announceLive(message);
89
+ };
90
+ const moveButtonProps = (id, direction, label) => {
91
+ const delta = direction === "up" ? -1 : 1;
92
+ return {
93
+ type: "button",
94
+ onClick: (e) => {
95
+ e.stopPropagation();
96
+ moveBy(id, delta);
97
+ },
98
+ disabled: reachable(id, delta) === 0,
99
+ "aria-label": label ?? (direction === "up" ? labels.moveUp : labels.moveDown)
100
+ };
101
+ };
102
+ const moveByRef = React__namespace.useRef(moveBy);
103
+ moveByRef.current = moveBy;
104
+ const rowProps = React__namespace.useCallback(
68
105
  (id) => {
69
106
  if (!enabled) return {};
107
+ const keyProps = keyboard ? {
108
+ tabIndex: 0,
109
+ "aria-keyshortcuts": "Alt+ArrowUp Alt+ArrowDown",
110
+ onKeyDown: (e) => {
111
+ if (e.target !== e.currentTarget || !e.altKey) return;
112
+ if (e.key !== "ArrowUp" && e.key !== "ArrowDown") return;
113
+ e.preventDefault();
114
+ moveByRef.current(id, e.key === "ArrowUp" ? -1 : 1);
115
+ }
116
+ } : {};
70
117
  return {
118
+ ...keyProps,
71
119
  draggable: true,
72
120
  // WebKit (iPadOS Safari, incl. remote-pointer sessions) starts a text
73
121
  // selection instead of a drag when the drag source contains selectable
@@ -81,6 +129,8 @@ function useDragReorder({
81
129
  onDragStart: (e) => {
82
130
  e.dataTransfer.effectAllowed = "move";
83
131
  e.dataTransfer.setData("text/plain", id);
132
+ const preview = getDragPreview?.(id);
133
+ if (preview) e.dataTransfer.setDragImage(preview, 0, 0);
84
134
  draggingRef.current = id;
85
135
  setDraggingId(id);
86
136
  },
@@ -114,9 +164,17 @@ function useDragReorder({
114
164
  }
115
165
  };
116
166
  },
117
- [enabled, ids, onReorder, canDropOn, reset]
167
+ [enabled, keyboard, ids, onReorder, canDropOn, getDragPreview, reset]
118
168
  );
119
- return { enabled, draggingId, over, rowProps };
169
+ return {
170
+ enabled,
171
+ draggingId,
172
+ over,
173
+ rowProps,
174
+ moveBy,
175
+ moveButtonProps,
176
+ announcement: announce ? "" : announcement
177
+ };
120
178
  }
121
179
  function dragIndicatorClasses(drag, id) {
122
180
  return [
@@ -126,9 +184,10 @@ function dragIndicatorClasses(drag, id) {
126
184
  ].filter(Boolean).join(" ");
127
185
  }
128
186
 
187
+ exports.DEFAULT_DRAG_REORDER_LABELS = DEFAULT_DRAG_REORDER_LABELS;
129
188
  exports.dragIndicatorClasses = dragIndicatorClasses;
189
+ exports.moveIdBy = moveIdBy;
130
190
  exports.reorderIds = reorderIds;
131
191
  exports.useDragReorder = useDragReorder;
132
- exports.useLiveAnnouncement = useLiveAnnouncement;
133
- //# sourceMappingURL=chunk-YVPC65ZJ.cjs.map
134
- //# sourceMappingURL=chunk-YVPC65ZJ.cjs.map
192
+ //# sourceMappingURL=chunk-GF2BE4FB.cjs.map
193
+ //# sourceMappingURL=chunk-GF2BE4FB.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useDragReorder.ts"],"names":["useLiveAnnouncement","React"],"mappings":"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","file":"chunk-GF2BE4FB.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport { useLiveAnnouncement } from './useLiveAnnouncement';\n\n/** Insert `draggedId` before/after `targetId` in `ids`. */\nexport function reorderIds(\n ids: string[],\n draggedId: string,\n targetId: string,\n after: boolean\n): string[] {\n if (draggedId === targetId) return ids;\n // Ignore drags that originate outside this list (stale payloads would\n // otherwise be inserted as unknown ids).\n if (!ids.includes(draggedId)) return ids;\n const without = ids.filter((i) => i !== draggedId);\n const idx = without.indexOf(targetId);\n if (idx === -1) return ids;\n without.splice(after ? idx + 1 : idx, 0, draggedId);\n return without;\n}\n\n/** Move `id` by `delta` positions (clamped). Returns `ids` unchanged when it can't move. */\nexport function moveIdBy(ids: string[], id: string, delta: number): string[] {\n const from = ids.indexOf(id);\n if (from === -1) return ids;\n const to = Math.max(0, Math.min(ids.length - 1, from + delta));\n if (to === from) return ids;\n const next = ids.filter((i) => i !== id);\n next.splice(to, 0, id);\n return next;\n}\n\nexport interface DragReorderLabels {\n moveUp: string;\n moveDown: string;\n /** Announced after a keyboard/button move */\n moved: (position: number, total: number, id: string) => string;\n}\n\nexport const DEFAULT_DRAG_REORDER_LABELS: DragReorderLabels = {\n moveUp: 'Move up',\n moveDown: 'Move down',\n moved: (position, total) => `Moved to position ${position} of ${total}`,\n};\n\nexport interface UseDragReorderOptions {\n /** Current flat order of item ids (props order) */\n ids: string[];\n /** Called with the full new id order after a drop or move. Omit to disable reordering. */\n onReorder?: (ids: string[]) => void;\n /** Restrict drops, e.g. to the same status group */\n canDropOn?: (draggedId: string, targetId: string) => boolean;\n /** Add Alt+ArrowUp / Alt+ArrowDown handling (and `tabIndex={0}`) to `rowProps`. Off by default so rows with their own `onKeyDown` keep working. */\n keyboard?: boolean;\n /** Receives move announcements instead of the returned `announcement` string. */\n announce?: (message: string) => void;\n /** Element rendered as the drag image (`dataTransfer.setDragImage`). */\n getDragPreview?: (id: string) => Element | null;\n labels?: Partial<DragReorderLabels>;\n}\n\nexport interface DragOverState {\n id: string;\n /** Drop indicator position relative to the hovered row */\n after: boolean;\n}\n\nexport interface UseDragReorderReturn {\n /** Whether drag reordering is active (onReorder provided) */\n enabled: boolean;\n /** Id currently being dragged, if any */\n draggingId: string | null;\n /** Row currently hovered as a drop target */\n over: DragOverState | null;\n /** Spread onto each row element (must be keyed by a stable id) */\n rowProps: (id: string) => React.HTMLAttributes<HTMLElement>;\n /** Move an item by `delta` positions; no-op at the ends or across `canDropOn` boundaries. */\n moveBy: (id: string, delta: number) => void;\n /** Props for a visible move button */\n moveButtonProps: (\n id: string,\n direction: 'up' | 'down',\n label?: string\n ) => {\n type: 'button';\n onClick: (e: React.MouseEvent) => void;\n disabled: boolean;\n 'aria-label': string;\n };\n /** Latest move message; render in an `aria-live=\"polite\"` region (empty when `announce` is given). */\n announcement: string;\n}\n\n/**\n * HTML5 drag-and-drop list reordering. Rows spread `rowProps(id)`; on drop the\n * hook computes the full new id order and reports it via `onReorder` — the\n * consumer persists it (e.g. on the encounter/patient object) and feeds the\n * list back in props order.\n *\n * Drag-and-drop is pointer-only, so pair it with `moveButtonProps` buttons\n * and/or `keyboard: true` (Alt+↑/↓ on focused rows), and render\n * `announcement` in a polite live region.\n *\n * @example\n * ```tsx\n * const drag = useDragReorder({ ids: items.map((i) => i.id), onReorder, keyboard: true });\n * // <li {...drag.rowProps(item.id)} className={cn(dragIndicatorClasses(drag, item.id))}>\n * // <button {...drag.moveButtonProps(item.id, 'up')}><ChevronUp /></button>\n * // <div aria-live=\"polite\" className=\"sr-only\">{drag.announcement}</div>\n * ```\n */\nexport function useDragReorder({\n ids,\n onReorder,\n canDropOn,\n keyboard = false,\n announce,\n getDragPreview,\n labels: labelsProp,\n}: UseDragReorderOptions): UseDragReorderReturn {\n const labels = { ...DEFAULT_DRAG_REORDER_LABELS, ...labelsProp };\n const [announcement, announceLive] = useLiveAnnouncement();\n const [draggingId, setDraggingId] = React.useState<string | null>(null);\n // dragover can fire before the dragstart state update is visible, so the\n // authoritative dragged id lives in a ref (set synchronously)\n const draggingRef = React.useRef<string | null>(null);\n const [over, setOver] = React.useState<DragOverState | null>(null);\n const enabled = Boolean(onReorder);\n\n const reset = React.useCallback(() => {\n draggingRef.current = null;\n setDraggingId(null);\n setOver(null);\n }, []);\n\n /** How far `id` can move toward `delta`: stops at the ends or the first slot canDropOn rejects. */\n const reachable = (id: string, delta: number): number => {\n const from = ids.indexOf(id);\n if (!enabled || from === -1) return 0;\n const step = Math.sign(delta);\n let reach = 0;\n while (reach !== delta) {\n const t = from + reach + step;\n if (t < 0 || t >= ids.length || (canDropOn && !canDropOn(id, ids[t])))\n break;\n reach += step;\n }\n return reach;\n };\n\n const moveBy = (id: string, delta: number) => {\n const next = moveIdBy(ids, id, reachable(id, delta));\n if (next === ids) return;\n onReorder?.(next);\n const message = labels.moved(next.indexOf(id) + 1, next.length, id);\n if (announce) announce(message);\n else announceLive(message);\n };\n\n const moveButtonProps: UseDragReorderReturn['moveButtonProps'] = (\n id,\n direction,\n label\n ) => {\n const delta = direction === 'up' ? -1 : 1;\n return {\n type: 'button',\n onClick: (e) => {\n e.stopPropagation();\n moveBy(id, delta);\n },\n disabled: reachable(id, delta) === 0,\n 'aria-label':\n label ?? (direction === 'up' ? labels.moveUp : labels.moveDown),\n };\n };\n\n const moveByRef = React.useRef(moveBy);\n moveByRef.current = moveBy;\n\n const rowProps = React.useCallback(\n (id: string): React.HTMLAttributes<HTMLElement> => {\n if (!enabled) return {};\n const keyProps: React.HTMLAttributes<HTMLElement> = keyboard\n ? {\n tabIndex: 0,\n 'aria-keyshortcuts': 'Alt+ArrowUp Alt+ArrowDown',\n onKeyDown: (e) => {\n if (e.target !== e.currentTarget || !e.altKey) return;\n if (e.key !== 'ArrowUp' && e.key !== 'ArrowDown') return;\n e.preventDefault();\n moveByRef.current(id, e.key === 'ArrowUp' ? -1 : 1);\n },\n }\n : {};\n return {\n ...keyProps,\n draggable: true,\n // WebKit (iPadOS Safari, incl. remote-pointer sessions) starts a text\n // selection instead of a drag when the drag source contains selectable\n // text — suppress selection and explicitly mark the row as the drag\n // element so press-drag reliably initiates drag-and-drop.\n style: {\n userSelect: 'none',\n WebkitUserSelect: 'none',\n WebkitUserDrag: 'element',\n } as React.CSSProperties,\n onDragStart: (e) => {\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', id);\n const preview = getDragPreview?.(id);\n if (preview) e.dataTransfer.setDragImage(preview, 0, 0);\n draggingRef.current = id;\n setDraggingId(id);\n },\n onDragEnd: reset,\n onDragOver: (e) => {\n const dragged = draggingRef.current;\n if (\n !dragged ||\n dragged === id ||\n (canDropOn && !canDropOn(dragged, id))\n ) {\n // hovering an invalid target: clear any stale indicator\n setOver(null);\n return;\n }\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n const r = e.currentTarget.getBoundingClientRect();\n const after = e.clientY > r.top + r.height / 2;\n setOver((prev) =>\n prev?.id === id && prev.after === after ? prev : { id, after }\n );\n },\n onDragLeave: () => {\n setOver((prev) => (prev?.id === id ? null : prev));\n },\n onDrop: (e) => {\n e.preventDefault();\n const dragged =\n draggingRef.current ?? e.dataTransfer.getData('text/plain');\n reset();\n if (!dragged || dragged === id) return;\n if (canDropOn && !canDropOn(dragged, id)) return;\n const r = e.currentTarget.getBoundingClientRect();\n const after = e.clientY > r.top + r.height / 2;\n onReorder?.(reorderIds(ids, dragged, id, after));\n },\n };\n },\n [enabled, keyboard, ids, onReorder, canDropOn, getDragPreview, reset]\n );\n\n return {\n enabled,\n draggingId,\n over,\n rowProps,\n moveBy,\n moveButtonProps,\n announcement: announce ? '' : announcement,\n };\n}\n\n/** Tailwind classes for the drag state of a row: drop indicator + dragging dim. */\nexport function dragIndicatorClasses(\n drag: Pick<UseDragReorderReturn, 'draggingId' | 'over'>,\n id: string\n): string {\n return [\n drag.draggingId === id ? 'opacity-40' : '',\n drag.over?.id === id && !drag.over.after\n ? 'shadow-[inset_0_2px_0_0_var(--color-primary-500,#3b82f6)]'\n : '',\n drag.over?.id === id && drag.over.after\n ? 'shadow-[inset_0_-2px_0_0_var(--color-primary-500,#3b82f6)]'\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n}\n"]}