@mieweb/ui 0.10.0-dev.4 → 0.10.0-dev.40

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 (811) hide show
  1. package/README.md +4 -4
  2. package/agent/mieweb-ui.instructions.md +90 -1
  3. package/dist/CsvBlock-CFXSDPBI.js +9 -0
  4. package/dist/{CsvBlock-UWPMTLE2.js.map → CsvBlock-CFXSDPBI.js.map} +1 -1
  5. package/dist/CsvBlock-RGO7JXHJ.cjs +18 -0
  6. package/dist/{CsvBlock-ROJCKJDP.cjs.map → CsvBlock-RGO7JXHJ.cjs.map} +1 -1
  7. package/dist/HtmlPreviewBlock-VBYXCXVT.cjs +18 -0
  8. package/dist/{HtmlPreviewBlock-DWFN6EUB.cjs.map → HtmlPreviewBlock-VBYXCXVT.cjs.map} +1 -1
  9. package/dist/HtmlPreviewBlock-Z2GCK325.js +9 -0
  10. package/dist/{HtmlPreviewBlock-ME5U3XNS.js.map → HtmlPreviewBlock-Z2GCK325.js.map} +1 -1
  11. package/dist/MermaidBlock-I2R2BQOX.cjs +18 -0
  12. package/dist/{MermaidBlock-D2UC5M55.cjs.map → MermaidBlock-I2R2BQOX.cjs.map} +1 -1
  13. package/dist/MermaidBlock-XCAK7IA5.js +9 -0
  14. package/dist/{MermaidBlock-2B6CPD6Y.js.map → MermaidBlock-XCAK7IA5.js.map} +1 -1
  15. package/dist/SurveyBlock-KI5JOWCL.js +9 -0
  16. package/dist/{SurveyBlock-4DO62RBT.js.map → SurveyBlock-KI5JOWCL.js.map} +1 -1
  17. package/dist/SurveyBlock-UKSGISRT.cjs +18 -0
  18. package/dist/{SurveyBlock-4CD4AYMJ.cjs.map → SurveyBlock-UKSGISRT.cjs.map} +1 -1
  19. package/dist/ag-grid.d.cts +142 -1
  20. package/dist/ag-grid.d.ts +142 -1
  21. package/dist/brands/bluehive.cjs +3 -3
  22. package/dist/brands/bluehive.css +3 -0
  23. package/dist/brands/bluehive.js +1 -1
  24. package/dist/brands/index.cjs +14 -14
  25. package/dist/brands/index.js +4 -4
  26. package/dist/{chunk-3M7TAXNR.js → chunk-24AFHH4J.js} +3 -3
  27. package/dist/{chunk-3M7TAXNR.js.map → chunk-24AFHH4J.js.map} +1 -1
  28. package/dist/{chunk-JYZW2PZS.cjs → chunk-254QK722.cjs} +7 -7
  29. package/dist/chunk-254QK722.cjs.map +1 -0
  30. package/dist/{chunk-VPIYTQCV.cjs → chunk-2I4IRQQG.cjs} +12 -5
  31. package/dist/chunk-2I4IRQQG.cjs.map +1 -0
  32. package/dist/chunk-2X54ZLT6.js +874 -0
  33. package/dist/chunk-2X54ZLT6.js.map +1 -0
  34. package/dist/{chunk-5MCBWTIF.cjs → chunk-32ZCJOSR.cjs} +4 -4
  35. package/dist/{chunk-5MCBWTIF.cjs.map → chunk-32ZCJOSR.cjs.map} +1 -1
  36. package/dist/chunk-3YBS4WUQ.js +52 -0
  37. package/dist/chunk-3YBS4WUQ.js.map +1 -0
  38. package/dist/{chunk-WNJRS7Y7.cjs → chunk-3ZWCIPFT.cjs} +4 -2
  39. package/dist/chunk-3ZWCIPFT.cjs.map +1 -0
  40. package/dist/chunk-434L5RYF.js +314 -0
  41. package/dist/chunk-434L5RYF.js.map +1 -0
  42. package/dist/{chunk-TPWKM7JH.js → chunk-43K7OQ3E.js} +3 -3
  43. package/dist/{chunk-TPWKM7JH.js.map → chunk-43K7OQ3E.js.map} +1 -1
  44. package/dist/chunk-47P5QLX4.cjs +42 -0
  45. package/dist/chunk-47P5QLX4.cjs.map +1 -0
  46. package/dist/chunk-4IS3QCOQ.cjs +453 -0
  47. package/dist/chunk-4IS3QCOQ.cjs.map +1 -0
  48. package/dist/chunk-4NCDU5IG.cjs +56 -0
  49. package/dist/chunk-4NCDU5IG.cjs.map +1 -0
  50. package/dist/chunk-4ZB7RSMY.cjs +306 -0
  51. package/dist/chunk-4ZB7RSMY.cjs.map +1 -0
  52. package/dist/chunk-522WJIVI.js +99 -0
  53. package/dist/chunk-522WJIVI.js.map +1 -0
  54. package/dist/chunk-56VTM4OX.js +261 -0
  55. package/dist/chunk-56VTM4OX.js.map +1 -0
  56. package/dist/chunk-5HKZR6UG.js +248 -0
  57. package/dist/chunk-5HKZR6UG.js.map +1 -0
  58. package/dist/chunk-6BNZLN4B.cjs +548 -0
  59. package/dist/chunk-6BNZLN4B.cjs.map +1 -0
  60. package/dist/chunk-6N7NMOSV.js +233 -0
  61. package/dist/chunk-6N7NMOSV.js.map +1 -0
  62. package/dist/chunk-6TTCZY3P.cjs +4 -0
  63. package/dist/chunk-6TTCZY3P.cjs.map +1 -0
  64. package/dist/{chunk-YQDA366U.js → chunk-753ENNB6.js} +2 -2
  65. package/dist/{chunk-YQDA366U.js.map → chunk-753ENNB6.js.map} +1 -1
  66. package/dist/{chunk-N6IY47YA.cjs → chunk-7C5W744U.cjs} +8 -8
  67. package/dist/{chunk-N6IY47YA.cjs.map → chunk-7C5W744U.cjs.map} +1 -1
  68. package/dist/chunk-7E46YDOT.cjs +122 -0
  69. package/dist/chunk-7E46YDOT.cjs.map +1 -0
  70. package/dist/chunk-7HUTR6RX.js +178 -0
  71. package/dist/chunk-7HUTR6RX.js.map +1 -0
  72. package/dist/chunk-7IRTD4JT.cjs +61 -0
  73. package/dist/chunk-7IRTD4JT.cjs.map +1 -0
  74. package/dist/{chunk-KZFBQ7GY.js → chunk-7QW6TU4X.js} +3 -3
  75. package/dist/{chunk-KZFBQ7GY.js.map → chunk-7QW6TU4X.js.map} +1 -1
  76. package/dist/{chunk-MWVW4APN.cjs → chunk-7UTBDFFL.cjs} +4 -4
  77. package/dist/{chunk-MWVW4APN.cjs.map → chunk-7UTBDFFL.cjs.map} +1 -1
  78. package/dist/chunk-7WJ6MBF5.cjs +47 -0
  79. package/dist/chunk-7WJ6MBF5.cjs.map +1 -0
  80. package/dist/{chunk-FJ7YPVKV.js → chunk-7X6R3JIA.js} +3 -3
  81. package/dist/{chunk-FJ7YPVKV.js.map → chunk-7X6R3JIA.js.map} +1 -1
  82. package/dist/chunk-A4W5CSK7.cjs +216 -0
  83. package/dist/chunk-A4W5CSK7.cjs.map +1 -0
  84. package/dist/{chunk-2G75X6TS.cjs → chunk-AHHFFXJR.cjs} +3 -3
  85. package/dist/{chunk-2G75X6TS.cjs.map → chunk-AHHFFXJR.cjs.map} +1 -1
  86. package/dist/chunk-AJPFQF3H.cjs +896 -0
  87. package/dist/chunk-AJPFQF3H.cjs.map +1 -0
  88. package/dist/chunk-AMYFRY7K.js +3 -0
  89. package/dist/chunk-AMYFRY7K.js.map +1 -0
  90. package/dist/{chunk-VNYW4C4J.cjs → chunk-ANMX7YDL.cjs} +4 -84
  91. package/dist/chunk-ANMX7YDL.cjs.map +1 -0
  92. package/dist/chunk-ARIJ5OHW.cjs +139 -0
  93. package/dist/chunk-ARIJ5OHW.cjs.map +1 -0
  94. package/dist/{chunk-DVOQ3JNO.js → chunk-B4CKCNWD.js} +16 -8
  95. package/dist/chunk-B4CKCNWD.js.map +1 -0
  96. package/dist/chunk-BJ6ABRSQ.cjs +256 -0
  97. package/dist/chunk-BJ6ABRSQ.cjs.map +1 -0
  98. package/dist/chunk-BM35CACB.js +148 -0
  99. package/dist/chunk-BM35CACB.js.map +1 -0
  100. package/dist/{chunk-G3JX3UAU.cjs → chunk-BWSZ2BHJ.cjs} +6 -6
  101. package/dist/{chunk-G3JX3UAU.cjs.map → chunk-BWSZ2BHJ.cjs.map} +1 -1
  102. package/dist/chunk-BXRQ6HEP.cjs +4 -0
  103. package/dist/chunk-BXRQ6HEP.cjs.map +1 -0
  104. package/dist/{chunk-SGFYA22I.cjs → chunk-C77FAR3F.cjs} +8 -8
  105. package/dist/{chunk-SGFYA22I.cjs.map → chunk-C77FAR3F.cjs.map} +1 -1
  106. package/dist/chunk-CBBKWRLG.js +213 -0
  107. package/dist/chunk-CBBKWRLG.js.map +1 -0
  108. package/dist/{chunk-UAMXCMST.cjs → chunk-CFI3TQMA.cjs} +3 -3
  109. package/dist/{chunk-UAMXCMST.cjs.map → chunk-CFI3TQMA.cjs.map} +1 -1
  110. package/dist/chunk-CLQW724U.cjs +271 -0
  111. package/dist/chunk-CLQW724U.cjs.map +1 -0
  112. package/dist/chunk-CPDNX3LS.cjs +47 -0
  113. package/dist/chunk-CPDNX3LS.cjs.map +1 -0
  114. package/dist/chunk-CVNPNZMX.js +44 -0
  115. package/dist/chunk-CVNPNZMX.js.map +1 -0
  116. package/dist/{chunk-2YCERQWC.js → chunk-CVXESGXJ.js} +10 -9
  117. package/dist/chunk-CVXESGXJ.js.map +1 -0
  118. package/dist/chunk-DGHS5IVD.js +305 -0
  119. package/dist/chunk-DGHS5IVD.js.map +1 -0
  120. package/dist/chunk-DHGCLPFZ.js +91 -0
  121. package/dist/chunk-DHGCLPFZ.js.map +1 -0
  122. package/dist/{chunk-GD7EBGC4.cjs → chunk-DHU3FFC3.cjs} +49 -19
  123. package/dist/chunk-DHU3FFC3.cjs.map +1 -0
  124. package/dist/chunk-DO2YN46R.cjs +201 -0
  125. package/dist/chunk-DO2YN46R.cjs.map +1 -0
  126. package/dist/chunk-DVDT7TX7.js +151 -0
  127. package/dist/chunk-DVDT7TX7.js.map +1 -0
  128. package/dist/chunk-DXEPYK3I.cjs +92 -0
  129. package/dist/chunk-DXEPYK3I.cjs.map +1 -0
  130. package/dist/{chunk-X4XPNTCZ.cjs → chunk-DZ3JTMKM.cjs} +136 -58
  131. package/dist/chunk-DZ3JTMKM.cjs.map +1 -0
  132. package/dist/chunk-EACNRR3C.cjs +4 -0
  133. package/dist/chunk-EACNRR3C.cjs.map +1 -0
  134. package/dist/{chunk-ZGRCSNPK.js → chunk-EEOGIGIA.js} +4 -4
  135. package/dist/{chunk-ZGRCSNPK.js.map → chunk-EEOGIGIA.js.map} +1 -1
  136. package/dist/chunk-EPCUPHEO.js +193 -0
  137. package/dist/chunk-EPCUPHEO.js.map +1 -0
  138. package/dist/{chunk-7ZXAQTV4.cjs → chunk-ERACGSDY.cjs} +8 -8
  139. package/dist/{chunk-7ZXAQTV4.cjs.map → chunk-ERACGSDY.cjs.map} +1 -1
  140. package/dist/{chunk-OD47TTAW.cjs → chunk-F2FOG4EG.cjs} +9 -9
  141. package/dist/{chunk-OD47TTAW.cjs.map → chunk-F2FOG4EG.cjs.map} +1 -1
  142. package/dist/chunk-F3EWRDIT.js +312 -0
  143. package/dist/chunk-F3EWRDIT.js.map +1 -0
  144. package/dist/{chunk-XCP454Q6.js → chunk-F4N67NAF.js} +12 -3
  145. package/dist/chunk-F4N67NAF.js.map +1 -0
  146. package/dist/{chunk-WGPLUCBD.js → chunk-F6W62K4J.js} +4 -4
  147. package/dist/{chunk-WGPLUCBD.js.map → chunk-F6W62K4J.js.map} +1 -1
  148. package/dist/chunk-FBCDYTWM.js +385 -0
  149. package/dist/chunk-FBCDYTWM.js.map +1 -0
  150. package/dist/{chunk-V7D3YGUV.js → chunk-FGLIP6YR.js} +4 -4
  151. package/dist/{chunk-V7D3YGUV.js.map → chunk-FGLIP6YR.js.map} +1 -1
  152. package/dist/{chunk-VU6UTJRM.js → chunk-FIKO4WR6.js} +3 -3
  153. package/dist/{chunk-VU6UTJRM.js.map → chunk-FIKO4WR6.js.map} +1 -1
  154. package/dist/chunk-FSGJXCBG.cjs +318 -0
  155. package/dist/chunk-FSGJXCBG.cjs.map +1 -0
  156. package/dist/chunk-FSWHZY3T.cjs +328 -0
  157. package/dist/chunk-FSWHZY3T.cjs.map +1 -0
  158. package/dist/chunk-FTEZNCRI.js +29 -0
  159. package/dist/chunk-FTEZNCRI.js.map +1 -0
  160. package/dist/{chunk-YVPC65ZJ.cjs → chunk-GF2BE4FB.cjs} +91 -32
  161. package/dist/chunk-GF2BE4FB.cjs.map +1 -0
  162. package/dist/{chunk-JEIW7BSV.cjs → chunk-GKDHMNUA.cjs} +2 -52
  163. package/dist/chunk-GKDHMNUA.cjs.map +1 -0
  164. package/dist/chunk-GM32IDVL.cjs +356 -0
  165. package/dist/chunk-GM32IDVL.cjs.map +1 -0
  166. package/dist/chunk-GVM6DTR5.js +90 -0
  167. package/dist/chunk-GVM6DTR5.js.map +1 -0
  168. package/dist/{chunk-SQHMGT4W.js → chunk-GW4RFJZ5.js} +7 -7
  169. package/dist/chunk-GW4RFJZ5.js.map +1 -0
  170. package/dist/chunk-GY5SP4ST.js +3 -0
  171. package/dist/chunk-GY5SP4ST.js.map +1 -0
  172. package/dist/chunk-H2Y7HZV5.js +3 -0
  173. package/dist/chunk-H2Y7HZV5.js.map +1 -0
  174. package/dist/chunk-H3P7POFC.cjs +337 -0
  175. package/dist/chunk-H3P7POFC.cjs.map +1 -0
  176. package/dist/{chunk-JID7AZTO.cjs → chunk-H3ROMJYI.cjs} +4 -4
  177. package/dist/{chunk-JID7AZTO.cjs.map → chunk-H3ROMJYI.cjs.map} +1 -1
  178. package/dist/{chunk-462XSCP3.cjs → chunk-HCIXGFWR.cjs} +4 -4
  179. package/dist/{chunk-462XSCP3.cjs.map → chunk-HCIXGFWR.cjs.map} +1 -1
  180. package/dist/{chunk-H4ZXMQQW.js → chunk-HDY7YQFX.js} +3 -3
  181. package/dist/{chunk-H4ZXMQQW.js.map → chunk-HDY7YQFX.js.map} +1 -1
  182. package/dist/chunk-HNFFFFYH.cjs +114 -0
  183. package/dist/chunk-HNFFFFYH.cjs.map +1 -0
  184. package/dist/chunk-HNXLLDPN.js +25 -0
  185. package/dist/chunk-HNXLLDPN.js.map +1 -0
  186. package/dist/{chunk-NV2CWBI2.cjs → chunk-IEY3ZJIT.cjs} +12 -3
  187. package/dist/chunk-IEY3ZJIT.cjs.map +1 -0
  188. package/dist/{chunk-3QEVGSFG.cjs → chunk-IGDO62KR.cjs} +5 -5
  189. package/dist/{chunk-3QEVGSFG.cjs.map → chunk-IGDO62KR.cjs.map} +1 -1
  190. package/dist/chunk-IT775BYG.js +179 -0
  191. package/dist/chunk-IT775BYG.js.map +1 -0
  192. package/dist/{chunk-N5O47VGS.cjs → chunk-IVGI353O.cjs} +2 -2
  193. package/dist/{chunk-N5O47VGS.cjs.map → chunk-IVGI353O.cjs.map} +1 -1
  194. package/dist/chunk-IWRBJHO3.cjs +51 -0
  195. package/dist/chunk-IWRBJHO3.cjs.map +1 -0
  196. package/dist/{chunk-VILW53UZ.js → chunk-JMAZ2GKT.js} +3 -3
  197. package/dist/{chunk-VILW53UZ.js.map → chunk-JMAZ2GKT.js.map} +1 -1
  198. package/dist/{chunk-WWJIW2IH.cjs → chunk-JSXIB6EJ.cjs} +4 -4
  199. package/dist/{chunk-WWJIW2IH.cjs.map → chunk-JSXIB6EJ.cjs.map} +1 -1
  200. package/dist/{chunk-KRU6IGV7.js → chunk-JUJGWUAN.js} +28 -6
  201. package/dist/chunk-JUJGWUAN.js.map +1 -0
  202. package/dist/{chunk-FXO5ARBB.cjs → chunk-KDW6BD4O.cjs} +4 -4
  203. package/dist/{chunk-FXO5ARBB.cjs.map → chunk-KDW6BD4O.cjs.map} +1 -1
  204. package/dist/{chunk-Z5V7SAZ4.js → chunk-KFEN2SRZ.js} +3 -3
  205. package/dist/{chunk-Z5V7SAZ4.js.map → chunk-KFEN2SRZ.js.map} +1 -1
  206. package/dist/{chunk-XEAT7XJG.cjs → chunk-KQ6GLYFZ.cjs} +29 -13
  207. package/dist/chunk-KQ6GLYFZ.cjs.map +1 -0
  208. package/dist/chunk-L6K4PRZK.cjs +4 -0
  209. package/dist/chunk-L6K4PRZK.cjs.map +1 -0
  210. package/dist/{chunk-7ZDPD5ZX.cjs → chunk-LC3JL2HB.cjs} +11 -7
  211. package/dist/chunk-LC3JL2HB.cjs.map +1 -0
  212. package/dist/{chunk-P7UMS4E6.cjs → chunk-LC7PVBXH.cjs} +16 -8
  213. package/dist/chunk-LC7PVBXH.cjs.map +1 -0
  214. package/dist/{chunk-Y5HFM7LO.js → chunk-LDBNUJB7.js} +5 -5
  215. package/dist/{chunk-Y5HFM7LO.js.map → chunk-LDBNUJB7.js.map} +1 -1
  216. package/dist/chunk-LRAAJRE7.cjs +2707 -0
  217. package/dist/chunk-LRAAJRE7.cjs.map +1 -0
  218. package/dist/chunk-LUPRGPKP.js +2540 -0
  219. package/dist/chunk-LUPRGPKP.js.map +1 -0
  220. package/dist/chunk-M3VPGJMV.js +283 -0
  221. package/dist/chunk-M3VPGJMV.js.map +1 -0
  222. package/dist/{chunk-VKELAMAZ.js → chunk-N54FYWG6.js} +27 -11
  223. package/dist/chunk-N54FYWG6.js.map +1 -0
  224. package/dist/chunk-N5JDL4VE.js +3 -0
  225. package/dist/chunk-N5JDL4VE.js.map +1 -0
  226. package/dist/{chunk-2QKBTPUC.cjs → chunk-NAH65KPK.cjs} +8 -8
  227. package/dist/{chunk-2QKBTPUC.cjs.map → chunk-NAH65KPK.cjs.map} +1 -1
  228. package/dist/{chunk-PYJDVWXM.js → chunk-NUB5HRKS.js} +3 -3
  229. package/dist/{chunk-PYJDVWXM.js.map → chunk-NUB5HRKS.js.map} +1 -1
  230. package/dist/{chunk-WNZAYBVB.cjs → chunk-O6BJMVGT.cjs} +48 -48
  231. package/dist/{chunk-WNZAYBVB.cjs.map → chunk-O6BJMVGT.cjs.map} +1 -1
  232. package/dist/{chunk-SVSHA7XV.js → chunk-O6XDA3SI.js} +31 -33
  233. package/dist/chunk-O6XDA3SI.js.map +1 -0
  234. package/dist/chunk-OIF34LEN.cjs +425 -0
  235. package/dist/chunk-OIF34LEN.cjs.map +1 -0
  236. package/dist/chunk-OIMXMPH2.cjs +218 -0
  237. package/dist/chunk-OIMXMPH2.cjs.map +1 -0
  238. package/dist/{chunk-J5CSLNCN.cjs → chunk-OODVC2UD.cjs} +2 -2
  239. package/dist/{chunk-J5CSLNCN.cjs.map → chunk-OODVC2UD.cjs.map} +1 -1
  240. package/dist/{chunk-ACCAXVOG.js → chunk-OSTSZDQC.js} +134 -56
  241. package/dist/chunk-OSTSZDQC.js.map +1 -0
  242. package/dist/{chunk-LL6IWKI3.js → chunk-OW3SQJ7P.js} +3 -3
  243. package/dist/{chunk-LL6IWKI3.js.map → chunk-OW3SQJ7P.js.map} +1 -1
  244. package/dist/chunk-P22YCUVM.cjs +4 -0
  245. package/dist/chunk-P22YCUVM.cjs.map +1 -0
  246. package/dist/{chunk-CEQJGUAS.js → chunk-P4E3K3ND.js} +12 -5
  247. package/dist/chunk-P4E3K3ND.js.map +1 -0
  248. package/dist/{chunk-5GUOOLPR.cjs → chunk-P5CMZZRZ.cjs} +5 -5
  249. package/dist/{chunk-5GUOOLPR.cjs.map → chunk-P5CMZZRZ.cjs.map} +1 -1
  250. package/dist/{chunk-TMMVIUUN.js → chunk-P7D7BYFE.js} +4 -4
  251. package/dist/{chunk-TMMVIUUN.js.map → chunk-P7D7BYFE.js.map} +1 -1
  252. package/dist/{chunk-3T7QGLNB.js → chunk-PJEL5ZZV.js} +4 -2
  253. package/dist/chunk-PJEL5ZZV.js.map +1 -0
  254. package/dist/chunk-PYI2IWNX.cjs +281 -0
  255. package/dist/chunk-PYI2IWNX.cjs.map +1 -0
  256. package/dist/chunk-Q3YVLO52.cjs +174 -0
  257. package/dist/chunk-Q3YVLO52.cjs.map +1 -0
  258. package/dist/{chunk-WNM7IZJ7.js → chunk-QJ2L5RU6.js} +7 -7
  259. package/dist/{chunk-WNM7IZJ7.js.map → chunk-QJ2L5RU6.js.map} +1 -1
  260. package/dist/{chunk-X4LBUPJO.cjs → chunk-QX6AAVDE.cjs} +31 -33
  261. package/dist/chunk-QX6AAVDE.cjs.map +1 -0
  262. package/dist/{chunk-UV2FVNWT.cjs → chunk-RIUQP2QS.cjs} +5 -5
  263. package/dist/{chunk-UV2FVNWT.cjs.map → chunk-RIUQP2QS.cjs.map} +1 -1
  264. package/dist/chunk-RLVYWUXG.js +115 -0
  265. package/dist/chunk-RLVYWUXG.js.map +1 -0
  266. package/dist/{chunk-22CYDCXA.js → chunk-RM2HPQIC.js} +105 -14
  267. package/dist/chunk-RM2HPQIC.js.map +1 -0
  268. package/dist/{chunk-DEDN5HAG.js → chunk-RSJGTWLM.js} +3 -3
  269. package/dist/{chunk-DEDN5HAG.js.map → chunk-RSJGTWLM.js.map} +1 -1
  270. package/dist/{chunk-6EN3IQQI.cjs → chunk-RV45J2ZT.cjs} +8 -8
  271. package/dist/{chunk-6EN3IQQI.cjs.map → chunk-RV45J2ZT.cjs.map} +1 -1
  272. package/dist/chunk-RZSSQ7AT.js +333 -0
  273. package/dist/chunk-RZSSQ7AT.js.map +1 -0
  274. package/dist/{chunk-ENKFJJZX.js → chunk-S2JZL4JC.js} +6 -6
  275. package/dist/{chunk-ENKFJJZX.js.map → chunk-S2JZL4JC.js.map} +1 -1
  276. package/dist/{chunk-ELPW32ZI.cjs → chunk-S4XCPDEO.cjs} +60 -59
  277. package/dist/chunk-S4XCPDEO.cjs.map +1 -0
  278. package/dist/{chunk-OE5CKRUC.js → chunk-SACHTD7B.js} +34 -4
  279. package/dist/chunk-SACHTD7B.js.map +1 -0
  280. package/dist/{chunk-U42F3HLE.cjs → chunk-SAGJHL2Z.cjs} +275 -5
  281. package/dist/chunk-SAGJHL2Z.cjs.map +1 -0
  282. package/dist/{chunk-VROIMIHB.cjs → chunk-SHBCUXFS.cjs} +28 -6
  283. package/dist/chunk-SHBCUXFS.cjs.map +1 -0
  284. package/dist/{chunk-RJ6NTJHC.js → chunk-SRMTRD7F.js} +3 -3
  285. package/dist/{chunk-RJ6NTJHC.js.map → chunk-SRMTRD7F.js.map} +1 -1
  286. package/dist/{chunk-IX6KFB3K.cjs → chunk-SW2E7XKY.cjs} +9 -9
  287. package/dist/{chunk-IX6KFB3K.cjs.map → chunk-SW2E7XKY.cjs.map} +1 -1
  288. package/dist/chunk-SZSRGUVO.js +402 -0
  289. package/dist/chunk-SZSRGUVO.js.map +1 -0
  290. package/dist/{chunk-NJ6MY6V5.js → chunk-T5BBZQ66.js} +3 -3
  291. package/dist/{chunk-NJ6MY6V5.js.map → chunk-T5BBZQ66.js.map} +1 -1
  292. package/dist/{chunk-JI244Y7C.js → chunk-T5NOFXOL.js} +275 -5
  293. package/dist/chunk-T5NOFXOL.js.map +1 -0
  294. package/dist/{chunk-2IZLKPUW.js → chunk-THLIL6PY.js} +3 -3
  295. package/dist/{chunk-2IZLKPUW.js.map → chunk-THLIL6PY.js.map} +1 -1
  296. package/dist/{chunk-HZ4MBUC3.js → chunk-TI3TQQ7F.js} +4 -53
  297. package/dist/chunk-TI3TQQ7F.js.map +1 -0
  298. package/dist/chunk-TVU4KB27.cjs +353 -0
  299. package/dist/chunk-TVU4KB27.cjs.map +1 -0
  300. package/dist/{chunk-5JJ2DAE4.js → chunk-TWQSMUE6.js} +7 -3
  301. package/dist/chunk-TWQSMUE6.js.map +1 -0
  302. package/dist/{chunk-TAXD5ADA.cjs → chunk-UEDTZYGI.cjs} +3 -3
  303. package/dist/{chunk-TAXD5ADA.cjs.map → chunk-UEDTZYGI.cjs.map} +1 -1
  304. package/dist/{chunk-3QGS6CXD.js → chunk-UJDWFDKE.js} +3 -3
  305. package/dist/{chunk-3QGS6CXD.js.map → chunk-UJDWFDKE.js.map} +1 -1
  306. package/dist/chunk-UNFDIBKJ.js +258 -0
  307. package/dist/chunk-UNFDIBKJ.js.map +1 -0
  308. package/dist/{chunk-UQ3VVR6A.cjs → chunk-UPWIJC6I.cjs} +3 -3
  309. package/dist/{chunk-UQ3VVR6A.cjs.map → chunk-UPWIJC6I.cjs.map} +1 -1
  310. package/dist/chunk-UTIPENPW.cjs +286 -0
  311. package/dist/chunk-UTIPENPW.cjs.map +1 -0
  312. package/dist/{chunk-S7WCHDBO.js → chunk-VCI2Y7ST.js} +3 -3
  313. package/dist/{chunk-S7WCHDBO.js.map → chunk-VCI2Y7ST.js.map} +1 -1
  314. package/dist/chunk-VEE46VTX.js +166 -0
  315. package/dist/chunk-VEE46VTX.js.map +1 -0
  316. package/dist/chunk-VFFV7EMT.cjs +188 -0
  317. package/dist/chunk-VFFV7EMT.cjs.map +1 -0
  318. package/dist/chunk-VINZZQBD.cjs +323 -0
  319. package/dist/chunk-VINZZQBD.cjs.map +1 -0
  320. package/dist/chunk-VPTASZ2O.cjs +171 -0
  321. package/dist/chunk-VPTASZ2O.cjs.map +1 -0
  322. package/dist/{chunk-P2CA3XGI.js → chunk-VSRO4PAI.js} +23 -5
  323. package/dist/chunk-VSRO4PAI.js.map +1 -0
  324. package/dist/{chunk-L6MDULYB.js → chunk-VU3ZMJBN.js} +2 -2
  325. package/dist/{chunk-L6MDULYB.js.map → chunk-VU3ZMJBN.js.map} +1 -1
  326. package/dist/{chunk-XI34EGK5.cjs → chunk-VV2U36T6.cjs} +9 -9
  327. package/dist/{chunk-XI34EGK5.cjs.map → chunk-VV2U36T6.cjs.map} +1 -1
  328. package/dist/{chunk-VPWJCJCX.cjs → chunk-VXW7D5LR.cjs} +26 -8
  329. package/dist/chunk-VXW7D5LR.cjs.map +1 -0
  330. package/dist/chunk-W3HXHIDO.cjs +2573 -0
  331. package/dist/chunk-W3HXHIDO.cjs.map +1 -0
  332. package/dist/{chunk-GOALNQZ2.js → chunk-WFBUBT54.js} +4 -83
  333. package/dist/chunk-WFBUBT54.js.map +1 -0
  334. package/dist/chunk-WFL4N5PC.js +283 -0
  335. package/dist/chunk-WFL4N5PC.js.map +1 -0
  336. package/dist/chunk-WQHBMZSC.js +295 -0
  337. package/dist/chunk-WQHBMZSC.js.map +1 -0
  338. package/dist/chunk-X3RSNAMX.js +195 -0
  339. package/dist/chunk-X3RSNAMX.js.map +1 -0
  340. package/dist/chunk-X5JOEZVR.js +525 -0
  341. package/dist/chunk-X5JOEZVR.js.map +1 -0
  342. package/dist/chunk-XBAAHOCP.js +3 -0
  343. package/dist/chunk-XBAAHOCP.js.map +1 -0
  344. package/dist/chunk-XDIMTPZU.cjs +202 -0
  345. package/dist/chunk-XDIMTPZU.cjs.map +1 -0
  346. package/dist/chunk-XDU65GLW.js +21 -0
  347. package/dist/chunk-XDU65GLW.js.map +1 -0
  348. package/dist/chunk-XI74P5F2.cjs +424 -0
  349. package/dist/chunk-XI74P5F2.cjs.map +1 -0
  350. package/dist/chunk-XNPDZANN.cjs +238 -0
  351. package/dist/chunk-XNPDZANN.cjs.map +1 -0
  352. package/dist/{chunk-WIAQQNFU.cjs → chunk-XRVMYT5G.cjs} +106 -13
  353. package/dist/chunk-XRVMYT5G.cjs.map +1 -0
  354. package/dist/chunk-XVW5DPPP.js +429 -0
  355. package/dist/chunk-XVW5DPPP.js.map +1 -0
  356. package/dist/chunk-XXA4NZUC.js +3 -0
  357. package/dist/chunk-XXA4NZUC.js.map +1 -0
  358. package/dist/chunk-Y424YL55.js +59 -0
  359. package/dist/chunk-Y424YL55.js.map +1 -0
  360. package/dist/chunk-Y4QNLW7W.js +300 -0
  361. package/dist/chunk-Y4QNLW7W.js.map +1 -0
  362. package/dist/chunk-Y7ZJZLJY.js +2657 -0
  363. package/dist/chunk-Y7ZJZLJY.js.map +1 -0
  364. package/dist/chunk-YGS2TRMP.js +38 -0
  365. package/dist/chunk-YGS2TRMP.js.map +1 -0
  366. package/dist/chunk-YUMOM3KE.js +167 -0
  367. package/dist/chunk-YUMOM3KE.js.map +1 -0
  368. package/dist/chunk-YW2AKBLS.cjs +23 -0
  369. package/dist/chunk-YW2AKBLS.cjs.map +1 -0
  370. package/dist/chunk-ZNUMOJOI.cjs +4 -0
  371. package/dist/chunk-ZNUMOJOI.cjs.map +1 -0
  372. package/dist/chunk-ZSNFL736.cjs +306 -0
  373. package/dist/chunk-ZSNFL736.cjs.map +1 -0
  374. package/dist/components/Accordion/index.cjs +2 -2
  375. package/dist/components/Accordion/index.d.cts +6 -0
  376. package/dist/components/Accordion/index.d.ts +6 -0
  377. package/dist/components/Accordion/index.js +1 -1
  378. package/dist/components/ActionPlan/index.cjs +34 -0
  379. package/dist/components/ActionPlan/index.cjs.map +1 -0
  380. package/dist/components/ActionPlan/index.d.cts +65 -0
  381. package/dist/components/ActionPlan/index.d.ts +65 -0
  382. package/dist/components/ActionPlan/index.js +21 -0
  383. package/dist/components/ActionPlan/index.js.map +1 -0
  384. package/dist/components/ActivityFeed/index.cjs +31 -0
  385. package/dist/components/ActivityFeed/index.cjs.map +1 -0
  386. package/dist/components/ActivityFeed/index.d.cts +99 -0
  387. package/dist/components/ActivityFeed/index.d.ts +99 -0
  388. package/dist/components/ActivityFeed/index.js +18 -0
  389. package/dist/components/ActivityFeed/index.js.map +1 -0
  390. package/dist/components/Alert/index.d.cts +1 -1
  391. package/dist/components/Alert/index.d.ts +1 -1
  392. package/dist/components/AlertDialog/index.cjs +19 -5
  393. package/dist/components/AlertDialog/index.d.cts +94 -16
  394. package/dist/components/AlertDialog/index.d.ts +94 -16
  395. package/dist/components/AlertDialog/index.js +6 -4
  396. package/dist/components/AssociationList/index.cjs +29 -0
  397. package/dist/components/AssociationList/index.cjs.map +1 -0
  398. package/dist/components/AssociationList/index.d.cts +50 -0
  399. package/dist/components/AssociationList/index.d.ts +50 -0
  400. package/dist/components/AssociationList/index.js +16 -0
  401. package/dist/components/AssociationList/index.js.map +1 -0
  402. package/dist/components/AudioRecorder/index.d.cts +2 -2
  403. package/dist/components/AudioRecorder/index.d.ts +2 -2
  404. package/dist/components/Autocomplete/index.d.cts +8 -2
  405. package/dist/components/Autocomplete/index.d.ts +8 -2
  406. package/dist/components/Avatar/index.cjs +9 -7
  407. package/dist/components/Avatar/index.d.cts +46 -15
  408. package/dist/components/Avatar/index.d.ts +46 -15
  409. package/dist/components/Avatar/index.js +3 -1
  410. package/dist/components/AvatarGroup/index.cjs +20 -0
  411. package/dist/components/AvatarGroup/index.cjs.map +1 -0
  412. package/dist/components/AvatarGroup/index.d.cts +57 -0
  413. package/dist/components/AvatarGroup/index.d.ts +57 -0
  414. package/dist/components/AvatarGroup/index.js +7 -0
  415. package/dist/components/AvatarGroup/index.js.map +1 -0
  416. package/dist/components/Badge/index.cjs +3 -3
  417. package/dist/components/Badge/index.d.cts +16 -2
  418. package/dist/components/Badge/index.d.ts +16 -2
  419. package/dist/components/Badge/index.js +1 -1
  420. package/dist/components/BoardView/index.cjs +24 -0
  421. package/dist/components/BoardView/index.cjs.map +1 -0
  422. package/dist/components/BoardView/index.d.cts +41 -0
  423. package/dist/components/BoardView/index.d.ts +41 -0
  424. package/dist/components/BoardView/index.js +7 -0
  425. package/dist/components/BoardView/index.js.map +1 -0
  426. package/dist/components/Button/index.cjs +5 -3
  427. package/dist/components/Button/index.d.cts +2 -1
  428. package/dist/components/Button/index.d.ts +2 -1
  429. package/dist/components/Button/index.js +3 -1
  430. package/dist/components/CalendarHeatmap/index.cjs +18 -0
  431. package/dist/components/CalendarHeatmap/index.cjs.map +1 -0
  432. package/dist/components/CalendarHeatmap/index.d.cts +47 -0
  433. package/dist/components/CalendarHeatmap/index.d.ts +47 -0
  434. package/dist/components/CalendarHeatmap/index.js +5 -0
  435. package/dist/components/CalendarHeatmap/index.js.map +1 -0
  436. package/dist/components/CalendarView/index.cjs +24 -0
  437. package/dist/components/CalendarView/index.cjs.map +1 -0
  438. package/dist/components/CalendarView/index.d.cts +39 -0
  439. package/dist/components/CalendarView/index.d.ts +39 -0
  440. package/dist/components/CalendarView/index.js +11 -0
  441. package/dist/components/CalendarView/index.js.map +1 -0
  442. package/dist/components/Card/index.d.cts +3 -3
  443. package/dist/components/Card/index.d.ts +3 -3
  444. package/dist/components/ClampedText/index.cjs +3 -2
  445. package/dist/components/ClampedText/index.js +2 -1
  446. package/dist/components/CollabStatus/index.cjs +6 -4
  447. package/dist/components/CollabStatus/index.d.cts +11 -0
  448. package/dist/components/CollabStatus/index.d.ts +11 -0
  449. package/dist/components/CollabStatus/index.js +3 -1
  450. package/dist/components/Collapsible/index.cjs +6 -6
  451. package/dist/components/Collapsible/index.d.cts +6 -0
  452. package/dist/components/Collapsible/index.d.ts +6 -0
  453. package/dist/components/Collapsible/index.js +3 -3
  454. package/dist/components/CompletenessMeter/index.cjs +23 -0
  455. package/dist/components/CompletenessMeter/index.cjs.map +1 -0
  456. package/dist/components/CompletenessMeter/index.d.cts +52 -0
  457. package/dist/components/CompletenessMeter/index.d.ts +52 -0
  458. package/dist/components/CompletenessMeter/index.js +6 -0
  459. package/dist/components/CompletenessMeter/index.js.map +1 -0
  460. package/dist/components/CountryCodeDropdown/index.cjs +5 -5
  461. package/dist/components/CountryCodeDropdown/index.js +2 -2
  462. package/dist/components/CustomizableDashboard/index.cjs +12 -10
  463. package/dist/components/CustomizableDashboard/index.js +5 -3
  464. package/dist/components/DateInput/index.d.cts +36 -4
  465. package/dist/components/DateInput/index.d.ts +36 -4
  466. package/dist/components/Dropdown/index.cjs +11 -10
  467. package/dist/components/Dropdown/index.d.cts +2 -1
  468. package/dist/components/Dropdown/index.d.ts +2 -1
  469. package/dist/components/Dropdown/index.js +4 -3
  470. package/dist/components/EmailEditor/index.cjs +67 -0
  471. package/dist/components/EmailEditor/index.cjs.map +1 -0
  472. package/dist/components/EmailEditor/index.d.cts +347 -0
  473. package/dist/components/EmailEditor/index.d.ts +347 -0
  474. package/dist/components/EmailEditor/index.js +26 -0
  475. package/dist/components/EmailEditor/index.js.map +1 -0
  476. package/dist/components/FieldHistory/index.cjs +34 -0
  477. package/dist/components/FieldHistory/index.cjs.map +1 -0
  478. package/dist/components/FieldHistory/index.d.cts +66 -0
  479. package/dist/components/FieldHistory/index.d.ts +66 -0
  480. package/dist/components/FieldHistory/index.js +21 -0
  481. package/dist/components/FieldHistory/index.js.map +1 -0
  482. package/dist/components/FloatingWindow/index.cjs +6 -4
  483. package/dist/components/FloatingWindow/index.js +4 -2
  484. package/dist/components/GanttView/index.cjs +20 -0
  485. package/dist/components/GanttView/index.cjs.map +1 -0
  486. package/dist/components/GanttView/index.d.cts +36 -0
  487. package/dist/components/GanttView/index.d.ts +36 -0
  488. package/dist/components/GanttView/index.js +7 -0
  489. package/dist/components/GanttView/index.js.map +1 -0
  490. package/dist/components/GlossaryTooltip/index.cjs +3 -3
  491. package/dist/components/GlossaryTooltip/index.js +2 -2
  492. package/dist/components/InlineEdit/index.cjs +20 -0
  493. package/dist/components/InlineEdit/index.cjs.map +1 -0
  494. package/dist/components/InlineEdit/index.d.cts +56 -0
  495. package/dist/components/InlineEdit/index.d.ts +56 -0
  496. package/dist/components/InlineEdit/index.js +7 -0
  497. package/dist/components/InlineEdit/index.js.map +1 -0
  498. package/dist/components/KeyboardShortcutsOverlay/index.cjs +5 -5
  499. package/dist/components/KeyboardShortcutsOverlay/index.js +3 -3
  500. package/dist/components/ListView/index.cjs +24 -0
  501. package/dist/components/ListView/index.cjs.map +1 -0
  502. package/dist/components/ListView/index.d.cts +124 -0
  503. package/dist/components/ListView/index.d.ts +124 -0
  504. package/dist/components/ListView/index.js +11 -0
  505. package/dist/components/ListView/index.js.map +1 -0
  506. package/dist/components/LogoUploader/index.cjs +18 -0
  507. package/dist/components/LogoUploader/index.cjs.map +1 -0
  508. package/dist/components/LogoUploader/index.d.cts +49 -0
  509. package/dist/components/LogoUploader/index.d.ts +49 -0
  510. package/dist/components/LogoUploader/index.js +5 -0
  511. package/dist/components/LogoUploader/index.js.map +1 -0
  512. package/dist/components/Markdown/index.cjs +21 -19
  513. package/dist/components/Markdown/index.js +9 -7
  514. package/dist/components/MediaEditor/index.cjs +16 -14
  515. package/dist/components/MediaEditor/index.d.cts +91 -2
  516. package/dist/components/MediaEditor/index.d.ts +91 -2
  517. package/dist/components/MediaEditor/index.js +11 -9
  518. package/dist/components/MediaFeed/index.cjs +29 -0
  519. package/dist/components/MediaFeed/index.cjs.map +1 -0
  520. package/dist/components/MediaFeed/index.d.cts +104 -0
  521. package/dist/components/MediaFeed/index.d.ts +104 -0
  522. package/dist/components/MediaFeed/index.js +20 -0
  523. package/dist/components/MediaFeed/index.js.map +1 -0
  524. package/dist/components/MediaPlayer/index.cjs +8 -6
  525. package/dist/components/MediaPlayer/index.d.cts +19 -1
  526. package/dist/components/MediaPlayer/index.d.ts +19 -1
  527. package/dist/components/MediaPlayer/index.js +5 -3
  528. package/dist/components/MegaMenu/index.cjs +7 -5
  529. package/dist/components/MegaMenu/index.js +4 -2
  530. package/dist/components/Modal/index.cjs +10 -10
  531. package/dist/components/Modal/index.js +2 -2
  532. package/dist/components/Pagination/index.d.cts +1 -1
  533. package/dist/components/Pagination/index.d.ts +1 -1
  534. package/dist/components/PhiMask/index.cjs +18 -0
  535. package/dist/components/PhiMask/index.cjs.map +1 -0
  536. package/dist/components/PhiMask/index.d.cts +45 -0
  537. package/dist/components/PhiMask/index.d.ts +45 -0
  538. package/dist/components/PhiMask/index.js +5 -0
  539. package/dist/components/PhiMask/index.js.map +1 -0
  540. package/dist/components/Progress/index.cjs +6 -6
  541. package/dist/components/Progress/index.d.cts +8 -2
  542. package/dist/components/Progress/index.d.ts +8 -2
  543. package/dist/components/Progress/index.js +1 -1
  544. package/dist/components/PropertyList/index.cjs +25 -0
  545. package/dist/components/PropertyList/index.cjs.map +1 -0
  546. package/dist/components/PropertyList/index.d.cts +87 -0
  547. package/dist/components/PropertyList/index.d.ts +87 -0
  548. package/dist/components/PropertyList/index.js +12 -0
  549. package/dist/components/PropertyList/index.js.map +1 -0
  550. package/dist/components/Q/index.d.cts +2 -2
  551. package/dist/components/Q/index.d.ts +2 -2
  552. package/dist/components/QuickAction/index.d.cts +1 -1
  553. package/dist/components/QuickAction/index.d.ts +1 -1
  554. package/dist/components/RadialExplorer/index.cjs +7 -5
  555. package/dist/components/RadialExplorer/index.js +6 -4
  556. package/dist/components/Rating/index.cjs +28 -0
  557. package/dist/components/Rating/index.cjs.map +1 -0
  558. package/dist/components/Rating/index.d.cts +85 -0
  559. package/dist/components/Rating/index.d.ts +85 -0
  560. package/dist/components/Rating/index.js +7 -0
  561. package/dist/components/Rating/index.js.map +1 -0
  562. package/dist/components/RecordButton/index.d.cts +1 -1
  563. package/dist/components/RecordButton/index.d.ts +1 -1
  564. package/dist/components/RecordHeader/index.cjs +29 -0
  565. package/dist/components/RecordHeader/index.cjs.map +1 -0
  566. package/dist/components/RecordHeader/index.d.cts +96 -0
  567. package/dist/components/RecordHeader/index.d.ts +96 -0
  568. package/dist/components/RecordHeader/index.js +16 -0
  569. package/dist/components/RecordHeader/index.js.map +1 -0
  570. package/dist/components/RecordLayout/index.cjs +21 -0
  571. package/dist/components/RecordLayout/index.cjs.map +1 -0
  572. package/dist/components/RecordLayout/index.d.cts +40 -0
  573. package/dist/components/RecordLayout/index.d.ts +40 -0
  574. package/dist/components/RecordLayout/index.js +8 -0
  575. package/dist/components/RecordLayout/index.js.map +1 -0
  576. package/dist/components/RichTextEditor/index.cjs +11 -8
  577. package/dist/components/RichTextEditor/index.d.cts +12 -2
  578. package/dist/components/RichTextEditor/index.d.ts +12 -2
  579. package/dist/components/RichTextEditor/index.js +8 -5
  580. package/dist/components/ScrollArea/index.d.cts +1 -1
  581. package/dist/components/ScrollArea/index.d.ts +1 -1
  582. package/dist/components/SectionSpyNav/index.cjs +5 -3
  583. package/dist/components/SectionSpyNav/index.js +4 -2
  584. package/dist/components/Select/index.cjs +4 -4
  585. package/dist/components/Select/index.d.cts +2 -2
  586. package/dist/components/Select/index.d.ts +2 -2
  587. package/dist/components/Select/index.js +2 -2
  588. package/dist/components/Skeleton/index.d.cts +1 -1
  589. package/dist/components/Skeleton/index.d.ts +1 -1
  590. package/dist/components/Slider/index.d.cts +2 -2
  591. package/dist/components/Slider/index.d.ts +2 -2
  592. package/dist/components/SliderCalculator/index.cjs +4 -4
  593. package/dist/components/SliderCalculator/index.js +2 -2
  594. package/dist/components/SourceTip/index.cjs +3 -3
  595. package/dist/components/SourceTip/index.js +2 -2
  596. package/dist/components/Spinner/index.d.cts +2 -2
  597. package/dist/components/Spinner/index.d.ts +2 -2
  598. package/dist/components/SuperChat/index.cjs +1300 -713
  599. package/dist/components/SuperChat/index.cjs.map +1 -1
  600. package/dist/components/SuperChat/index.d.cts +126 -8
  601. package/dist/components/SuperChat/index.d.ts +126 -8
  602. package/dist/components/SuperChat/index.js +1404 -817
  603. package/dist/components/SuperChat/index.js.map +1 -1
  604. package/dist/components/SuperChat/plugins/index.cjs +7 -6
  605. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  606. package/dist/components/SuperChat/plugins/index.d.cts +2 -3
  607. package/dist/components/SuperChat/plugins/index.d.ts +2 -3
  608. package/dist/components/SuperChat/plugins/index.js +6 -5
  609. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  610. package/dist/components/Tabs/index.cjs +9 -7
  611. package/dist/components/Tabs/index.d.cts +12 -1
  612. package/dist/components/Tabs/index.d.ts +12 -1
  613. package/dist/components/Tabs/index.js +3 -1
  614. package/dist/components/TagEditor/index.cjs +22 -0
  615. package/dist/components/TagEditor/index.cjs.map +1 -0
  616. package/dist/components/TagEditor/index.d.cts +46 -0
  617. package/dist/components/TagEditor/index.d.ts +46 -0
  618. package/dist/components/TagEditor/index.js +9 -0
  619. package/dist/components/TagEditor/index.js.map +1 -0
  620. package/dist/components/Text/index.d.cts +3 -3
  621. package/dist/components/Text/index.d.ts +3 -3
  622. package/dist/components/Textarea/index.d.cts +2 -2
  623. package/dist/components/Textarea/index.d.ts +2 -2
  624. package/dist/components/ThemeProvider/index.cjs +9 -9
  625. package/dist/components/ThemeProvider/index.d.cts +3 -1
  626. package/dist/components/ThemeProvider/index.d.ts +3 -1
  627. package/dist/components/ThemeProvider/index.js +3 -3
  628. package/dist/components/Tooltip/index.cjs +3 -3
  629. package/dist/components/Tooltip/index.js +2 -2
  630. package/dist/components/TranscriptView/index.d.cts +85 -4
  631. package/dist/components/TranscriptView/index.d.ts +85 -4
  632. package/dist/components/UserPicker/index.cjs +24 -0
  633. package/dist/components/UserPicker/index.cjs.map +1 -0
  634. package/dist/components/UserPicker/index.d.cts +60 -0
  635. package/dist/components/UserPicker/index.d.ts +60 -0
  636. package/dist/components/UserPicker/index.js +11 -0
  637. package/dist/components/UserPicker/index.js.map +1 -0
  638. package/dist/components/VideoCard/index.cjs +4 -4
  639. package/dist/components/VideoCard/index.js +2 -2
  640. package/dist/components/ViewSet/index.cjs +25 -0
  641. package/dist/components/ViewSet/index.cjs.map +1 -0
  642. package/dist/components/ViewSet/index.d.cts +201 -0
  643. package/dist/components/ViewSet/index.d.ts +201 -0
  644. package/dist/components/ViewSet/index.js +16 -0
  645. package/dist/components/ViewSet/index.js.map +1 -0
  646. package/dist/components/ViewSwitcher/index.cjs +20 -0
  647. package/dist/components/ViewSwitcher/index.cjs.map +1 -0
  648. package/dist/components/ViewSwitcher/index.d.cts +39 -0
  649. package/dist/components/ViewSwitcher/index.d.ts +39 -0
  650. package/dist/components/ViewSwitcher/index.js +7 -0
  651. package/dist/components/ViewSwitcher/index.js.map +1 -0
  652. package/dist/datavis.cjs +6 -4
  653. package/dist/datavis.cjs.map +1 -1
  654. package/dist/datavis.d.cts +167 -13
  655. package/dist/datavis.d.ts +167 -13
  656. package/dist/datavis.js +4 -2
  657. package/dist/datavis.js.map +1 -1
  658. package/dist/deck.cjs +3360 -0
  659. package/dist/deck.cjs.map +1 -0
  660. package/dist/deck.d.cts +712 -0
  661. package/dist/deck.d.ts +712 -0
  662. package/dist/deck.js +3316 -0
  663. package/dist/deck.js.map +1 -0
  664. package/dist/esheet.cjs +19 -16
  665. package/dist/esheet.cjs.map +1 -1
  666. package/dist/esheet.d.cts +183 -1
  667. package/dist/esheet.d.ts +183 -1
  668. package/dist/esheet.js +16 -13
  669. package/dist/esheet.js.map +1 -1
  670. package/dist/globe.cjs +2 -2
  671. package/dist/globe.js +1 -1
  672. package/dist/hooks/index.cjs +94 -35
  673. package/dist/hooks/index.d.cts +680 -36
  674. package/dist/hooks/index.d.ts +680 -36
  675. package/dist/hooks/index.js +10 -7
  676. package/dist/icons-wBacj6BW.d.cts +142 -0
  677. package/dist/icons-wBacj6BW.d.ts +142 -0
  678. package/dist/index.cjs +2152 -1276
  679. package/dist/index.cjs.map +1 -1
  680. package/dist/index.d.cts +10375 -626
  681. package/dist/index.d.ts +10375 -626
  682. package/dist/index.js +740 -313
  683. package/dist/index.js.map +1 -1
  684. package/dist/kerebron.cjs +58 -19
  685. package/dist/kerebron.cjs.map +1 -1
  686. package/dist/kerebron.css +115 -0
  687. package/dist/kerebron.d.cts +37 -0
  688. package/dist/kerebron.d.ts +37 -0
  689. package/dist/kerebron.js +58 -19
  690. package/dist/kerebron.js.map +1 -1
  691. package/dist/maps.cjs +160 -0
  692. package/dist/maps.cjs.map +1 -0
  693. package/dist/maps.d.cts +42 -0
  694. package/dist/maps.d.ts +42 -0
  695. package/dist/maps.js +138 -0
  696. package/dist/maps.js.map +1 -0
  697. package/dist/motion.cjs +7 -7
  698. package/dist/motion.d.cts +186 -2
  699. package/dist/motion.d.ts +186 -2
  700. package/dist/motion.js +2 -2
  701. package/dist/org-chart.cjs +1302 -0
  702. package/dist/org-chart.cjs.map +1 -0
  703. package/dist/org-chart.d.cts +164 -0
  704. package/dist/org-chart.d.ts +164 -0
  705. package/dist/org-chart.js +1277 -0
  706. package/dist/org-chart.js.map +1 -0
  707. package/dist/q.d.cts +25 -3
  708. package/dist/q.d.ts +25 -3
  709. package/dist/styles/effects.css +133 -0
  710. package/dist/styles/init.css +22 -3
  711. package/dist/styles.css +1 -1
  712. package/dist/tailwind-preset.cjs +4 -4
  713. package/dist/tailwind-preset.js +1 -1
  714. package/dist/templates.cjs +156 -0
  715. package/dist/templates.cjs.map +1 -0
  716. package/dist/templates.d.cts +734 -0
  717. package/dist/templates.d.ts +734 -0
  718. package/dist/templates.js +11 -0
  719. package/dist/templates.js.map +1 -0
  720. package/dist/types-CDeBNZiE.d.cts +92 -0
  721. package/dist/types-CDeBNZiE.d.ts +92 -0
  722. package/dist/types-Cx1FHLq2.d.cts +548 -0
  723. package/dist/types-Cx1FHLq2.d.ts +548 -0
  724. package/dist/types-DsdZvEI1.d.cts +92 -0
  725. package/dist/types-DsdZvEI1.d.ts +92 -0
  726. package/dist/utils/index.cjs +9 -9
  727. package/dist/utils/index.d.cts +13 -2
  728. package/dist/utils/index.d.ts +13 -2
  729. package/dist/utils/index.js +1 -1
  730. package/package.json +82 -13
  731. package/dist/Animated-XmH6k8pZ.d.cts +0 -188
  732. package/dist/Animated-XmH6k8pZ.d.ts +0 -188
  733. package/dist/CsvBlock-ROJCKJDP.cjs +0 -16
  734. package/dist/CsvBlock-UWPMTLE2.js +0 -7
  735. package/dist/HtmlPreviewBlock-DWFN6EUB.cjs +0 -16
  736. package/dist/HtmlPreviewBlock-ME5U3XNS.js +0 -7
  737. package/dist/MedicationEditor-Bp4NLy7y.d.cts +0 -352
  738. package/dist/MedicationEditor-Bp4NLy7y.d.ts +0 -352
  739. package/dist/MermaidBlock-2B6CPD6Y.js +0 -7
  740. package/dist/MermaidBlock-D2UC5M55.cjs +0 -16
  741. package/dist/SurveyBlock-4CD4AYMJ.cjs +0 -16
  742. package/dist/SurveyBlock-4DO62RBT.js +0 -7
  743. package/dist/chunk-22CYDCXA.js.map +0 -1
  744. package/dist/chunk-2YCERQWC.js.map +0 -1
  745. package/dist/chunk-3T7QGLNB.js.map +0 -1
  746. package/dist/chunk-5JJ2DAE4.js.map +0 -1
  747. package/dist/chunk-6HFFWEM3.cjs +0 -22
  748. package/dist/chunk-6HFFWEM3.cjs.map +0 -1
  749. package/dist/chunk-7ZDPD5ZX.cjs.map +0 -1
  750. package/dist/chunk-7ZVTLTJF.js +0 -109
  751. package/dist/chunk-7ZVTLTJF.js.map +0 -1
  752. package/dist/chunk-ACCAXVOG.js.map +0 -1
  753. package/dist/chunk-BMSG4NBH.js +0 -56
  754. package/dist/chunk-BMSG4NBH.js.map +0 -1
  755. package/dist/chunk-CEQJGUAS.js.map +0 -1
  756. package/dist/chunk-DVOQ3JNO.js.map +0 -1
  757. package/dist/chunk-E4IBHYJ7.cjs +0 -80
  758. package/dist/chunk-E4IBHYJ7.cjs.map +0 -1
  759. package/dist/chunk-ELPW32ZI.cjs.map +0 -1
  760. package/dist/chunk-GD7EBGC4.cjs.map +0 -1
  761. package/dist/chunk-GOALNQZ2.js.map +0 -1
  762. package/dist/chunk-HB7C7NB5.js +0 -20
  763. package/dist/chunk-HB7C7NB5.js.map +0 -1
  764. package/dist/chunk-HZ4MBUC3.js.map +0 -1
  765. package/dist/chunk-JEIW7BSV.cjs.map +0 -1
  766. package/dist/chunk-JHULS3EC.js +0 -130
  767. package/dist/chunk-JHULS3EC.js.map +0 -1
  768. package/dist/chunk-JI244Y7C.js.map +0 -1
  769. package/dist/chunk-JYZW2PZS.cjs.map +0 -1
  770. package/dist/chunk-KRU6IGV7.js.map +0 -1
  771. package/dist/chunk-NV2CWBI2.cjs.map +0 -1
  772. package/dist/chunk-OE5CKRUC.js.map +0 -1
  773. package/dist/chunk-P2CA3XGI.js.map +0 -1
  774. package/dist/chunk-P7UMS4E6.cjs.map +0 -1
  775. package/dist/chunk-SQHMGT4W.js.map +0 -1
  776. package/dist/chunk-SVSHA7XV.js.map +0 -1
  777. package/dist/chunk-U42F3HLE.cjs.map +0 -1
  778. package/dist/chunk-VKELAMAZ.js.map +0 -1
  779. package/dist/chunk-VNYW4C4J.cjs.map +0 -1
  780. package/dist/chunk-VOKVG3ER.js +0 -78
  781. package/dist/chunk-VOKVG3ER.js.map +0 -1
  782. package/dist/chunk-VPIYTQCV.cjs.map +0 -1
  783. package/dist/chunk-VPWJCJCX.cjs.map +0 -1
  784. package/dist/chunk-VROIMIHB.cjs.map +0 -1
  785. package/dist/chunk-WIAQQNFU.cjs.map +0 -1
  786. package/dist/chunk-WNAA6CLE.cjs +0 -143
  787. package/dist/chunk-WNAA6CLE.cjs.map +0 -1
  788. package/dist/chunk-WNJRS7Y7.cjs.map +0 -1
  789. package/dist/chunk-X4LBUPJO.cjs.map +0 -1
  790. package/dist/chunk-X4XPNTCZ.cjs.map +0 -1
  791. package/dist/chunk-XCP454Q6.js.map +0 -1
  792. package/dist/chunk-XEAT7XJG.cjs.map +0 -1
  793. package/dist/chunk-YVL3XATO.cjs +0 -79
  794. package/dist/chunk-YVL3XATO.cjs.map +0 -1
  795. package/dist/chunk-YVPC65ZJ.cjs.map +0 -1
  796. package/dist/html-MdxqSzjD.d.cts +0 -13
  797. package/dist/html-MdxqSzjD.d.ts +0 -13
  798. package/dist/orderRows-BUJYgSc7.d.cts +0 -221
  799. package/dist/orderRows-BUJYgSc7.d.ts +0 -221
  800. package/dist/transcript-Cg7uSW-C.d.cts +0 -84
  801. package/dist/transcript-Cg7uSW-C.d.ts +0 -84
  802. package/dist/types-B97JNRNQ.d.cts +0 -251
  803. package/dist/types-CnPEwzlp.d.cts +0 -254
  804. package/dist/types-CnPEwzlp.d.ts +0 -254
  805. package/dist/types-gZXrfLj6.d.ts +0 -251
  806. package/dist/useAnchoredPosition-CKwLSQW8.d.cts +0 -76
  807. package/dist/useAnchoredPosition-CKwLSQW8.d.ts +0 -76
  808. package/dist/useTheme-B9SWu6ui.d.cts +0 -24
  809. package/dist/useTheme-B9SWu6ui.d.ts +0 -24
  810. package/dist/useTranscriptEdits-CGzlemHT.d.cts +0 -182
  811. package/dist/useTranscriptEdits-D32bLs0l.d.ts +0 -182
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/VideoCard/VideoCard.tsx"],"names":["jsxs","cn","jsx","Play","useYouTubeHoverPreview","VolumeX","Badge"],"mappings":"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","file":"chunk-462XSCP3.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Play, VolumeX } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Badge } from '../Badge';\nimport { useYouTubeHoverPreview } from '../../hooks/useYouTubeHoverPreview';\n\n// =============================================================================\n// PlayButton\n// =============================================================================\n\nexport interface PlayButtonProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Disc diameter. Default `md` (56px). */\n size?: 'sm' | 'md' | 'lg';\n /**\n * Show the spinning brand ring. Default `hover` — the ring appears and spins\n * only while the nearest `.group` ancestor is hovered; `always` keeps it on.\n */\n ring?: 'hover' | 'always' | 'none';\n}\n\nconst DISC_SIZE = {\n sm: 'h-10 w-10',\n md: 'h-14 w-14',\n lg: 'h-20 w-20',\n} as const;\nconst ICON_SIZE = { sm: 'h-4 w-4', md: 'h-6 w-6', lg: 'h-8 w-8' } as const;\n\n/**\n * The branded play affordance: a white disc with a filled brand triangle and a\n * conic-gradient ring that lights up and spins on hover. Decorative — the\n * surrounding card/link carries the accessible label.\n */\nexport function PlayButton({\n size = 'md',\n ring = 'hover',\n className,\n ...props\n}: PlayButtonProps) {\n return (\n <span\n data-slot=\"play-button\"\n aria-hidden=\"true\"\n className={cn(\n 'relative inline-flex items-center justify-center',\n DISC_SIZE[size],\n className\n )}\n {...props}\n >\n {ring !== 'none' && (\n <span\n className={cn(\n 'pointer-events-none absolute -inset-2 rounded-full transition-opacity duration-300',\n 'motion-safe:animate-[mie-spin_1.4s_linear_infinite]',\n '[background:conic-gradient(from_0deg,transparent_0deg,var(--mieweb-primary-500)_90deg,var(--mieweb-primary-300)_240deg,var(--mieweb-primary-200)_320deg,transparent_360deg)]',\n '[mask:radial-gradient(farthest-side,transparent_calc(100%-4px),#000_calc(100%-4px))]',\n '[-webkit-mask:radial-gradient(farthest-side,transparent_calc(100%-4px),#000_calc(100%-4px))]',\n 'drop-shadow-[0_0_5px_color-mix(in_srgb,var(--mieweb-primary-400)_60%,transparent)]',\n ring === 'hover'\n ? 'opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100'\n : 'opacity-100'\n )}\n />\n )}\n <span\n className={cn(\n 'relative flex items-center justify-center rounded-full bg-white/90 shadow-lg transition-transform group-hover:scale-110',\n DISC_SIZE[size]\n )}\n >\n <Play\n // rtl-ignore -- optical centering of the play triangle, which points right in RTL media players too\n className={cn('text-primary-600 ml-0.5', ICON_SIZE[size])}\n fill=\"currentColor\"\n />\n </span>\n </span>\n );\n}\n\n// =============================================================================\n// VideoCard\n// =============================================================================\n\nexport interface VideoCardProps {\n /** Video title — also the accessible name (\"Watch: {title}\"). */\n title: string;\n /** Navigates on click. Omit to render a `<button>` driven by `onClick`. */\n href?: string;\n onClick?: React.MouseEventHandler<HTMLElement>;\n /** Anchor target (e.g. `_blank`). */\n target?: string;\n /** Enables the muted hover preview and the default YouTube thumbnail. */\n youtubeId?: string;\n /** Thumbnail URL. Defaults to the YouTube `hqdefault` when `youtubeId` is set. */\n thumbnailUrl?: string;\n /** Thumbnail alt. Defaults to `title`. */\n thumbnailAlt?: string;\n /** Duration label, e.g. `34 min` or `2:44`. */\n duration?: string;\n /** Word before the duration in the pill. Default `Watch` → \"Watch · 34 min\". Pass `null` for just the duration. */\n durationPrefix?: string | null;\n /** Turn the hover preview off even when `youtubeId` is set. */\n preview?: boolean;\n /** Label shown on the pill while the muted preview plays. Default `Silent`. */\n silentLabel?: string;\n /** Slot above the title in the body — a category `Badge`, for instance. */\n eyebrow?: React.ReactNode;\n description?: string;\n /** Slot below the description — speaker, view count, date. */\n footer?: React.ReactNode;\n /**\n * `card` renders thumbnail + body; `plate` renders only the media plate\n * (for heroes and detail panels where the copy lives elsewhere).\n */\n variant?: 'card' | 'plate';\n /** Heading level for the title in `card` variant. Default `h3`. */\n headingLevel?: 'h2' | 'h3' | 'h4';\n className?: string;\n}\n\n/**\n * A video thumbnail card with the branded `PlayButton`, a \"Watch · 34 min\"\n * duration pill and — when a `youtubeId` is supplied — a muted, looping\n * hover preview with a progress bar, exactly as YouTube's own grid behaves.\n * Ported from the Enterprise Health video library and hero HUD.\n *\n * @example\n * ```tsx\n * <VideoCard\n * title=\"Ozwell AI in the exam room\"\n * href=\"/videos/ozwell-ai/\"\n * youtubeId=\"dQw4w9WgXcQ\"\n * duration=\"2:44\"\n * eyebrow={<Badge variant=\"secondary\" size=\"sm\">Demo</Badge>}\n * description=\"Documentation and surveillance, native to the platform.\"\n * />\n * ```\n */\nexport function VideoCard({\n title,\n href,\n onClick,\n target,\n youtubeId,\n thumbnailUrl,\n thumbnailAlt,\n duration,\n durationPrefix = 'Watch',\n preview = true,\n silentLabel = 'Silent',\n eyebrow,\n description,\n footer,\n variant = 'card',\n headingLevel: Heading = 'h3',\n className,\n}: VideoCardProps) {\n const thumb =\n thumbnailUrl ??\n (youtubeId\n ? `https://i.ytimg.com/vi/${youtubeId}/hqdefault.jpg`\n : undefined);\n\n const hover = useYouTubeHoverPreview(youtubeId, { enabled: preview });\n const playing = hover.preview === 'playing';\n\n const pill =\n duration && (durationPrefix ? `${durationPrefix} · ${duration}` : duration);\n\n const media = (\n <div\n data-slot=\"video-card-media\"\n className=\"bg-primary-950 relative aspect-video overflow-hidden\"\n >\n {thumb && (\n <img\n src={thumb}\n alt={thumbnailAlt ?? title}\n loading=\"lazy\"\n decoding=\"async\"\n className=\"absolute inset-0 h-full w-full object-cover transition-transform duration-300 group-hover:scale-105\"\n />\n )}\n\n {/* Muted preview player — fades in once frames are flowing. pointer-events-none\n so clicks fall through to the card. */}\n <div\n ref={hover.hostRef}\n aria-hidden=\"true\"\n className={cn(\n 'bg-primary-950 pointer-events-none absolute inset-0 overflow-hidden transition-opacity duration-500',\n '[&_iframe]:absolute [&_iframe]:inset-0 [&_iframe]:h-full [&_iframe]:w-full [&_iframe]:border-0',\n playing ? 'opacity-100' : 'opacity-0'\n )}\n />\n\n {playing && (\n <span className=\"absolute start-2 top-2 inline-flex items-center gap-1 rounded bg-black/55 px-1.5 py-0.5 text-[11px] font-medium text-white backdrop-blur-sm\">\n <VolumeX className=\"h-3 w-3\" aria-hidden=\"true\" />\n {silentLabel}\n </span>\n )}\n\n <div\n className={cn(\n 'bg-primary-950/20 group-hover:bg-primary-950/30 absolute inset-0 flex items-center justify-center transition-all duration-300',\n playing && 'opacity-0'\n )}\n >\n <PlayButton size={variant === 'plate' ? 'lg' : 'md'} />\n </div>\n\n {pill && !playing && (\n <Badge\n data-slot=\"video-card-duration\"\n size=\"sm\"\n className=\"absolute end-2 bottom-2 bg-black/60 py-1 text-white backdrop-blur-sm dark:bg-black/60 dark:text-white\"\n >\n {pill}\n </Badge>\n )}\n\n {hover.preview !== 'idle' && (\n <div className=\"absolute inset-x-0 bottom-0 h-1 bg-white/20\">\n <div\n className=\"h-full rounded-e-full bg-[linear-gradient(90deg,var(--mieweb-primary-500),var(--mieweb-primary-300))] transition-[width] duration-200 ease-linear\"\n style={{ width: `${Math.max(hover.progress * 100, 1.5)}%` }}\n />\n </div>\n )}\n </div>\n );\n\n // A real heading is only valid in the link variant — `<button>` accepts\n // phrasing content only, so the button variant gets a styled block span.\n const TitleTag = href ? Heading : 'span';\n\n const body = variant === 'card' && (\n <div data-slot=\"video-card-body\" className=\"p-4 text-start\">\n {eyebrow && <div className=\"mb-2 flex items-center gap-2\">{eyebrow}</div>}\n <TitleTag className=\"text-foreground group-hover:text-primary-700 dark:group-hover:text-primary-300 block text-lg font-semibold transition-colors\">\n {title}\n </TitleTag>\n {description && (\n <p className=\"text-muted-foreground mt-1 line-clamp-2 text-sm\">\n {description}\n </p>\n )}\n {footer && (\n <div className=\"text-muted-foreground mt-2 text-sm\">{footer}</div>\n )}\n </div>\n );\n\n const shell = cn(\n 'group block w-full overflow-hidden no-underline transition-shadow',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n variant === 'card'\n ? 'rounded-xl border border-border bg-card text-card-foreground shadow-md hover:shadow-lg'\n : 'rounded-xl shadow-lg',\n className\n );\n\n const interaction = {\n onMouseEnter: hover.handleEnter,\n onMouseLeave: hover.stopPreview,\n onFocus: hover.handleEnter,\n onBlur: hover.stopPreview,\n 'aria-label': `Watch: ${title}`,\n 'data-slot': 'video-card',\n 'data-preview': hover.preview,\n };\n\n if (href) {\n return (\n <a\n href={href}\n target={target}\n rel={target === '_blank' ? 'noopener noreferrer' : undefined}\n onClick={onClick}\n className={shell}\n {...interaction}\n >\n {media}\n {body}\n </a>\n );\n }\n return (\n <button type=\"button\" onClick={onClick} className={shell} {...interaction}>\n {media}\n {body}\n </button>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/VideoCard/VideoCard.tsx"],"names":["jsxs","cn","jsx","Play","useYouTubeHoverPreview","VolumeX","Badge"],"mappings":"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","file":"chunk-HCIXGFWR.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Play, VolumeX } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Badge } from '../Badge';\nimport { useYouTubeHoverPreview } from '../../hooks/useYouTubeHoverPreview';\n\n// =============================================================================\n// PlayButton\n// =============================================================================\n\nexport interface PlayButtonProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Disc diameter. Default `md` (56px). */\n size?: 'sm' | 'md' | 'lg';\n /**\n * Show the spinning brand ring. Default `hover` — the ring appears and spins\n * only while the nearest `.group` ancestor is hovered; `always` keeps it on.\n */\n ring?: 'hover' | 'always' | 'none';\n}\n\nconst DISC_SIZE = {\n sm: 'h-10 w-10',\n md: 'h-14 w-14',\n lg: 'h-20 w-20',\n} as const;\nconst ICON_SIZE = { sm: 'h-4 w-4', md: 'h-6 w-6', lg: 'h-8 w-8' } as const;\n\n/**\n * The branded play affordance: a white disc with a filled brand triangle and a\n * conic-gradient ring that lights up and spins on hover. Decorative — the\n * surrounding card/link carries the accessible label.\n */\nexport function PlayButton({\n size = 'md',\n ring = 'hover',\n className,\n ...props\n}: PlayButtonProps) {\n return (\n <span\n data-slot=\"play-button\"\n aria-hidden=\"true\"\n className={cn(\n 'relative inline-flex items-center justify-center',\n DISC_SIZE[size],\n className\n )}\n {...props}\n >\n {ring !== 'none' && (\n <span\n className={cn(\n 'pointer-events-none absolute -inset-2 rounded-full transition-opacity duration-300',\n 'motion-safe:animate-[mie-spin_1.4s_linear_infinite]',\n '[background:conic-gradient(from_0deg,transparent_0deg,var(--mieweb-primary-500)_90deg,var(--mieweb-primary-300)_240deg,var(--mieweb-primary-200)_320deg,transparent_360deg)]',\n '[mask:radial-gradient(farthest-side,transparent_calc(100%-4px),#000_calc(100%-4px))]',\n '[-webkit-mask:radial-gradient(farthest-side,transparent_calc(100%-4px),#000_calc(100%-4px))]',\n 'drop-shadow-[0_0_5px_color-mix(in_srgb,var(--mieweb-primary-400)_60%,transparent)]',\n ring === 'hover'\n ? 'opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100'\n : 'opacity-100'\n )}\n />\n )}\n <span\n className={cn(\n 'relative flex items-center justify-center rounded-full bg-white/90 shadow-lg transition-transform group-hover:scale-110',\n DISC_SIZE[size]\n )}\n >\n <Play\n // rtl-ignore -- optical centering of the play triangle, which points right in RTL media players too\n className={cn('text-primary-600 ml-0.5', ICON_SIZE[size])}\n fill=\"currentColor\"\n />\n </span>\n </span>\n );\n}\n\n// =============================================================================\n// VideoCard\n// =============================================================================\n\nexport interface VideoCardProps {\n /** Video title — also the accessible name (\"Watch: {title}\"). */\n title: string;\n /** Navigates on click. Omit to render a `<button>` driven by `onClick`. */\n href?: string;\n onClick?: React.MouseEventHandler<HTMLElement>;\n /** Anchor target (e.g. `_blank`). */\n target?: string;\n /** Enables the muted hover preview and the default YouTube thumbnail. */\n youtubeId?: string;\n /** Thumbnail URL. Defaults to the YouTube `hqdefault` when `youtubeId` is set. */\n thumbnailUrl?: string;\n /** Thumbnail alt. Defaults to `title`. */\n thumbnailAlt?: string;\n /** Duration label, e.g. `34 min` or `2:44`. */\n duration?: string;\n /** Word before the duration in the pill. Default `Watch` → \"Watch · 34 min\". Pass `null` for just the duration. */\n durationPrefix?: string | null;\n /** Turn the hover preview off even when `youtubeId` is set. */\n preview?: boolean;\n /** Label shown on the pill while the muted preview plays. Default `Silent`. */\n silentLabel?: string;\n /** Slot above the title in the body — a category `Badge`, for instance. */\n eyebrow?: React.ReactNode;\n description?: string;\n /** Slot below the description — speaker, view count, date. */\n footer?: React.ReactNode;\n /**\n * `card` renders thumbnail + body; `plate` renders only the media plate\n * (for heroes and detail panels where the copy lives elsewhere).\n */\n variant?: 'card' | 'plate';\n /** Heading level for the title in `card` variant. Default `h3`. */\n headingLevel?: 'h2' | 'h3' | 'h4';\n className?: string;\n}\n\n/**\n * A video thumbnail card with the branded `PlayButton`, a \"Watch · 34 min\"\n * duration pill and — when a `youtubeId` is supplied — a muted, looping\n * hover preview with a progress bar, exactly as YouTube's own grid behaves.\n * Ported from the Enterprise Health video library and hero HUD.\n *\n * @example\n * ```tsx\n * <VideoCard\n * title=\"Ozwell AI in the exam room\"\n * href=\"/videos/ozwell-ai/\"\n * youtubeId=\"dQw4w9WgXcQ\"\n * duration=\"2:44\"\n * eyebrow={<Badge variant=\"secondary\" size=\"sm\">Demo</Badge>}\n * description=\"Documentation and surveillance, native to the platform.\"\n * />\n * ```\n */\nexport function VideoCard({\n title,\n href,\n onClick,\n target,\n youtubeId,\n thumbnailUrl,\n thumbnailAlt,\n duration,\n durationPrefix = 'Watch',\n preview = true,\n silentLabel = 'Silent',\n eyebrow,\n description,\n footer,\n variant = 'card',\n headingLevel: Heading = 'h3',\n className,\n}: VideoCardProps) {\n const thumb =\n thumbnailUrl ??\n (youtubeId\n ? `https://i.ytimg.com/vi/${youtubeId}/hqdefault.jpg`\n : undefined);\n\n const hover = useYouTubeHoverPreview(youtubeId, { enabled: preview });\n const playing = hover.preview === 'playing';\n\n const pill =\n duration && (durationPrefix ? `${durationPrefix} · ${duration}` : duration);\n\n const media = (\n <div\n data-slot=\"video-card-media\"\n className=\"bg-primary-950 relative aspect-video overflow-hidden\"\n >\n {thumb && (\n <img\n src={thumb}\n alt={thumbnailAlt ?? title}\n loading=\"lazy\"\n decoding=\"async\"\n className=\"absolute inset-0 h-full w-full object-cover transition-transform duration-300 group-hover:scale-105\"\n />\n )}\n\n {/* Muted preview player — fades in once frames are flowing. pointer-events-none\n so clicks fall through to the card. */}\n <div\n ref={hover.hostRef}\n aria-hidden=\"true\"\n className={cn(\n 'bg-primary-950 pointer-events-none absolute inset-0 overflow-hidden transition-opacity duration-500',\n '[&_iframe]:absolute [&_iframe]:inset-0 [&_iframe]:h-full [&_iframe]:w-full [&_iframe]:border-0',\n playing ? 'opacity-100' : 'opacity-0'\n )}\n />\n\n {playing && (\n <span className=\"absolute start-2 top-2 inline-flex items-center gap-1 rounded bg-black/55 px-1.5 py-0.5 text-[11px] font-medium text-white backdrop-blur-sm\">\n <VolumeX className=\"h-3 w-3\" aria-hidden=\"true\" />\n {silentLabel}\n </span>\n )}\n\n <div\n className={cn(\n 'bg-primary-950/20 group-hover:bg-primary-950/30 absolute inset-0 flex items-center justify-center transition-all duration-300',\n playing && 'opacity-0'\n )}\n >\n <PlayButton size={variant === 'plate' ? 'lg' : 'md'} />\n </div>\n\n {pill && !playing && (\n <Badge\n data-slot=\"video-card-duration\"\n size=\"sm\"\n className=\"absolute end-2 bottom-2 bg-black/60 py-1 text-white backdrop-blur-sm dark:bg-black/60 dark:text-white\"\n >\n {pill}\n </Badge>\n )}\n\n {hover.preview !== 'idle' && (\n <div className=\"absolute inset-x-0 bottom-0 h-1 bg-white/20\">\n <div\n className=\"h-full rounded-e-full bg-[linear-gradient(90deg,var(--mieweb-primary-500),var(--mieweb-primary-300))] transition-[width] duration-200 ease-linear\"\n style={{ width: `${Math.max(hover.progress * 100, 1.5)}%` }}\n />\n </div>\n )}\n </div>\n );\n\n // A real heading is only valid in the link variant — `<button>` accepts\n // phrasing content only, so the button variant gets a styled block span.\n const TitleTag = href ? Heading : 'span';\n\n const body = variant === 'card' && (\n <div data-slot=\"video-card-body\" className=\"p-4 text-start\">\n {eyebrow && <div className=\"mb-2 flex items-center gap-2\">{eyebrow}</div>}\n <TitleTag className=\"text-foreground group-hover:text-primary-700 dark:group-hover:text-primary-300 block text-lg font-semibold transition-colors\">\n {title}\n </TitleTag>\n {description && (\n <p className=\"text-muted-foreground mt-1 line-clamp-2 text-sm\">\n {description}\n </p>\n )}\n {footer && (\n <div className=\"text-muted-foreground mt-2 text-sm\">{footer}</div>\n )}\n </div>\n );\n\n const shell = cn(\n 'group block w-full overflow-hidden no-underline transition-shadow',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n variant === 'card'\n ? 'rounded-xl border border-border bg-card text-card-foreground shadow-md hover:shadow-lg'\n : 'rounded-xl shadow-lg',\n className\n );\n\n const interaction = {\n onMouseEnter: hover.handleEnter,\n onMouseLeave: hover.stopPreview,\n onFocus: hover.handleEnter,\n onBlur: hover.stopPreview,\n 'aria-label': `Watch: ${title}`,\n 'data-slot': 'video-card',\n 'data-preview': hover.preview,\n };\n\n if (href) {\n return (\n <a\n href={href}\n target={target}\n rel={target === '_blank' ? 'noopener noreferrer' : undefined}\n onClick={onClick}\n className={shell}\n {...interaction}\n >\n {media}\n {body}\n </a>\n );\n }\n return (\n <button type=\"button\" onClick={onClick} className={shell} {...interaction}>\n {media}\n {body}\n </button>\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Button } from './chunk-GOALNQZ2.js';
1
+ import { Button } from './chunk-WFBUBT54.js';
2
2
  import { Eye, Code, Check, ClipboardCopy } from 'lucide-react';
