@mieweb/ui 0.10.0-dev.30 → 0.10.0-dev.32

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 (481) 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-TYE5K5WV.cjs → chunk-32ZCJOSR.cjs} +4 -4
  22. package/dist/{chunk-TYE5K5WV.cjs.map → chunk-32ZCJOSR.cjs.map} +1 -1
  23. package/dist/{chunk-SD7ONW6S.js → chunk-3DLLTITK.js} +4 -4
  24. package/dist/{chunk-SD7ONW6S.js.map → chunk-3DLLTITK.js.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-WXFGHDTV.cjs → chunk-57G3O552.cjs} +13 -13
  30. package/dist/{chunk-WXFGHDTV.cjs.map → chunk-57G3O552.cjs.map} +1 -1
  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-NKV76R65.cjs → chunk-6M63CM7X.cjs} +26 -26
  38. package/dist/{chunk-NKV76R65.cjs.map → chunk-6M63CM7X.cjs.map} +1 -1
  39. package/dist/chunk-6N7NMOSV.js +233 -0
  40. package/dist/chunk-6N7NMOSV.js.map +1 -0
  41. package/dist/chunk-6TTCZY3P.cjs +4 -0
  42. package/dist/chunk-6TTCZY3P.cjs.map +1 -0
  43. package/dist/{chunk-TTSSUOEV.cjs → chunk-7C5W744U.cjs} +8 -8
  44. package/dist/{chunk-TTSSUOEV.cjs.map → chunk-7C5W744U.cjs.map} +1 -1
  45. package/dist/chunk-7HUTR6RX.js +178 -0
  46. package/dist/chunk-7HUTR6RX.js.map +1 -0
  47. package/dist/chunk-7IRTD4JT.cjs +61 -0
  48. package/dist/chunk-7IRTD4JT.cjs.map +1 -0
  49. package/dist/{chunk-YU55JD35.js → chunk-7QW6TU4X.js} +3 -3
  50. package/dist/{chunk-YU55JD35.js.map → chunk-7QW6TU4X.js.map} +1 -1
  51. package/dist/chunk-7WJ6MBF5.cjs +47 -0
  52. package/dist/chunk-7WJ6MBF5.cjs.map +1 -0
  53. package/dist/chunk-A4W5CSK7.cjs +216 -0
  54. package/dist/chunk-A4W5CSK7.cjs.map +1 -0
  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-BNH4SXJB.js → chunk-CMF7VCGP.js} +5 -5
  70. package/dist/{chunk-BNH4SXJB.js.map → chunk-CMF7VCGP.js.map} +1 -1
  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-QURJVPRH.cjs → chunk-EMRWTCCN.cjs} +41 -2
  88. package/dist/chunk-EMRWTCCN.cjs.map +1 -0
  89. package/dist/chunk-EPCUPHEO.js +193 -0
  90. package/dist/chunk-EPCUPHEO.js.map +1 -0
  91. package/dist/chunk-EPTP3VKT.js +283 -0
  92. package/dist/chunk-EPTP3VKT.js.map +1 -0
  93. package/dist/{chunk-HIZWOAWY.cjs → chunk-ERACGSDY.cjs} +8 -8
  94. package/dist/{chunk-HIZWOAWY.cjs.map → chunk-ERACGSDY.cjs.map} +1 -1
  95. package/dist/{chunk-VOQJHSXN.cjs → chunk-F2FOG4EG.cjs} +9 -9
  96. package/dist/{chunk-VOQJHSXN.cjs.map → chunk-F2FOG4EG.cjs.map} +1 -1
  97. package/dist/{chunk-GBUVIGD5.js → chunk-F3EWRDIT.js} +99 -3
  98. package/dist/chunk-F3EWRDIT.js.map +1 -0
  99. package/dist/{chunk-ZTMYKAVU.cjs → chunk-FCV7GBNQ.cjs} +24 -23
  100. package/dist/chunk-FCV7GBNQ.cjs.map +1 -0
  101. package/dist/{chunk-GVLNXPJX.js → chunk-FGLIP6YR.js} +4 -4
  102. package/dist/{chunk-GVLNXPJX.js.map → chunk-FGLIP6YR.js.map} +1 -1
  103. package/dist/chunk-FKGFOBC2.js +314 -0
  104. package/dist/chunk-FKGFOBC2.js.map +1 -0
  105. package/dist/chunk-FSGJXCBG.cjs +318 -0
  106. package/dist/chunk-FSGJXCBG.cjs.map +1 -0
  107. package/dist/chunk-FTEZNCRI.js +29 -0
  108. package/dist/chunk-FTEZNCRI.js.map +1 -0
  109. package/dist/{chunk-COM7RNZU.cjs → chunk-FYQZWLAM.cjs} +2 -2
  110. package/dist/{chunk-COM7RNZU.cjs.map → chunk-FYQZWLAM.cjs.map} +1 -1
  111. package/dist/{chunk-YVPC65ZJ.cjs → chunk-GF2BE4FB.cjs} +91 -32
  112. package/dist/chunk-GF2BE4FB.cjs.map +1 -0
  113. package/dist/{chunk-JEIW7BSV.cjs → chunk-GKDHMNUA.cjs} +2 -52
  114. package/dist/chunk-GKDHMNUA.cjs.map +1 -0
  115. package/dist/{chunk-N7C4OEP7.cjs → chunk-GM32IDVL.cjs} +6 -6
  116. package/dist/{chunk-N7C4OEP7.cjs.map → chunk-GM32IDVL.cjs.map} +1 -1
  117. package/dist/chunk-GNOQFTLL.cjs +286 -0
  118. package/dist/chunk-GNOQFTLL.cjs.map +1 -0
  119. package/dist/chunk-GY5SP4ST.js +3 -0
  120. package/dist/chunk-GY5SP4ST.js.map +1 -0
  121. package/dist/chunk-H2Y7HZV5.js +3 -0
  122. package/dist/chunk-H2Y7HZV5.js.map +1 -0
  123. package/dist/chunk-H3QPREIJ.js +195 -0
  124. package/dist/chunk-H3QPREIJ.js.map +1 -0
  125. package/dist/{chunk-QOVJ6Z6R.js → chunk-HDY7YQFX.js} +3 -3
  126. package/dist/{chunk-QOVJ6Z6R.js.map → chunk-HDY7YQFX.js.map} +1 -1
  127. package/dist/chunk-HNFFFFYH.cjs +114 -0
  128. package/dist/chunk-HNFFFFYH.cjs.map +1 -0
  129. package/dist/chunk-HNXLLDPN.js +25 -0
  130. package/dist/chunk-HNXLLDPN.js.map +1 -0
  131. package/dist/chunk-I2MMUFCN.cjs +154 -0
  132. package/dist/chunk-I2MMUFCN.cjs.map +1 -0
  133. package/dist/{chunk-GYXUS65N.cjs → chunk-IGDO62KR.cjs} +5 -5
  134. package/dist/{chunk-GYXUS65N.cjs.map → chunk-IGDO62KR.cjs.map} +1 -1
  135. package/dist/{chunk-JBIGSP2T.js → chunk-ILDLYRTP.js} +5 -4
  136. package/dist/chunk-ILDLYRTP.js.map +1 -0
  137. package/dist/{chunk-HC3NAN55.cjs → chunk-IPL2O2OL.cjs} +19 -19
  138. package/dist/{chunk-HC3NAN55.cjs.map → chunk-IPL2O2OL.cjs.map} +1 -1
  139. package/dist/chunk-ISUIKUX7.cjs +337 -0
  140. package/dist/chunk-ISUIKUX7.cjs.map +1 -0
  141. package/dist/{chunk-N5O47VGS.cjs → chunk-IVGI353O.cjs} +2 -2
  142. package/dist/{chunk-N5O47VGS.cjs.map → chunk-IVGI353O.cjs.map} +1 -1
  143. package/dist/chunk-IWRBJHO3.cjs +51 -0
  144. package/dist/chunk-IWRBJHO3.cjs.map +1 -0
  145. package/dist/{chunk-KRU6IGV7.js → chunk-JUJGWUAN.js} +28 -6
  146. package/dist/chunk-JUJGWUAN.js.map +1 -0
  147. package/dist/{chunk-BUT6MF5K.cjs → chunk-KQ6GLYFZ.cjs} +4 -4
  148. package/dist/{chunk-BUT6MF5K.cjs.map → chunk-KQ6GLYFZ.cjs.map} +1 -1
  149. package/dist/chunk-L6K4PRZK.cjs +4 -0
  150. package/dist/chunk-L6K4PRZK.cjs.map +1 -0
  151. package/dist/{chunk-P7UMS4E6.cjs → chunk-LC7PVBXH.cjs} +16 -8
  152. package/dist/chunk-LC7PVBXH.cjs.map +1 -0
  153. package/dist/chunk-LRRSD7LR.js +248 -0
  154. package/dist/chunk-LRRSD7LR.js.map +1 -0
  155. package/dist/chunk-LSMS6DY7.cjs +331 -0
  156. package/dist/chunk-LSMS6DY7.cjs.map +1 -0
  157. package/dist/chunk-M3VPGJMV.js +283 -0
  158. package/dist/chunk-M3VPGJMV.js.map +1 -0
  159. package/dist/{chunk-2JICT4A2.js → chunk-N54FYWG6.js} +3 -3
  160. package/dist/{chunk-2JICT4A2.js.map → chunk-N54FYWG6.js.map} +1 -1
  161. package/dist/chunk-N5JDL4VE.js +3 -0
  162. package/dist/chunk-N5JDL4VE.js.map +1 -0
  163. package/dist/{chunk-KGKBZN3T.cjs → chunk-NAH65KPK.cjs} +8 -8
  164. package/dist/{chunk-KGKBZN3T.cjs.map → chunk-NAH65KPK.cjs.map} +1 -1
  165. package/dist/chunk-O4WGSOJI.js +261 -0
  166. package/dist/chunk-O4WGSOJI.js.map +1 -0
  167. package/dist/{chunk-SVSHA7XV.js → chunk-O6XDA3SI.js} +31 -33
  168. package/dist/chunk-O6XDA3SI.js.map +1 -0
  169. package/dist/chunk-OIF34LEN.cjs +425 -0
  170. package/dist/chunk-OIF34LEN.cjs.map +1 -0
  171. package/dist/chunk-ORCCJ5VY.cjs +218 -0
  172. package/dist/chunk-ORCCJ5VY.cjs.map +1 -0
  173. package/dist/{chunk-CRS2CQWM.js → chunk-OSTSZDQC.js} +3 -3
  174. package/dist/{chunk-CRS2CQWM.js.map → chunk-OSTSZDQC.js.map} +1 -1
  175. package/dist/{chunk-MLAWXPRY.js → chunk-OZ5CKVQN.js} +41 -2
  176. package/dist/chunk-OZ5CKVQN.js.map +1 -0
  177. package/dist/chunk-P22YCUVM.cjs +4 -0
  178. package/dist/chunk-P22YCUVM.cjs.map +1 -0
  179. package/dist/chunk-P55LNEDH.cjs +306 -0
  180. package/dist/chunk-P55LNEDH.cjs.map +1 -0
  181. package/dist/{chunk-R6KPWIGO.js → chunk-P7D7BYFE.js} +4 -4
  182. package/dist/{chunk-R6KPWIGO.js.map → chunk-P7D7BYFE.js.map} +1 -1
  183. package/dist/{chunk-GU5OS7JJ.cjs → chunk-PYI2IWNX.cjs} +4 -4
  184. package/dist/{chunk-GU5OS7JJ.cjs.map → chunk-PYI2IWNX.cjs.map} +1 -1
  185. package/dist/chunk-Q3YVLO52.cjs +174 -0
  186. package/dist/chunk-Q3YVLO52.cjs.map +1 -0
  187. package/dist/{chunk-K34DXMLZ.js → chunk-QJ2L5RU6.js} +7 -7
  188. package/dist/{chunk-K34DXMLZ.js.map → chunk-QJ2L5RU6.js.map} +1 -1
  189. package/dist/{chunk-X4LBUPJO.cjs → chunk-QX6AAVDE.cjs} +31 -33
  190. package/dist/chunk-QX6AAVDE.cjs.map +1 -0
  191. package/dist/{chunk-LFPJ3OUM.cjs → chunk-RIUQP2QS.cjs} +5 -5
  192. package/dist/{chunk-LFPJ3OUM.cjs.map → chunk-RIUQP2QS.cjs.map} +1 -1
  193. package/dist/{chunk-JHG3ELS2.js → chunk-RPFATYUI.js} +2 -2
  194. package/dist/{chunk-JHG3ELS2.js.map → chunk-RPFATYUI.js.map} +1 -1
  195. package/dist/{chunk-FZURBQJ2.js → chunk-RSJGTWLM.js} +3 -3
  196. package/dist/{chunk-FZURBQJ2.js.map → chunk-RSJGTWLM.js.map} +1 -1
  197. package/dist/{chunk-XBTKZCZF.js → chunk-RZSSQ7AT.js} +3 -3
  198. package/dist/{chunk-XBTKZCZF.js.map → chunk-RZSSQ7AT.js.map} +1 -1
  199. package/dist/{chunk-VROIMIHB.cjs → chunk-SHBCUXFS.cjs} +28 -6
  200. package/dist/chunk-SHBCUXFS.cjs.map +1 -0
  201. package/dist/{chunk-JELTRRR5.cjs → chunk-SW2E7XKY.cjs} +9 -9
  202. package/dist/{chunk-JELTRRR5.cjs.map → chunk-SW2E7XKY.cjs.map} +1 -1
  203. package/dist/chunk-SZSRGUVO.js +402 -0
  204. package/dist/chunk-SZSRGUVO.js.map +1 -0
  205. package/dist/{chunk-HZ4MBUC3.js → chunk-TI3TQQ7F.js} +4 -53
  206. package/dist/chunk-TI3TQQ7F.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-ZYL4SNOR.js → chunk-UJDWFDKE.js} +3 -3
  212. package/dist/{chunk-ZYL4SNOR.js.map → chunk-UJDWFDKE.js.map} +1 -1
  213. package/dist/{chunk-4HC2IBOX.js → chunk-UNFDIBKJ.js} +3 -3
  214. package/dist/{chunk-4HC2IBOX.js.map → chunk-UNFDIBKJ.js.map} +1 -1
  215. package/dist/{chunk-IYWG72DM.js → chunk-VEE46VTX.js} +4 -4
  216. package/dist/{chunk-IYWG72DM.js.map → chunk-VEE46VTX.js.map} +1 -1
  217. package/dist/{chunk-Y4E2WRUR.cjs → chunk-VFFV7EMT.cjs} +6 -6
  218. package/dist/{chunk-Y4E2WRUR.cjs.map → chunk-VFFV7EMT.cjs.map} +1 -1
  219. package/dist/chunk-VNEAQCY2.js +308 -0
  220. package/dist/chunk-VNEAQCY2.js.map +1 -0
  221. package/dist/chunk-VOYLX32A.cjs +271 -0
  222. package/dist/chunk-VOYLX32A.cjs.map +1 -0
  223. package/dist/{chunk-7ZV67VZE.js → chunk-VSRO4PAI.js} +21 -3
  224. package/dist/chunk-VSRO4PAI.js.map +1 -0
  225. package/dist/{chunk-L6MDULYB.js → chunk-VU3ZMJBN.js} +2 -2
  226. package/dist/{chunk-L6MDULYB.js.map → chunk-VU3ZMJBN.js.map} +1 -1
  227. package/dist/{chunk-35Y4ILCU.cjs → chunk-VXW7D5LR.cjs} +21 -3
  228. package/dist/chunk-VXW7D5LR.cjs.map +1 -0
  229. package/dist/{chunk-7YO7DNUV.js → chunk-WFBUBT54.js} +2 -2
  230. package/dist/{chunk-7YO7DNUV.js.map → chunk-WFBUBT54.js.map} +1 -1
  231. package/dist/chunk-WQHBMZSC.js +295 -0
  232. package/dist/chunk-WQHBMZSC.js.map +1 -0
  233. package/dist/chunk-X5JOEZVR.js +525 -0
  234. package/dist/chunk-X5JOEZVR.js.map +1 -0
  235. package/dist/chunk-XBAAHOCP.js +3 -0
  236. package/dist/chunk-XBAAHOCP.js.map +1 -0
  237. package/dist/chunk-XNPDZANN.cjs +238 -0
  238. package/dist/chunk-XNPDZANN.cjs.map +1 -0
  239. package/dist/chunk-XXA4NZUC.js +3 -0
  240. package/dist/chunk-XXA4NZUC.js.map +1 -0
  241. package/dist/chunk-Y424YL55.js +59 -0
  242. package/dist/chunk-Y424YL55.js.map +1 -0
  243. package/dist/chunk-YGS2TRMP.js +38 -0
  244. package/dist/chunk-YGS2TRMP.js.map +1 -0
  245. package/dist/chunk-YUMOM3KE.js +167 -0
  246. package/dist/chunk-YUMOM3KE.js.map +1 -0
  247. package/dist/{chunk-3KPDQG5O.cjs → chunk-ZG6FXMDX.cjs} +5 -5
  248. package/dist/{chunk-3KPDQG5O.cjs.map → chunk-ZG6FXMDX.cjs.map} +1 -1
  249. package/dist/chunk-ZNUMOJOI.cjs +4 -0
  250. package/dist/chunk-ZNUMOJOI.cjs.map +1 -0
  251. package/dist/components/Accordion/index.cjs +2 -2
  252. package/dist/components/Accordion/index.d.cts +6 -0
  253. package/dist/components/Accordion/index.d.ts +6 -0
  254. package/dist/components/Accordion/index.js +1 -1
  255. package/dist/components/ActionPlan/index.cjs +34 -0
  256. package/dist/components/ActionPlan/index.cjs.map +1 -0
  257. package/dist/components/ActionPlan/index.d.cts +65 -0
  258. package/dist/components/ActionPlan/index.d.ts +65 -0
  259. package/dist/components/ActionPlan/index.js +21 -0
  260. package/dist/components/ActionPlan/index.js.map +1 -0
  261. package/dist/components/ActivityFeed/index.cjs +31 -0
  262. package/dist/components/ActivityFeed/index.cjs.map +1 -0
  263. package/dist/components/ActivityFeed/index.d.cts +99 -0
  264. package/dist/components/ActivityFeed/index.d.ts +99 -0
  265. package/dist/components/ActivityFeed/index.js +18 -0
  266. package/dist/components/ActivityFeed/index.js.map +1 -0
  267. package/dist/components/AlertDialog/index.cjs +16 -3
  268. package/dist/components/AlertDialog/index.d.cts +66 -13
  269. package/dist/components/AlertDialog/index.d.ts +66 -13
  270. package/dist/components/AlertDialog/index.js +3 -2
  271. package/dist/components/AssociationList/index.cjs +29 -0
  272. package/dist/components/AssociationList/index.cjs.map +1 -0
  273. package/dist/components/AssociationList/index.d.cts +50 -0
  274. package/dist/components/AssociationList/index.d.ts +50 -0
  275. package/dist/components/AssociationList/index.js +16 -0
  276. package/dist/components/AssociationList/index.js.map +1 -0
  277. package/dist/components/Avatar/index.cjs +9 -7
  278. package/dist/components/Avatar/index.d.cts +45 -14
  279. package/dist/components/Avatar/index.d.ts +45 -14
  280. package/dist/components/Avatar/index.js +3 -1
  281. package/dist/components/AvatarGroup/index.cjs +20 -0
  282. package/dist/components/AvatarGroup/index.cjs.map +1 -0
  283. package/dist/components/AvatarGroup/index.d.cts +57 -0
  284. package/dist/components/AvatarGroup/index.d.ts +57 -0
  285. package/dist/components/AvatarGroup/index.js +7 -0
  286. package/dist/components/AvatarGroup/index.js.map +1 -0
  287. package/dist/components/Button/index.cjs +3 -2
  288. package/dist/components/Button/index.js +2 -1
  289. package/dist/components/CalendarHeatmap/index.cjs +18 -0
  290. package/dist/components/CalendarHeatmap/index.cjs.map +1 -0
  291. package/dist/components/CalendarHeatmap/index.d.cts +47 -0
  292. package/dist/components/CalendarHeatmap/index.d.ts +47 -0
  293. package/dist/components/CalendarHeatmap/index.js +5 -0
  294. package/dist/components/CalendarHeatmap/index.js.map +1 -0
  295. package/dist/components/CalendarView/index.cjs +5 -4
  296. package/dist/components/CalendarView/index.js +3 -2
  297. package/dist/components/ClampedText/index.cjs +3 -2
  298. package/dist/components/ClampedText/index.js +2 -1
  299. package/dist/components/CollabStatus/index.cjs +6 -4
  300. package/dist/components/CollabStatus/index.d.cts +11 -0
  301. package/dist/components/CollabStatus/index.d.ts +11 -0
  302. package/dist/components/CollabStatus/index.js +3 -1
  303. package/dist/components/Collapsible/index.cjs +4 -4
  304. package/dist/components/Collapsible/index.d.cts +6 -0
  305. package/dist/components/Collapsible/index.d.ts +6 -0
  306. package/dist/components/Collapsible/index.js +1 -1
  307. package/dist/components/CompletenessMeter/index.cjs +22 -0
  308. package/dist/components/CompletenessMeter/index.cjs.map +1 -0
  309. package/dist/components/CompletenessMeter/index.d.cts +52 -0
  310. package/dist/components/CompletenessMeter/index.d.ts +52 -0
  311. package/dist/components/CompletenessMeter/index.js +5 -0
  312. package/dist/components/CompletenessMeter/index.js.map +1 -0
  313. package/dist/components/CustomizableDashboard/index.cjs +10 -9
  314. package/dist/components/CustomizableDashboard/index.js +3 -2
  315. package/dist/components/DateInput/index.d.cts +36 -4
  316. package/dist/components/DateInput/index.d.ts +36 -4
  317. package/dist/components/Dropdown/index.cjs +9 -8
  318. package/dist/components/Dropdown/index.js +2 -1
  319. package/dist/components/FieldHistory/index.cjs +34 -0
  320. package/dist/components/FieldHistory/index.cjs.map +1 -0
  321. package/dist/components/FieldHistory/index.d.cts +66 -0
  322. package/dist/components/FieldHistory/index.d.ts +66 -0
  323. package/dist/components/FieldHistory/index.js +21 -0
  324. package/dist/components/FieldHistory/index.js.map +1 -0
  325. package/dist/components/FloatingWindow/index.cjs +5 -4
  326. package/dist/components/FloatingWindow/index.js +3 -2
  327. package/dist/components/InlineEdit/index.cjs +20 -0
  328. package/dist/components/InlineEdit/index.cjs.map +1 -0
  329. package/dist/components/InlineEdit/index.d.cts +56 -0
  330. package/dist/components/InlineEdit/index.d.ts +56 -0
  331. package/dist/components/InlineEdit/index.js +7 -0
  332. package/dist/components/InlineEdit/index.js.map +1 -0
  333. package/dist/components/ListView/index.cjs +5 -4
  334. package/dist/components/ListView/index.js +3 -2
  335. package/dist/components/LogoUploader/index.cjs +18 -0
  336. package/dist/components/LogoUploader/index.cjs.map +1 -0
  337. package/dist/components/LogoUploader/index.d.cts +49 -0
  338. package/dist/components/LogoUploader/index.d.ts +49 -0
  339. package/dist/components/LogoUploader/index.js +5 -0
  340. package/dist/components/LogoUploader/index.js.map +1 -0
  341. package/dist/components/Markdown/index.cjs +17 -16
  342. package/dist/components/Markdown/index.js +8 -7
  343. package/dist/components/MediaEditor/index.cjs +9 -8
  344. package/dist/components/MediaEditor/index.js +4 -3
  345. package/dist/components/MediaFeed/index.cjs +8 -5
  346. package/dist/components/MediaFeed/index.js +7 -4
  347. package/dist/components/MediaPlayer/index.cjs +6 -5
  348. package/dist/components/MediaPlayer/index.js +3 -2
  349. package/dist/components/MegaMenu/index.cjs +2 -1
  350. package/dist/components/MegaMenu/index.js +2 -1
  351. package/dist/components/PhiMask/index.cjs +18 -0
  352. package/dist/components/PhiMask/index.cjs.map +1 -0
  353. package/dist/components/PhiMask/index.d.cts +45 -0
  354. package/dist/components/PhiMask/index.d.ts +45 -0
  355. package/dist/components/PhiMask/index.js +5 -0
  356. package/dist/components/PhiMask/index.js.map +1 -0
  357. package/dist/components/PhoneInput/index.d.cts +3 -36
  358. package/dist/components/PhoneInput/index.d.ts +3 -36
  359. package/dist/components/PropertyList/index.cjs +25 -0
  360. package/dist/components/PropertyList/index.cjs.map +1 -0
  361. package/dist/components/PropertyList/index.d.cts +71 -0
  362. package/dist/components/PropertyList/index.d.ts +71 -0
  363. package/dist/components/PropertyList/index.js +12 -0
  364. package/dist/components/PropertyList/index.js.map +1 -0
  365. package/dist/components/RadialExplorer/index.cjs +2 -1
  366. package/dist/components/RadialExplorer/index.js +2 -1
  367. package/dist/components/Rating/index.cjs +28 -0
  368. package/dist/components/Rating/index.cjs.map +1 -0
  369. package/dist/components/Rating/index.d.cts +85 -0
  370. package/dist/components/Rating/index.d.ts +85 -0
  371. package/dist/components/Rating/index.js +7 -0
  372. package/dist/components/Rating/index.js.map +1 -0
  373. package/dist/components/RecordHeader/index.cjs +29 -0
  374. package/dist/components/RecordHeader/index.cjs.map +1 -0
  375. package/dist/components/RecordHeader/index.d.cts +86 -0
  376. package/dist/components/RecordHeader/index.d.ts +86 -0
  377. package/dist/components/RecordHeader/index.js +16 -0
  378. package/dist/components/RecordHeader/index.js.map +1 -0
  379. package/dist/components/RecordLayout/index.cjs +21 -0
  380. package/dist/components/RecordLayout/index.cjs.map +1 -0
  381. package/dist/components/RecordLayout/index.d.cts +40 -0
  382. package/dist/components/RecordLayout/index.d.ts +40 -0
  383. package/dist/components/RecordLayout/index.js +8 -0
  384. package/dist/components/RecordLayout/index.js.map +1 -0
  385. package/dist/components/RichTextEditor/index.cjs +8 -6
  386. package/dist/components/RichTextEditor/index.js +5 -3
  387. package/dist/components/SectionSpyNav/index.cjs +2 -1
  388. package/dist/components/SectionSpyNav/index.js +2 -1
  389. package/dist/components/SuperChat/index.cjs +50 -22
  390. package/dist/components/SuperChat/index.cjs.map +1 -1
  391. package/dist/components/SuperChat/index.d.cts +93 -2
  392. package/dist/components/SuperChat/index.d.ts +93 -2
  393. package/dist/components/SuperChat/index.js +38 -10
  394. package/dist/components/SuperChat/index.js.map +1 -1
  395. package/dist/components/SuperChat/plugins/index.cjs +5 -4
  396. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  397. package/dist/components/SuperChat/plugins/index.js +4 -3
  398. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  399. package/dist/components/Tabs/index.cjs +9 -7
  400. package/dist/components/Tabs/index.d.cts +12 -1
  401. package/dist/components/Tabs/index.d.ts +12 -1
  402. package/dist/components/Tabs/index.js +3 -1
  403. package/dist/components/TagEditor/index.cjs +20 -0
  404. package/dist/components/TagEditor/index.cjs.map +1 -0
  405. package/dist/components/TagEditor/index.d.cts +46 -0
  406. package/dist/components/TagEditor/index.d.ts +46 -0
  407. package/dist/components/TagEditor/index.js +7 -0
  408. package/dist/components/TagEditor/index.js.map +1 -0
  409. package/dist/components/UserPicker/index.cjs +24 -0
  410. package/dist/components/UserPicker/index.cjs.map +1 -0
  411. package/dist/components/UserPicker/index.d.cts +60 -0
  412. package/dist/components/UserPicker/index.d.ts +60 -0
  413. package/dist/components/UserPicker/index.js +11 -0
  414. package/dist/components/UserPicker/index.js.map +1 -0
  415. package/dist/components/ViewSet/index.cjs +6 -5
  416. package/dist/components/ViewSet/index.d.cts +2 -1
  417. package/dist/components/ViewSet/index.d.ts +2 -1
  418. package/dist/components/ViewSet/index.js +5 -4
  419. package/dist/components/ViewSwitcher/index.d.cts +39 -4
  420. package/dist/components/ViewSwitcher/index.d.ts +39 -4
  421. package/dist/datavis.cjs +3 -2
  422. package/dist/datavis.cjs.map +1 -1
  423. package/dist/datavis.js +2 -1
  424. package/dist/datavis.js.map +1 -1
  425. package/dist/esheet.cjs +8 -6
  426. package/dist/esheet.cjs.map +1 -1
  427. package/dist/esheet.js +5 -3
  428. package/dist/esheet.js.map +1 -1
  429. package/dist/hooks/index.cjs +53 -27
  430. package/dist/hooks/index.d.cts +91 -6
  431. package/dist/hooks/index.d.ts +91 -6
  432. package/dist/hooks/index.js +5 -3
  433. package/dist/index.cjs +1258 -714
  434. package/dist/index.cjs.map +1 -1
  435. package/dist/index.d.cts +1253 -168
  436. package/dist/index.d.ts +1253 -168
  437. package/dist/index.js +536 -168
  438. package/dist/index.js.map +1 -1
  439. package/dist/org-chart.cjs +1302 -0
  440. package/dist/org-chart.cjs.map +1 -0
  441. package/dist/org-chart.d.cts +164 -0
  442. package/dist/org-chart.d.ts +164 -0
  443. package/dist/org-chart.js +1277 -0
  444. package/dist/org-chart.js.map +1 -0
  445. package/dist/styles.css +1 -1
  446. package/dist/tailwind-preset.cjs +4 -4
  447. package/dist/tailwind-preset.js +1 -1
  448. package/dist/{index-DoYYWsNc.d.cts → types-CDeBNZiE.d.cts} +1 -36
  449. package/dist/{index-DoYYWsNc.d.ts → types-CDeBNZiE.d.ts} +1 -36
  450. package/package.json +22 -2
  451. package/dist/CsvBlock-FX5YNGNE.cjs +0 -17
  452. package/dist/CsvBlock-VLMG7GUO.js +0 -8
  453. package/dist/HtmlPreviewBlock-5JE7L3GR.js +0 -8
  454. package/dist/HtmlPreviewBlock-UO37JQ3K.cjs +0 -17
  455. package/dist/MermaidBlock-3XHFBAMV.js +0 -8
  456. package/dist/MermaidBlock-RZ75RPZA.cjs +0 -17
  457. package/dist/SurveyBlock-MUVJ3JUI.js +0 -8
  458. package/dist/SurveyBlock-VH47YXZC.cjs +0 -17
  459. package/dist/chunk-35Y4ILCU.cjs.map +0 -1
  460. package/dist/chunk-6N6LIAUJ.cjs +0 -80
  461. package/dist/chunk-6N6LIAUJ.cjs.map +0 -1
  462. package/dist/chunk-7ZV67VZE.js.map +0 -1
  463. package/dist/chunk-7ZVTLTJF.js +0 -109
  464. package/dist/chunk-7ZVTLTJF.js.map +0 -1
  465. package/dist/chunk-DVOQ3JNO.js.map +0 -1
  466. package/dist/chunk-GBUVIGD5.js.map +0 -1
  467. package/dist/chunk-HZ4MBUC3.js.map +0 -1
  468. package/dist/chunk-JBIGSP2T.js.map +0 -1
  469. package/dist/chunk-JEIW7BSV.cjs.map +0 -1
  470. package/dist/chunk-KRU6IGV7.js.map +0 -1
  471. package/dist/chunk-LHBWRMNC.cjs.map +0 -1
  472. package/dist/chunk-MLAWXPRY.js.map +0 -1
  473. package/dist/chunk-P7UMS4E6.cjs.map +0 -1
  474. package/dist/chunk-QURJVPRH.cjs.map +0 -1
  475. package/dist/chunk-SVSHA7XV.js.map +0 -1
  476. package/dist/chunk-UBSH27C2.js +0 -78
  477. package/dist/chunk-UBSH27C2.js.map +0 -1
  478. package/dist/chunk-VROIMIHB.cjs.map +0 -1
  479. package/dist/chunk-X4LBUPJO.cjs.map +0 -1
  480. package/dist/chunk-YVPC65ZJ.cjs.map +0 -1
  481. package/dist/chunk-ZTMYKAVU.cjs.map +0 -1