3
3
  import { useState, useRef, useEffect, useCallback } from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -94,5 +94,5 @@ var FenceBlock = ({
94
94
  };
95
95
 
96
96
  export { FenceBlock };
97
- //# sourceMappingURL=chunk-H4ZXMQQW.js.map
98
- //# sourceMappingURL=chunk-H4ZXMQQW.js.map
97
+ //# sourceMappingURL=chunk-HDY7YQFX.js.map
98
+ //# sourceMappingURL=chunk-HDY7YQFX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Markdown/FenceBlock.tsx"],"names":[],"mappings":"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","file":"chunk-H4ZXMQQW.js","sourcesContent":["/**\n * FenceBlock — Base wrapper for code blocks with copy, raw view toggle, and errors.\n */\nimport { Check, ClipboardCopy, Code, Eye } from 'lucide-react';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from '../Button';\n\nexport interface FenceBlockProps {\n code: string;\n language?: string;\n supportsRawView?: boolean;\n error?: string;\n children: React.ReactNode;\n /** Extra buttons rendered in the header before the copy button */\n headerActions?: React.ReactNode;\n}\n\ntype CopyState = 'idle' | 'copying' | 'success' | 'error';\n\nexport const FenceBlock: React.FC<FenceBlockProps> = ({\n code,\n language,\n supportsRawView = false,\n error,\n children,\n headerActions,\n}) => {\n const [copyState, setCopyState] = useState<CopyState>('idle');\n const [showRaw, setShowRaw] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n },\n []\n );\n\n const scheduleReset = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopyState('idle'), 2000);\n }, []);\n\n const handleCopy = useCallback(async () => {\n if (copyState === 'copying') return;\n setCopyState('copying');\n try {\n await navigator.clipboard.writeText(code);\n setCopyState('success');\n scheduleReset();\n } catch {\n try {\n const textarea = document.createElement('textarea');\n textarea.value = code;\n textarea.style.position = 'fixed';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n setCopyState('success');\n } catch {\n setCopyState('error');\n }\n scheduleReset();\n }\n }, [code, copyState, scheduleReset]);\n\n return (\n <div className=\"group relative my-3 overflow-hidden rounded-lg border border-neutral-200 bg-neutral-50 dark:border-neutral-700 dark:bg-[#1a1d24]\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-white/[0.08]\">\n <span className=\"text-xs font-medium text-neutral-500 dark:text-neutral-400\">\n {language\n ? language.charAt(0).toUpperCase() + language.slice(1)\n : 'Text'}\n </span>\n <div className=\"flex items-center gap-1\">\n {headerActions}\n {supportsRawView && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setShowRaw((v) => !v)}\n aria-label={showRaw ? 'Show rendered view' : 'Show raw code'}\n className=\"h-7 w-7 p-0\"\n >\n {showRaw ? (\n <Eye className=\"h-3.5 w-3.5\" />\n ) : (\n <Code className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleCopy}\n aria-label=\"Copy code\"\n className=\"h-7 w-7 p-0\"\n >\n {copyState === 'success' ? (\n <Check className=\"h-3.5 w-3.5 text-green-500\" />\n ) : (\n <ClipboardCopy className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n </div>\n </div>\n\n {error ? (\n <div className=\"p-3\">\n <div className=\"rounded-md bg-red-50 p-3 text-sm text-red-800 dark:bg-red-900/20 dark:text-red-300\">\n {error}\n </div>\n <pre className=\"mt-2 overflow-x-auto text-xs whitespace-pre-wrap text-neutral-600 dark:text-neutral-400\">\n <code>{code}</code>\n </pre>\n </div>\n ) : showRaw ? (\n <pre\n className=\"overflow-x-auto p-3 text-sm\"\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- scrollable code needs keyboard focus (axe: scrollable-region-focusable)\n tabIndex={0}\n role=\"region\"\n aria-label=\"Raw code\"\n >\n <code>{code}</code>\n </pre>\n ) : (\n <div className=\"overflow-x-auto\">{children}</div>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Markdown/FenceBlock.tsx"],"names":[],"mappings":";;;;;AAoBO,IAAM,aAAwC,CAAC;AAAA,EACpD,IAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAoB,MAAM,CAAA;AAC5D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,QAAA,GAAW,OAA6C,IAAI,CAAA;AAElE,EAAA,SAAA;AAAA,IACE,MAAM,MAAM;AACV,MAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AAAA,IACrD,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AACnD,IAAA,QAAA,CAAS,UAAU,UAAA,CAAW,MAAM,YAAA,CAAa,MAAM,GAAG,GAAI,CAAA;AAAA,EAChE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAa,YAAY,YAAY;AACzC,IAAA,IAAI,cAAc,SAAA,EAAW;AAC7B,IAAA,YAAA,CAAa,SAAS,CAAA;AACtB,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AACxC,MAAA,YAAA,CAAa,SAAS,CAAA;AACtB,MAAA,aAAA,EAAc;AAAA,IAChB,CAAA,CAAA,MAAQ;AACN,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAClD,QAAA,QAAA,CAAS,KAAA,GAAQ,IAAA;AACjB,QAAA,QAAA,CAAS,MAAM,QAAA,GAAW,OAAA;AAC1B,QAAA,QAAA,CAAS,MAAM,OAAA,GAAU,GAAA;AACzB,QAAA,QAAA,CAAS,IAAA,CAAK,YAAY,QAAQ,CAAA;AAClC,QAAA,QAAA,CAAS,MAAA,EAAO;AAChB,QAAA,QAAA,CAAS,YAAY,MAAM,CAAA;AAC3B,QAAA,QAAA,CAAS,IAAA,CAAK,YAAY,QAAQ,CAAA;AAClC,QAAA,YAAA,CAAa,SAAS,CAAA;AAAA,MACxB,CAAA,CAAA,MAAQ;AACN,QAAA,YAAA,CAAa,OAAO,CAAA;AAAA,MACtB;AACA,MAAA,aAAA,EAAc;AAAA,IAChB;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,SAAA,EAAW,aAAa,CAAC,CAAA;AAEnC,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kIAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oGAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4DAAA,EACb,QAAA,EAAA,QAAA,GACG,SAAS,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,QAAA,CAAS,KAAA,CAAM,CAAC,IACnD,MAAA,EACN,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,aAAA;AAAA,QACA,eAAA,oBACC,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,SAAS,MAAM,UAAA,CAAW,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,YACnC,YAAA,EAAY,UAAU,oBAAA,GAAuB,eAAA;AAAA,YAC7C,SAAA,EAAU,aAAA;AAAA,YAET,QAAA,EAAA,OAAA,uBACE,GAAA,EAAA,EAAI,SAAA,EAAU,eAAc,CAAA,mBAE7B,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc;AAAA;AAAA,SAElC;AAAA,wBAEF,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAS,UAAA;AAAA,YACT,YAAA,EAAW,WAAA;AAAA,YACX,SAAA,EAAU,aAAA;AAAA,YAET,QAAA,EAAA,SAAA,KAAc,SAAA,mBACb,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,8BAA6B,CAAA,mBAE9C,GAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,aAAA,EAAc;AAAA;AAAA;AAE3C,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,IAEC,KAAA,mBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,KAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oFAAA,EACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,0BACC,KAAA,EAAA,EAAI,SAAA,EAAU,2FACb,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAM,gBAAK,CAAA,EACd;AAAA,KAAA,EACF,IACE,OAAA,mBACF,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,6BAAA;AAAA,QAEV,QAAA,EAAU,CAAA;AAAA,QACV,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,UAAA;AAAA,QAEX,QAAA,kBAAA,GAAA,CAAC,UAAM,QAAA,EAAA,IAAA,EAAK;AAAA;AAAA,KACd,mBAEA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAmB,QAAA,EAAS;AAAA,GAAA,EAE/C,CAAA;AAEJ","file":"chunk-HDY7YQFX.js","sourcesContent":["/**\n * FenceBlock — Base wrapper for code blocks with copy, raw view toggle, and errors.\n */\nimport { Check, ClipboardCopy, Code, Eye } from 'lucide-react';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from '../Button';\n\nexport interface FenceBlockProps {\n code: string;\n language?: string;\n supportsRawView?: boolean;\n error?: string;\n children: React.ReactNode;\n /** Extra buttons rendered in the header before the copy button */\n headerActions?: React.ReactNode;\n}\n\ntype CopyState = 'idle' | 'copying' | 'success' | 'error';\n\nexport const FenceBlock: React.FC<FenceBlockProps> = ({\n code,\n language,\n supportsRawView = false,\n error,\n children,\n headerActions,\n}) => {\n const [copyState, setCopyState] = useState<CopyState>('idle');\n const [showRaw, setShowRaw] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n },\n []\n );\n\n const scheduleReset = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopyState('idle'), 2000);\n }, []);\n\n const handleCopy = useCallback(async () => {\n if (copyState === 'copying') return;\n setCopyState('copying');\n try {\n await navigator.clipboard.writeText(code);\n setCopyState('success');\n scheduleReset();\n } catch {\n try {\n const textarea = document.createElement('textarea');\n textarea.value = code;\n textarea.style.position = 'fixed';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n setCopyState('success');\n } catch {\n setCopyState('error');\n }\n scheduleReset();\n }\n }, [code, copyState, scheduleReset]);\n\n return (\n <div className=\"group relative my-3 overflow-hidden rounded-lg border border-neutral-200 bg-neutral-50 dark:border-neutral-700 dark:bg-[#1a1d24]\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-white/[0.08]\">\n <span className=\"text-xs font-medium text-neutral-500 dark:text-neutral-400\">\n {language\n ? language.charAt(0).toUpperCase() + language.slice(1)\n : 'Text'}\n </span>\n <div className=\"flex items-center gap-1\">\n {headerActions}\n {supportsRawView && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setShowRaw((v) => !v)}\n aria-label={showRaw ? 'Show rendered view' : 'Show raw code'}\n className=\"h-7 w-7 p-0\"\n >\n {showRaw ? (\n <Eye className=\"h-3.5 w-3.5\" />\n ) : (\n <Code className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleCopy}\n aria-label=\"Copy code\"\n className=\"h-7 w-7 p-0\"\n >\n {copyState === 'success' ? (\n <Check className=\"h-3.5 w-3.5 text-green-500\" />\n ) : (\n <ClipboardCopy className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n </div>\n </div>\n\n {error ? (\n <div className=\"p-3\">\n <div className=\"rounded-md bg-red-50 p-3 text-sm text-red-800 dark:bg-red-900/20 dark:text-red-300\">\n {error}\n </div>\n <pre className=\"mt-2 overflow-x-auto text-xs whitespace-pre-wrap text-neutral-600 dark:text-neutral-400\">\n <code>{code}</code>\n </pre>\n </div>\n ) : showRaw ? (\n <pre\n className=\"overflow-x-auto p-3 text-sm\"\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- scrollable code needs keyboard focus (axe: scrollable-region-focusable)\n tabIndex={0}\n role=\"region\"\n aria-label=\"Raw code\"\n >\n <code>{code}</code>\n </pre>\n ) : (\n <div className=\"overflow-x-auto\">{children}</div>\n )}\n </div>\n );\n};\n"]}
@@ -0,0 +1,114 @@
1
+ 'use strict';
2
+
3
+ var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
4
+ var React = require('react');
5
+ var lucideReact = require('lucide-react');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ function _interopNamespace(e) {
9
+ if (e && e.__esModule) return e;
10
+ var n = Object.create(null);
11
+ if (e) {
12
+ Object.keys(e).forEach(function (k) {
13
+ if (k !== 'default') {
14
+ var d = Object.getOwnPropertyDescriptor(e, k);
15
+ Object.defineProperty(n, k, d.get ? d : {
16
+ enumerable: true,
17
+ get: function () { return e[k]; }
18
+ });
19
+ }
20
+ });
21
+ }
22
+ n.default = e;
23
+ return Object.freeze(n);
24
+ }
25
+
26
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
27
+
28
+ var defaultPhiMaskLabels = {
29
+ masked: "Hidden sensitive value",
30
+ maskedEnding: (visible) => `Hidden sensitive value ending in ${visible}`,
31
+ reveal: "Show value",
32
+ hide: "Hide value"
33
+ };
34
+ var BULLETS = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
35
+ var PhiMask = React__namespace.forwardRef(
36
+ function PhiMask2({
37
+ value,
38
+ keepLast = 0,
39
+ revealed: revealedProp,
40
+ defaultRevealed = false,
41
+ onRevealedChange,
42
+ onReveal,
43
+ canReveal = true,
44
+ autoHideMs,
45
+ labels: labelOverrides,
46
+ className,
47
+ ...props
48
+ }, ref) {
49
+ const labels = { ...defaultPhiMaskLabels, ...labelOverrides };
50
+ const [internal, setInternal] = React__namespace.useState(defaultRevealed);
51
+ const revealed = revealedProp ?? internal;
52
+ const setRevealed = React__namespace.useCallback(
53
+ (next) => {
54
+ if (revealedProp === void 0) setInternal(next);
55
+ onRevealedChange?.(next);
56
+ },
57
+ [revealedProp, onRevealedChange]
58
+ );
59
+ React__namespace.useEffect(() => {
60
+ if (!revealed || !autoHideMs) return;
61
+ const timer = window.setTimeout(() => setRevealed(false), autoHideMs);
62
+ return () => window.clearTimeout(timer);
63
+ }, [revealed, autoHideMs, setRevealed]);
64
+ const suffix = Math.min(keepLast, value.length - 1);
65
+ const visible = suffix > 0 ? value.slice(-suffix) : "";
66
+ const shown = revealed && canReveal;
67
+ return /* @__PURE__ */ jsxRuntime.jsxs(
68
+ "span",
69
+ {
70
+ ref,
71
+ "data-slot": "phi-mask",
72
+ "data-revealed": shown || void 0,
73
+ className: chunkS5RVSXDV_cjs.cn(
74
+ "inline-flex items-center gap-1 align-baseline",
75
+ className
76
+ ),
77
+ ...props,
78
+ children: [
79
+ shown ? /* @__PURE__ */ jsxRuntime.jsx("span", { "data-slot": "phi-mask-value", children: value }) : /* @__PURE__ */ jsxRuntime.jsxs("span", { "data-slot": "phi-mask-value", className: "tabular-nums", children: [
80
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { "aria-hidden": "true", className: "text-muted-foreground", children: [
81
+ BULLETS,
82
+ visible && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground", children: visible })
83
+ ] }),
84
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: visible ? labels.maskedEnding(visible) : labels.masked })
85
+ ] }),
86
+ canReveal && /* @__PURE__ */ jsxRuntime.jsx(
87
+ "button",
88
+ {
89
+ type: "button",
90
+ "aria-pressed": shown,
91
+ "aria-label": shown ? labels.hide : labels.reveal,
92
+ title: shown ? labels.hide : labels.reveal,
93
+ "data-slot": "phi-mask-toggle",
94
+ onClick: () => {
95
+ setRevealed(!shown);
96
+ if (!shown) onReveal?.();
97
+ },
98
+ className: chunkS5RVSXDV_cjs.cn(
99
+ "text-muted-foreground hover:text-foreground inline-flex rounded p-0.5",
100
+ "focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none"
101
+ ),
102
+ children: shown ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.EyeOff, { className: "h-3.5 w-3.5", "aria-hidden": "true" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "h-3.5 w-3.5", "aria-hidden": "true" })
103
+ }
104
+ )
105
+ ]
106
+ }
107
+ );
108
+ }
109
+ );
110
+
111
+ exports.PhiMask = PhiMask;
112
+ exports.defaultPhiMaskLabels = defaultPhiMaskLabels;
113
+ //# sourceMappingURL=chunk-HNFFFFYH.cjs.map
114
+ //# sourceMappingURL=chunk-HNFFFFYH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/PhiMask/PhiMask.tsx"],"names":["React","PhiMask","jsxs","cn","jsx","EyeOff","Eye"],"mappings":"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","file":"chunk-HNFFFFYH.cjs","sourcesContent":["import * as React from 'react';\nimport { Eye, EyeOff } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nexport interface PhiMaskLabels {\n /** Accessible text while fully masked. */\n masked: string;\n /** Accessible text while masked with `keepLast`. */\n maskedEnding: (visible: string) => string;\n /** Toggle name while masked. */\n reveal: string;\n /** Toggle name while revealed. */\n hide: string;\n}\n\nexport const defaultPhiMaskLabels: PhiMaskLabels = {\n masked: 'Hidden sensitive value',\n maskedEnding: (visible) => `Hidden sensitive value ending in ${visible}`,\n reveal: 'Show value',\n hide: 'Hide value',\n};\n\nexport interface PhiMaskProps extends Omit<\n React.HTMLAttributes<HTMLSpanElement>,\n 'children'\n> {\n /** The sensitive text. */\n value: string;\n /** Characters left visible at the end while masked, e.g. 4 for an SSN. */\n keepLast?: number;\n /** Controlled revealed state. */\n revealed?: boolean;\n /** Initial revealed state when uncontrolled. */\n defaultRevealed?: boolean;\n /** Called whenever the revealed state changes (toggle or auto-hide). */\n onRevealedChange?: (revealed: boolean) => void;\n /** Called each time the user reveals the value — hook audit logging here. */\n onReveal?: () => void;\n /** Set false to hide the toggle; the value then stays masked. */\n canReveal?: boolean;\n /** Re-mask this many milliseconds after a reveal. */\n autoHideMs?: number;\n /** Overrides for any user-facing string. */\n labels?: Partial<PhiMaskLabels>;\n}\n\nconst BULLETS = '••••••••';\n\n/**\n * Masks a sensitive value (PHI/PII) behind bullets with an optional reveal\n * toggle. While masked, the value is absent from the DOM and accessible name.\n *\n * @example\n * ```tsx\n * <PhiMask value=\"123-45-6789\" keepLast={4} autoHideMs={10000} onReveal={audit} />\n * ```\n */\nexport const PhiMask = React.forwardRef<HTMLSpanElement, PhiMaskProps>(\n function PhiMask(\n {\n value,\n keepLast = 0,\n revealed: revealedProp,\n defaultRevealed = false,\n onRevealedChange,\n onReveal,\n canReveal = true,\n autoHideMs,\n labels: labelOverrides,\n className,\n ...props\n },\n ref\n ) {\n const labels = { ...defaultPhiMaskLabels, ...labelOverrides };\n const [internal, setInternal] = React.useState(defaultRevealed);\n const revealed = revealedProp ?? internal;\n\n const setRevealed = React.useCallback(\n (next: boolean) => {\n if (revealedProp === undefined) setInternal(next);\n onRevealedChange?.(next);\n },\n [revealedProp, onRevealedChange]\n );\n\n React.useEffect(() => {\n if (!revealed || !autoHideMs) return;\n const timer = window.setTimeout(() => setRevealed(false), autoHideMs);\n return () => window.clearTimeout(timer);\n }, [revealed, autoHideMs, setRevealed]);\n\n // At least one character always stays hidden, however large keepLast is.\n const suffix = Math.min(keepLast, value.length - 1);\n const visible = suffix > 0 ? value.slice(-suffix) : '';\n const shown = revealed && canReveal;\n\n return (\n <span\n ref={ref}\n data-slot=\"phi-mask\"\n data-revealed={shown || undefined}\n className={cn(\n 'inline-flex items-center gap-1 align-baseline',\n className\n )}\n {...props}\n >\n {shown ? (\n <span data-slot=\"phi-mask-value\">{value}</span>\n ) : (\n <span data-slot=\"phi-mask-value\" className=\"tabular-nums\">\n <span aria-hidden=\"true\" className=\"text-muted-foreground\">\n {BULLETS}\n {visible && <span className=\"text-foreground\">{visible}</span>}\n </span>\n <span className=\"sr-only\">\n {visible ? labels.maskedEnding(visible) : labels.masked}\n </span>\n </span>\n )}\n {canReveal && (\n <button\n type=\"button\"\n aria-pressed={shown}\n aria-label={shown ? labels.hide : labels.reveal}\n title={shown ? labels.hide : labels.reveal}\n data-slot=\"phi-mask-toggle\"\n onClick={() => {\n setRevealed(!shown);\n if (!shown) onReveal?.();\n }}\n className={cn(\n 'text-muted-foreground hover:text-foreground inline-flex rounded p-0.5',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none'\n )}\n >\n {shown ? (\n <EyeOff className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n ) : (\n <Eye className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n )}\n </button>\n )}\n </span>\n );\n }\n);\n"]}
@@ -0,0 +1,25 @@
1
+ import * as React from 'react';
2
+
3
+ // src/hooks/useLiveAnnouncement.ts
4
+ function useLiveAnnouncement() {
5
+ const [message, setMessage] = React.useState("");
6
+ const timerRef = React.useRef(
7
+ void 0
8
+ );
9
+ const announce = React.useCallback((next) => {
10
+ setMessage("");
11
+ if (timerRef.current !== void 0) clearTimeout(timerRef.current);
12
+ timerRef.current = setTimeout(() => setMessage(next), 50);
13
+ }, []);
14
+ React.useEffect(
15
+ () => () => {
16
+ if (timerRef.current !== void 0) clearTimeout(timerRef.current);
17
+ },
18
+ []
19
+ );
20
+ return [message, announce];
21
+ }
22
+
23
+ export { useLiveAnnouncement };
24
+ //# sourceMappingURL=chunk-HNXLLDPN.js.map
25
+ //# sourceMappingURL=chunk-HNXLLDPN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useLiveAnnouncement.ts"],"names":[],"mappings":";;;AAkBO,SAAS,mBAAA,GAA2D;AACzE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAU,eAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,QAAA,GAAiB,KAAA,CAAA,MAAA;AAAA,IACrB;AAAA,GACF;AAEA,EAAA,MAAM,QAAA,GAAiB,KAAA,CAAA,WAAA,CAAY,CAAC,IAAA,KAAiB;AACnD,IAAA,UAAA,CAAW,EAAE,CAAA;AACb,IAAA,IAAI,QAAA,CAAS,OAAA,KAAY,MAAA,EAAW,YAAA,CAAa,SAAS,OAAO,CAAA;AACjE,IAAA,QAAA,CAAS,UAAU,UAAA,CAAW,MAAM,UAAA,CAAW,IAAI,GAAG,EAAE,CAAA;AAAA,EAC1D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAM,KAAA,CAAA,SAAA;AAAA,IACJ,MAAM,MAAM;AACV,MAAA,IAAI,QAAA,CAAS,OAAA,KAAY,MAAA,EAAW,YAAA,CAAa,SAAS,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO,CAAC,SAAS,QAAQ,CAAA;AAC3B","file":"chunk-HNXLLDPN.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\n\n/**\n * State for an `aria-live` region that re-announces even when the same\n * message is emitted twice in a row. Setting identical React state bails out\n * (and identical DOM text isn't a mutation), so screen readers would stay\n * silent for repeated actions like \"moved down\" — this clears the region\n * first, then sets the message a tick later.\n *\n * @example\n * ```tsx\n * const [announcement, announce] = useLiveAnnouncement();\n * // announce('Item moved down');\n * // <div aria-live=\"polite\" className=\"sr-only\">{announcement}</div>\n * ```\n */\nexport function useLiveAnnouncement(): [string, (message: string) => void] {\n const [message, setMessage] = React.useState('');\n const timerRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined\n );\n\n const announce = React.useCallback((next: string) => {\n setMessage('');\n if (timerRef.current !== undefined) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setMessage(next), 50);\n }, []);\n\n React.useEffect(\n () => () => {\n if (timerRef.current !== undefined) clearTimeout(timerRef.current);\n },\n []\n );\n\n return [message, announce];\n}\n"]}
@@ -200,7 +200,16 @@ var motionPresets = {
200
200
  // `times` front-loads the overshoot so it reads as a pop rather than an
201
201
  // even swell. Keyframe arrays need a duration-based tween; a spring has no
202
202
  // way to run through intermediate values.
203
- transition: { duration: 0.28, ease: "easeOut", times: [0, 0.45, 1] }
203
+ //
204
+ // `times` is scoped to `scale` on purpose. At the top level it also
205
+ // applies to `opacity`, whose two-value tween then gets three time stops:
206
+ // it overshoots to 1 early, falls back toward 0, and snaps to 1 at the end,
207
+ // so the badge flickers instead of fading in.
208
+ transition: {
209
+ duration: 0.15,
210
+ ease: "easeOut",
211
+ scale: { duration: 0.28, ease: "easeOut", times: [0, 0.45, 1] }
212
+ }
204
213
  }
205
214
  };
206
215
  var CONTEXT_KEY = /* @__PURE__ */ Symbol.for("@mieweb/ui.motionRuntimeContext.v1");
@@ -286,5 +295,5 @@ exports.MotionRuntimeContext = MotionRuntimeContext;
286
295
  exports.createPresetPropBuilders = createPresetPropBuilders;
287
296
  exports.motionPresets = motionPresets;
288
297
  exports.useMotionRuntime = useMotionRuntime;
289
- //# sourceMappingURL=chunk-NV2CWBI2.cjs.map
290
- //# sourceMappingURL=chunk-NV2CWBI2.cjs.map
298
+ //# sourceMappingURL=chunk-IEY3ZJIT.cjs.map
299
+ //# sourceMappingURL=chunk-IEY3ZJIT.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/motion/presets.ts","../src/motion/runtime.ts","../src/motion/Animated.tsx"],"names":["React","React2","Animated","jsx","cn"],"mappings":"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","file":"chunk-IEY3ZJIT.cjs","sourcesContent":["/**\n * Motion presets — the shared vocabulary of animations.\n *\n * This module is intentionally **free of any `motion` import**. It ships in the\n * main `@mieweb/ui` entry so components can describe *what* they animate\n * without pulling in a runtime to actually do it. The `@mieweb/ui/motion` entry\n * is what turns these descriptions into real animations.\n *\n * Every preset is expressed as an open/closed variant pair so the same\n * definition serves both usages:\n *\n * - **toggle** — the element stays mounted and animates between `open` and\n * `closed` (a drawer sliding in and out).\n * - **presence** — the element mounts and unmounts, entering on `open` and\n * exiting back to `closed` (a modal).\n */\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Named animation recipes shared by components. */\nexport type MotionPreset =\n | 'drawerStart'\n | 'overlay'\n | 'modalContent'\n | 'sidebarLabel'\n | 'menu'\n | 'collapse'\n | 'toast'\n | 'fade'\n | 'pop';\n\n/**\n * A physical edge, already resolved from any logical (`start`/`end`) position\n * and from writing direction.\n *\n * Presets that move an element along an axis take one of these as `custom`.\n * Resolution is the component's job, not the preset's: only the component knows\n * whether its `end` means right or left, and — for anything anchored — which\n * side it actually landed on after flipping away from a viewport edge.\n */\nexport type MotionEdge = 'top' | 'bottom' | 'left' | 'right';\n\n/** Offset along the axis implied by `edge`, in px. */\nfunction offsetFromEdge(\n edge: unknown,\n distance: number\n): { x: number; y: number } {\n switch (edge) {\n case 'top':\n return { x: 0, y: -distance };\n case 'bottom':\n return { x: 0, y: distance };\n case 'left':\n return { x: -distance, y: 0 };\n default:\n return { x: distance, y: 0 };\n }\n}\n\n/**\n * A variant value. Either a plain target object or a function of the element's\n * `custom` value — the latter lets a single preset adapt to context, e.g. a\n * drawer flipping its off-canvas direction in RTL.\n */\nexport type MotionVariant =\n | Record<string, unknown>\n | ((custom: unknown) => Record<string, unknown>);\n\nexport interface MotionPresetDefinition {\n variants: {\n open: MotionVariant;\n closed: MotionVariant;\n };\n transition: Record<string, unknown>;\n}\n\n// =============================================================================\n// Presets\n// =============================================================================\n\n/**\n * `custom` contract per preset:\n *\n * - `drawerStart` — `boolean`, whether the document direction is RTL.\n * - `menu`, `toast` — a {@link MotionEdge}, already resolved from logical\n * position and writing direction by the component.\n * - `overlay`, `modalContent`, `sidebarLabel`, `collapse`, `fade`, `pop` —\n * unused.\n */\nexport const motionPresets: Record<MotionPreset, MotionPresetDefinition> = {\n /**\n * Off-canvas panel pinned to the inline-start edge. Animates `x` only, which\n * the compositor can handle without layout or paint.\n */\n drawerStart: {\n variants: {\n open: { x: '0%' },\n // Off-canvas direction follows writing direction, mirroring the\n // `-translate-x-full rtl:translate-x-full` CSS fallback.\n closed: (isRtl: unknown) => ({ x: isRtl ? '100%' : '-100%' }),\n },\n transition: { type: 'spring', stiffness: 400, damping: 40, mass: 1 },\n },\n\n /** Scrim behind a drawer or modal. */\n overlay: {\n variants: {\n open: { opacity: 1 },\n closed: { opacity: 0 },\n },\n transition: { duration: 0.2, ease: 'easeOut' },\n },\n\n /** Centered dialog surface — rises and settles rather than popping. */\n modalContent: {\n variants: {\n open: { opacity: 1, scale: 1, y: 0 },\n closed: { opacity: 0, scale: 0.96, y: 8 },\n },\n transition: { type: 'spring', stiffness: 500, damping: 40, mass: 0.8 },\n },\n\n /**\n * Text that disappears as its container narrows — sidebar labels on collapse.\n *\n * Opacity only, and deliberately so. An inline-axis slide would read slightly\n * better but would make every label direction-aware, and resolving direction\n * per nav item is a disproportionate amount of plumbing for an 8px nudge.\n * Fading also degrades to itself under reduced motion instead of becoming a\n * different animation.\n *\n * Short because it runs on many elements at once and has to finish inside the\n * container's own width transition, or labels are still fading after the rail\n * has stopped moving.\n */\n sidebarLabel: {\n variants: {\n open: { opacity: 1 },\n closed: { opacity: 0 },\n },\n transition: { duration: 0.15, ease: 'easeOut' },\n },\n\n /**\n * Anchored popup surface — dropdown, select, autocomplete, command palette.\n *\n * `custom` is the side of the anchor the menu actually occupies, so the\n * closed state nudges back *toward* the trigger and the menu reads as coming\n * out of the control that opened it. Pass the post-flip side, not the\n * requested placement: a menu asked for `bottom` that flipped to `top` for\n * want of room must animate from the top, or it moves the wrong way.\n *\n * `transform-origin` is deliberately left to CSS (`origin-top` and friends).\n * It is static per side and never animates, so making it a variant would put\n * a second owner on a property motion has no reason to touch.\n *\n * Snappier than `modalContent`: a menu is a transient response to a click and\n * should feel instant, where a dialog is a context switch and can afford to\n * settle.\n */\n menu: {\n variants: {\n open: { opacity: 1, scale: 1, x: 0, y: 0 },\n closed: (edge: unknown) => ({\n opacity: 0,\n scale: 0.95,\n ...offsetFromEdge(edge, -4),\n }),\n },\n transition: { type: 'spring', stiffness: 600, damping: 40, mass: 0.6 },\n },\n\n /**\n * Disclosure content that expands and collapses — `Collapsible`, `Accordion`.\n *\n * The one preset that earns its keep on capability rather than polish:\n * `height: auto` is not interpolable in CSS, so the alternative is a\n * hard-coded max-height that either clips tall content or eases against dead\n * space on short content. Motion measures the real height instead.\n *\n * Animating `height` costs layout on every frame, unlike the transform and\n * opacity work everywhere else in this file. That is the price of the\n * capability; keep the duration short and don't reach for this preset when a\n * transform would do.\n *\n * Consumers must clip the element (`overflow-hidden`) or content spills past\n * the shrinking box mid-animation.\n *\n * Note that `MotionConfig reducedMotion=\"user\"` does **not** cover this:\n * it drops transform and layout animations, and `height` is a plain value\n * animation to motion. Components using this preset are responsible for\n * honoring the preference themselves — see `usePrefersReducedMotion`.\n */\n collapse: {\n variants: {\n open: { height: 'auto', opacity: 1 },\n closed: { height: 0, opacity: 0 },\n },\n transition: { duration: 0.2, ease: 'easeOut' },\n },\n\n /**\n * Transient notification entering and leaving a stack.\n *\n * `custom` is the physical edge the toast lives against, so it enters from\n * the screen edge nearest it rather than always from the right — which is\n * what the `animate-slide-in-right` fallback does regardless of position.\n *\n * Scale is near-imperceptible on purpose: it softens the arrival without\n * making a message that may carry an error read as playful.\n */\n toast: {\n variants: {\n open: { opacity: 1, scale: 1, x: 0, y: 0 },\n closed: (edge: unknown) => ({\n opacity: 0,\n scale: 0.98,\n ...offsetFromEdge(edge, 24),\n }),\n },\n transition: { type: 'spring', stiffness: 400, damping: 36, mass: 0.8 },\n },\n\n /**\n * Generic presence fade, for surfaces with no meaningful direction —\n * drag overlays, connectivity banners, skeleton-to-content swaps.\n *\n * Survives `reducedMotion=\"user\"` intact, since opacity is the one thing that\n * setting keeps. Prefer it over a transform preset wherever the movement is\n * decorative rather than explanatory.\n */\n fade: {\n variants: {\n open: { opacity: 1 },\n closed: { opacity: 0 },\n },\n transition: { duration: 0.15, ease: 'easeOut' },\n },\n\n /**\n * Small element arriving with emphasis — a count badge, a status pill.\n *\n * Overshoots past full size and settles back (`1 → 1.1 → 1`) so the arrival\n * is legible on an element too small for movement to register. Reserve it\n * for things that appear in response to an event worth noticing; on anything\n * large it reads as a bounce.\n *\n * The overshoot is a keyframe rather than a spring because the resting open\n * state has to be `scale: 1`. Expressing the emphasis as a spring target\n * would leave a mounted consumer parked at 1.1 — permanently 10% oversized —\n * since the open variant is also the at-rest state.\n */\n pop: {\n variants: {\n open: { opacity: 1, scale: [1, 1.1, 1] },\n closed: { opacity: 0, scale: 1 },\n },\n // `times` front-loads the overshoot so it reads as a pop rather than an\n // even swell. Keyframe arrays need a duration-based tween; a spring has no\n // way to run through intermediate values.\n //\n // `times` is scoped to `scale` on purpose. At the top level it also\n // applies to `opacity`, whose two-value tween then gets three time stops:\n // it overshoots to 1 early, falls back toward 0, and snaps to 1 at the end,\n // so the badge flickers instead of fading in.\n transition: {\n duration: 0.15,\n ease: 'easeOut',\n scale: { duration: 0.28, ease: 'easeOut', times: [0, 0.45, 1] },\n },\n },\n};\n","/**\n * Motion runtime — the seam between components and an optional animation library.\n *\n * Components in the main entry never import `motion`. They ask this module for\n * a runtime; if an app has opted in by rendering `<MotionProvider>` from\n * `@mieweb/ui/motion`, they get one and animate. If not, `useMotionRuntime()`\n * returns `null` and they fall back to their existing CSS transitions. That is\n * what keeps `motion` out of the bundle of every app that hasn't asked for it —\n * the opt-in is resolved in the *module graph*, not by a prop.\n *\n * Like `presets`, this module must stay free of any `motion` import.\n */\n\nimport * as React from 'react';\nimport { motionPresets, type MotionPreset } from './presets';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface MotionPresenceProps {\n children?: React.ReactNode;\n /** Suppress the initial mount animation. */\n initial?: boolean;\n /**\n * Fires once every exiting child has finished and been removed.\n *\n * Needed by anything that guards the DOM while it is open — a focus trap, a\n * scroll lock — because those guards must outlive `open` for as long as the\n * subtree is still on screen. Never fires when no runtime is active, since\n * there is no exit to wait for.\n */\n onExitComplete?: () => void;\n}\n\n/**\n * The capabilities a motion library must supply. Deliberately small: element\n * factories, a presence wrapper, and prop builders. Components depend on this\n * interface, never on a concrete library, so swapping or dropping the library\n * stays a one-file change.\n */\nexport interface MotionRuntime {\n /**\n * Whether animations should actually run.\n *\n * A disabled provider still supplies a runtime rather than `null` so that\n * consumers can tell \"disabled\" apart from \"never opted in\": `Modal` uses it\n * to decide whether an exit animation will ever report completion, and\n * `AnimatedPresence` keeps its wrapper element stable across the flip.\n * `Animated` itself renders the plain fallback tag whenever this is false —\n * withholding animation props from a mounted motion component corrupts\n * `toggle`-mode elements, so the swap (and the remount it implies) is the\n * correct behaviour. See the render branches in `Animated`.\n */\n enabled: boolean;\n /** Animated `div`. */\n Div: React.ElementType;\n /** Animated `nav`. */\n Nav: React.ElementType;\n /** Animated `span`, for inline content that must not become a block. */\n Span: React.ElementType;\n /** Enables exit animations for conditionally rendered children. */\n Presence: React.ComponentType<MotionPresenceProps>;\n /**\n * Props for an element that stays mounted and animates between states.\n * Skips the initial animation so a closed drawer doesn't slide out on load.\n */\n toggle: (\n preset: MotionPreset,\n open: boolean,\n custom?: unknown\n ) => Record<string, unknown>;\n /** Props for an element that mounts and unmounts inside `Presence`. */\n presence: (preset: MotionPreset, custom?: unknown) => Record<string, unknown>;\n}\n\n// =============================================================================\n// Context\n// =============================================================================\n\n/**\n * The context is stashed on `globalThis` under a registered symbol rather than\n * held in a module-local `const`.\n *\n * `@mieweb/ui` and `@mieweb/ui/motion` are separate bundle entries, and CJS\n * builds cannot code-split. Without this, the provider and the components\n * would each get their own copy of the context object and the provider would\n * silently never be seen — animations would simply never turn on, with no\n * error to explain why. A duplicated install of the package causes the same\n * failure. Keying off the global symbol registry makes the context a true\n * singleton in every one of those cases.\n *\n * The key is versioned. Two copies of this package sharing one page share\n * whatever lives under the key, so the `v1` suffix is a compatibility\n * contract: bump it if the `MotionRuntime` interface ever changes shape,\n * or an old provider will hand a new component a runtime it cannot use.\n */\nconst CONTEXT_KEY = Symbol.for('@mieweb/ui.motionRuntimeContext.v1');\n\ntype GlobalWithMotionContext = typeof globalThis & {\n [CONTEXT_KEY]?: React.Context<MotionRuntime | null>;\n};\n\nfunction getMotionRuntimeContext(): React.Context<MotionRuntime | null> {\n const globalScope = globalThis as GlobalWithMotionContext;\n if (!globalScope[CONTEXT_KEY]) {\n globalScope[CONTEXT_KEY] = React.createContext<MotionRuntime | null>(null);\n }\n return globalScope[CONTEXT_KEY];\n}\n\n/** @internal Consumed by `<MotionProvider>` in the `@mieweb/ui/motion` entry. */\nexport const MotionRuntimeContext = getMotionRuntimeContext();\n\n// =============================================================================\n// Hooks\n// =============================================================================\n\n/**\n * The active motion runtime, or `null` when the app has not opted in.\n *\n * Components must treat `null` as the normal case and keep a CSS path that\n * looks good on its own — motion is an enhancement, never a requirement.\n */\nexport function useMotionRuntime(): MotionRuntime | null {\n return React.useContext(MotionRuntimeContext);\n}\n\n// =============================================================================\n// Prop builders\n// =============================================================================\n\n/**\n * Builds the `toggle`/`presence` prop builders around a library-agnostic core.\n * Exported so `<MotionProvider>` can assemble a runtime without restating the\n * preset lookup.\n *\n * @internal\n */\nexport function createPresetPropBuilders(): Pick<\n MotionRuntime,\n 'toggle' | 'presence'\n> {\n return {\n toggle(preset, open, custom) {\n const { variants, transition } = motionPresets[preset];\n return {\n variants,\n transition,\n custom,\n // `false` pins the element to its current variant on mount instead of\n // animating into it.\n initial: false,\n animate: open ? 'open' : 'closed',\n };\n },\n\n presence(preset, custom) {\n const { variants, transition } = motionPresets[preset];\n return {\n variants,\n transition,\n custom,\n initial: 'closed',\n animate: 'open',\n exit: 'closed',\n };\n },\n };\n}\n","/**\n * `Animated` / `AnimatedPresence` — the ergonomic layer components use.\n *\n * These exist so an individual component never has to branch on whether motion\n * is available. It declares the preset it wants and the CSS classes that stand\n * in when motion is absent; this module picks the element to render.\n *\n * Adding motion to a further component should be a matter of swapping its\n * root `<div>` for an `<Animated>` and naming a preset — no new imports, no\n * new dependency, and no behavior change for apps that have not opted in.\n */\n\nimport * as React from 'react';\nimport { cn } from '../utils/cn';\nimport { useMotionRuntime, type MotionPresenceProps } from './runtime';\nimport type { MotionPreset } from './presets';\n\n// =============================================================================\n// Animated\n// =============================================================================\n\nexport interface AnimatedProps extends React.HTMLAttributes<HTMLElement> {\n /** Intrinsic element to render. */\n as?: 'div' | 'nav' | 'span';\n /** Which shared animation recipe to use. */\n preset: MotionPreset;\n /**\n * - `toggle` — element stays mounted and animates between open and closed.\n * - `presence` — element mounts and unmounts; wrap it in `<AnimatedPresence>`\n * so the exit animation gets a chance to run.\n */\n mode: 'toggle' | 'presence';\n /** Current state. Only read in `toggle` mode. */\n open?: boolean;\n /** Per-preset context value — see the `custom` contract in `presets.ts`. */\n custom?: unknown;\n /**\n * Classes applied whenever this element is **not** animating — no provider,\n * a disabled provider, or `enabled={false}`. This is where a component's\n * existing CSS transition lives, so the two paths never both try to drive\n * the same property.\n */\n fallbackClassName?: string;\n /**\n * Set `false` to stop this element animating even when a runtime is active.\n *\n * For states where an animated element would be wrong rather than merely\n * unnecessary. Motion writes a `transform` to hold an element at its resting\n * position, and a transformed ancestor becomes the containing block for any\n * `position: fixed` descendant — so an element that is only sometimes\n * animated should opt out the rest of the time.\n *\n * Flipping this (or the provider's `disabled`) swaps the element back to a\n * plain tag, which **remounts** it — deliberately. See the note on the\n * render branches below.\n */\n enabled?: boolean;\n}\n\nexport const Animated = React.forwardRef<HTMLElement, AnimatedProps>(\n function Animated(\n {\n as = 'div',\n preset,\n mode,\n open = false,\n custom,\n className,\n fallbackClassName,\n enabled = true,\n children,\n ...rest\n },\n ref\n ) {\n const runtime = useMotionRuntime();\n\n /*\n * Anything not animating renders the plain tag with the CSS fallback —\n * no provider, a disabled provider, or `enabled={false}` alike.\n *\n * Crossing between this branch and the motion one changes the element\n * type, which remounts the subtree. That is deliberate. The obvious\n * alternative — keeping the motion component mounted and only withholding\n * its animation props — corrupts `toggle`-mode elements in both\n * directions, because motion only writes variant styles at mount or in\n * response to an animation:\n *\n * - props added in place (a drawer crossing into its mobile breakpoint\n * while closed) never get the `closed` transform, so the drawer sits\n * fully visible over the page;\n * - props removed in place strand whatever inline `transform` motion last\n * wrote, so a sidebar returning to desktop stays off-canvas.\n *\n * Fresh mounts are correct in both worlds, so remounting at the flip is\n * the fix. The flips are rare — a breakpoint cross, a test toggling the\n * provider — and a remount that resets local state beats a stale\n * transform that removes the navigation.\n */\n if (!runtime || !runtime.enabled || !enabled) {\n const Tag = as as React.ElementType;\n return (\n <Tag ref={ref} className={cn(fallbackClassName, className)} {...rest}>\n {children}\n </Tag>\n );\n }\n\n const Component =\n as === 'nav' ? runtime.Nav : as === 'span' ? runtime.Span : runtime.Div;\n\n const motionProps =\n mode === 'toggle'\n ? runtime.toggle(preset, open, custom)\n : runtime.presence(preset, custom);\n\n return (\n <Component ref={ref} className={className} {...motionProps} {...rest}>\n {children}\n </Component>\n );\n }\n);\n\nAnimated.displayName = 'Animated';\n\n// =============================================================================\n// AnimatedPresence\n// =============================================================================\n\n/**\n * Keeps unmounting children on screen long enough to animate out.\n *\n * Without a runtime this is a pass-through, so children disappear immediately —\n * which is exactly what they do today. Children rendered conditionally inside\n * it need a stable `key`.\n */\nexport function AnimatedPresence({\n children,\n initial,\n onExitComplete,\n}: MotionPresenceProps): React.JSX.Element {\n const runtime = useMotionRuntime();\n\n if (!runtime) {\n return <>{children}</>;\n }\n\n const { Presence } = runtime;\n return (\n <Presence initial={initial} onExitComplete={onExitComplete}>\n {children}\n </Presence>\n );\n}\n\nAnimatedPresence.displayName = 'AnimatedPresence';\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkUV2FVNWT_cjs = require('./chunk-UV2FVNWT.cjs');
3
+ var chunkRIUQP2QS_cjs = require('./chunk-RIUQP2QS.cjs');
4
4
  var react = require('react');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
 