@@ -0,0 +1,295 @@
1
+ import { cn } from './chunk-TQONQSJO.js';
2
+ import * as React from 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { ImagePlus, Loader2, Trash2 } from 'lucide-react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ var defaultLogoUploaderLabels = {
8
+ upload: "Upload logo",
9
+ replace: "Replace logo",
10
+ remove: "Remove logo",
11
+ dropHint: "Drop an image or click to browse",
12
+ uploading: "Uploading\u2026",
13
+ removing: "Removing\u2026",
14
+ invalidType: "That file type is not supported.",
15
+ tooLarge: (maxBytes) => `Files must be ${formatBytes(maxBytes)} or smaller.`,
16
+ uploadFailed: "Upload failed. Try again.",
17
+ removeFailed: "Could not remove the logo. Try again.",
18
+ previewAlt: "Current logo"
19
+ };
20
+ function formatBytes(bytes) {
21
+ if (bytes < 1024) return `${bytes} B`;
22
+ const kb = bytes / 1024;
23
+ if (kb < 1024) return `${Math.round(kb)} KB`;
24
+ return `${Math.round(kb / 1024 * 10) / 10} MB`;
25
+ }
26
+ function safeImageSrc(url) {
27
+ const trimmed = url?.trim();
28
+ if (!trimmed) return null;
29
+ const scheme = /^([a-z][a-z\d+.-]*):/i.exec(trimmed)?.[1].toLowerCase();
30
+ if (!scheme || ["http", "https", "blob"].includes(scheme)) return trimmed;
31
+ return /^data:image\//i.test(trimmed) ? trimmed : null;
32
+ }
33
+ function matchesAccept(file, accept) {
34
+ return accept.split(",").map((token) => token.trim().toLowerCase()).some((token) => {
35
+ if (!token) return false;
36
+ if (token.startsWith(".")) return file.name.toLowerCase().endsWith(token);
37
+ if (token.endsWith("/*")) return file.type.startsWith(token.slice(0, -1));
38
+ return file.type === token;
39
+ });
40
+ }
41
+ function FilePreview({ file, alt }) {
42
+ const canvasRef = React.useRef(null);
43
+ React.useEffect(() => {
44
+ if (typeof globalThis.createImageBitmap !== "function") return;
45
+ let cancelled = false;
46
+ globalThis.createImageBitmap(file).then((bitmap) => {
47
+ const canvas = canvasRef.current;
48
+ if (!cancelled && canvas) {
49
+ canvas.width = bitmap.width;
50
+ canvas.height = bitmap.height;
51
+ canvas.getContext("2d")?.drawImage(bitmap, 0, 0);
52
+ }
53
+ bitmap.close();
54
+ }).catch(() => {
55
+ });
56
+ return () => {
57
+ cancelled = true;
58
+ };
59
+ }, [file]);
60
+ return /* @__PURE__ */ jsx(
61
+ "canvas",
62
+ {
63
+ ref: canvasRef,
64
+ role: "img",
65
+ "aria-label": alt,
66
+ className: "h-full w-full object-contain"
67
+ }
68
+ );
69
+ }
70
+ var targetVariants = cva(
71
+ [
72
+ "relative flex cursor-pointer items-center justify-center overflow-hidden border-2 border-dashed bg-muted/40 text-muted-foreground",
73
+ "transition-colors motion-reduce:transition-none hover:border-primary-500 hover:text-foreground",
74
+ "peer-focus-visible:ring-ring peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2",
75
+ "peer-disabled:cursor-not-allowed peer-disabled:opacity-50"
76
+ ],
77
+ {
78
+ variants: {
79
+ shape: { square: "rounded-lg", circle: "rounded-full" },
80
+ size: { sm: "h-16 w-16", md: "h-24 w-24", lg: "h-32 w-32" },
81
+ dragging: {
82
+ true: "border-primary-500 bg-primary-500/10",
83
+ false: "border-border"
84
+ },
85
+ filled: { true: "border-solid bg-card", false: "" }
86
+ },
87
+ defaultVariants: {
88
+ shape: "square",
89
+ size: "md",
90
+ dragging: false,
91
+ filled: false
92
+ }
93
+ }
94
+ );
95
+ var LogoUploader = React.forwardRef(
96
+ function LogoUploader2({
97
+ value,
98
+ onUpload,
99
+ onRemove,
100
+ accept = "image/*",
101
+ maxSizeBytes,
102
+ disabled,
103
+ shape,
104
+ size,
105
+ labels: labelOverrides,
106
+ className,
107
+ ...props
108
+ }, ref) {
109
+ const labels = { ...defaultLogoUploaderLabels, ...labelOverrides };
110
+ const [busy, setBusy] = React.useState(
111
+ null
112
+ );
113
+ const [preview, setPreview] = React.useState(null);
114
+ const [localFile, setLocalFile] = React.useState(null);
115
+ const [error, setError] = React.useState(null);
116
+ const [dragging, setDragging] = React.useState(false);
117
+ const inputRef = React.useRef(null);
118
+ const generation = React.useRef(0);
119
+ const id = React.useId();
120
+ const inputId = `${id}-input`;
121
+ const errorId = `${id}-error`;
122
+ React.useEffect(() => {
123
+ generation.current += 1;
124
+ setPreview(null);
125
+ setLocalFile(null);
126
+ }, [value]);
127
+ const shown = localFile ? null : safeImageSrc(preview ?? value);
128
+ const filled = !!localFile || !!shown;
129
+ const inactive = disabled || busy !== null;
130
+ const refocusInput = React.useRef(false);
131
+ React.useEffect(() => {
132
+ if (busy === null && refocusInput.current) {
133
+ refocusInput.current = false;
134
+ inputRef.current?.focus();
135
+ }
136
+ }, [busy]);
137
+ const handleFile = async (file) => {
138
+ if (!file || inactive) return;
139
+ if (!matchesAccept(file, accept)) return setError(labels.invalidType);
140
+ if (maxSizeBytes !== void 0 && file.size > maxSizeBytes) {
141
+ return setError(labels.tooLarge(maxSizeBytes));
142
+ }
143
+ setError(null);
144
+ const request = ++generation.current;
145
+ setPreview(null);
146
+ setLocalFile(file);
147
+ setBusy("uploading");
148
+ try {
149
+ const url = await onUpload(file);
150
+ if (url && request === generation.current) {
151
+ setLocalFile(null);
152
+ setPreview(url);
153
+ }
154
+ } catch {
155
+ if (request === generation.current) {
156
+ setLocalFile(null);
157
+ setError(labels.uploadFailed);
158
+ }
159
+ } finally {
160
+ setBusy(null);
161
+ }
162
+ };
163
+ const handleRemove = async () => {
164
+ if (!onRemove || inactive) return;
165
+ setError(null);
166
+ setBusy("removing");
167
+ try {
168
+ await onRemove();
169
+ setPreview(null);
170
+ setLocalFile(null);
171
+ } catch {
172
+ setError(labels.removeFailed);
173
+ } finally {
174
+ refocusInput.current = true;
175
+ setBusy(null);
176
+ }
177
+ };
178
+ return /* @__PURE__ */ jsxs(
179
+ "div",
180
+ {
181
+ ref,
182
+ "data-slot": "logo-uploader",
183
+ "aria-busy": busy !== null || void 0,
184
+ className: cn("inline-flex flex-col items-start gap-2", className),
185
+ ...props,
186
+ children: [
187
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
188
+ /* @__PURE__ */ jsx(
189
+ "input",
190
+ {
191
+ ref: inputRef,
192
+ id: inputId,
193
+ type: "file",
194
+ accept,
195
+ disabled: inactive,
196
+ "aria-label": filled ? labels.replace : labels.upload,
197
+ "aria-describedby": error ? errorId : void 0,
198
+ "aria-invalid": error ? true : void 0,
199
+ onChange: (e) => {
200
+ void handleFile(e.target.files?.[0]);
201
+ e.target.value = "";
202
+ },
203
+ className: "peer sr-only"
204
+ }
205
+ ),
206
+ /* @__PURE__ */ jsxs(
207
+ "label",
208
+ {
209
+ htmlFor: inputId,
210
+ "data-slot": "logo-uploader-target",
211
+ onDragOver: (e) => {
212
+ e.preventDefault();
213
+ if (!inactive) setDragging(true);
214
+ },
215
+ onDragLeave: () => setDragging(false),
216
+ onDrop: (e) => {
217
+ e.preventDefault();
218
+ setDragging(false);
219
+ void handleFile(e.dataTransfer.files?.[0]);
220
+ },
221
+ className: targetVariants({
222
+ shape,
223
+ size,
224
+ dragging,
225
+ filled
226
+ }),
227
+ children: [
228
+ localFile ? /* @__PURE__ */ jsx(FilePreview, { file: localFile, alt: labels.previewAlt }) : shown ? /* @__PURE__ */ jsx(
229
+ "img",
230
+ {
231
+ src: shown,
232
+ alt: labels.previewAlt,
233
+ className: "h-full w-full object-contain"
234
+ }
235
+ ) : /* @__PURE__ */ jsxs("span", { className: "flex flex-col items-center gap-1 px-2 text-center text-xs", children: [
236
+ /* @__PURE__ */ jsx(ImagePlus, { "aria-hidden": "true", className: "h-5 w-5" }),
237
+ /* @__PURE__ */ jsx("span", { children: labels.dropHint })
238
+ ] }),
239
+ busy && /* @__PURE__ */ jsxs(
240
+ "span",
241
+ {
242
+ role: "status",
243
+ className: "bg-background/70 absolute inset-0 flex items-center justify-center",
244
+ children: [
245
+ /* @__PURE__ */ jsx(
246
+ Loader2,
247
+ {
248
+ "aria-hidden": "true",
249
+ className: "text-foreground h-5 w-5 animate-spin motion-reduce:animate-none"
250
+ }
251
+ ),
252
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: busy === "uploading" ? labels.uploading : labels.removing })
253
+ ]
254
+ }
255
+ )
256
+ ]
257
+ }
258
+ ),
259
+ filled && onRemove && /* @__PURE__ */ jsx(
260
+ "button",
261
+ {
262
+ type: "button",
263
+ "aria-label": labels.remove,
264
+ title: labels.remove,
265
+ disabled: inactive,
266
+ onClick: () => void handleRemove(),
267
+ className: cn(
268
+ "border-border bg-card text-muted-foreground absolute -end-2 -top-2 rounded-full border p-1 shadow-sm",
269
+ "hover:text-destructive focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none",
270
+ "disabled:cursor-not-allowed disabled:opacity-50"
271
+ ),
272
+ children: /* @__PURE__ */ jsx(Trash2, { "aria-hidden": "true", className: "h-3.5 w-3.5" })
273
+ }
274
+ )
275
+ ] }),
276
+ error && /* @__PURE__ */ jsx(
277
+ "p",
278
+ {
279
+ id: errorId,
280
+ role: "alert",
281
+ "data-slot": "logo-uploader-error",
282
+ className: "text-destructive-700 dark:text-destructive-400 text-sm",
283
+ children: error
284
+ }
285
+ )
286
+ ]
287
+ }
288
+ );
289
+ }
290
+ );
291
+ LogoUploader.displayName = "LogoUploader";
292
+
293
+ export { LogoUploader, defaultLogoUploaderLabels };
294
+ //# sourceMappingURL=chunk-WQHBMZSC.js.map
295
+ //# sourceMappingURL=chunk-WQHBMZSC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/LogoUploader/LogoUploader.tsx"],"names":["LogoUploader"],"mappings":"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","file":"chunk-WQHBMZSC.js","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"]}