@@ -85,11 +85,11 @@ var SurveyBlock = ({ code, id }) => {
85
85
  };
86
86
  }, [code]);
87
87
  if (!parsed) {
88
- return /* @__PURE__ */ jsxRuntime.jsx(chunkUV2FVNWT_cjs.FenceBlock, { code, language: "survey", supportsRawView: true, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center p-6 text-sm text-neutral-500", children: "Loading survey\u2026" }) });
88
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkRIUQP2QS_cjs.FenceBlock, { code, language: "survey", supportsRawView: true, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center p-6 text-sm text-neutral-500", children: "Loading survey\u2026" }) });
89
89
  }
90
90
  const { fields, error } = parsed;
91
91
  return /* @__PURE__ */ jsxRuntime.jsx(
92
- chunkUV2FVNWT_cjs.FenceBlock,
92
+ chunkRIUQP2QS_cjs.FenceBlock,
93
93
  {
94
94
  code,
95
95
  language: "survey",
@@ -194,5 +194,5 @@ var SurveyBlock = ({ code, id }) => {
194
194
  };
195
195
 
196
196
  exports.SurveyBlock = SurveyBlock;
197
- //# sourceMappingURL=chunk-3QEVGSFG.cjs.map
198
- //# sourceMappingURL=chunk-3QEVGSFG.cjs.map
197
+ //# sourceMappingURL=chunk-IGDO62KR.cjs.map
198
+ //# sourceMappingURL=chunk-IGDO62KR.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Markdown/SurveyBlock.tsx"],"names":["useState","useEffect","jsx","FenceBlock","jsxs"],"mappings":"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","file":"chunk-3QEVGSFG.cjs","sourcesContent":["/** Survey/questionnaire preview from JSON or YAML. Requires `js-yaml` for YAML input. */\nimport React, { useEffect, useState } from 'react';\n\nimport { FenceBlock } from './FenceBlock';\n\ninterface SurveyBlockProps {\n code: string;\n id: string;\n}\n\ninterface SurveyField {\n type: string;\n name: string;\n title?: string;\n label?: string;\n choices?: Array<string | { value: string; text: string }>;\n isRequired?: boolean;\n}\n\ninterface ParsedSurvey {\n fields: SurveyField[];\n error: string | null;\n}\n\ntype YamlLoadFn = (input: string) => unknown;\nlet yamlPromise: Promise<YamlLoadFn> | null = null;\nfunction loadYaml(): Promise<YamlLoadFn> {\n if (!yamlPromise) {\n yamlPromise = import(/* @vite-ignore */ 'js-yaml')\n .then((mod) => {\n const api =\n (mod as { default?: { load?: YamlLoadFn }; load?: YamlLoadFn })\n .default ?? mod;\n const load = (api as { load?: YamlLoadFn }).load;\n if (typeof load !== 'function')\n throw new Error('js-yaml load not found');\n return load;\n })\n .catch((err) => {\n yamlPromise = null;\n throw err;\n });\n }\n return yamlPromise;\n}\n\nfunction tryParseJson(\n code: string\n): { ok: true; data: unknown } | { ok: false } {\n try {\n return { ok: true, data: JSON.parse(code) };\n } catch {\n return { ok: false };\n }\n}\n\nfunction elementsToParsed(data: unknown): ParsedSurvey {\n if (!data || typeof data !== 'object') {\n return { fields: [], error: 'Invalid survey data format' };\n }\n const obj = data as Record<string, unknown>;\n\n let elements: unknown[] = [];\n if (Array.isArray(obj.pages)) {\n for (const page of obj.pages as Array<Record<string, unknown>>) {\n if (Array.isArray(page.elements)) {\n elements = elements.concat(page.elements);\n }\n }\n } else if (Array.isArray(obj.elements)) {\n elements = obj.elements;\n } else if (Array.isArray(obj.questions)) {\n elements = obj.questions;\n } else if (Array.isArray(obj.fields)) {\n elements = obj.fields;\n } else {\n return { fields: [], error: 'No survey questions found in data' };\n }\n\n return { fields: elements as SurveyField[], error: null };\n}\n\nexport const SurveyBlock: React.FC<SurveyBlockProps> = ({ code, id }) => {\n const [parsed, setParsed] = useState<ParsedSurvey | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n\n const jsonResult = tryParseJson(code);\n if (jsonResult.ok) {\n setParsed(elementsToParsed(jsonResult.data));\n return;\n }\n\n loadYaml()\n .then((load) => {\n try {\n const data = load(code);\n if (!cancelled) setParsed(elementsToParsed(data));\n } catch (err) {\n if (!cancelled)\n setParsed({\n fields: [],\n error: `Failed to parse survey data: ${(err as Error).message}`,\n });\n }\n })\n .catch(() => {\n if (!cancelled)\n setParsed({\n fields: [],\n error:\n 'Survey preview requires the `js-yaml` package for YAML input. Install it with `npm install js-yaml`.',\n });\n });\n return () => {\n cancelled = true;\n };\n }, [code]);\n\n if (!parsed) {\n return (\n <FenceBlock code={code} language=\"survey\" supportsRawView>\n <div className=\"flex items-center justify-center p-6 text-sm text-neutral-500\">\n Loading survey…\n </div>\n </FenceBlock>\n );\n }\n\n const { fields, error } = parsed;\n\n return (\n <FenceBlock\n code={code}\n language=\"survey\"\n supportsRawView\n error={error ?? undefined}\n >\n <div className=\"space-y-4 p-4\">\n <h4 className=\"text-sm font-medium text-neutral-700 dark:text-neutral-300\">\n Survey Preview\n </h4>\n {fields.map((field, i) => {\n const fieldId = `${id}-field-${field.name ?? i}`;\n return (\n <div key={field.name ?? i} className=\"space-y-1.5\">\n <label\n htmlFor={fieldId}\n className=\"block text-sm font-medium text-neutral-700 dark:text-neutral-300\"\n >\n {field.title ?? field.label ?? field.name}\n {field.isRequired && (\n <span className=\"ms-1 text-red-500\">*</span>\n )}\n </label>\n\n {(field.type === 'radiogroup' || field.type === 'radio') &&\n field.choices && (\n <div className=\"space-y-1\">\n {field.choices.map((choice, ci) => {\n const value =\n typeof choice === 'string' ? choice : choice.value;\n const text =\n typeof choice === 'string' ? choice : choice.text;\n return (\n <label\n key={ci}\n className=\"flex items-center gap-2 text-sm text-neutral-600 dark:text-neutral-400\"\n >\n <input\n type=\"radio\"\n name={`${id}-${field.name}`}\n value={value}\n disabled\n className=\"accent-primary-500\"\n />\n {text}\n </label>\n );\n })}\n </div>\n )}\n\n {(field.type === 'checkbox' || field.type === 'boolean') && (\n <input\n id={fieldId}\n type=\"checkbox\"\n disabled\n className=\"accent-primary-500\"\n />\n )}\n\n {(field.type === 'text' || field.type === 'comment') && (\n <input\n id={fieldId}\n type=\"text\"\n disabled\n placeholder={field.title ?? field.name}\n className=\"w-full rounded-md border border-neutral-300 bg-neutral-100 px-3 py-1.5 text-sm dark:border-neutral-600 dark:bg-neutral-800\"\n />\n )}\n\n {field.type === 'rating' && (\n <div\n role=\"img\"\n className=\"flex gap-1\"\n aria-label=\"Rating: 0 out of 5\"\n >\n {[1, 2, 3, 4, 5].map((n) => (\n <span\n key={n}\n aria-hidden=\"true\"\n className=\"text-lg text-neutral-500 dark:text-neutral-500\"\n >\n ★\n </span>\n ))}\n </div>\n )}\n\n {field.type === 'dropdown' && field.choices && (\n <select\n id={fieldId}\n name={fieldId}\n disabled\n className=\"w-full rounded-md border border-neutral-300 bg-neutral-100 px-3 py-1.5 text-sm dark:border-neutral-600 dark:bg-neutral-800\"\n >\n {field.choices.map((choice, ci) => {\n const value =\n typeof choice === 'string' ? choice : choice.value;\n const text =\n typeof choice === 'string' ? choice : choice.text;\n return (\n <option key={ci} value={value}>\n {text}\n </option>\n );\n })}\n </select>\n )}\n </div>\n );\n })}\n <p className=\"text-xs text-neutral-600 dark:text-neutral-400\">\n This is a preview. Interactive survey support coming soon.\n </p>\n </div>\n </FenceBlock>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Markdown/SurveyBlock.tsx"],"names":["useState","useEffect","jsx","FenceBlock","jsxs"],"mappings":"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","file":"chunk-IGDO62KR.cjs","sourcesContent":["/** Survey/questionnaire preview from JSON or YAML. Requires `js-yaml` for YAML input. */\nimport React, { useEffect, useState } from 'react';\n\nimport { FenceBlock } from './FenceBlock';\n\ninterface SurveyBlockProps {\n code: string;\n id: string;\n}\n\ninterface SurveyField {\n type: string;\n name: string;\n title?: string;\n label?: string;\n choices?: Array<string | { value: string; text: string }>;\n isRequired?: boolean;\n}\n\ninterface ParsedSurvey {\n fields: SurveyField[];\n error: string | null;\n}\n\ntype YamlLoadFn = (input: string) => unknown;\nlet yamlPromise: Promise<YamlLoadFn> | null = null;\nfunction loadYaml(): Promise<YamlLoadFn> {\n if (!yamlPromise) {\n yamlPromise = import(/* @vite-ignore */ 'js-yaml')\n .then((mod) => {\n const api =\n (mod as { default?: { load?: YamlLoadFn }; load?: YamlLoadFn })\n .default ?? mod;\n const load = (api as { load?: YamlLoadFn }).load;\n if (typeof load !== 'function')\n throw new Error('js-yaml load not found');\n return load;\n })\n .catch((err) => {\n yamlPromise = null;\n throw err;\n });\n }\n return yamlPromise;\n}\n\nfunction tryParseJson(\n code: string\n): { ok: true; data: unknown } | { ok: false } {\n try {\n return { ok: true, data: JSON.parse(code) };\n } catch {\n return { ok: false };\n }\n}\n\nfunction elementsToParsed(data: unknown): ParsedSurvey {\n if (!data || typeof data !== 'object') {\n return { fields: [], error: 'Invalid survey data format' };\n }\n const obj = data as Record<string, unknown>;\n\n let elements: unknown[] = [];\n if (Array.isArray(obj.pages)) {\n for (const page of obj.pages as Array<Record<string, unknown>>) {\n if (Array.isArray(page.elements)) {\n elements = elements.concat(page.elements);\n }\n }\n } else if (Array.isArray(obj.elements)) {\n elements = obj.elements;\n } else if (Array.isArray(obj.questions)) {\n elements = obj.questions;\n } else if (Array.isArray(obj.fields)) {\n elements = obj.fields;\n } else {\n return { fields: [], error: 'No survey questions found in data' };\n }\n\n return { fields: elements as SurveyField[], error: null };\n}\n\nexport const SurveyBlock: React.FC<SurveyBlockProps> = ({ code, id }) => {\n const [parsed, setParsed] = useState<ParsedSurvey | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n\n const jsonResult = tryParseJson(code);\n if (jsonResult.ok) {\n setParsed(elementsToParsed(jsonResult.data));\n return;\n }\n\n loadYaml()\n .then((load) => {\n try {\n const data = load(code);\n if (!cancelled) setParsed(elementsToParsed(data));\n } catch (err) {\n if (!cancelled)\n setParsed({\n fields: [],\n error: `Failed to parse survey data: ${(err as Error).message}`,\n });\n }\n })\n .catch(() => {\n if (!cancelled)\n setParsed({\n fields: [],\n error:\n 'Survey preview requires the `js-yaml` package for YAML input. Install it with `npm install js-yaml`.',\n });\n });\n return () => {\n cancelled = true;\n };\n }, [code]);\n\n if (!parsed) {\n return (\n <FenceBlock code={code} language=\"survey\" supportsRawView>\n <div className=\"flex items-center justify-center p-6 text-sm text-neutral-500\">\n Loading survey…\n </div>\n </FenceBlock>\n );\n }\n\n const { fields, error } = parsed;\n\n return (\n <FenceBlock\n code={code}\n language=\"survey\"\n supportsRawView\n error={error ?? undefined}\n >\n <div className=\"space-y-4 p-4\">\n <h4 className=\"text-sm font-medium text-neutral-700 dark:text-neutral-300\">\n Survey Preview\n </h4>\n {fields.map((field, i) => {\n const fieldId = `${id}-field-${field.name ?? i}`;\n return (\n <div key={field.name ?? i} className=\"space-y-1.5\">\n <label\n htmlFor={fieldId}\n className=\"block text-sm font-medium text-neutral-700 dark:text-neutral-300\"\n >\n {field.title ?? field.label ?? field.name}\n {field.isRequired && (\n <span className=\"ms-1 text-red-500\">*</span>\n )}\n </label>\n\n {(field.type === 'radiogroup' || field.type === 'radio') &&\n field.choices && (\n <div className=\"space-y-1\">\n {field.choices.map((choice, ci) => {\n const value =\n typeof choice === 'string' ? choice : choice.value;\n const text =\n typeof choice === 'string' ? choice : choice.text;\n return (\n <label\n key={ci}\n className=\"flex items-center gap-2 text-sm text-neutral-600 dark:text-neutral-400\"\n >\n <input\n type=\"radio\"\n name={`${id}-${field.name}`}\n value={value}\n disabled\n className=\"accent-primary-500\"\n />\n {text}\n </label>\n );\n })}\n </div>\n )}\n\n {(field.type === 'checkbox' || field.type === 'boolean') && (\n <input\n id={fieldId}\n type=\"checkbox\"\n disabled\n className=\"accent-primary-500\"\n />\n )}\n\n {(field.type === 'text' || field.type === 'comment') && (\n <input\n id={fieldId}\n type=\"text\"\n disabled\n placeholder={field.title ?? field.name}\n className=\"w-full rounded-md border border-neutral-300 bg-neutral-100 px-3 py-1.5 text-sm dark:border-neutral-600 dark:bg-neutral-800\"\n />\n )}\n\n {field.type === 'rating' && (\n <div\n role=\"img\"\n className=\"flex gap-1\"\n aria-label=\"Rating: 0 out of 5\"\n >\n {[1, 2, 3, 4, 5].map((n) => (\n <span\n key={n}\n aria-hidden=\"true\"\n className=\"text-lg text-neutral-500 dark:text-neutral-500\"\n >\n ★\n </span>\n ))}\n </div>\n )}\n\n {field.type === 'dropdown' && field.choices && (\n <select\n id={fieldId}\n name={fieldId}\n disabled\n className=\"w-full rounded-md border border-neutral-300 bg-neutral-100 px-3 py-1.5 text-sm dark:border-neutral-600 dark:bg-neutral-800\"\n >\n {field.choices.map((choice, ci) => {\n const value =\n typeof choice === 'string' ? choice : choice.value;\n const text =\n typeof choice === 'string' ? choice : choice.text;\n return (\n <option key={ci} value={value}>\n {text}\n </option>\n );\n })}\n </select>\n )}\n </div>\n );\n })}\n <p className=\"text-xs text-neutral-600 dark:text-neutral-400\">\n This is a preview. Interactive survey support coming soon.\n </p>\n </div>\n </FenceBlock>\n );\n};\n"]}