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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (807) hide show
  1. package/README.md +4 -4
  2. package/agent/mieweb-ui.instructions.md +77 -0
  3. package/dist/CsvBlock-CFXSDPBI.js +9 -0
  4. package/dist/{CsvBlock-UWPMTLE2.js.map → CsvBlock-CFXSDPBI.js.map} +1 -1
  5. package/dist/CsvBlock-RGO7JXHJ.cjs +18 -0
  6. package/dist/{CsvBlock-ROJCKJDP.cjs.map → CsvBlock-RGO7JXHJ.cjs.map} +1 -1
  7. package/dist/HtmlPreviewBlock-VBYXCXVT.cjs +18 -0
  8. package/dist/{HtmlPreviewBlock-DWFN6EUB.cjs.map → HtmlPreviewBlock-VBYXCXVT.cjs.map} +1 -1
  9. package/dist/HtmlPreviewBlock-Z2GCK325.js +9 -0
  10. package/dist/{HtmlPreviewBlock-ME5U3XNS.js.map → HtmlPreviewBlock-Z2GCK325.js.map} +1 -1
  11. package/dist/MermaidBlock-I2R2BQOX.cjs +18 -0
  12. package/dist/{MermaidBlock-D2UC5M55.cjs.map → MermaidBlock-I2R2BQOX.cjs.map} +1 -1
  13. package/dist/MermaidBlock-XCAK7IA5.js +9 -0
  14. package/dist/{MermaidBlock-2B6CPD6Y.js.map → MermaidBlock-XCAK7IA5.js.map} +1 -1
  15. package/dist/SurveyBlock-KI5JOWCL.js +9 -0
  16. package/dist/{SurveyBlock-4DO62RBT.js.map → SurveyBlock-KI5JOWCL.js.map} +1 -1
  17. package/dist/SurveyBlock-UKSGISRT.cjs +18 -0
  18. package/dist/{SurveyBlock-4CD4AYMJ.cjs.map → SurveyBlock-UKSGISRT.cjs.map} +1 -1
  19. package/dist/ag-grid.d.cts +142 -1
  20. package/dist/ag-grid.d.ts +142 -1
  21. package/dist/brands/bluehive.cjs +3 -3
  22. package/dist/brands/bluehive.css +3 -0
  23. package/dist/brands/bluehive.js +1 -1
  24. package/dist/brands/index.cjs +17 -17
  25. package/dist/brands/index.js +4 -4
  26. package/dist/{chunk-JYZW2PZS.cjs → chunk-254QK722.cjs} +7 -7
  27. package/dist/chunk-254QK722.cjs.map +1 -0
  28. package/dist/{chunk-4IS3QCOQ.cjs → chunk-2FZYZ4HT.cjs} +4 -3
  29. package/dist/chunk-2FZYZ4HT.cjs.map +1 -0
  30. package/dist/{chunk-VPIYTQCV.cjs → chunk-2I4IRQQG.cjs} +12 -5
  31. package/dist/chunk-2I4IRQQG.cjs.map +1 -0
  32. package/dist/{chunk-IT775BYG.js → chunk-2W73UQ3T.js} +4 -3
  33. package/dist/chunk-2W73UQ3T.js.map +1 -0
  34. package/dist/chunk-2X54ZLT6.js +874 -0
  35. package/dist/chunk-2X54ZLT6.js.map +1 -0
  36. package/dist/{chunk-5MCBWTIF.cjs → chunk-32ZCJOSR.cjs} +4 -4
  37. package/dist/{chunk-5MCBWTIF.cjs.map → chunk-32ZCJOSR.cjs.map} +1 -1
  38. package/dist/{chunk-WNJRS7Y7.cjs → chunk-3ZWCIPFT.cjs} +4 -2
  39. package/dist/chunk-3ZWCIPFT.cjs.map +1 -0
  40. package/dist/chunk-434L5RYF.js +314 -0
  41. package/dist/chunk-434L5RYF.js.map +1 -0
  42. package/dist/{chunk-TPWKM7JH.js → chunk-43K7OQ3E.js} +3 -3
  43. package/dist/{chunk-TPWKM7JH.js.map → chunk-43K7OQ3E.js.map} +1 -1
  44. package/dist/chunk-47P5QLX4.cjs +42 -0
  45. package/dist/chunk-47P5QLX4.cjs.map +1 -0
  46. package/dist/{chunk-CR2SDI23.cjs → chunk-4QYYWYFD.cjs} +8 -7
  47. package/dist/chunk-4QYYWYFD.cjs.map +1 -0
  48. package/dist/{chunk-76TBQDED.js → chunk-4RI3CQGE.js} +6 -6
  49. package/dist/{chunk-76TBQDED.js.map → chunk-4RI3CQGE.js.map} +1 -1
  50. package/dist/chunk-4ZB7RSMY.cjs +306 -0
  51. package/dist/chunk-4ZB7RSMY.cjs.map +1 -0
  52. package/dist/chunk-522WJIVI.js +99 -0
  53. package/dist/chunk-522WJIVI.js.map +1 -0
  54. package/dist/chunk-56VTM4OX.js +261 -0
  55. package/dist/chunk-56VTM4OX.js.map +1 -0
  56. package/dist/chunk-5HKZR6UG.js +248 -0
  57. package/dist/chunk-5HKZR6UG.js.map +1 -0
  58. package/dist/chunk-6BNZLN4B.cjs +548 -0
  59. package/dist/chunk-6BNZLN4B.cjs.map +1 -0
  60. package/dist/chunk-6N7NMOSV.js +233 -0
  61. package/dist/chunk-6N7NMOSV.js.map +1 -0
  62. package/dist/chunk-6TTCZY3P.cjs +4 -0
  63. package/dist/chunk-6TTCZY3P.cjs.map +1 -0
  64. package/dist/{chunk-YQDA366U.js → chunk-753ENNB6.js} +2 -2
  65. package/dist/{chunk-YQDA366U.js.map → chunk-753ENNB6.js.map} +1 -1
  66. package/dist/{chunk-N6IY47YA.cjs → chunk-7C5W744U.cjs} +8 -8
  67. package/dist/{chunk-N6IY47YA.cjs.map → chunk-7C5W744U.cjs.map} +1 -1
  68. package/dist/chunk-7E46YDOT.cjs +122 -0
  69. package/dist/chunk-7E46YDOT.cjs.map +1 -0
  70. package/dist/chunk-7HUTR6RX.js +178 -0
  71. package/dist/chunk-7HUTR6RX.js.map +1 -0
  72. package/dist/chunk-7IRTD4JT.cjs +61 -0
  73. package/dist/chunk-7IRTD4JT.cjs.map +1 -0
  74. package/dist/{chunk-KZFBQ7GY.js → chunk-7QW6TU4X.js} +3 -3
  75. package/dist/{chunk-KZFBQ7GY.js.map → chunk-7QW6TU4X.js.map} +1 -1
  76. package/dist/{chunk-MWVW4APN.cjs → chunk-7UTBDFFL.cjs} +4 -4
  77. package/dist/{chunk-MWVW4APN.cjs.map → chunk-7UTBDFFL.cjs.map} +1 -1
  78. package/dist/chunk-7WJ6MBF5.cjs +47 -0
  79. package/dist/chunk-7WJ6MBF5.cjs.map +1 -0
  80. package/dist/{chunk-FJ7YPVKV.js → chunk-7X6R3JIA.js} +3 -3
  81. package/dist/{chunk-FJ7YPVKV.js.map → chunk-7X6R3JIA.js.map} +1 -1
  82. package/dist/chunk-A4W5CSK7.cjs +216 -0
  83. package/dist/chunk-A4W5CSK7.cjs.map +1 -0
  84. package/dist/{chunk-2G75X6TS.cjs → chunk-AHHFFXJR.cjs} +3 -3
  85. package/dist/{chunk-2G75X6TS.cjs.map → chunk-AHHFFXJR.cjs.map} +1 -1
  86. package/dist/chunk-AJPFQF3H.cjs +896 -0
  87. package/dist/chunk-AJPFQF3H.cjs.map +1 -0
  88. package/dist/chunk-AMYFRY7K.js +3 -0
  89. package/dist/chunk-AMYFRY7K.js.map +1 -0
  90. package/dist/{chunk-VNYW4C4J.cjs → chunk-ANMX7YDL.cjs} +4 -84
  91. package/dist/chunk-ANMX7YDL.cjs.map +1 -0
  92. package/dist/chunk-ARIJ5OHW.cjs +139 -0
  93. package/dist/chunk-ARIJ5OHW.cjs.map +1 -0
  94. package/dist/{chunk-GD7EBGC4.cjs → chunk-ATRW3J5Z.cjs} +49 -19
  95. package/dist/chunk-ATRW3J5Z.cjs.map +1 -0
  96. package/dist/chunk-BJ6ABRSQ.cjs +256 -0
  97. package/dist/chunk-BJ6ABRSQ.cjs.map +1 -0
  98. package/dist/{chunk-G3JX3UAU.cjs → chunk-BWSZ2BHJ.cjs} +6 -6
  99. package/dist/{chunk-G3JX3UAU.cjs.map → chunk-BWSZ2BHJ.cjs.map} +1 -1
  100. package/dist/chunk-BXRQ6HEP.cjs +4 -0
  101. package/dist/chunk-BXRQ6HEP.cjs.map +1 -0
  102. package/dist/chunk-CBBKWRLG.js +213 -0
  103. package/dist/chunk-CBBKWRLG.js.map +1 -0
  104. package/dist/{chunk-UAMXCMST.cjs → chunk-CFI3TQMA.cjs} +3 -3
  105. package/dist/{chunk-UAMXCMST.cjs.map → chunk-CFI3TQMA.cjs.map} +1 -1
  106. package/dist/chunk-CLQW724U.cjs +271 -0
  107. package/dist/chunk-CLQW724U.cjs.map +1 -0
  108. package/dist/chunk-CPDNX3LS.cjs +47 -0
  109. package/dist/chunk-CPDNX3LS.cjs.map +1 -0
  110. package/dist/chunk-CVNPNZMX.js +44 -0
  111. package/dist/chunk-CVNPNZMX.js.map +1 -0
  112. package/dist/chunk-DGHS5IVD.js +305 -0
  113. package/dist/chunk-DGHS5IVD.js.map +1 -0
  114. package/dist/chunk-DHGCLPFZ.js +91 -0
  115. package/dist/chunk-DHGCLPFZ.js.map +1 -0
  116. package/dist/chunk-DO2YN46R.cjs +201 -0
  117. package/dist/chunk-DO2YN46R.cjs.map +1 -0
  118. package/dist/chunk-DVDT7TX7.js +151 -0
  119. package/dist/chunk-DVDT7TX7.js.map +1 -0
  120. package/dist/chunk-DXEPYK3I.cjs +92 -0
  121. package/dist/chunk-DXEPYK3I.cjs.map +1 -0
  122. package/dist/chunk-DXFP53KF.js +283 -0
  123. package/dist/chunk-DXFP53KF.js.map +1 -0
  124. package/dist/chunk-EACNRR3C.cjs +4 -0
  125. package/dist/chunk-EACNRR3C.cjs.map +1 -0
  126. package/dist/{chunk-TVTIGV7Q.js → chunk-EBKE4DLU.js} +18 -11
  127. package/dist/chunk-EBKE4DLU.js.map +1 -0
  128. package/dist/{chunk-ASSDGS4F.cjs → chunk-ECYIDXG6.cjs} +254 -4
  129. package/dist/chunk-ECYIDXG6.cjs.map +1 -0
  130. package/dist/chunk-EGPDT7SM.js +195 -0
  131. package/dist/chunk-EGPDT7SM.js.map +1 -0
  132. package/dist/chunk-EPCUPHEO.js +193 -0
  133. package/dist/chunk-EPCUPHEO.js.map +1 -0
  134. package/dist/{chunk-7ZXAQTV4.cjs → chunk-ERACGSDY.cjs} +8 -8
  135. package/dist/{chunk-7ZXAQTV4.cjs.map → chunk-ERACGSDY.cjs.map} +1 -1
  136. package/dist/{chunk-XCP454Q6.js → chunk-F4N67NAF.js} +12 -3
  137. package/dist/chunk-F4N67NAF.js.map +1 -0
  138. package/dist/{chunk-WGPLUCBD.js → chunk-F6W62K4J.js} +4 -4
  139. package/dist/{chunk-WGPLUCBD.js.map → chunk-F6W62K4J.js.map} +1 -1
  140. package/dist/{chunk-XVW5DPPP.js → chunk-F7SZSOB3.js} +4 -3
  141. package/dist/chunk-F7SZSOB3.js.map +1 -0
  142. package/dist/chunk-FBCDYTWM.js +385 -0
  143. package/dist/chunk-FBCDYTWM.js.map +1 -0
  144. package/dist/{chunk-KQUI4BGS.cjs → chunk-FBN2VHUV.cjs} +68 -61
  145. package/dist/chunk-FBN2VHUV.cjs.map +1 -0
  146. package/dist/{chunk-V7D3YGUV.js → chunk-FGLIP6YR.js} +4 -4
  147. package/dist/{chunk-V7D3YGUV.js.map → chunk-FGLIP6YR.js.map} +1 -1
  148. package/dist/{chunk-VU6UTJRM.js → chunk-FIKO4WR6.js} +3 -3
  149. package/dist/{chunk-VU6UTJRM.js.map → chunk-FIKO4WR6.js.map} +1 -1
  150. package/dist/{chunk-OD47TTAW.cjs → chunk-FMEA6WAY.cjs} +9 -9
  151. package/dist/{chunk-OD47TTAW.cjs.map → chunk-FMEA6WAY.cjs.map} +1 -1
  152. package/dist/chunk-FSGJXCBG.cjs +318 -0
  153. package/dist/chunk-FSGJXCBG.cjs.map +1 -0
  154. package/dist/chunk-FSWHZY3T.cjs +328 -0
  155. package/dist/chunk-FSWHZY3T.cjs.map +1 -0
  156. package/dist/chunk-FTEZNCRI.js +29 -0
  157. package/dist/chunk-FTEZNCRI.js.map +1 -0
  158. package/dist/{chunk-YVPC65ZJ.cjs → chunk-GF2BE4FB.cjs} +91 -32
  159. package/dist/chunk-GF2BE4FB.cjs.map +1 -0
  160. package/dist/{chunk-JEIW7BSV.cjs → chunk-GKDHMNUA.cjs} +2 -52
  161. package/dist/chunk-GKDHMNUA.cjs.map +1 -0
  162. package/dist/{chunk-URAQIF67.cjs → chunk-GM32IDVL.cjs} +6 -6
  163. package/dist/{chunk-URAQIF67.cjs.map → chunk-GM32IDVL.cjs.map} +1 -1
  164. package/dist/chunk-GVM6DTR5.js +90 -0
  165. package/dist/chunk-GVM6DTR5.js.map +1 -0
  166. package/dist/{chunk-SQHMGT4W.js → chunk-GW4RFJZ5.js} +7 -7
  167. package/dist/chunk-GW4RFJZ5.js.map +1 -0
  168. package/dist/chunk-GY5SP4ST.js +3 -0
  169. package/dist/chunk-GY5SP4ST.js.map +1 -0
  170. package/dist/{chunk-OCSCBB52.cjs → chunk-GYXSF6BJ.cjs} +10 -10
  171. package/dist/{chunk-OCSCBB52.cjs.map → chunk-GYXSF6BJ.cjs.map} +1 -1
  172. package/dist/chunk-H2Y7HZV5.js +3 -0
  173. package/dist/chunk-H2Y7HZV5.js.map +1 -0
  174. package/dist/chunk-H3P7POFC.cjs +337 -0
  175. package/dist/chunk-H3P7POFC.cjs.map +1 -0
  176. package/dist/{chunk-JID7AZTO.cjs → chunk-H3ROMJYI.cjs} +4 -4
  177. package/dist/{chunk-JID7AZTO.cjs.map → chunk-H3ROMJYI.cjs.map} +1 -1
  178. package/dist/{chunk-462XSCP3.cjs → chunk-HCIXGFWR.cjs} +4 -4
  179. package/dist/{chunk-462XSCP3.cjs.map → chunk-HCIXGFWR.cjs.map} +1 -1
  180. package/dist/{chunk-H4ZXMQQW.js → chunk-HDY7YQFX.js} +3 -3
  181. package/dist/{chunk-H4ZXMQQW.js.map → chunk-HDY7YQFX.js.map} +1 -1
  182. package/dist/chunk-HNFFFFYH.cjs +114 -0
  183. package/dist/chunk-HNFFFFYH.cjs.map +1 -0
  184. package/dist/chunk-HNXLLDPN.js +25 -0
  185. package/dist/chunk-HNXLLDPN.js.map +1 -0
  186. package/dist/{chunk-NV2CWBI2.cjs → chunk-IEY3ZJIT.cjs} +12 -3
  187. package/dist/chunk-IEY3ZJIT.cjs.map +1 -0
  188. package/dist/chunk-IEZXJWHJ.cjs +306 -0
  189. package/dist/chunk-IEZXJWHJ.cjs.map +1 -0
  190. package/dist/{chunk-3QEVGSFG.cjs → chunk-IGDO62KR.cjs} +5 -5
  191. package/dist/{chunk-3QEVGSFG.cjs.map → chunk-IGDO62KR.cjs.map} +1 -1
  192. package/dist/{chunk-N5O47VGS.cjs → chunk-IVGI353O.cjs} +2 -2
  193. package/dist/{chunk-N5O47VGS.cjs.map → chunk-IVGI353O.cjs.map} +1 -1
  194. package/dist/chunk-IWRBJHO3.cjs +51 -0
  195. package/dist/chunk-IWRBJHO3.cjs.map +1 -0
  196. package/dist/{chunk-2IZLKPUW.js → chunk-J2CKXXOW.js} +27 -6
  197. package/dist/chunk-J2CKXXOW.js.map +1 -0
  198. package/dist/{chunk-VILW53UZ.js → chunk-JMAZ2GKT.js} +3 -3
  199. package/dist/{chunk-VILW53UZ.js.map → chunk-JMAZ2GKT.js.map} +1 -1
  200. package/dist/{chunk-WWJIW2IH.cjs → chunk-JSXIB6EJ.cjs} +4 -4
  201. package/dist/{chunk-WWJIW2IH.cjs.map → chunk-JSXIB6EJ.cjs.map} +1 -1
  202. package/dist/{chunk-KRU6IGV7.js → chunk-JUJGWUAN.js} +28 -6
  203. package/dist/chunk-JUJGWUAN.js.map +1 -0
  204. package/dist/{chunk-FXO5ARBB.cjs → chunk-KDW6BD4O.cjs} +4 -4
  205. package/dist/{chunk-FXO5ARBB.cjs.map → chunk-KDW6BD4O.cjs.map} +1 -1
  206. package/dist/{chunk-Z5V7SAZ4.js → chunk-KFEN2SRZ.js} +3 -3
  207. package/dist/{chunk-Z5V7SAZ4.js.map → chunk-KFEN2SRZ.js.map} +1 -1
  208. package/dist/chunk-KIVEYQGA.cjs +319 -0
  209. package/dist/chunk-KIVEYQGA.cjs.map +1 -0
  210. package/dist/{chunk-XEAT7XJG.cjs → chunk-KQ6GLYFZ.cjs} +29 -13
  211. package/dist/chunk-KQ6GLYFZ.cjs.map +1 -0
  212. package/dist/{chunk-4A3W4TQF.js → chunk-KVTKSPX5.js} +254 -4
  213. package/dist/chunk-KVTKSPX5.js.map +1 -0
  214. package/dist/{chunk-6EN3IQQI.cjs → chunk-L5Y52F2E.cjs} +9 -9
  215. package/dist/chunk-L5Y52F2E.cjs.map +1 -0
  216. package/dist/chunk-L6K4PRZK.cjs +4 -0
  217. package/dist/chunk-L6K4PRZK.cjs.map +1 -0
  218. package/dist/chunk-LAN5VWGC.js +2540 -0
  219. package/dist/chunk-LAN5VWGC.js.map +1 -0
  220. package/dist/{chunk-7ZDPD5ZX.cjs → chunk-LC3JL2HB.cjs} +11 -7
  221. package/dist/chunk-LC3JL2HB.cjs.map +1 -0
  222. package/dist/chunk-LRAAJRE7.cjs +2707 -0
  223. package/dist/chunk-LRAAJRE7.cjs.map +1 -0
  224. package/dist/{chunk-OE5CKRUC.js → chunk-LX323IMT.js} +34 -4
  225. package/dist/chunk-LX323IMT.js.map +1 -0
  226. package/dist/chunk-M3VPGJMV.js +283 -0
  227. package/dist/chunk-M3VPGJMV.js.map +1 -0
  228. package/dist/{chunk-DVOQ3JNO.js → chunk-ME7EVT6F.js} +23 -9
  229. package/dist/chunk-ME7EVT6F.js.map +1 -0
  230. package/dist/{chunk-SQJFBZ42.js → chunk-MUYUFOGL.js} +8 -7
  231. package/dist/chunk-MUYUFOGL.js.map +1 -0
  232. package/dist/{chunk-VKELAMAZ.js → chunk-N54FYWG6.js} +27 -11
  233. package/dist/chunk-N54FYWG6.js.map +1 -0
  234. package/dist/chunk-N5JDL4VE.js +3 -0
  235. package/dist/chunk-N5JDL4VE.js.map +1 -0
  236. package/dist/{chunk-ZPSJ2UV6.cjs → chunk-NAH65KPK.cjs} +8 -8
  237. package/dist/{chunk-ZPSJ2UV6.cjs.map → chunk-NAH65KPK.cjs.map} +1 -1
  238. package/dist/{chunk-PYJDVWXM.js → chunk-NUB5HRKS.js} +3 -3
  239. package/dist/{chunk-PYJDVWXM.js.map → chunk-NUB5HRKS.js.map} +1 -1
  240. package/dist/{chunk-WNZAYBVB.cjs → chunk-O6BJMVGT.cjs} +48 -48
  241. package/dist/{chunk-WNZAYBVB.cjs.map → chunk-O6BJMVGT.cjs.map} +1 -1
  242. package/dist/{chunk-SVSHA7XV.js → chunk-O6XDA3SI.js} +31 -33
  243. package/dist/chunk-O6XDA3SI.js.map +1 -0
  244. package/dist/chunk-OIF34LEN.cjs +425 -0
  245. package/dist/chunk-OIF34LEN.cjs.map +1 -0
  246. package/dist/{chunk-J5CSLNCN.cjs → chunk-OODVC2UD.cjs} +2 -2
  247. package/dist/{chunk-J5CSLNCN.cjs.map → chunk-OODVC2UD.cjs.map} +1 -1
  248. package/dist/{chunk-LL6IWKI3.js → chunk-OW3SQJ7P.js} +3 -3
  249. package/dist/{chunk-LL6IWKI3.js.map → chunk-OW3SQJ7P.js.map} +1 -1
  250. package/dist/{chunk-ZGRCSNPK.js → chunk-OYUIEJPN.js} +17 -8
  251. package/dist/chunk-OYUIEJPN.js.map +1 -0
  252. package/dist/chunk-P22YCUVM.cjs +4 -0
  253. package/dist/chunk-P22YCUVM.cjs.map +1 -0
  254. package/dist/{chunk-CEQJGUAS.js → chunk-P4E3K3ND.js} +12 -5
  255. package/dist/chunk-P4E3K3ND.js.map +1 -0
  256. package/dist/{chunk-TMMVIUUN.js → chunk-P7D7BYFE.js} +4 -4
  257. package/dist/{chunk-TMMVIUUN.js.map → chunk-P7D7BYFE.js.map} +1 -1
  258. package/dist/{chunk-SGFYA22I.cjs → chunk-PINIBEIU.cjs} +21 -12
  259. package/dist/chunk-PINIBEIU.cjs.map +1 -0
  260. package/dist/{chunk-3T7QGLNB.js → chunk-PJEL5ZZV.js} +4 -2
  261. package/dist/chunk-PJEL5ZZV.js.map +1 -0
  262. package/dist/chunk-PWXDRFJL.cjs +218 -0
  263. package/dist/chunk-PWXDRFJL.cjs.map +1 -0
  264. package/dist/{chunk-XZNN3S3S.cjs → chunk-PYI2IWNX.cjs} +4 -4
  265. package/dist/{chunk-XZNN3S3S.cjs.map → chunk-PYI2IWNX.cjs.map} +1 -1
  266. package/dist/chunk-Q3YVLO52.cjs +174 -0
  267. package/dist/chunk-Q3YVLO52.cjs.map +1 -0
  268. package/dist/{chunk-MNILXWVY.js → chunk-QJ2L5RU6.js} +7 -7
  269. package/dist/{chunk-MNILXWVY.js.map → chunk-QJ2L5RU6.js.map} +1 -1
  270. package/dist/{chunk-X4LBUPJO.cjs → chunk-QX6AAVDE.cjs} +31 -33
  271. package/dist/chunk-QX6AAVDE.cjs.map +1 -0
  272. package/dist/{chunk-UV2FVNWT.cjs → chunk-RIUQP2QS.cjs} +5 -5
  273. package/dist/{chunk-UV2FVNWT.cjs.map → chunk-RIUQP2QS.cjs.map} +1 -1
  274. package/dist/chunk-RLVYWUXG.js +115 -0
  275. package/dist/chunk-RLVYWUXG.js.map +1 -0
  276. package/dist/{chunk-HACNIFO3.js → chunk-RM2HPQIC.js} +77 -14
  277. package/dist/chunk-RM2HPQIC.js.map +1 -0
  278. package/dist/{chunk-DEDN5HAG.js → chunk-RSJGTWLM.js} +3 -3
  279. package/dist/{chunk-DEDN5HAG.js.map → chunk-RSJGTWLM.js.map} +1 -1
  280. package/dist/{chunk-G4D6CLBT.js → chunk-RZSSQ7AT.js} +3 -3
  281. package/dist/{chunk-G4D6CLBT.js.map → chunk-RZSSQ7AT.js.map} +1 -1
  282. package/dist/{chunk-ENKFJJZX.js → chunk-S2JZL4JC.js} +6 -6
  283. package/dist/{chunk-ENKFJJZX.js.map → chunk-S2JZL4JC.js.map} +1 -1
  284. package/dist/{chunk-P7UMS4E6.cjs → chunk-S7AMZ4RD.cjs} +23 -9
  285. package/dist/chunk-S7AMZ4RD.cjs.map +1 -0
  286. package/dist/{chunk-VROIMIHB.cjs → chunk-SHBCUXFS.cjs} +28 -6
  287. package/dist/chunk-SHBCUXFS.cjs.map +1 -0
  288. package/dist/{chunk-RJ6NTJHC.js → chunk-SRMTRD7F.js} +3 -3
  289. package/dist/{chunk-RJ6NTJHC.js.map → chunk-SRMTRD7F.js.map} +1 -1
  290. package/dist/{chunk-IX6KFB3K.cjs → chunk-SW2E7XKY.cjs} +9 -9
  291. package/dist/{chunk-IX6KFB3K.cjs.map → chunk-SW2E7XKY.cjs.map} +1 -1
  292. package/dist/chunk-SZSRGUVO.js +402 -0
  293. package/dist/chunk-SZSRGUVO.js.map +1 -0
  294. package/dist/{chunk-NJ6MY6V5.js → chunk-T5BBZQ66.js} +3 -3
  295. package/dist/{chunk-NJ6MY6V5.js.map → chunk-T5BBZQ66.js.map} +1 -1
  296. package/dist/{chunk-HZ4MBUC3.js → chunk-TI3TQQ7F.js} +4 -53
  297. package/dist/chunk-TI3TQQ7F.js.map +1 -0
  298. package/dist/{chunk-ACCAXVOG.js → chunk-TJ4GWQPM.js} +137 -57
  299. package/dist/chunk-TJ4GWQPM.js.map +1 -0
  300. package/dist/{chunk-5JJ2DAE4.js → chunk-TWQSMUE6.js} +7 -3
  301. package/dist/chunk-TWQSMUE6.js.map +1 -0
  302. package/dist/{chunk-X4XPNTCZ.cjs → chunk-U2RS574O.cjs} +139 -59
  303. package/dist/chunk-U2RS574O.cjs.map +1 -0
  304. package/dist/{chunk-TAXD5ADA.cjs → chunk-UEDTZYGI.cjs} +3 -3
  305. package/dist/{chunk-TAXD5ADA.cjs.map → chunk-UEDTZYGI.cjs.map} +1 -1
  306. package/dist/{chunk-3QGS6CXD.js → chunk-UJDWFDKE.js} +3 -3
  307. package/dist/{chunk-3QGS6CXD.js.map → chunk-UJDWFDKE.js.map} +1 -1
  308. package/dist/{chunk-DZ5HFLRC.js → chunk-UNFDIBKJ.js} +3 -3
  309. package/dist/{chunk-DZ5HFLRC.js.map → chunk-UNFDIBKJ.js.map} +1 -1
  310. package/dist/{chunk-UQ3VVR6A.cjs → chunk-UPWIJC6I.cjs} +3 -3
  311. package/dist/{chunk-UQ3VVR6A.cjs.map → chunk-UPWIJC6I.cjs.map} +1 -1
  312. package/dist/chunk-UTIPENPW.cjs +286 -0
  313. package/dist/chunk-UTIPENPW.cjs.map +1 -0
  314. package/dist/{chunk-S7WCHDBO.js → chunk-VCI2Y7ST.js} +3 -3
  315. package/dist/{chunk-S7WCHDBO.js.map → chunk-VCI2Y7ST.js.map} +1 -1
  316. package/dist/{chunk-Y5HFM7LO.js → chunk-VOEXGDL5.js} +6 -6
  317. package/dist/chunk-VOEXGDL5.js.map +1 -0
  318. package/dist/{chunk-P2CA3XGI.js → chunk-VSRO4PAI.js} +23 -5
  319. package/dist/chunk-VSRO4PAI.js.map +1 -0
  320. package/dist/{chunk-L6MDULYB.js → chunk-VU3ZMJBN.js} +2 -2
  321. package/dist/{chunk-L6MDULYB.js.map → chunk-VU3ZMJBN.js.map} +1 -1
  322. package/dist/{chunk-XI34EGK5.cjs → chunk-VV2U36T6.cjs} +9 -9
  323. package/dist/{chunk-XI34EGK5.cjs.map → chunk-VV2U36T6.cjs.map} +1 -1
  324. package/dist/{chunk-VPWJCJCX.cjs → chunk-VXW7D5LR.cjs} +26 -8
  325. package/dist/chunk-VXW7D5LR.cjs.map +1 -0
  326. package/dist/{chunk-GOALNQZ2.js → chunk-WFBUBT54.js} +4 -83
  327. package/dist/chunk-WFBUBT54.js.map +1 -0
  328. package/dist/chunk-WQHBMZSC.js +295 -0
  329. package/dist/chunk-WQHBMZSC.js.map +1 -0
  330. package/dist/chunk-WSMBIXPU.cjs +2573 -0
  331. package/dist/chunk-WSMBIXPU.cjs.map +1 -0
  332. package/dist/chunk-X5JOEZVR.js +525 -0
  333. package/dist/chunk-X5JOEZVR.js.map +1 -0
  334. package/dist/chunk-XBAAHOCP.js +3 -0
  335. package/dist/chunk-XBAAHOCP.js.map +1 -0
  336. package/dist/chunk-XDU65GLW.js +21 -0
  337. package/dist/chunk-XDU65GLW.js.map +1 -0
  338. package/dist/{chunk-5GUOOLPR.cjs → chunk-XHK5VZ4L.cjs} +29 -8
  339. package/dist/chunk-XHK5VZ4L.cjs.map +1 -0
  340. package/dist/chunk-XI74P5F2.cjs +424 -0
  341. package/dist/chunk-XI74P5F2.cjs.map +1 -0
  342. package/dist/chunk-XNPDZANN.cjs +238 -0
  343. package/dist/chunk-XNPDZANN.cjs.map +1 -0
  344. package/dist/{chunk-XDIMTPZU.cjs → chunk-XPWFIDZM.cjs} +4 -3
  345. package/dist/chunk-XPWFIDZM.cjs.map +1 -0
  346. package/dist/{chunk-FS4VZUFV.cjs → chunk-XRVMYT5G.cjs} +77 -13
  347. package/dist/chunk-XRVMYT5G.cjs.map +1 -0
  348. package/dist/chunk-XXA4NZUC.js +3 -0
  349. package/dist/chunk-XXA4NZUC.js.map +1 -0
  350. package/dist/chunk-Y424YL55.js +59 -0
  351. package/dist/chunk-Y424YL55.js.map +1 -0
  352. package/dist/chunk-Y7ZJZLJY.js +2657 -0
  353. package/dist/chunk-Y7ZJZLJY.js.map +1 -0
  354. package/dist/chunk-YG7BR76Y.js +281 -0
  355. package/dist/chunk-YG7BR76Y.js.map +1 -0
  356. package/dist/chunk-YGS2TRMP.js +38 -0
  357. package/dist/chunk-YGS2TRMP.js.map +1 -0
  358. package/dist/chunk-YUMOM3KE.js +167 -0
  359. package/dist/chunk-YUMOM3KE.js.map +1 -0
  360. package/dist/chunk-YVKBXNPK.js +41 -0
  361. package/dist/chunk-YVKBXNPK.js.map +1 -0
  362. package/dist/chunk-YW2AKBLS.cjs +23 -0
  363. package/dist/chunk-YW2AKBLS.cjs.map +1 -0
  364. package/dist/{chunk-3M7TAXNR.js → chunk-YZCM7CXK.js} +3 -3
  365. package/dist/{chunk-3M7TAXNR.js.map → chunk-YZCM7CXK.js.map} +1 -1
  366. package/dist/chunk-Z3WMDVMR.cjs +46 -0
  367. package/dist/chunk-Z3WMDVMR.cjs.map +1 -0
  368. package/dist/chunk-ZNUMOJOI.cjs +4 -0
  369. package/dist/chunk-ZNUMOJOI.cjs.map +1 -0
  370. package/dist/components/Accordion/index.cjs +2 -2
  371. package/dist/components/Accordion/index.d.cts +6 -0
  372. package/dist/components/Accordion/index.d.ts +6 -0
  373. package/dist/components/Accordion/index.js +1 -1
  374. package/dist/components/ActionPlan/index.cjs +34 -0
  375. package/dist/components/ActionPlan/index.cjs.map +1 -0
  376. package/dist/components/ActionPlan/index.d.cts +65 -0
  377. package/dist/components/ActionPlan/index.d.ts +65 -0
  378. package/dist/components/ActionPlan/index.js +21 -0
  379. package/dist/components/ActionPlan/index.js.map +1 -0
  380. package/dist/components/ActivityFeed/index.cjs +31 -0
  381. package/dist/components/ActivityFeed/index.cjs.map +1 -0
  382. package/dist/components/ActivityFeed/index.d.cts +99 -0
  383. package/dist/components/ActivityFeed/index.d.ts +99 -0
  384. package/dist/components/ActivityFeed/index.js +18 -0
  385. package/dist/components/ActivityFeed/index.js.map +1 -0
  386. package/dist/components/Alert/index.d.cts +1 -1
  387. package/dist/components/Alert/index.d.ts +1 -1
  388. package/dist/components/AlertDialog/index.cjs +19 -5
  389. package/dist/components/AlertDialog/index.d.cts +94 -16
  390. package/dist/components/AlertDialog/index.d.ts +94 -16
  391. package/dist/components/AlertDialog/index.js +6 -4
  392. package/dist/components/AssociationList/index.cjs +29 -0
  393. package/dist/components/AssociationList/index.cjs.map +1 -0
  394. package/dist/components/AssociationList/index.d.cts +50 -0
  395. package/dist/components/AssociationList/index.d.ts +50 -0
  396. package/dist/components/AssociationList/index.js +16 -0
  397. package/dist/components/AssociationList/index.js.map +1 -0
  398. package/dist/components/AudioRecorder/index.d.cts +2 -2
  399. package/dist/components/AudioRecorder/index.d.ts +2 -2
  400. package/dist/components/Autocomplete/index.d.cts +8 -2
  401. package/dist/components/Autocomplete/index.d.ts +8 -2
  402. package/dist/components/Avatar/index.cjs +9 -7
  403. package/dist/components/Avatar/index.d.cts +46 -15
  404. package/dist/components/Avatar/index.d.ts +46 -15
  405. package/dist/components/Avatar/index.js +3 -1
  406. package/dist/components/AvatarGroup/index.cjs +20 -0
  407. package/dist/components/AvatarGroup/index.cjs.map +1 -0
  408. package/dist/components/AvatarGroup/index.d.cts +57 -0
  409. package/dist/components/AvatarGroup/index.d.ts +57 -0
  410. package/dist/components/AvatarGroup/index.js +7 -0
  411. package/dist/components/AvatarGroup/index.js.map +1 -0
  412. package/dist/components/Badge/index.cjs +3 -3
  413. package/dist/components/Badge/index.d.cts +16 -2
  414. package/dist/components/Badge/index.d.ts +16 -2
  415. package/dist/components/Badge/index.js +1 -1
  416. package/dist/components/BoardView/index.cjs +5 -4
  417. package/dist/components/BoardView/index.d.cts +2 -3
  418. package/dist/components/BoardView/index.d.ts +2 -3
  419. package/dist/components/BoardView/index.js +2 -1
  420. package/dist/components/Button/index.cjs +5 -3
  421. package/dist/components/Button/index.d.cts +2 -1
  422. package/dist/components/Button/index.d.ts +2 -1
  423. package/dist/components/Button/index.js +3 -1
  424. package/dist/components/CalendarHeatmap/index.cjs +18 -0
  425. package/dist/components/CalendarHeatmap/index.cjs.map +1 -0
  426. package/dist/components/CalendarHeatmap/index.d.cts +47 -0
  427. package/dist/components/CalendarHeatmap/index.d.ts +47 -0
  428. package/dist/components/CalendarHeatmap/index.js +5 -0
  429. package/dist/components/CalendarHeatmap/index.js.map +1 -0
  430. package/dist/components/CalendarView/index.cjs +6 -4
  431. package/dist/components/CalendarView/index.d.cts +1 -2
  432. package/dist/components/CalendarView/index.d.ts +1 -2
  433. package/dist/components/CalendarView/index.js +4 -2
  434. package/dist/components/Card/index.d.cts +3 -3
  435. package/dist/components/Card/index.d.ts +3 -3
  436. package/dist/components/ClampedText/index.cjs +3 -2
  437. package/dist/components/ClampedText/index.js +2 -1
  438. package/dist/components/CollabStatus/index.cjs +6 -4
  439. package/dist/components/CollabStatus/index.d.cts +11 -0
  440. package/dist/components/CollabStatus/index.d.ts +11 -0
  441. package/dist/components/CollabStatus/index.js +3 -1
  442. package/dist/components/Collapsible/index.cjs +6 -6
  443. package/dist/components/Collapsible/index.d.cts +6 -0
  444. package/dist/components/Collapsible/index.d.ts +6 -0
  445. package/dist/components/Collapsible/index.js +3 -3
  446. package/dist/components/CompletenessMeter/index.cjs +23 -0
  447. package/dist/components/CompletenessMeter/index.cjs.map +1 -0
  448. package/dist/components/CompletenessMeter/index.d.cts +52 -0
  449. package/dist/components/CompletenessMeter/index.d.ts +52 -0
  450. package/dist/components/CompletenessMeter/index.js +6 -0
  451. package/dist/components/CompletenessMeter/index.js.map +1 -0
  452. package/dist/components/CountryCodeDropdown/index.cjs +5 -5
  453. package/dist/components/CountryCodeDropdown/index.js +2 -2
  454. package/dist/components/CustomizableDashboard/index.cjs +12 -10
  455. package/dist/components/CustomizableDashboard/index.js +5 -3
  456. package/dist/components/DateInput/index.d.cts +36 -4
  457. package/dist/components/DateInput/index.d.ts +36 -4
  458. package/dist/components/Dropdown/index.cjs +12 -10
  459. package/dist/components/Dropdown/index.d.cts +6 -4
  460. package/dist/components/Dropdown/index.d.ts +6 -4
  461. package/dist/components/Dropdown/index.js +5 -3
  462. package/dist/components/EmailEditor/index.cjs +68 -0
  463. package/dist/components/EmailEditor/index.cjs.map +1 -0
  464. package/dist/components/EmailEditor/index.d.cts +347 -0
  465. package/dist/components/EmailEditor/index.d.ts +347 -0
  466. package/dist/components/EmailEditor/index.js +27 -0
  467. package/dist/components/EmailEditor/index.js.map +1 -0
  468. package/dist/components/FieldHistory/index.cjs +34 -0
  469. package/dist/components/FieldHistory/index.cjs.map +1 -0
  470. package/dist/components/FieldHistory/index.d.cts +66 -0
  471. package/dist/components/FieldHistory/index.d.ts +66 -0
  472. package/dist/components/FieldHistory/index.js +21 -0
  473. package/dist/components/FieldHistory/index.js.map +1 -0
  474. package/dist/components/FloatingWindow/index.cjs +6 -4
  475. package/dist/components/FloatingWindow/index.js +4 -2
  476. package/dist/components/GanttView/index.d.cts +1 -2
  477. package/dist/components/GanttView/index.d.ts +1 -2
  478. package/dist/components/GlossaryTooltip/index.cjs +3 -3
  479. package/dist/components/GlossaryTooltip/index.js +2 -2
  480. package/dist/components/InlineEdit/index.cjs +20 -0
  481. package/dist/components/InlineEdit/index.cjs.map +1 -0
  482. package/dist/components/InlineEdit/index.d.cts +56 -0
  483. package/dist/components/InlineEdit/index.d.ts +56 -0
  484. package/dist/components/InlineEdit/index.js +7 -0
  485. package/dist/components/InlineEdit/index.js.map +1 -0
  486. package/dist/components/KeyboardShortcutsOverlay/index.cjs +5 -5
  487. package/dist/components/KeyboardShortcutsOverlay/index.js +3 -3
  488. package/dist/components/ListView/index.cjs +6 -4
  489. package/dist/components/ListView/index.d.cts +91 -4
  490. package/dist/components/ListView/index.d.ts +91 -4
  491. package/dist/components/ListView/index.js +4 -2
  492. package/dist/components/LogoUploader/index.cjs +18 -0
  493. package/dist/components/LogoUploader/index.cjs.map +1 -0
  494. package/dist/components/LogoUploader/index.d.cts +49 -0
  495. package/dist/components/LogoUploader/index.d.ts +49 -0
  496. package/dist/components/LogoUploader/index.js +5 -0
  497. package/dist/components/LogoUploader/index.js.map +1 -0
  498. package/dist/components/Markdown/index.cjs +21 -19
  499. package/dist/components/Markdown/index.js +9 -7
  500. package/dist/components/MediaEditor/index.cjs +16 -14
  501. package/dist/components/MediaEditor/index.d.cts +91 -2
  502. package/dist/components/MediaEditor/index.d.ts +91 -2
  503. package/dist/components/MediaEditor/index.js +11 -9
  504. package/dist/components/MediaFeed/index.cjs +29 -0
  505. package/dist/components/MediaFeed/index.cjs.map +1 -0
  506. package/dist/components/MediaFeed/index.d.cts +104 -0
  507. package/dist/components/MediaFeed/index.d.ts +104 -0
  508. package/dist/components/MediaFeed/index.js +20 -0
  509. package/dist/components/MediaFeed/index.js.map +1 -0
  510. package/dist/components/MediaPlayer/index.cjs +8 -6
  511. package/dist/components/MediaPlayer/index.d.cts +19 -1
  512. package/dist/components/MediaPlayer/index.d.ts +19 -1
  513. package/dist/components/MediaPlayer/index.js +5 -3
  514. package/dist/components/MegaMenu/index.cjs +7 -5
  515. package/dist/components/MegaMenu/index.js +4 -2
  516. package/dist/components/Modal/index.cjs +10 -10
  517. package/dist/components/Modal/index.js +2 -2
  518. package/dist/components/Pagination/index.d.cts +1 -1
  519. package/dist/components/Pagination/index.d.ts +1 -1
  520. package/dist/components/PhiMask/index.cjs +18 -0
  521. package/dist/components/PhiMask/index.cjs.map +1 -0
  522. package/dist/components/PhiMask/index.d.cts +45 -0
  523. package/dist/components/PhiMask/index.d.ts +45 -0
  524. package/dist/components/PhiMask/index.js +5 -0
  525. package/dist/components/PhiMask/index.js.map +1 -0
  526. package/dist/components/Progress/index.cjs +6 -6
  527. package/dist/components/Progress/index.d.cts +8 -2
  528. package/dist/components/Progress/index.d.ts +8 -2
  529. package/dist/components/Progress/index.js +1 -1
  530. package/dist/components/PropertyList/index.cjs +25 -0
  531. package/dist/components/PropertyList/index.cjs.map +1 -0
  532. package/dist/components/PropertyList/index.d.cts +87 -0
  533. package/dist/components/PropertyList/index.d.ts +87 -0
  534. package/dist/components/PropertyList/index.js +12 -0
  535. package/dist/components/PropertyList/index.js.map +1 -0
  536. package/dist/components/Q/index.d.cts +2 -2
  537. package/dist/components/Q/index.d.ts +2 -2
  538. package/dist/components/QuickAction/index.d.cts +1 -1
  539. package/dist/components/QuickAction/index.d.ts +1 -1
  540. package/dist/components/RadialExplorer/index.cjs +7 -5
  541. package/dist/components/RadialExplorer/index.js +6 -4
  542. package/dist/components/Rating/index.cjs +28 -0
  543. package/dist/components/Rating/index.cjs.map +1 -0
  544. package/dist/components/Rating/index.d.cts +85 -0
  545. package/dist/components/Rating/index.d.ts +85 -0
  546. package/dist/components/Rating/index.js +7 -0
  547. package/dist/components/Rating/index.js.map +1 -0
  548. package/dist/components/RecordButton/index.d.cts +1 -1
  549. package/dist/components/RecordButton/index.d.ts +1 -1
  550. package/dist/components/RecordHeader/index.cjs +30 -0
  551. package/dist/components/RecordHeader/index.cjs.map +1 -0
  552. package/dist/components/RecordHeader/index.d.cts +96 -0
  553. package/dist/components/RecordHeader/index.d.ts +96 -0
  554. package/dist/components/RecordHeader/index.js +17 -0
  555. package/dist/components/RecordHeader/index.js.map +1 -0
  556. package/dist/components/RecordLayout/index.cjs +22 -0
  557. package/dist/components/RecordLayout/index.cjs.map +1 -0
  558. package/dist/components/RecordLayout/index.d.cts +40 -0
  559. package/dist/components/RecordLayout/index.d.ts +40 -0
  560. package/dist/components/RecordLayout/index.js +9 -0
  561. package/dist/components/RecordLayout/index.js.map +1 -0
  562. package/dist/components/RichTextEditor/index.cjs +12 -8
  563. package/dist/components/RichTextEditor/index.d.cts +12 -2
  564. package/dist/components/RichTextEditor/index.d.ts +12 -2
  565. package/dist/components/RichTextEditor/index.js +9 -5
  566. package/dist/components/ScrollArea/index.d.cts +1 -1
  567. package/dist/components/ScrollArea/index.d.ts +1 -1
  568. package/dist/components/SectionSpyNav/index.cjs +5 -3
  569. package/dist/components/SectionSpyNav/index.js +4 -2
  570. package/dist/components/Select/index.cjs +4 -4
  571. package/dist/components/Select/index.d.cts +2 -2
  572. package/dist/components/Select/index.d.ts +2 -2
  573. package/dist/components/Select/index.js +2 -2
  574. package/dist/components/Skeleton/index.d.cts +1 -1
  575. package/dist/components/Skeleton/index.d.ts +1 -1
  576. package/dist/components/Slider/index.d.cts +2 -2
  577. package/dist/components/Slider/index.d.ts +2 -2
  578. package/dist/components/SliderCalculator/index.cjs +4 -4
  579. package/dist/components/SliderCalculator/index.js +2 -2
  580. package/dist/components/SourceTip/index.cjs +3 -3
  581. package/dist/components/SourceTip/index.js +2 -2
  582. package/dist/components/Spinner/index.d.cts +2 -2
  583. package/dist/components/Spinner/index.d.ts +2 -2
  584. package/dist/components/SuperChat/index.cjs +735 -322
  585. package/dist/components/SuperChat/index.cjs.map +1 -1
  586. package/dist/components/SuperChat/index.d.cts +126 -8
  587. package/dist/components/SuperChat/index.d.ts +126 -8
  588. package/dist/components/SuperChat/index.js +721 -308
  589. package/dist/components/SuperChat/index.js.map +1 -1
  590. package/dist/components/SuperChat/plugins/index.cjs +8 -6
  591. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  592. package/dist/components/SuperChat/plugins/index.d.cts +2 -3
  593. package/dist/components/SuperChat/plugins/index.d.ts +2 -3
  594. package/dist/components/SuperChat/plugins/index.js +7 -5
  595. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  596. package/dist/components/Tabs/index.cjs +10 -7
  597. package/dist/components/Tabs/index.d.cts +12 -1
  598. package/dist/components/Tabs/index.d.ts +12 -1
  599. package/dist/components/Tabs/index.js +4 -1
  600. package/dist/components/TagEditor/index.cjs +22 -0
  601. package/dist/components/TagEditor/index.cjs.map +1 -0
  602. package/dist/components/TagEditor/index.d.cts +46 -0
  603. package/dist/components/TagEditor/index.d.ts +46 -0
  604. package/dist/components/TagEditor/index.js +9 -0
  605. package/dist/components/TagEditor/index.js.map +1 -0
  606. package/dist/components/Text/index.d.cts +3 -3
  607. package/dist/components/Text/index.d.ts +3 -3
  608. package/dist/components/Textarea/index.d.cts +2 -2
  609. package/dist/components/Textarea/index.d.ts +2 -2
  610. package/dist/components/ThemeProvider/index.cjs +9 -9
  611. package/dist/components/ThemeProvider/index.d.cts +3 -1
  612. package/dist/components/ThemeProvider/index.d.ts +3 -1
  613. package/dist/components/ThemeProvider/index.js +3 -3
  614. package/dist/components/Tooltip/index.cjs +3 -3
  615. package/dist/components/Tooltip/index.js +2 -2
  616. package/dist/components/TranscriptView/index.d.cts +85 -4
  617. package/dist/components/TranscriptView/index.d.ts +85 -4
  618. package/dist/components/UserPicker/index.cjs +24 -0
  619. package/dist/components/UserPicker/index.cjs.map +1 -0
  620. package/dist/components/UserPicker/index.d.cts +60 -0
  621. package/dist/components/UserPicker/index.d.ts +60 -0
  622. package/dist/components/UserPicker/index.js +11 -0
  623. package/dist/components/UserPicker/index.js.map +1 -0
  624. package/dist/components/VideoCard/index.cjs +4 -4
  625. package/dist/components/VideoCard/index.js +2 -2
  626. package/dist/components/ViewSet/index.cjs +10 -7
  627. package/dist/components/ViewSet/index.d.cts +120 -8
  628. package/dist/components/ViewSet/index.d.ts +120 -8
  629. package/dist/components/ViewSet/index.js +9 -6
  630. package/dist/components/ViewSwitcher/index.cjs +4 -3
  631. package/dist/components/ViewSwitcher/index.d.cts +1 -2
  632. package/dist/components/ViewSwitcher/index.d.ts +1 -2
  633. package/dist/components/ViewSwitcher/index.js +2 -1
  634. package/dist/components/YearTimeline/index.cjs +5 -5
  635. package/dist/components/YearTimeline/index.js +1 -1
  636. package/dist/datavis.cjs +6 -4
  637. package/dist/datavis.cjs.map +1 -1
  638. package/dist/datavis.d.cts +167 -13
  639. package/dist/datavis.d.ts +167 -13
  640. package/dist/datavis.js +4 -2
  641. package/dist/datavis.js.map +1 -1
  642. package/dist/deck.cjs +3374 -0
  643. package/dist/deck.cjs.map +1 -0
  644. package/dist/deck.d.cts +712 -0
  645. package/dist/deck.d.ts +712 -0
  646. package/dist/deck.js +3330 -0
  647. package/dist/deck.js.map +1 -0
  648. package/dist/esheet.cjs +20 -16
  649. package/dist/esheet.cjs.map +1 -1
  650. package/dist/esheet.d.cts +183 -1
  651. package/dist/esheet.d.ts +183 -1
  652. package/dist/esheet.js +17 -13
  653. package/dist/esheet.js.map +1 -1
  654. package/dist/globe.cjs +2 -2
  655. package/dist/globe.js +1 -1
  656. package/dist/{hey-buddy-INNUFFJJ.cjs → hey-buddy-5WOBYZRJ.cjs} +22 -11
  657. package/dist/hey-buddy-5WOBYZRJ.cjs.map +1 -0
  658. package/dist/{hey-buddy-V6FC5UKB.js → hey-buddy-AHUHCDBC.js} +22 -11
  659. package/dist/hey-buddy-AHUHCDBC.js.map +1 -0
  660. package/dist/hooks/index.cjs +88 -33
  661. package/dist/hooks/index.d.cts +592 -36
  662. package/dist/hooks/index.d.ts +592 -36
  663. package/dist/hooks/index.js +9 -6
  664. package/dist/icons-wBacj6BW.d.cts +142 -0
  665. package/dist/icons-wBacj6BW.d.ts +142 -0
  666. package/dist/index.cjs +2056 -1349
  667. package/dist/index.cjs.map +1 -1
  668. package/dist/index.d.cts +10401 -637
  669. package/dist/index.d.ts +10401 -637
  670. package/dist/index.js +674 -352
  671. package/dist/index.js.map +1 -1
  672. package/dist/kerebron.css +115 -0
  673. package/dist/maps.cjs +160 -0
  674. package/dist/maps.cjs.map +1 -0
  675. package/dist/maps.d.cts +42 -0
  676. package/dist/maps.d.ts +42 -0
  677. package/dist/maps.js +138 -0
  678. package/dist/maps.js.map +1 -0
  679. package/dist/motion.cjs +7 -7
  680. package/dist/motion.d.cts +186 -2
  681. package/dist/motion.d.ts +186 -2
  682. package/dist/motion.js +2 -2
  683. package/dist/org-chart.cjs +1303 -0
  684. package/dist/org-chart.cjs.map +1 -0
  685. package/dist/org-chart.d.cts +164 -0
  686. package/dist/org-chart.d.ts +164 -0
  687. package/dist/org-chart.js +1278 -0
  688. package/dist/org-chart.js.map +1 -0
  689. package/dist/q.d.cts +25 -3
  690. package/dist/q.d.ts +25 -3
  691. package/dist/styles/effects.css +133 -0
  692. package/dist/styles/init.css +22 -3
  693. package/dist/styles.css +1 -1
  694. package/dist/tailwind-preset.cjs +4 -4
  695. package/dist/tailwind-preset.js +1 -1
  696. package/dist/templates.cjs +156 -0
  697. package/dist/templates.cjs.map +1 -0
  698. package/dist/templates.d.cts +734 -0
  699. package/dist/templates.d.ts +734 -0
  700. package/dist/templates.js +11 -0
  701. package/dist/templates.js.map +1 -0
  702. package/dist/{types-CbWXIKbe.d.cts → types-CDeBNZiE.d.cts} +1 -28
  703. package/dist/{types-CbWXIKbe.d.ts → types-CDeBNZiE.d.ts} +1 -28
  704. package/dist/types-Cx1FHLq2.d.cts +548 -0
  705. package/dist/types-Cx1FHLq2.d.ts +548 -0
  706. package/dist/types-DsdZvEI1.d.cts +92 -0
  707. package/dist/types-DsdZvEI1.d.ts +92 -0
  708. package/dist/utils/index.cjs +9 -9
  709. package/dist/utils/index.d.cts +13 -2
  710. package/dist/utils/index.d.ts +13 -2
  711. package/dist/utils/index.js +1 -1
  712. package/package.json +79 -15
  713. package/dist/Animated-XmH6k8pZ.d.cts +0 -188
  714. package/dist/Animated-XmH6k8pZ.d.ts +0 -188
  715. package/dist/CsvBlock-ROJCKJDP.cjs +0 -16
  716. package/dist/CsvBlock-UWPMTLE2.js +0 -7
  717. package/dist/HtmlPreviewBlock-DWFN6EUB.cjs +0 -16
  718. package/dist/HtmlPreviewBlock-ME5U3XNS.js +0 -7
  719. package/dist/MedicationEditor-Bp4NLy7y.d.cts +0 -352
  720. package/dist/MedicationEditor-Bp4NLy7y.d.ts +0 -352
  721. package/dist/MermaidBlock-2B6CPD6Y.js +0 -7
  722. package/dist/MermaidBlock-D2UC5M55.cjs +0 -16
  723. package/dist/SurveyBlock-4CD4AYMJ.cjs +0 -16
  724. package/dist/SurveyBlock-4DO62RBT.js +0 -7
  725. package/dist/chunk-2IZLKPUW.js.map +0 -1
  726. package/dist/chunk-3T7QGLNB.js.map +0 -1
  727. package/dist/chunk-4A3W4TQF.js.map +0 -1
  728. package/dist/chunk-4IS3QCOQ.cjs.map +0 -1
  729. package/dist/chunk-5GUOOLPR.cjs.map +0 -1
  730. package/dist/chunk-5JJ2DAE4.js.map +0 -1
  731. package/dist/chunk-6EN3IQQI.cjs.map +0 -1
  732. package/dist/chunk-6HFFWEM3.cjs +0 -22
  733. package/dist/chunk-6HFFWEM3.cjs.map +0 -1
  734. package/dist/chunk-7ZDPD5ZX.cjs.map +0 -1
  735. package/dist/chunk-7ZVTLTJF.js +0 -109
  736. package/dist/chunk-7ZVTLTJF.js.map +0 -1
  737. package/dist/chunk-ACCAXVOG.js.map +0 -1
  738. package/dist/chunk-AR7AKDM2.cjs +0 -143
  739. package/dist/chunk-AR7AKDM2.cjs.map +0 -1
  740. package/dist/chunk-ASSDGS4F.cjs.map +0 -1
  741. package/dist/chunk-AWJBOND5.js +0 -130
  742. package/dist/chunk-AWJBOND5.js.map +0 -1
  743. package/dist/chunk-BMSG4NBH.js +0 -56
  744. package/dist/chunk-BMSG4NBH.js.map +0 -1
  745. package/dist/chunk-CEQJGUAS.js.map +0 -1
  746. package/dist/chunk-CR2SDI23.cjs.map +0 -1
  747. package/dist/chunk-DVOQ3JNO.js.map +0 -1
  748. package/dist/chunk-E4IBHYJ7.cjs +0 -80
  749. package/dist/chunk-E4IBHYJ7.cjs.map +0 -1
  750. package/dist/chunk-FS4VZUFV.cjs.map +0 -1
  751. package/dist/chunk-GD7EBGC4.cjs.map +0 -1
  752. package/dist/chunk-GOALNQZ2.js.map +0 -1
  753. package/dist/chunk-HACNIFO3.js.map +0 -1
  754. package/dist/chunk-HB7C7NB5.js +0 -20
  755. package/dist/chunk-HB7C7NB5.js.map +0 -1
  756. package/dist/chunk-HZ4MBUC3.js.map +0 -1
  757. package/dist/chunk-IT775BYG.js.map +0 -1
  758. package/dist/chunk-JEIW7BSV.cjs.map +0 -1
  759. package/dist/chunk-JYZW2PZS.cjs.map +0 -1
  760. package/dist/chunk-KQUI4BGS.cjs.map +0 -1
  761. package/dist/chunk-KRU6IGV7.js.map +0 -1
  762. package/dist/chunk-NV2CWBI2.cjs.map +0 -1
  763. package/dist/chunk-OE5CKRUC.js.map +0 -1
  764. package/dist/chunk-P2CA3XGI.js.map +0 -1
  765. package/dist/chunk-P7UMS4E6.cjs.map +0 -1
  766. package/dist/chunk-SGFYA22I.cjs.map +0 -1
  767. package/dist/chunk-SQHMGT4W.js.map +0 -1
  768. package/dist/chunk-SQJFBZ42.js.map +0 -1
  769. package/dist/chunk-SVSHA7XV.js.map +0 -1
  770. package/dist/chunk-TVTIGV7Q.js.map +0 -1
  771. package/dist/chunk-VKELAMAZ.js.map +0 -1
  772. package/dist/chunk-VNYW4C4J.cjs.map +0 -1
  773. package/dist/chunk-VOKVG3ER.js +0 -78
  774. package/dist/chunk-VOKVG3ER.js.map +0 -1
  775. package/dist/chunk-VPIYTQCV.cjs.map +0 -1
  776. package/dist/chunk-VPWJCJCX.cjs.map +0 -1
  777. package/dist/chunk-VROIMIHB.cjs.map +0 -1
  778. package/dist/chunk-WNJRS7Y7.cjs.map +0 -1
  779. package/dist/chunk-X4LBUPJO.cjs.map +0 -1
  780. package/dist/chunk-X4XPNTCZ.cjs.map +0 -1
  781. package/dist/chunk-XCP454Q6.js.map +0 -1
  782. package/dist/chunk-XDIMTPZU.cjs.map +0 -1
  783. package/dist/chunk-XEAT7XJG.cjs.map +0 -1
  784. package/dist/chunk-XVW5DPPP.js.map +0 -1
  785. package/dist/chunk-Y5HFM7LO.js.map +0 -1
  786. package/dist/chunk-YVL3XATO.cjs +0 -79
  787. package/dist/chunk-YVL3XATO.cjs.map +0 -1
  788. package/dist/chunk-YVPC65ZJ.cjs.map +0 -1
  789. package/dist/chunk-ZGRCSNPK.js.map +0 -1
  790. package/dist/hey-buddy-INNUFFJJ.cjs.map +0 -1
  791. package/dist/hey-buddy-V6FC5UKB.js.map +0 -1
  792. package/dist/html-MdxqSzjD.d.cts +0 -13
  793. package/dist/html-MdxqSzjD.d.ts +0 -13
  794. package/dist/orderRows-BUJYgSc7.d.cts +0 -221
  795. package/dist/orderRows-BUJYgSc7.d.ts +0 -221
  796. package/dist/transcript-Cg7uSW-C.d.cts +0 -84
  797. package/dist/transcript-Cg7uSW-C.d.ts +0 -84
  798. package/dist/types-B97JNRNQ.d.cts +0 -251
  799. package/dist/types-CnPEwzlp.d.cts +0 -254
  800. package/dist/types-CnPEwzlp.d.ts +0 -254
  801. package/dist/types-gZXrfLj6.d.ts +0 -251
  802. package/dist/useAnchoredPosition-CKwLSQW8.d.cts +0 -76
  803. package/dist/useAnchoredPosition-CKwLSQW8.d.ts +0 -76
  804. package/dist/useTheme-B9SWu6ui.d.cts +0 -24
  805. package/dist/useTheme-B9SWu6ui.d.ts +0 -24
  806. package/dist/useTranscriptEdits-CGzlemHT.d.cts +0 -182
  807. package/dist/useTranscriptEdits-D32bLs0l.d.ts +0 -182
package/dist/deck.js ADDED
@@ -0,0 +1,3330 @@
1
+ import { TemplateAnchor, TemplateImg, TemplateIcon, safeHref } from './chunk-FBCDYTWM.js';
2
+ import { isRtl } from './chunk-YVKBXNPK.js';
3
+ import './chunk-GVM6DTR5.js';
4
+ import { cn } from './chunk-TQONQSJO.js';
5
+ import './chunk-PX6F3LHL.js';
6
+ import * as React9 from 'react';
7
+ import { createPortal } from 'react-dom';
8
+ import { List, Printer, Minimize2, Maximize2, Play, ExternalLink, ChevronUp, ChevronDown, X, ArrowUp, ArrowDown, ChevronRight, Check, Copy, ArrowRight, TrendingUp, TrendingDown, Minus } from 'lucide-react';
9
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
10
+
11
+ var chrome = "mie-deck-chrome print:hidden";
12
+ var iconButton = "flex size-9 items-center justify-center rounded-lg border border-white/10 bg-white/5 text-white/70 backdrop-blur transition-colors hover:bg-white/10 hover:text-white focus-visible:ring-2 focus-visible:ring-accent focus-visible:outline-none";
13
+ var slideLabel = (s) => s.navLabel ?? ("title" in s ? s.title : void 0) ?? "";
14
+ function ProgressBar({ progress }) {
15
+ return /* @__PURE__ */ jsx(
16
+ "div",
17
+ {
18
+ className: cn(
19
+ chrome,
20
+ "pointer-events-none absolute inset-x-0 top-0 z-40 h-[3px] bg-white/5"
21
+ ),
22
+ children: /* @__PURE__ */ jsx(
23
+ "div",
24
+ {
25
+ className: "bg-accent h-full transition-[width] duration-500 ease-out",
26
+ style: { width: `${progress}%` }
27
+ }
28
+ )
29
+ }
30
+ );
31
+ }
32
+ function SlideCounter({
33
+ active,
34
+ total,
35
+ section
36
+ }) {
37
+ return /* @__PURE__ */ jsxs(
38
+ "div",
39
+ {
40
+ className: cn(
41
+ chrome,
42
+ "pointer-events-none absolute start-5 bottom-5 z-40 hidden select-none md:block"
43
+ ),
44
+ children: [
45
+ /* @__PURE__ */ jsxs("div", { className: "text-sm font-semibold text-white/80 tabular-nums", children: [
46
+ String(active + 1).padStart(2, "0"),
47
+ /* @__PURE__ */ jsxs("span", { className: "text-white/70", children: [
48
+ " ",
49
+ "/ ",
50
+ String(total).padStart(2, "0")
51
+ ] })
52
+ ] }),
53
+ section && /* @__PURE__ */ jsx("div", { className: "text-accent mt-0.5 text-[0.7rem] tracking-[0.18em] uppercase", children: section })
54
+ ]
55
+ }
56
+ );
57
+ }
58
+ function DotNav({
59
+ slides,
60
+ active,
61
+ goTo,
62
+ labels
63
+ }) {
64
+ return /* @__PURE__ */ jsx(
65
+ "nav",
66
+ {
67
+ "aria-label": labels.slideNavigation,
68
+ className: cn(
69
+ chrome,
70
+ "absolute end-3 top-1/2 z-40 hidden -translate-y-1/2 flex-col items-center gap-2 md:flex"
71
+ ),
72
+ children: slides.map((s, i) => /* @__PURE__ */ jsxs(
73
+ "button",
74
+ {
75
+ type: "button",
76
+ onClick: () => goTo(i),
77
+ "aria-label": labels.goToSlide(i + 1, slideLabel(s)),
78
+ "aria-current": i === active ? "true" : void 0,
79
+ className: "group relative flex size-4 items-center justify-center",
80
+ children: [
81
+ /* @__PURE__ */ jsx(
82
+ "span",
83
+ {
84
+ className: cn(
85
+ "block rounded-full transition-all duration-300",
86
+ i === active ? "bg-accent size-2.5" : "size-1.5 bg-white/30 group-hover:bg-white/60"
87
+ )
88
+ }
89
+ ),
90
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute end-6 rounded-md border border-white/10 bg-neutral-900/95 px-2 py-1 text-xs whitespace-nowrap text-white opacity-0 shadow-lg transition-opacity group-hover:opacity-100 group-focus-visible:opacity-100", children: slideLabel(s) })
91
+ ]
92
+ },
93
+ i
94
+ ))
95
+ }
96
+ );
97
+ }
98
+ function Controls({
99
+ isFullscreen,
100
+ onToggleFullscreen,
101
+ onOpenOutline,
102
+ labels
103
+ }) {
104
+ return /* @__PURE__ */ jsxs(
105
+ "div",
106
+ {
107
+ className: cn(
108
+ chrome,
109
+ "absolute end-5 bottom-5 z-40 hidden items-center gap-2 md:flex"
110
+ ),
111
+ children: [
112
+ /* @__PURE__ */ jsx(
113
+ "button",
114
+ {
115
+ type: "button",
116
+ className: iconButton,
117
+ onClick: onOpenOutline,
118
+ "aria-label": labels.openOutline,
119
+ children: /* @__PURE__ */ jsx(List, { "aria-hidden": "true", className: "size-4" })
120
+ }
121
+ ),
122
+ /* @__PURE__ */ jsx(
123
+ "button",
124
+ {
125
+ type: "button",
126
+ className: iconButton,
127
+ onClick: () => window.print(),
128
+ "aria-label": labels.print,
129
+ children: /* @__PURE__ */ jsx(Printer, { "aria-hidden": "true", className: "size-4" })
130
+ }
131
+ ),
132
+ /* @__PURE__ */ jsx(
133
+ "button",
134
+ {
135
+ type: "button",
136
+ className: iconButton,
137
+ onClick: onToggleFullscreen,
138
+ "aria-label": isFullscreen ? labels.exitFullscreen : labels.enterFullscreen,
139
+ children: isFullscreen ? /* @__PURE__ */ jsx(Minimize2, { "aria-hidden": "true", className: "size-4" }) : /* @__PURE__ */ jsx(Maximize2, { "aria-hidden": "true", className: "size-4" })
140
+ }
141
+ )
142
+ ]
143
+ }
144
+ );
145
+ }
146
+ function Kbd({ children }) {
147
+ return /* @__PURE__ */ jsx("kbd", { className: "inline-flex min-w-5 items-center justify-center rounded border border-white/15 bg-white/5 px-1 py-0.5 text-[0.65rem] text-white/80", children });
148
+ }
149
+ function KeyboardHints({
150
+ pulse,
151
+ labels
152
+ }) {
153
+ const [visible, setVisible] = React9.useState(true);
154
+ React9.useEffect(() => {
155
+ setVisible(true);
156
+ const t = setTimeout(() => setVisible(false), 5e3);
157
+ return () => clearTimeout(t);
158
+ }, [pulse]);
159
+ return /* @__PURE__ */ jsxs(
160
+ "div",
161
+ {
162
+ "aria-hidden": "true",
163
+ className: cn(
164
+ chrome,
165
+ "pointer-events-none absolute bottom-5 left-1/2 z-40 hidden -translate-x-1/2 items-center gap-3 rounded-full border border-white/10 bg-neutral-900/80 px-4 py-1.5 text-xs text-white/70 backdrop-blur transition-opacity duration-500 select-none md:flex",
166
+ visible ? "opacity-100" : "opacity-0"
167
+ ),
168
+ children: [
169
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1", children: [
170
+ /* @__PURE__ */ jsx(Kbd, { children: "\u2191" }),
171
+ /* @__PURE__ */ jsx(Kbd, { children: "\u2193" }),
172
+ " ",
173
+ labels.navigateHint
174
+ ] }),
175
+ /* @__PURE__ */ jsx("span", { className: "text-white/20", children: "\xB7" }),
176
+ /* @__PURE__ */ jsxs("span", { children: [
177
+ /* @__PURE__ */ jsx(Kbd, { children: "F" }),
178
+ " ",
179
+ labels.fullscreenHint
180
+ ] }),
181
+ /* @__PURE__ */ jsx("span", { className: "text-white/20", children: "\xB7" }),
182
+ /* @__PURE__ */ jsxs("span", { children: [
183
+ /* @__PURE__ */ jsx(Kbd, { children: "?" }),
184
+ " ",
185
+ labels.helpHint
186
+ ] })
187
+ ]
188
+ }
189
+ );
190
+ }
191
+ function MobileNav({
192
+ active,
193
+ total,
194
+ onPrev,
195
+ onNext,
196
+ onOpenOutline,
197
+ labels
198
+ }) {
199
+ const btn = "flex size-10 items-center justify-center rounded-full text-white/80 transition-colors hover:bg-white/10 disabled:opacity-30";
200
+ return /* @__PURE__ */ jsxs(
201
+ "div",
202
+ {
203
+ className: cn(
204
+ chrome,
205
+ "absolute inset-x-0 bottom-0 z-40 flex items-center justify-between border-t border-white/10 bg-neutral-950/90 px-3 py-2 pb-[max(0.5rem,env(safe-area-inset-bottom))] backdrop-blur md:hidden"
206
+ ),
207
+ children: [
208
+ /* @__PURE__ */ jsx(
209
+ "button",
210
+ {
211
+ type: "button",
212
+ className: btn,
213
+ onClick: onPrev,
214
+ disabled: active === 0,
215
+ "aria-label": labels.previous,
216
+ children: /* @__PURE__ */ jsx(ChevronUp, { "aria-hidden": "true", className: "size-5" })
217
+ }
218
+ ),
219
+ /* @__PURE__ */ jsxs(
220
+ "button",
221
+ {
222
+ type: "button",
223
+ onClick: onOpenOutline,
224
+ className: "flex items-center gap-2 rounded-full px-4 py-1.5 text-sm font-semibold text-white/80 tabular-nums",
225
+ "aria-label": labels.openOutline,
226
+ children: [
227
+ /* @__PURE__ */ jsx(List, { "aria-hidden": "true", className: "text-accent size-4" }),
228
+ active + 1,
229
+ " / ",
230
+ total
231
+ ]
232
+ }
233
+ ),
234
+ /* @__PURE__ */ jsx(
235
+ "button",
236
+ {
237
+ type: "button",
238
+ className: btn,
239
+ onClick: onNext,
240
+ disabled: active === total - 1,
241
+ "aria-label": labels.next,
242
+ children: /* @__PURE__ */ jsx(ChevronDown, { "aria-hidden": "true", className: "size-5" })
243
+ }
244
+ )
245
+ ]
246
+ }
247
+ );
248
+ }
249
+ function OutlineDialog({
250
+ open,
251
+ onClose,
252
+ slides,
253
+ active,
254
+ goTo,
255
+ labels
256
+ }) {
257
+ const panelRef = React9.useRef(null);
258
+ const titleId = React9.useId();
259
+ React9.useEffect(() => {
260
+ if (!open) return;
261
+ const previous = document.activeElement;
262
+ const panel = panelRef.current;
263
+ const focusables = () => Array.from(
264
+ panel?.querySelectorAll("button:not([disabled])") ?? []
265
+ );
266
+ (focusables()[1] ?? focusables()[0])?.focus();
267
+ const onKey = (e) => {
268
+ if (e.key === "Escape") {
269
+ e.preventDefault();
270
+ onClose();
271
+ return;
272
+ }
273
+ if (e.key !== "Tab") return;
274
+ const items = focusables();
275
+ const first = items[0];
276
+ const last = items[items.length - 1];
277
+ if (e.shiftKey && document.activeElement === first) {
278
+ e.preventDefault();
279
+ last?.focus();
280
+ } else if (!e.shiftKey && document.activeElement === last) {
281
+ e.preventDefault();
282
+ first?.focus();
283
+ }
284
+ };
285
+ document.addEventListener("keydown", onKey, true);
286
+ return () => {
287
+ document.removeEventListener("keydown", onKey, true);
288
+ previous?.focus?.();
289
+ };
290
+ }, [open, onClose]);
291
+ if (!open || typeof document === "undefined") return null;
292
+ return createPortal(
293
+ /* @__PURE__ */ jsxs(
294
+ "div",
295
+ {
296
+ ref: panelRef,
297
+ role: "dialog",
298
+ "aria-modal": "true",
299
+ "aria-labelledby": titleId,
300
+ className: "mie-deck-chrome fixed inset-0 z-[80] flex flex-col bg-neutral-950/95 text-white backdrop-blur-md",
301
+ children: [
302
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between border-b border-white/10 px-5 py-4", children: [
303
+ /* @__PURE__ */ jsx("h2", { id: titleId, className: "text-lg font-bold text-white", children: labels.outline }),
304
+ /* @__PURE__ */ jsx(
305
+ "button",
306
+ {
307
+ type: "button",
308
+ onClick: onClose,
309
+ "aria-label": labels.closeOutline,
310
+ className: iconButton,
311
+ children: /* @__PURE__ */ jsx(X, { "aria-hidden": "true", className: "size-5" })
312
+ }
313
+ )
314
+ ] }),
315
+ /* @__PURE__ */ jsx("ol", { className: "flex-1 overflow-y-auto px-3 py-3", children: slides.map((s, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
316
+ "button",
317
+ {
318
+ type: "button",
319
+ onClick: () => {
320
+ goTo(i);
321
+ onClose();
322
+ },
323
+ "aria-current": i === active ? "true" : void 0,
324
+ className: cn(
325
+ "flex w-full items-baseline gap-3 rounded-lg px-4 py-3 text-start transition-colors",
326
+ i === active ? "bg-accent/15" : "hover:bg-white/5"
327
+ ),
328
+ children: [
329
+ /* @__PURE__ */ jsx("span", { className: "text-accent text-sm font-semibold tabular-nums", children: String(i + 1).padStart(2, "0") }),
330
+ /* @__PURE__ */ jsx("span", { className: i === active ? "text-white" : "text-white/75", children: slideLabel(s) })
331
+ ]
332
+ }
333
+ ) }, i)) })
334
+ ]
335
+ }
336
+ ),
337
+ document.body
338
+ );
339
+ }
340
+
341
+ // src/components/Deck/tones.ts
342
+ var dark = {
343
+ isLight: false,
344
+ text: "text-white",
345
+ muted: "text-white/70",
346
+ hairline: "border-white/10",
347
+ card: "bg-white/5"
348
+ };
349
+ var TONES = {
350
+ brand: {
351
+ ...dark,
352
+ surface: "bg-gradient-to-br from-primary-900 via-primary-950 to-primary-950"
353
+ },
354
+ deep: {
355
+ ...dark,
356
+ surface: "bg-gradient-to-b from-neutral-900 to-neutral-950"
357
+ },
358
+ ink: { ...dark, surface: "bg-neutral-950" },
359
+ glow: {
360
+ ...dark,
361
+ surface: "bg-gradient-to-br from-primary-950 via-primary-800 to-accent/70"
362
+ },
363
+ light: {
364
+ isLight: true,
365
+ surface: "bg-white",
366
+ text: "text-neutral-900",
367
+ muted: "text-neutral-600",
368
+ hairline: "border-neutral-200",
369
+ card: "bg-neutral-50"
370
+ }
371
+ };
372
+ var onDark = {
373
+ primary: {
374
+ text: "text-primary-300",
375
+ soft: "bg-primary-400/15",
376
+ border: "border-primary-400/30",
377
+ fill: "bg-primary-400",
378
+ svgFill: "fill-primary-400",
379
+ svgStroke: "stroke-primary-400"
380
+ },
381
+ secondary: {
382
+ text: "text-secondary-300",
383
+ soft: "bg-secondary-400/15",
384
+ border: "border-secondary-400/30",
385
+ fill: "bg-secondary-400",
386
+ svgFill: "fill-secondary-400",
387
+ svgStroke: "stroke-secondary-400"
388
+ },
389
+ accent: {
390
+ text: "text-accent",
391
+ soft: "bg-accent/15",
392
+ border: "border-accent/30",
393
+ fill: "bg-accent",
394
+ svgFill: "fill-accent",
395
+ svgStroke: "stroke-accent"
396
+ },
397
+ success: {
398
+ text: "text-success",
399
+ soft: "bg-success/15",
400
+ border: "border-success/30",
401
+ fill: "bg-success",
402
+ svgFill: "fill-success",
403
+ svgStroke: "stroke-success"
404
+ },
405
+ warning: {
406
+ text: "text-warning",
407
+ soft: "bg-warning/15",
408
+ border: "border-warning/30",
409
+ fill: "bg-warning",
410
+ svgFill: "fill-warning",
411
+ svgStroke: "stroke-warning"
412
+ },
413
+ danger: {
414
+ text: "text-destructive",
415
+ soft: "bg-destructive/15",
416
+ border: "border-destructive/30",
417
+ fill: "bg-destructive",
418
+ svgFill: "fill-destructive",
419
+ svgStroke: "stroke-destructive"
420
+ }
421
+ };
422
+ var lightText = {
423
+ primary: "text-primary-800",
424
+ secondary: "text-secondary-800",
425
+ accent: "text-neutral-900",
426
+ success: "text-neutral-900",
427
+ warning: "text-neutral-900",
428
+ danger: "text-destructive"
429
+ };
430
+ function accent(name = "accent", isLight = false) {
431
+ const spec = onDark[name];
432
+ return isLight ? { ...spec, text: lightText[name] } : spec;
433
+ }
434
+ var toneOf = (slide, fallback) => TONES[slide.tone ?? fallback];
435
+ var ACCENT_CYCLE = [
436
+ "accent",
437
+ "primary",
438
+ "secondary",
439
+ "success",
440
+ "warning"
441
+ ];
442
+
443
+ // src/components/Deck/DeckContext.tsx
444
+ var DeckContext = React9.createContext(null);
445
+ var DeckProvider = DeckContext.Provider;
446
+ function useDeck() {
447
+ const ctx = React9.useContext(DeckContext);
448
+ if (!ctx) throw new Error("Slide renderers must be rendered inside <Deck>.");
449
+ return ctx;
450
+ }
451
+ var ToneContext = React9.createContext(TONES.brand);
452
+ var useTone = () => React9.useContext(ToneContext);
453
+
454
+ // src/components/Deck/labels.ts
455
+ var defaultDeckLabels = {
456
+ presentation: "slide presentation",
457
+ slide: "slide",
458
+ slideNavigation: "Slide navigation",
459
+ goToSlide: (n, title) => `Go to slide ${n}${title ? `: ${title}` : ""}`,
460
+ outline: "Slides",
461
+ openOutline: "Open slide outline",
462
+ closeOutline: "Close outline",
463
+ print: "Print or save as PDF",
464
+ enterFullscreen: "Enter fullscreen",
465
+ exitFullscreen: "Exit fullscreen",
466
+ previous: "Previous slide",
467
+ next: "Next slide",
468
+ navigateHint: "Navigate",
469
+ fullscreenHint: "Fullscreen",
470
+ helpHint: "Help",
471
+ copy: "Copy link",
472
+ copied: "Copied",
473
+ statusNow: "Now",
474
+ statusNext: "Next",
475
+ statusLater: "Later",
476
+ watchVideo: "Watch the video",
477
+ lines: "Lines",
478
+ bars: "Bars",
479
+ more: (n) => `Show ${n} more`,
480
+ less: "Show less"
481
+ };
482
+ function reveal(i = 0) {
483
+ return {
484
+ className: "mie-deck-reveal",
485
+ style: { "--mie-reveal-i": i }
486
+ };
487
+ }
488
+ function Eyebrow({
489
+ children,
490
+ className
491
+ }) {
492
+ const tone = useTone();
493
+ const r = reveal(0);
494
+ return /* @__PURE__ */ jsx(
495
+ "p",
496
+ {
497
+ className: cn(
498
+ r.className,
499
+ "mb-4 text-xs font-semibold tracking-[0.2em] uppercase",
500
+ accent("accent", tone.isLight).text,
501
+ className
502
+ ),
503
+ style: r.style,
504
+ children
505
+ }
506
+ );
507
+ }
508
+ function SlideTitle({
509
+ children,
510
+ className,
511
+ size = "md"
512
+ }) {
513
+ const tone = useTone();
514
+ const r = reveal(1);
515
+ return /* @__PURE__ */ jsx(
516
+ "h2",
517
+ {
518
+ className: cn(
519
+ r.className,
520
+ "font-bold tracking-tight text-balance",
521
+ tone.text,
522
+ size === "xl" ? "text-5xl sm:text-6xl lg:text-7xl" : size === "lg" ? "text-4xl sm:text-5xl lg:text-6xl" : "text-3xl sm:text-4xl lg:text-5xl",
523
+ className
524
+ ),
525
+ style: r.style,
526
+ children
527
+ }
528
+ );
529
+ }
530
+ function Subtitle({
531
+ children,
532
+ className
533
+ }) {
534
+ const tone = useTone();
535
+ const r = reveal(2);
536
+ return /* @__PURE__ */ jsx(
537
+ "p",
538
+ {
539
+ className: cn(
540
+ r.className,
541
+ "mt-4 max-w-2xl text-base leading-relaxed text-pretty sm:text-lg",
542
+ tone.muted,
543
+ className
544
+ ),
545
+ style: r.style,
546
+ children
547
+ }
548
+ );
549
+ }
550
+ function SlideHeader({
551
+ eyebrow,
552
+ title,
553
+ subtitle,
554
+ center
555
+ }) {
556
+ return /* @__PURE__ */ jsxs("div", { className: cn(center && "mx-auto text-center"), children: [
557
+ eyebrow && /* @__PURE__ */ jsx(Eyebrow, { children: eyebrow }),
558
+ /* @__PURE__ */ jsx(SlideTitle, { children: title }),
559
+ subtitle && /* @__PURE__ */ jsx(Subtitle, { className: cn(center && "mx-auto"), children: subtitle })
560
+ ] });
561
+ }
562
+ function splitFigure(value) {
563
+ const start = value.search(/\d/);
564
+ if (start === -1) return null;
565
+ let end = start;
566
+ while (end < value.length && /[\d,.]/.test(value[end])) end += 1;
567
+ return [value.slice(0, start), value.slice(start, end), value.slice(end)];
568
+ }
569
+ function CountUp({
570
+ value,
571
+ duration = 1400
572
+ }) {
573
+ const ref = React9.useRef(null);
574
+ const match = splitFigure(value);
575
+ React9.useEffect(() => {
576
+ const el = ref.current;
577
+ if (!el || !match) return;
578
+ if (window.matchMedia?.("(prefers-reduced-motion: reduce)").matches) return;
579
+ const [prefix, digits, suffix] = match;
580
+ const target = parseFloat(digits.replace(/,/g, ""));
581
+ if (Number.isNaN(target)) return;
582
+ const decimals = digits.split(".")[1]?.length ?? 0;
583
+ const grouped = digits.includes(",");
584
+ const render = (n) => {
585
+ let out = n.toFixed(decimals);
586
+ if (grouped) {
587
+ const [whole, frac] = out.split(".");
588
+ out = whole.replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (frac ? `.${frac}` : "");
589
+ }
590
+ el.textContent = `${prefix}${out}${suffix}`;
591
+ };
592
+ render(0);
593
+ let frame = 0;
594
+ const observer = new IntersectionObserver(
595
+ ([entry]) => {
596
+ if (!entry.isIntersecting) return;
597
+ observer.disconnect();
598
+ const start = performance.now();
599
+ const tick = (now) => {
600
+ const t = Math.min(1, (now - start) / duration);
601
+ render(target * (1 - Math.pow(1 - t, 3)));
602
+ if (t < 1) frame = requestAnimationFrame(tick);
603
+ else el.textContent = value;
604
+ };
605
+ frame = requestAnimationFrame(tick);
606
+ },
607
+ { threshold: 0.1 }
608
+ );
609
+ observer.observe(el);
610
+ return () => {
611
+ observer.disconnect();
612
+ cancelAnimationFrame(frame);
613
+ el.textContent = value;
614
+ };
615
+ }, [value, duration]);
616
+ return /* @__PURE__ */ jsx("span", { ref, className: "tabular-nums", children: value });
617
+ }
618
+ function DeckIcon({
619
+ name,
620
+ className
621
+ }) {
622
+ const { icons } = useDeck();
623
+ if (!name) return null;
624
+ return /* @__PURE__ */ jsx(TemplateIcon, { name, icons, className });
625
+ }
626
+ function IconChip({
627
+ icon,
628
+ accent: accent2 = "accent"
629
+ }) {
630
+ const tone = useTone();
631
+ if (!icon) return null;
632
+ const a = accent(accent2, tone.isLight);
633
+ return /* @__PURE__ */ jsx(
634
+ "span",
635
+ {
636
+ className: cn(
637
+ "inline-flex size-11 items-center justify-center rounded-xl border",
638
+ a.soft,
639
+ a.border,
640
+ a.text
641
+ ),
642
+ children: /* @__PURE__ */ jsx(DeckIcon, { name: icon })
643
+ }
644
+ );
645
+ }
646
+ function Bullet({
647
+ item,
648
+ depth = 0
649
+ }) {
650
+ const tone = useTone();
651
+ const a = accent("accent", tone.isLight);
652
+ const b = typeof item === "string" ? { text: item } : item;
653
+ return /* @__PURE__ */ jsxs("li", { className: cn("flex flex-col", depth > 0 && "ms-5 sm:ms-7"), children: [
654
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
655
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: cn("mt-2 flex-none", a.text), children: b.icon ? /* @__PURE__ */ jsx(DeckIcon, { name: b.icon, className: "size-[1.1em]" }) : /* @__PURE__ */ jsx(
656
+ "span",
657
+ {
658
+ className: cn(
659
+ "block rounded-full",
660
+ depth === 0 ? cn("size-1.5", a.fill) : "size-1 bg-current opacity-60"
661
+ )
662
+ }
663
+ ) }),
664
+ /* @__PURE__ */ jsxs(
665
+ "span",
666
+ {
667
+ className: cn(
668
+ "leading-snug",
669
+ depth === 0 ? cn("text-lg sm:text-xl", tone.text) : cn("text-base", tone.muted)
670
+ ),
671
+ children: [
672
+ b.lead && /* @__PURE__ */ jsxs("span", { className: cn("font-semibold", a.text), children: [
673
+ b.lead,
674
+ " "
675
+ ] }),
676
+ b.text
677
+ ]
678
+ }
679
+ )
680
+ ] }),
681
+ b.children && b.children.length > 0 && /* @__PURE__ */ jsx("ul", { className: "mt-2 flex flex-col gap-2", children: b.children.map((child, i) => /* @__PURE__ */ jsx(Bullet, { item: child, depth: depth + 1 }, i)) })
682
+ ] });
683
+ }
684
+ function SourceLink({
685
+ source,
686
+ className
687
+ }) {
688
+ const tone = useTone();
689
+ const href = safeHref(source.url);
690
+ if (!href)
691
+ return /* @__PURE__ */ jsx("span", { className: cn("text-xs", tone.muted, className), children: source.label });
692
+ return /* @__PURE__ */ jsxs(
693
+ "a",
694
+ {
695
+ href,
696
+ target: "_blank",
697
+ rel: "noopener noreferrer",
698
+ className: cn(
699
+ "inline-flex items-center gap-1 text-xs underline underline-offset-2 hover:opacity-100",
700
+ tone.muted,
701
+ className
702
+ ),
703
+ children: [
704
+ source.label,
705
+ /* @__PURE__ */ jsx(ExternalLink, { "aria-hidden": "true", className: "size-3" })
706
+ ]
707
+ }
708
+ );
709
+ }
710
+ function HighlightFigure({
711
+ value,
712
+ label,
713
+ size = "md"
714
+ }) {
715
+ const tone = useTone();
716
+ return /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
717
+ /* @__PURE__ */ jsx(
718
+ "div",
719
+ {
720
+ className: cn(
721
+ "font-bold",
722
+ accent("accent", tone.isLight).text,
723
+ size === "lg" ? "text-4xl sm:text-5xl" : "text-3xl sm:text-4xl"
724
+ ),
725
+ children: /* @__PURE__ */ jsx(CountUp, { value })
726
+ }
727
+ ),
728
+ /* @__PURE__ */ jsx("div", { className: cn("mt-1 text-xs tracking-wider uppercase", tone.muted), children: label })
729
+ ] });
730
+ }
731
+ function Card({
732
+ children,
733
+ className,
734
+ i
735
+ }) {
736
+ const tone = useTone();
737
+ const r = reveal(i ?? 3);
738
+ return /* @__PURE__ */ jsx(
739
+ "div",
740
+ {
741
+ className: cn(
742
+ r.className,
743
+ "rounded-2xl border p-6",
744
+ tone.card,
745
+ tone.hairline,
746
+ className
747
+ ),
748
+ style: r.style,
749
+ children
750
+ }
751
+ );
752
+ }
753
+ function ChartTable({
754
+ caption,
755
+ headers,
756
+ rows
757
+ }) {
758
+ return /* @__PURE__ */ jsxs("table", { className: "sr-only", children: [
759
+ /* @__PURE__ */ jsx("caption", { children: caption }),
760
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { children: headers.map(
761
+ (h, i) => h ? /* @__PURE__ */ jsx("th", { scope: "col", children: h }, i) : (
762
+ // The row-label corner cell has no caption of its own.
763
+ /* @__PURE__ */ jsx("td", {}, i)
764
+ )
765
+ ) }) }),
766
+ /* @__PURE__ */ jsx("tbody", { children: rows.map((row, r) => /* @__PURE__ */ jsx("tr", { children: row.map(
767
+ (cell, c) => c === 0 ? /* @__PURE__ */ jsx("th", { scope: "row", children: cell }, c) : /* @__PURE__ */ jsx("td", { children: cell }, c)
768
+ ) }, r)) })
769
+ ] });
770
+ }
771
+ function useFormat() {
772
+ const { locale } = useDeck();
773
+ return React9.useMemo(
774
+ () => new Intl.NumberFormat(locale, { notation: "compact" }),
775
+ [locale]
776
+ );
777
+ }
778
+ function BarChart({ graphic }) {
779
+ const tone = useTone();
780
+ const format = useFormat();
781
+ const max = Math.max(1, ...graphic.bars.map((b) => b.value));
782
+ const hi = accent("accent", tone.isLight);
783
+ return /* @__PURE__ */ jsxs("figure", { "data-slot": "deck-bar-chart", className: "w-full", children: [
784
+ /* @__PURE__ */ jsx("div", { "aria-hidden": "true", className: "flex h-56 items-end gap-2 sm:h-64", children: graphic.bars.map((bar, i) => /* @__PURE__ */ jsxs(React9.Fragment, { children: [
785
+ graphic.marker?.atIndex === i && /* @__PURE__ */ jsx("div", { className: "relative h-full w-px flex-none border-s border-dashed border-current opacity-40", children: /* @__PURE__ */ jsx("span", { className: "absolute start-1/2 -top-6 -translate-x-1/2 text-[0.65rem] font-semibold tracking-wide whitespace-nowrap uppercase opacity-100", children: graphic.marker.label }) }),
786
+ /* @__PURE__ */ jsxs("div", { className: "flex h-full min-w-0 flex-1 flex-col items-center gap-1", children: [
787
+ /* @__PURE__ */ jsx("div", { className: "w-full flex-1 pt-5", children: /* @__PURE__ */ jsx("div", { className: "relative h-full", children: /* @__PURE__ */ jsx(
788
+ "div",
789
+ {
790
+ className: cn(
791
+ "mie-deck-grow absolute inset-x-0 bottom-0 rounded-t-md",
792
+ bar.highlight ? hi.fill : tone.isLight ? "bg-neutral-300" : "bg-white/25"
793
+ ),
794
+ style: {
795
+ height: `${bar.value / max * 100}%`,
796
+ "--mie-reveal-i": i
797
+ },
798
+ children: /* @__PURE__ */ jsx(
799
+ "span",
800
+ {
801
+ className: cn(
802
+ "absolute inset-x-0 bottom-full mb-1 text-center text-xs font-semibold tabular-nums",
803
+ tone.muted
804
+ ),
805
+ children: format.format(bar.value)
806
+ }
807
+ )
808
+ }
809
+ ) }) }),
810
+ /* @__PURE__ */ jsx(
811
+ "span",
812
+ {
813
+ className: cn(
814
+ "w-full truncate text-center text-xs",
815
+ tone.muted
816
+ ),
817
+ children: bar.label
818
+ }
819
+ )
820
+ ] })
821
+ ] }, bar.label)) }),
822
+ graphic.yAxisLabel && /* @__PURE__ */ jsx("figcaption", { className: cn("mt-2 text-xs", tone.muted), children: graphic.yAxisLabel }),
823
+ /* @__PURE__ */ jsx(
824
+ ChartTable,
825
+ {
826
+ caption: graphic.yAxisLabel ?? "Values",
827
+ headers: ["", graphic.yAxisLabel ?? "Value"],
828
+ rows: graphic.bars.map((b) => [b.label, b.value])
829
+ }
830
+ )
831
+ ] });
832
+ }
833
+ function HorizontalBars({ graphic }) {
834
+ const tone = useTone();
835
+ const format = useFormat();
836
+ const max = Math.max(1, ...graphic.bars.map((b) => b.value));
837
+ const a = accent("accent", tone.isLight);
838
+ return /* @__PURE__ */ jsx("ul", { "data-slot": "deck-horizontal-bars", className: "w-full space-y-3", children: graphic.bars.map((bar, i) => {
839
+ const r = reveal(3 + i);
840
+ return /* @__PURE__ */ jsxs("li", { className: r.className, style: r.style, children: [
841
+ /* @__PURE__ */ jsxs("div", { className: "mb-1 flex justify-between gap-3 text-sm", children: [
842
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: bar.label }),
843
+ /* @__PURE__ */ jsx("span", { className: "font-semibold tabular-nums", children: bar.display ?? format.format(bar.value) })
844
+ ] }),
845
+ /* @__PURE__ */ jsx(
846
+ "div",
847
+ {
848
+ "aria-hidden": "true",
849
+ className: cn(
850
+ "h-2 overflow-hidden rounded-full",
851
+ tone.isLight ? "bg-neutral-200" : "bg-white/10"
852
+ ),
853
+ children: /* @__PURE__ */ jsx(
854
+ "div",
855
+ {
856
+ className: cn("h-full rounded-full", a.fill),
857
+ style: { width: `${bar.value / max * 100}%` }
858
+ }
859
+ )
860
+ }
861
+ )
862
+ ] }, bar.label);
863
+ }) });
864
+ }
865
+ function KpiRow({ graphic }) {
866
+ const tone = useTone();
867
+ return /* @__PURE__ */ jsx(
868
+ "dl",
869
+ {
870
+ "data-slot": "deck-kpi-row",
871
+ className: "grid w-full grid-cols-2 gap-4 sm:grid-cols-4",
872
+ children: graphic.kpis.map((kpi, i) => {
873
+ const Trend = kpi.trend === "up" ? TrendingUp : kpi.trend === "down" ? TrendingDown : Minus;
874
+ const r = reveal(3 + i);
875
+ return /* @__PURE__ */ jsxs(
876
+ "div",
877
+ {
878
+ className: cn(
879
+ r.className,
880
+ "flex flex-col-reverse rounded-xl border p-4",
881
+ tone.card,
882
+ tone.hairline
883
+ ),
884
+ style: r.style,
885
+ children: [
886
+ /* @__PURE__ */ jsx("dt", { className: cn("text-xs", tone.muted), children: kpi.label }),
887
+ /* @__PURE__ */ jsxs("dd", { className: "flex items-center gap-2 text-2xl font-bold tabular-nums", children: [
888
+ kpi.value,
889
+ kpi.trend && /* @__PURE__ */ jsx(
890
+ Trend,
891
+ {
892
+ "aria-hidden": "true",
893
+ className: cn(
894
+ "size-4",
895
+ kpi.trend === "up" ? "text-success" : kpi.trend === "down" ? "text-destructive" : tone.muted
896
+ )
897
+ }
898
+ )
899
+ ] })
900
+ ]
901
+ },
902
+ kpi.label
903
+ );
904
+ })
905
+ }
906
+ );
907
+ }
908
+ function points(values, w, h, y) {
909
+ const step = values.length > 1 ? w / (values.length - 1) : 0;
910
+ return values.map((v, i) => `${(i * step).toFixed(1)},${(h - y(v) * h).toFixed(1)}`).join(" ");
911
+ }
912
+ function Spark({ graphic }) {
913
+ const tone = useTone();
914
+ const a = accent("accent", tone.isLight);
915
+ const max = Math.max(1, ...graphic.values);
916
+ const last = graphic.values[graphic.values.length - 1];
917
+ return /* @__PURE__ */ jsxs("figure", { "data-slot": "deck-spark", className: "w-full", children: [
918
+ /* @__PURE__ */ jsxs(
919
+ "figcaption",
920
+ {
921
+ className: cn(
922
+ "flex items-baseline justify-between text-sm",
923
+ tone.muted
924
+ ),
925
+ children: [
926
+ /* @__PURE__ */ jsx("span", { children: graphic.label }),
927
+ /* @__PURE__ */ jsxs("span", { className: cn("text-2xl font-bold tabular-nums", a.text), children: [
928
+ last,
929
+ graphic.suffix
930
+ ] })
931
+ ]
932
+ }
933
+ ),
934
+ /* @__PURE__ */ jsx(
935
+ "svg",
936
+ {
937
+ "aria-hidden": "true",
938
+ viewBox: "0 0 100 30",
939
+ preserveAspectRatio: "none",
940
+ className: "mt-2 h-12 w-full overflow-visible",
941
+ children: /* @__PURE__ */ jsx(
942
+ "polyline",
943
+ {
944
+ points: points(graphic.values, 100, 30, (v) => v / max),
945
+ fill: "none",
946
+ strokeWidth: 2,
947
+ vectorEffect: "non-scaling-stroke",
948
+ className: a.svgStroke
949
+ }
950
+ )
951
+ }
952
+ ),
953
+ /* @__PURE__ */ jsx(
954
+ ChartTable,
955
+ {
956
+ caption: graphic.label,
957
+ headers: ["#", graphic.label],
958
+ rows: graphic.values.map((v, i) => [i + 1, v])
959
+ }
960
+ )
961
+ ] });
962
+ }
963
+ function MultiLine({ graphic }) {
964
+ const tone = useTone();
965
+ const { labels } = useDeck();
966
+ const format = useFormat();
967
+ const [view, setView] = React9.useState("lines");
968
+ const all = graphic.series.flatMap((s) => s.values);
969
+ const log = (graphic.scale ?? "log") === "log";
970
+ const tx = (v) => log ? Math.log10(Math.max(1, v)) : v;
971
+ const lo = Math.min(...all.map(tx));
972
+ const hi = Math.max(...all.map(tx));
973
+ const y = (v) => hi === lo ? 0.5 : (tx(v) - lo) / (hi - lo);
974
+ const colours = graphic.series.map(
975
+ (_, i) => accent(ACCENT_CYCLE[i % ACCENT_CYCLE.length], tone.isLight)
976
+ );
977
+ const toggle = (active) => cn(
978
+ "rounded-full px-3 py-1 text-xs font-semibold transition-colors",
979
+ active ? tone.isLight ? "bg-neutral-900 text-white" : "bg-white text-neutral-900" : cn(tone.muted, "hover:opacity-100")
980
+ );
981
+ return /* @__PURE__ */ jsxs("figure", { "data-slot": "deck-multi-line", className: "w-full", children: [
982
+ /* @__PURE__ */ jsxs(
983
+ "div",
984
+ {
985
+ role: "group",
986
+ "aria-label": graphic.caption,
987
+ className: "mb-3 flex gap-1",
988
+ children: [
989
+ /* @__PURE__ */ jsx(
990
+ "button",
991
+ {
992
+ type: "button",
993
+ "aria-pressed": view === "lines",
994
+ className: toggle(view === "lines"),
995
+ onClick: () => setView("lines"),
996
+ children: labels.lines
997
+ }
998
+ ),
999
+ /* @__PURE__ */ jsx(
1000
+ "button",
1001
+ {
1002
+ type: "button",
1003
+ "aria-pressed": view === "bars",
1004
+ className: toggle(view === "bars"),
1005
+ onClick: () => setView("bars"),
1006
+ children: labels.bars
1007
+ }
1008
+ )
1009
+ ]
1010
+ }
1011
+ ),
1012
+ view === "lines" ? /* @__PURE__ */ jsx(
1013
+ "svg",
1014
+ {
1015
+ "aria-hidden": "true",
1016
+ viewBox: "0 0 100 50",
1017
+ preserveAspectRatio: "none",
1018
+ className: "h-56 w-full overflow-visible",
1019
+ children: graphic.series.map((s, i) => /* @__PURE__ */ jsx(
1020
+ "polyline",
1021
+ {
1022
+ points: points(s.values, 100, 50, y),
1023
+ fill: "none",
1024
+ strokeWidth: 2.5,
1025
+ strokeLinecap: "round",
1026
+ strokeLinejoin: "round",
1027
+ vectorEffect: "non-scaling-stroke",
1028
+ className: colours[i].svgStroke
1029
+ },
1030
+ s.label
1031
+ ))
1032
+ }
1033
+ ) : /* @__PURE__ */ jsx("div", { "aria-hidden": "true", className: "grid gap-4 sm:grid-cols-2", children: graphic.series.map((s, i) => {
1034
+ const max = Math.max(1, ...s.values);
1035
+ return /* @__PURE__ */ jsxs("div", { children: [
1036
+ /* @__PURE__ */ jsx(
1037
+ "p",
1038
+ {
1039
+ className: cn("mb-1 text-xs font-semibold", colours[i].text),
1040
+ children: s.label
1041
+ }
1042
+ ),
1043
+ /* @__PURE__ */ jsx("div", { className: "flex h-20 items-end gap-1", children: s.values.map((v, j) => /* @__PURE__ */ jsx(
1044
+ "div",
1045
+ {
1046
+ className: cn("flex-1 rounded-t-sm", colours[i].fill),
1047
+ style: { height: `${v / max * 100}%` }
1048
+ },
1049
+ j
1050
+ )) })
1051
+ ] }, s.label);
1052
+ }) }),
1053
+ /* @__PURE__ */ jsx(
1054
+ "div",
1055
+ {
1056
+ "aria-hidden": "true",
1057
+ className: cn("mt-2 flex justify-between text-xs", tone.muted),
1058
+ children: graphic.xLabels.map((l) => /* @__PURE__ */ jsx("span", { children: l }, l))
1059
+ }
1060
+ ),
1061
+ /* @__PURE__ */ jsx("ul", { className: "mt-4 flex flex-wrap gap-x-6 gap-y-2 text-sm", children: graphic.series.map((s, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2", children: [
1062
+ /* @__PURE__ */ jsx(
1063
+ "span",
1064
+ {
1065
+ "aria-hidden": "true",
1066
+ className: cn("size-2.5 rounded-full", colours[i].fill)
1067
+ }
1068
+ ),
1069
+ /* @__PURE__ */ jsx("span", { className: "font-medium", children: s.label }),
1070
+ s.summary && /* @__PURE__ */ jsx("span", { className: tone.muted, children: s.summary })
1071
+ ] }, s.label)) }),
1072
+ graphic.caption && /* @__PURE__ */ jsx("figcaption", { className: cn("mt-2 text-xs", tone.muted), children: graphic.caption }),
1073
+ /* @__PURE__ */ jsx(
1074
+ ChartTable,
1075
+ {
1076
+ caption: graphic.caption ?? graphic.series.map((s) => s.label).join(", "),
1077
+ headers: ["", ...graphic.series.map((s) => s.label)],
1078
+ rows: graphic.xLabels.map((x, i) => [
1079
+ x,
1080
+ ...graphic.series.map((s) => format.format(s.values[i] ?? 0))
1081
+ ])
1082
+ }
1083
+ )
1084
+ ] });
1085
+ }
1086
+ function Graphic({ graphic }) {
1087
+ const { graphics } = useDeck();
1088
+ switch (graphic.type) {
1089
+ case "bar":
1090
+ return /* @__PURE__ */ jsx(BarChart, { graphic });
1091
+ case "horizontal-bar":
1092
+ return /* @__PURE__ */ jsx(HorizontalBars, { graphic });
1093
+ case "multi-line":
1094
+ return /* @__PURE__ */ jsx(MultiLine, { graphic });
1095
+ case "kpi-row":
1096
+ return /* @__PURE__ */ jsx(KpiRow, { graphic });
1097
+ case "spark":
1098
+ return /* @__PURE__ */ jsx(Spark, { graphic });
1099
+ case "custom": {
1100
+ const Custom = graphics?.[graphic.component];
1101
+ return Custom ? /* @__PURE__ */ jsx(Custom, { ...graphic.props }) : null;
1102
+ }
1103
+ }
1104
+ }
1105
+ var slideAnchor = (slide, index) => slide.id ?? `slide-${index}`;
1106
+ var widthClass = {
1107
+ sm: "max-w-3xl",
1108
+ md: "max-w-4xl",
1109
+ lg: "max-w-5xl",
1110
+ xl: "max-w-6xl"
1111
+ };
1112
+ function SlideFrame({
1113
+ slide,
1114
+ index,
1115
+ tone: fallback,
1116
+ children,
1117
+ width = "xl",
1118
+ className
1119
+ }) {
1120
+ const { labels } = useDeck();
1121
+ const toneName = slide.tone ?? fallback;
1122
+ const tone = TONES[toneName];
1123
+ const title = "title" in slide ? slide.title : void 0;
1124
+ return /* @__PURE__ */ jsx(ToneContext.Provider, { value: tone, children: /* @__PURE__ */ jsxs(
1125
+ "section",
1126
+ {
1127
+ id: slideAnchor(slide, index),
1128
+ "data-slot": "deck-slide",
1129
+ "data-index": index,
1130
+ "data-tone": toneName,
1131
+ role: "group",
1132
+ "aria-roledescription": labels.slide,
1133
+ "aria-label": slide.navLabel ?? title ?? `${index + 1}`,
1134
+ className: cn(
1135
+ "mie-deck-slide relative isolate flex min-h-dvh w-full snap-start snap-always flex-col items-center justify-center overflow-hidden px-5 py-12 sm:px-8 sm:py-14 md:px-12 lg:px-20",
1136
+ tone.surface,
1137
+ tone.text,
1138
+ className
1139
+ ),
1140
+ children: [
1141
+ !tone.isLight && /* @__PURE__ */ jsxs(
1142
+ "div",
1143
+ {
1144
+ "aria-hidden": "true",
1145
+ className: "pointer-events-none absolute inset-0 -z-10 overflow-hidden print:hidden",
1146
+ children: [
1147
+ /* @__PURE__ */ jsx("div", { className: "bg-accent/15 absolute -end-24 -top-24 size-[28rem] rounded-full blur-3xl" }),
1148
+ /* @__PURE__ */ jsx("div", { className: "bg-primary-500/15 absolute -start-24 -bottom-32 size-[32rem] rounded-full blur-3xl" })
1149
+ ]
1150
+ }
1151
+ ),
1152
+ /* @__PURE__ */ jsx("div", { className: cn("relative w-full", widthClass[width]), children })
1153
+ ]
1154
+ }
1155
+ ) });
1156
+ }
1157
+ var gridCols = (n) => n >= 4 ? "sm:grid-cols-2 lg:grid-cols-4" : n === 3 ? "md:grid-cols-3" : "md:grid-cols-2";
1158
+ function MetricsBody({ slide }) {
1159
+ const tone = useTone();
1160
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1161
+ /* @__PURE__ */ jsx(
1162
+ SlideHeader,
1163
+ {
1164
+ eyebrow: slide.eyebrow,
1165
+ title: slide.title,
1166
+ subtitle: slide.subtitle
1167
+ }
1168
+ ),
1169
+ /* @__PURE__ */ jsx(
1170
+ "div",
1171
+ {
1172
+ className: cn(
1173
+ "mt-10 grid grid-cols-1 gap-5",
1174
+ gridCols(slide.metrics.length)
1175
+ ),
1176
+ children: slide.metrics.map((m, i) => /* @__PURE__ */ jsxs(Card, { i: 3 + i, children: [
1177
+ m.icon && /* @__PURE__ */ jsx("div", { className: "mb-4", children: /* @__PURE__ */ jsx(IconChip, { icon: m.icon, accent: m.accent }) }),
1178
+ /* @__PURE__ */ jsx(
1179
+ "div",
1180
+ {
1181
+ className: cn(
1182
+ "text-4xl font-bold",
1183
+ accent(m.accent, tone.isLight).text
1184
+ ),
1185
+ children: /* @__PURE__ */ jsx(CountUp, { value: m.value })
1186
+ }
1187
+ ),
1188
+ /* @__PURE__ */ jsx("div", { className: "mt-2 text-sm font-semibold", children: m.label }),
1189
+ m.description && /* @__PURE__ */ jsx("div", { className: cn("mt-1 text-sm leading-snug", tone.muted), children: m.description })
1190
+ ] }, m.label))
1191
+ }
1192
+ )
1193
+ ] });
1194
+ }
1195
+ function MetricsRenderer({
1196
+ slide,
1197
+ index
1198
+ }) {
1199
+ return /* @__PURE__ */ jsx(SlideFrame, { slide, index, tone: "brand", children: /* @__PURE__ */ jsx(MetricsBody, { slide }) });
1200
+ }
1201
+ function ChartBody({ slide }) {
1202
+ const tone = useTone();
1203
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1204
+ /* @__PURE__ */ jsx(
1205
+ SlideHeader,
1206
+ {
1207
+ eyebrow: slide.eyebrow,
1208
+ title: slide.title,
1209
+ subtitle: slide.subtitle
1210
+ }
1211
+ ),
1212
+ /* @__PURE__ */ jsx("div", { ...reveal(3), className: "mie-deck-reveal mt-10", children: /* @__PURE__ */ jsx(Graphic, { graphic: slide.graphic }) }),
1213
+ slide.description && /* @__PURE__ */ jsx("p", { className: cn("mt-6 max-w-3xl text-sm", tone.muted), children: slide.description }),
1214
+ slide.source && /* @__PURE__ */ jsx(SourceLink, { source: slide.source, className: "mt-4" })
1215
+ ] });
1216
+ }
1217
+ function ChartRenderer({
1218
+ slide,
1219
+ index
1220
+ }) {
1221
+ return /* @__PURE__ */ jsx(SlideFrame, { slide, index, tone: "deep", children: /* @__PURE__ */ jsx(ChartBody, { slide }) });
1222
+ }
1223
+ function FeatureHighlightBody({
1224
+ slide
1225
+ }) {
1226
+ const tone = useTone();
1227
+ const a = accent("accent", tone.isLight);
1228
+ const hasGraphic = !!slide.graphic;
1229
+ return /* @__PURE__ */ jsxs(
1230
+ "div",
1231
+ {
1232
+ className: cn(hasGraphic && "grid items-center gap-10 lg:grid-cols-2"),
1233
+ children: [
1234
+ /* @__PURE__ */ jsxs("div", { children: [
1235
+ /* @__PURE__ */ jsx(SlideHeader, { eyebrow: slide.eyebrow, title: slide.title }),
1236
+ /* @__PURE__ */ jsx(
1237
+ "p",
1238
+ {
1239
+ ...reveal(2),
1240
+ className: cn(
1241
+ "mie-deck-reveal mt-4 text-lg leading-relaxed",
1242
+ tone.muted
1243
+ ),
1244
+ children: slide.body
1245
+ }
1246
+ ),
1247
+ slide.stat && /* @__PURE__ */ jsxs("div", { ...reveal(3), className: "mie-deck-reveal mt-8", children: [
1248
+ /* @__PURE__ */ jsx("div", { className: cn("text-5xl font-bold", a.text), children: /* @__PURE__ */ jsx(CountUp, { value: slide.stat.value }) }),
1249
+ /* @__PURE__ */ jsx("div", { className: cn("mt-1 text-sm", tone.muted), children: slide.stat.label })
1250
+ ] }),
1251
+ slide.bullets && slide.bullets.length > 0 && /* @__PURE__ */ jsx("ul", { ...reveal(4), className: "mie-deck-reveal mt-6 space-y-2", children: slide.bullets.map((b) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-3", children: [
1252
+ /* @__PURE__ */ jsx(
1253
+ "span",
1254
+ {
1255
+ "aria-hidden": "true",
1256
+ className: cn("mt-2 size-1.5 flex-none rounded-full", a.fill)
1257
+ }
1258
+ ),
1259
+ b
1260
+ ] }, b)) }),
1261
+ slide.pullQuote && /* @__PURE__ */ jsx(
1262
+ "blockquote",
1263
+ {
1264
+ ...reveal(5),
1265
+ className: cn(
1266
+ "mie-deck-reveal mt-8 border-s-2 ps-4 italic",
1267
+ a.border,
1268
+ tone.muted
1269
+ ),
1270
+ children: slide.pullQuote
1271
+ }
1272
+ )
1273
+ ] }),
1274
+ hasGraphic && /* @__PURE__ */ jsxs("div", { ...reveal(3), className: "mie-deck-reveal flex flex-col gap-8", children: [
1275
+ /* @__PURE__ */ jsx(Graphic, { graphic: slide.graphic }),
1276
+ slide.secondaryGraphic && /* @__PURE__ */ jsx(Graphic, { graphic: slide.secondaryGraphic })
1277
+ ] })
1278
+ ]
1279
+ }
1280
+ );
1281
+ }
1282
+ function FeatureHighlightRenderer({
1283
+ slide,
1284
+ index
1285
+ }) {
1286
+ return /* @__PURE__ */ jsx(SlideFrame, { slide, index, tone: "deep", children: /* @__PURE__ */ jsx(FeatureHighlightBody, { slide }) });
1287
+ }
1288
+ function DeckTable({
1289
+ headers,
1290
+ rows
1291
+ }) {
1292
+ const tone = useTone();
1293
+ return /* @__PURE__ */ jsx(
1294
+ "div",
1295
+ {
1296
+ ...reveal(3),
1297
+ className: cn(
1298
+ "mie-deck-reveal mt-10 overflow-x-auto rounded-2xl border",
1299
+ tone.hairline,
1300
+ tone.card
1301
+ ),
1302
+ children: /* @__PURE__ */ jsxs("table", { className: "min-w-full text-start text-sm sm:text-base", children: [
1303
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { className: cn("border-b", tone.hairline), children: headers.map((h, i) => /* @__PURE__ */ jsx(
1304
+ "th",
1305
+ {
1306
+ scope: "col",
1307
+ className: cn(
1308
+ "px-5 py-3 font-semibold",
1309
+ i === 0 ? "text-start" : "text-end",
1310
+ tone.muted
1311
+ ),
1312
+ children: h
1313
+ },
1314
+ h
1315
+ )) }) }),
1316
+ /* @__PURE__ */ jsx("tbody", { children: rows.map((row, r) => /* @__PURE__ */ jsx("tr", { className: cn(r > 0 && "border-t", tone.hairline), children: row.map(
1317
+ (cell, c) => c === 0 ? /* @__PURE__ */ jsx(
1318
+ "th",
1319
+ {
1320
+ scope: "row",
1321
+ className: "px-5 py-3 text-start font-medium",
1322
+ children: cell
1323
+ },
1324
+ c
1325
+ ) : /* @__PURE__ */ jsx("td", { className: "px-5 py-3 text-end tabular-nums", children: cell }, c)
1326
+ ) }, r)) })
1327
+ ] })
1328
+ }
1329
+ );
1330
+ }
1331
+ function ComparisonTableRenderer({
1332
+ slide,
1333
+ index
1334
+ }) {
1335
+ const a = accent("accent", (slide.tone ?? "deep") === "light");
1336
+ const [metric, before, after, change] = slide.headers ?? [
1337
+ "Metric",
1338
+ "Before",
1339
+ "After",
1340
+ "Change"
1341
+ ];
1342
+ return /* @__PURE__ */ jsxs(SlideFrame, { slide, index, tone: "deep", width: "lg", children: [
1343
+ /* @__PURE__ */ jsx(
1344
+ SlideHeader,
1345
+ {
1346
+ eyebrow: slide.eyebrow,
1347
+ title: slide.title,
1348
+ subtitle: slide.subtitle
1349
+ }
1350
+ ),
1351
+ /* @__PURE__ */ jsx(
1352
+ DeckTable,
1353
+ {
1354
+ headers: [metric, before, after, change],
1355
+ rows: slide.rows.map((r) => [
1356
+ r.label,
1357
+ /* @__PURE__ */ jsx("span", { className: "opacity-70", children: r.before }, "b"),
1358
+ r.after,
1359
+ /* @__PURE__ */ jsx("span", { className: cn("font-semibold", a.text), children: r.change }, "c")
1360
+ ])
1361
+ }
1362
+ )
1363
+ ] });
1364
+ }
1365
+ function ImpactTableRenderer({
1366
+ slide,
1367
+ index
1368
+ }) {
1369
+ const [item, impact] = slide.headers ?? ["Investment", "Impact"];
1370
+ return /* @__PURE__ */ jsxs(SlideFrame, { slide, index, tone: "deep", width: "lg", children: [
1371
+ /* @__PURE__ */ jsx(
1372
+ SlideHeader,
1373
+ {
1374
+ eyebrow: slide.eyebrow,
1375
+ title: slide.title,
1376
+ subtitle: slide.subtitle
1377
+ }
1378
+ ),
1379
+ /* @__PURE__ */ jsx(
1380
+ DeckTable,
1381
+ {
1382
+ headers: [item, impact],
1383
+ rows: slide.rows.map((r) => [
1384
+ /* @__PURE__ */ jsxs("span", { children: [
1385
+ r.item,
1386
+ r.detail && /* @__PURE__ */ jsx("span", { className: "block text-sm font-normal opacity-70", children: r.detail })
1387
+ ] }, "i"),
1388
+ /* @__PURE__ */ jsx("span", { className: "block text-start sm:text-end", children: r.impact }, "m")
1389
+ ])
1390
+ }
1391
+ )
1392
+ ] });
1393
+ }
1394
+ function CardsBody({ slide }) {
1395
+ const tone = useTone();
1396
+ const a = accent("accent", tone.isLight);
1397
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1398
+ /* @__PURE__ */ jsx(
1399
+ SlideHeader,
1400
+ {
1401
+ eyebrow: slide.eyebrow,
1402
+ title: slide.title,
1403
+ subtitle: slide.subtitle
1404
+ }
1405
+ ),
1406
+ /* @__PURE__ */ jsx(
1407
+ "div",
1408
+ {
1409
+ className: cn(
1410
+ "mt-10 grid grid-cols-1 gap-5",
1411
+ gridCols(slide.cards.length)
1412
+ ),
1413
+ children: slide.cards.map((card, i) => /* @__PURE__ */ jsxs(Card, { i: 3 + i, children: [
1414
+ card.icon && /* @__PURE__ */ jsx("div", { className: "mb-4", children: /* @__PURE__ */ jsx(IconChip, { icon: card.icon }) }),
1415
+ /* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold", children: card.title }),
1416
+ /* @__PURE__ */ jsx("p", { className: cn("mt-2 leading-relaxed", tone.muted), children: card.body }),
1417
+ card.stat && /* @__PURE__ */ jsxs("div", { className: "mt-6", children: [
1418
+ /* @__PURE__ */ jsx("div", { className: cn("text-3xl font-bold", a.text), children: /* @__PURE__ */ jsx(CountUp, { value: card.stat }) }),
1419
+ card.statLabel && /* @__PURE__ */ jsx("div", { className: cn("text-sm", tone.muted), children: card.statLabel })
1420
+ ] })
1421
+ ] }, card.title))
1422
+ }
1423
+ ),
1424
+ slide.note && /* @__PURE__ */ jsx("p", { className: cn("mt-8 text-sm italic", tone.muted), children: slide.note })
1425
+ ] });
1426
+ }
1427
+ function CardsRenderer({
1428
+ slide,
1429
+ index
1430
+ }) {
1431
+ return /* @__PURE__ */ jsx(SlideFrame, { slide, index, tone: "brand", children: /* @__PURE__ */ jsx(CardsBody, { slide }) });
1432
+ }
1433
+ function RankedListBody({ slide }) {
1434
+ const tone = useTone();
1435
+ const { locale } = useDeck();
1436
+ const a = accent("accent", tone.isLight);
1437
+ const format = new Intl.NumberFormat(locale);
1438
+ const max = Math.max(1, ...slide.entries.map((e) => e.value));
1439
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1440
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-end justify-between gap-4", children: [
1441
+ /* @__PURE__ */ jsx(
1442
+ SlideHeader,
1443
+ {
1444
+ eyebrow: slide.eyebrow,
1445
+ title: slide.title,
1446
+ subtitle: slide.subtitle
1447
+ }
1448
+ ),
1449
+ slide.outOf && /* @__PURE__ */ jsx("p", { className: cn("text-sm", tone.muted), children: slide.outOf })
1450
+ ] }),
1451
+ /* @__PURE__ */ jsx("ol", { className: "mt-8 flex flex-col gap-2", children: slide.entries.map((e, i) => {
1452
+ const r = reveal(3 + i);
1453
+ return /* @__PURE__ */ jsxs(
1454
+ "li",
1455
+ {
1456
+ className: cn(
1457
+ r.className,
1458
+ "grid grid-cols-[2rem_minmax(0,1fr)_auto] items-center gap-4 rounded-xl border px-4 py-3",
1459
+ e.highlighted ? cn(a.soft, a.border) : cn(tone.card, tone.hairline)
1460
+ ),
1461
+ style: r.style,
1462
+ children: [
1463
+ /* @__PURE__ */ jsx(
1464
+ "span",
1465
+ {
1466
+ className: cn(
1467
+ "text-sm font-bold tabular-nums",
1468
+ e.highlighted ? a.text : tone.muted
1469
+ ),
1470
+ children: i + 1
1471
+ }
1472
+ ),
1473
+ /* @__PURE__ */ jsxs("span", { className: "min-w-0", children: [
1474
+ /* @__PURE__ */ jsx("span", { className: "block truncate font-medium", children: e.label }),
1475
+ e.sublabel && /* @__PURE__ */ jsx("span", { className: cn("block truncate text-xs", tone.muted), children: e.sublabel }),
1476
+ /* @__PURE__ */ jsx(
1477
+ "span",
1478
+ {
1479
+ "aria-hidden": "true",
1480
+ className: cn(
1481
+ "mt-2 block h-1.5 overflow-hidden rounded-full",
1482
+ tone.isLight ? "bg-neutral-200" : "bg-white/10"
1483
+ ),
1484
+ children: /* @__PURE__ */ jsx(
1485
+ "span",
1486
+ {
1487
+ className: cn(
1488
+ "block h-full rounded-full",
1489
+ e.highlighted ? a.fill : tone.isLight ? "bg-neutral-400" : "bg-white/40"
1490
+ ),
1491
+ style: { width: `${e.value / max * 100}%` }
1492
+ }
1493
+ )
1494
+ }
1495
+ )
1496
+ ] }),
1497
+ /* @__PURE__ */ jsxs("span", { className: "text-end", children: [
1498
+ /* @__PURE__ */ jsx("span", { className: "block font-semibold tabular-nums", children: e.display ?? format.format(e.value) }),
1499
+ e.secondary && /* @__PURE__ */ jsx("span", { className: cn("block text-xs", tone.muted), children: e.secondary }),
1500
+ e.change != null && e.change !== 0 && /* @__PURE__ */ jsxs(
1501
+ "span",
1502
+ {
1503
+ className: cn(
1504
+ "inline-flex items-center text-xs font-semibold",
1505
+ e.change > 0 ? "text-success" : "text-destructive"
1506
+ ),
1507
+ children: [
1508
+ e.change > 0 ? /* @__PURE__ */ jsx(ArrowUp, { "aria-hidden": "true", className: "size-3" }) : /* @__PURE__ */ jsx(ArrowDown, { "aria-hidden": "true", className: "size-3" }),
1509
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: e.change > 0 ? "+" : "\u2212" }),
1510
+ Math.abs(e.change)
1511
+ ]
1512
+ }
1513
+ )
1514
+ ] })
1515
+ ]
1516
+ },
1517
+ e.label
1518
+ );
1519
+ }) }),
1520
+ slide.source && /* @__PURE__ */ jsx(SourceLink, { source: slide.source, className: "mt-4" })
1521
+ ] });
1522
+ }
1523
+ function RankedListRenderer({
1524
+ slide,
1525
+ index
1526
+ }) {
1527
+ return /* @__PURE__ */ jsx(SlideFrame, { slide, index, tone: "deep", width: "lg", children: /* @__PURE__ */ jsx(RankedListBody, { slide }) });
1528
+ }
1529
+ function BreakdownRenderer({
1530
+ slide,
1531
+ index
1532
+ }) {
1533
+ return /* @__PURE__ */ jsx(SlideFrame, { slide, index, tone: "deep", children: /* @__PURE__ */ jsx(BreakdownBody, { slide }) });
1534
+ }
1535
+ function BreakdownBody({ slide }) {
1536
+ const tone = useTone();
1537
+ const a = accent("accent", tone.isLight);
1538
+ const total = slide.breakdown?.reduce((s, b) => s + b.count, 0) || 1;
1539
+ return /* @__PURE__ */ jsxs("div", { className: "grid gap-10 lg:grid-cols-2", children: [
1540
+ /* @__PURE__ */ jsxs("div", { children: [
1541
+ /* @__PURE__ */ jsx(SlideHeader, { eyebrow: slide.eyebrow, title: slide.title }),
1542
+ slide.body && /* @__PURE__ */ jsx(
1543
+ "p",
1544
+ {
1545
+ ...reveal(2),
1546
+ className: cn(
1547
+ "mie-deck-reveal mt-4 text-lg leading-relaxed",
1548
+ tone.muted
1549
+ ),
1550
+ children: slide.body
1551
+ }
1552
+ ),
1553
+ slide.callout && /* @__PURE__ */ jsxs(
1554
+ "div",
1555
+ {
1556
+ ...reveal(3),
1557
+ className: cn(
1558
+ "mie-deck-reveal mt-8 inline-flex items-baseline gap-3 rounded-2xl border px-5 py-3",
1559
+ a.soft,
1560
+ a.border
1561
+ ),
1562
+ children: [
1563
+ /* @__PURE__ */ jsx("span", { className: cn("text-4xl font-bold", a.text), children: /* @__PURE__ */ jsx(CountUp, { value: slide.callout.value }) }),
1564
+ /* @__PURE__ */ jsx("span", { className: "text-sm", children: slide.callout.label })
1565
+ ]
1566
+ }
1567
+ ),
1568
+ slide.talkingPoint && /* @__PURE__ */ jsxs("p", { className: cn("mt-6 text-sm italic", tone.muted), children: [
1569
+ "\u201C",
1570
+ slide.talkingPoint,
1571
+ "\u201D"
1572
+ ] }),
1573
+ slide.pullQuote && /* @__PURE__ */ jsx(
1574
+ "blockquote",
1575
+ {
1576
+ className: cn(
1577
+ "mt-6 border-s-2 ps-4 text-lg font-semibold",
1578
+ a.border
1579
+ ),
1580
+ children: slide.pullQuote
1581
+ }
1582
+ )
1583
+ ] }),
1584
+ /* @__PURE__ */ jsxs("div", { ...reveal(3), className: "mie-deck-reveal flex flex-col gap-8", children: [
1585
+ slide.series && /* @__PURE__ */ jsx(Graphic, { graphic: slide.series }),
1586
+ slide.breakdown && slide.breakdown.length > 0 && /* @__PURE__ */ jsx("ul", { className: "space-y-2", children: slide.breakdown.map((b) => /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-3 text-sm", children: [
1587
+ /* @__PURE__ */ jsx("span", { className: "w-36 flex-none truncate", children: b.label }),
1588
+ /* @__PURE__ */ jsx(
1589
+ "span",
1590
+ {
1591
+ "aria-hidden": "true",
1592
+ className: cn(
1593
+ "h-2 flex-1 overflow-hidden rounded-full",
1594
+ tone.isLight ? "bg-neutral-200" : "bg-white/10"
1595
+ ),
1596
+ children: /* @__PURE__ */ jsx(
1597
+ "span",
1598
+ {
1599
+ className: cn("block h-full rounded-full", a.fill),
1600
+ style: { width: `${b.count / total * 100}%` }
1601
+ }
1602
+ )
1603
+ }
1604
+ ),
1605
+ /* @__PURE__ */ jsx("span", { className: "w-10 flex-none text-end font-semibold tabular-nums", children: b.count })
1606
+ ] }, b.label)) }),
1607
+ slide.entries && slide.entries.length > 0 && /* @__PURE__ */ jsx(
1608
+ "ul",
1609
+ {
1610
+ className: cn(
1611
+ "max-h-64 divide-y overflow-y-auto rounded-xl border",
1612
+ tone.hairline,
1613
+ tone.card
1614
+ ),
1615
+ children: slide.entries.map((e) => /* @__PURE__ */ jsxs(
1616
+ "li",
1617
+ {
1618
+ className: cn(
1619
+ "flex items-center justify-between gap-3 px-4 py-2 text-sm",
1620
+ tone.hairline
1621
+ ),
1622
+ children: [
1623
+ /* @__PURE__ */ jsxs("span", { className: "min-w-0", children: [
1624
+ /* @__PURE__ */ jsx("span", { className: "block truncate font-medium", children: e.title }),
1625
+ e.meta && /* @__PURE__ */ jsx("span", { className: cn("block truncate text-xs", tone.muted), children: e.meta })
1626
+ ] }),
1627
+ e.date && /* @__PURE__ */ jsx(
1628
+ "span",
1629
+ {
1630
+ className: cn("flex-none text-xs tabular-nums", tone.muted),
1631
+ children: e.date
1632
+ }
1633
+ )
1634
+ ]
1635
+ },
1636
+ `${e.title}-${e.date ?? ""}`
1637
+ ))
1638
+ }
1639
+ )
1640
+ ] })
1641
+ ] });
1642
+ }
1643
+ function TabsRenderer({ slide, index }) {
1644
+ const [active, setActive] = React9.useState(0);
1645
+ const baseId = React9.useId();
1646
+ const tabs = React9.useRef([]);
1647
+ const current = slide.tabs[active]?.slide;
1648
+ const onKey = (e) => {
1649
+ const n = slide.tabs.length;
1650
+ let key = e.key;
1651
+ if (isRtl(e.currentTarget)) {
1652
+ if (key === "ArrowRight") key = "ArrowLeft";
1653
+ else if (key === "ArrowLeft") key = "ArrowRight";
1654
+ }
1655
+ const next = key === "ArrowRight" ? (active + 1) % n : key === "ArrowLeft" ? (active - 1 + n) % n : key === "Home" ? 0 : key === "End" ? n - 1 : -1;
1656
+ if (next < 0) return;
1657
+ e.preventDefault();
1658
+ e.stopPropagation();
1659
+ setActive(next);
1660
+ tabs.current[next]?.focus();
1661
+ };
1662
+ return /* @__PURE__ */ jsxs(SlideFrame, { slide, index, tone: "deep", children: [
1663
+ /* @__PURE__ */ jsx(SlideHeader, { eyebrow: slide.eyebrow, title: slide.title }),
1664
+ /* @__PURE__ */ jsx(
1665
+ "div",
1666
+ {
1667
+ role: "tablist",
1668
+ "aria-label": slide.title,
1669
+ className: "mt-6 flex flex-wrap gap-2",
1670
+ children: slide.tabs.map((tab, i) => /* @__PURE__ */ jsx(
1671
+ TabButton,
1672
+ {
1673
+ ref: (el) => {
1674
+ tabs.current[i] = el;
1675
+ },
1676
+ id: `${baseId}-tab-${i}`,
1677
+ panelId: `${baseId}-panel`,
1678
+ selected: i === active,
1679
+ icon: tab.icon,
1680
+ onClick: () => setActive(i),
1681
+ onKeyDown: onKey,
1682
+ children: tab.label
1683
+ },
1684
+ tab.label
1685
+ ))
1686
+ }
1687
+ ),
1688
+ /* @__PURE__ */ jsxs(
1689
+ "div",
1690
+ {
1691
+ role: "tabpanel",
1692
+ id: `${baseId}-panel`,
1693
+ "aria-labelledby": `${baseId}-tab-${active}`,
1694
+ className: "mt-8",
1695
+ children: [
1696
+ current?.type === "metrics" && /* @__PURE__ */ jsx(MetricsBody, { slide: current }),
1697
+ current?.type === "chart" && /* @__PURE__ */ jsx(ChartBody, { slide: current }),
1698
+ current?.type === "feature-highlight" && /* @__PURE__ */ jsx(FeatureHighlightBody, { slide: current }),
1699
+ current?.type === "cards" && /* @__PURE__ */ jsx(CardsBody, { slide: current }),
1700
+ current?.type === "ranked-list" && /* @__PURE__ */ jsx(RankedListBody, { slide: current })
1701
+ ]
1702
+ }
1703
+ )
1704
+ ] });
1705
+ }
1706
+ var TabButton = React9.forwardRef(({ id, panelId, selected, icon, onClick, onKeyDown, children }, ref) => {
1707
+ const tone = useTone();
1708
+ return /* @__PURE__ */ jsxs(
1709
+ "button",
1710
+ {
1711
+ ref,
1712
+ type: "button",
1713
+ role: "tab",
1714
+ id,
1715
+ "aria-selected": selected,
1716
+ "aria-controls": panelId,
1717
+ tabIndex: selected ? 0 : -1,
1718
+ onClick,
1719
+ onKeyDown,
1720
+ className: cn(
1721
+ "inline-flex items-center gap-2 rounded-full border px-4 py-1.5 text-sm font-semibold transition-colors",
1722
+ selected ? tone.isLight ? "border-neutral-900 bg-neutral-900 text-white" : "border-white bg-white text-neutral-900" : cn(
1723
+ tone.hairline,
1724
+ tone.muted,
1725
+ tone.isLight ? "hover:bg-neutral-100" : "hover:bg-white/10"
1726
+ )
1727
+ ),
1728
+ children: [
1729
+ icon && /* @__PURE__ */ jsx(DeckIcon, { name: icon, className: "size-4" }),
1730
+ children
1731
+ ]
1732
+ }
1733
+ );
1734
+ });
1735
+ TabButton.displayName = "TabButton";
1736
+ function CycleRenderer({
1737
+ slide,
1738
+ index
1739
+ }) {
1740
+ const tone = toneOf(slide, "deep");
1741
+ const n = slide.nodes.length;
1742
+ return /* @__PURE__ */ jsx(SlideFrame, { slide, index, tone: "deep", children: /* @__PURE__ */ jsxs("div", { className: "grid items-center gap-10 lg:grid-cols-2", children: [
1743
+ /* @__PURE__ */ jsxs("div", { children: [
1744
+ slide.eyebrow && /* @__PURE__ */ jsx(Eyebrow, { children: slide.eyebrow }),
1745
+ /* @__PURE__ */ jsx(SlideTitle, { children: slide.title }),
1746
+ slide.body && /* @__PURE__ */ jsx(
1747
+ "p",
1748
+ {
1749
+ ...reveal(2),
1750
+ className: cn(
1751
+ "mie-deck-reveal mt-6 text-lg leading-relaxed",
1752
+ tone.muted
1753
+ ),
1754
+ children: slide.body
1755
+ }
1756
+ ),
1757
+ slide.talkingPoint && /* @__PURE__ */ jsxs("p", { className: cn("mt-6 italic", tone.muted), children: [
1758
+ "\u201C",
1759
+ slide.talkingPoint,
1760
+ "\u201D"
1761
+ ] })
1762
+ ] }),
1763
+ /* @__PURE__ */ jsx(CycleWheel, { nodes: slide.nodes, n })
1764
+ ] }) });
1765
+ }
1766
+ function CycleWheel({ nodes, n }) {
1767
+ const tone = useTone();
1768
+ const a = accent("accent", tone.isLight);
1769
+ return /* @__PURE__ */ jsxs(
1770
+ "ol",
1771
+ {
1772
+ ...reveal(3),
1773
+ className: "mie-deck-reveal relative mx-auto aspect-square w-64 sm:w-80 md:w-96",
1774
+ children: [
1775
+ /* @__PURE__ */ jsxs(
1776
+ "svg",
1777
+ {
1778
+ "aria-hidden": "true",
1779
+ viewBox: "0 0 400 400",
1780
+ className: "mie-deck-spin absolute inset-0 size-full",
1781
+ children: [
1782
+ /* @__PURE__ */ jsx(
1783
+ "circle",
1784
+ {
1785
+ cx: "200",
1786
+ cy: "200",
1787
+ r: "150",
1788
+ fill: "none",
1789
+ strokeWidth: "2",
1790
+ className: tone.isLight ? "stroke-neutral-200" : "stroke-white/10"
1791
+ }
1792
+ ),
1793
+ /* @__PURE__ */ jsx(
1794
+ "circle",
1795
+ {
1796
+ cx: "200",
1797
+ cy: "200",
1798
+ r: "150",
1799
+ fill: "none",
1800
+ strokeWidth: "2",
1801
+ strokeDasharray: "50 200",
1802
+ strokeLinecap: "round",
1803
+ className: a.svgStroke
1804
+ }
1805
+ ),
1806
+ nodes.map((_, i) => /* @__PURE__ */ jsx(
1807
+ "polygon",
1808
+ {
1809
+ points: "200,47 207,60 193,60",
1810
+ transform: `rotate(${360 / n * i + 180 / n} 200 200)`,
1811
+ className: a.svgFill,
1812
+ opacity: 0.8
1813
+ },
1814
+ i
1815
+ ))
1816
+ ]
1817
+ }
1818
+ ),
1819
+ nodes.map((node, i) => {
1820
+ const angle = 2 * Math.PI * i / n - Math.PI / 2;
1821
+ return /* @__PURE__ */ jsxs(
1822
+ "li",
1823
+ {
1824
+ className: cn(
1825
+ "absolute z-10 w-28 -translate-x-1/2 -translate-y-1/2 rounded-xl border px-3 py-2 text-center shadow-lg backdrop-blur sm:w-32",
1826
+ tone.hairline,
1827
+ tone.isLight ? "bg-white" : "bg-neutral-900/90"
1828
+ ),
1829
+ style: {
1830
+ // rtl-ignore -- orbit nodes use trig coordinates; diagram stays LTR
1831
+ left: `${50 + 37.5 * Math.cos(angle)}%`,
1832
+ top: `${50 + 37.5 * Math.sin(angle)}%`
1833
+ },
1834
+ children: [
1835
+ node.icon && /* @__PURE__ */ jsx(
1836
+ DeckIcon,
1837
+ {
1838
+ name: node.icon,
1839
+ className: cn("mx-auto mb-1 size-4", a.text)
1840
+ }
1841
+ ),
1842
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-bold sm:text-sm", children: node.label }),
1843
+ node.metric && /* @__PURE__ */ jsx("p", { className: cn("text-sm font-bold sm:text-lg", a.text), children: node.metric })
1844
+ ]
1845
+ },
1846
+ node.label
1847
+ );
1848
+ })
1849
+ ]
1850
+ }
1851
+ );
1852
+ }
1853
+ function RoadmapRenderer({
1854
+ slide,
1855
+ index
1856
+ }) {
1857
+ const { labels } = useDeck();
1858
+ const tone = toneOf(slide, "ink");
1859
+ const a = accent("accent", tone.isLight);
1860
+ const status = {
1861
+ now: labels.statusNow,
1862
+ next: labels.statusNext,
1863
+ later: labels.statusLater
1864
+ };
1865
+ const statusTag = {
1866
+ now: cn(a.soft, a.border, a.text),
1867
+ next: cn(
1868
+ accent("primary", tone.isLight).soft,
1869
+ accent("primary", tone.isLight).border,
1870
+ accent("primary", tone.isLight).text
1871
+ ),
1872
+ later: cn(tone.hairline, tone.muted)
1873
+ };
1874
+ return /* @__PURE__ */ jsxs(SlideFrame, { slide, index, tone: "ink", children: [
1875
+ /* @__PURE__ */ jsx(
1876
+ SlideHeader,
1877
+ {
1878
+ eyebrow: slide.eyebrow,
1879
+ title: slide.title,
1880
+ subtitle: slide.subtitle
1881
+ }
1882
+ ),
1883
+ /* @__PURE__ */ jsx(
1884
+ "ol",
1885
+ {
1886
+ className: cn(
1887
+ "relative mt-10 flex flex-col gap-6 border-s ps-8",
1888
+ a.border
1889
+ ),
1890
+ children: slide.items.map((item, i) => {
1891
+ const r = reveal(3 + i);
1892
+ return /* @__PURE__ */ jsxs(
1893
+ "li",
1894
+ {
1895
+ className: cn(r.className, "relative"),
1896
+ style: r.style,
1897
+ children: [
1898
+ /* @__PURE__ */ jsx(
1899
+ "span",
1900
+ {
1901
+ "aria-hidden": "true",
1902
+ className: cn(
1903
+ "absolute -start-[2.35rem] top-1.5 flex size-4 items-center justify-center rounded-full border-2",
1904
+ a.border,
1905
+ tone.isLight ? "bg-white" : "bg-neutral-950"
1906
+ ),
1907
+ children: /* @__PURE__ */ jsx("span", { className: cn("size-1.5 rounded-full", a.fill) })
1908
+ }
1909
+ ),
1910
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
1911
+ item.icon && /* @__PURE__ */ jsx(
1912
+ IconChip,
1913
+ {
1914
+ icon: item.icon,
1915
+ accent: item.status === "later" ? "primary" : "accent"
1916
+ }
1917
+ ),
1918
+ /* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold sm:text-xl", children: item.title }),
1919
+ item.status && /* @__PURE__ */ jsx(
1920
+ "span",
1921
+ {
1922
+ className: cn(
1923
+ "rounded-full border px-2.5 py-0.5 text-[0.65rem] font-semibold tracking-wider uppercase",
1924
+ statusTag[item.status]
1925
+ ),
1926
+ children: status[item.status]
1927
+ }
1928
+ )
1929
+ ] }),
1930
+ item.children && item.children.length > 0 && /* @__PURE__ */ jsx("ul", { className: "mt-2 flex flex-wrap gap-x-6 gap-y-1.5", children: item.children.map((child) => /* @__PURE__ */ jsxs(
1931
+ "li",
1932
+ {
1933
+ className: cn(
1934
+ "flex items-center gap-2 text-sm",
1935
+ tone.muted
1936
+ ),
1937
+ children: [
1938
+ /* @__PURE__ */ jsx(
1939
+ "span",
1940
+ {
1941
+ "aria-hidden": "true",
1942
+ className: "size-1 rounded-full bg-current"
1943
+ }
1944
+ ),
1945
+ child
1946
+ ]
1947
+ },
1948
+ child
1949
+ )) })
1950
+ ]
1951
+ },
1952
+ item.title
1953
+ );
1954
+ })
1955
+ }
1956
+ )
1957
+ ] });
1958
+ }
1959
+ var BASE = 50;
1960
+ var PEAK = 6;
1961
+ var SIGMA = 15;
1962
+ var gaussY = (x) => BASE - (BASE - PEAK) * Math.exp(-((x - 50) ** 2) / (2 * SIGMA * SIGMA));
1963
+ function AdoptionCurveRenderer({
1964
+ slide,
1965
+ index
1966
+ }) {
1967
+ const tone = toneOf(slide, "ink");
1968
+ const clipId = React9.useId();
1969
+ const pts = [];
1970
+ for (let x = 0; x <= 100; x += 1.5) pts.push(`${x},${gaussY(x).toFixed(2)}`);
1971
+ const area = `M 0,${BASE} L ${pts.join(" L ")} L 100,${BASE} Z`;
1972
+ const values = slide.segments.map((s) => parseFloat(s.pct) || 0);
1973
+ const sum = values.reduce((x, y) => x + y, 0) || 1;
1974
+ const widths = values.map((v) => v / sum * 100);
1975
+ const bands = slide.segments.map((s, i) => ({
1976
+ ...s,
1977
+ x0: widths.slice(0, i).reduce((x, y) => x + y, 0),
1978
+ w: widths[i],
1979
+ spec: accent(
1980
+ s.accent ?? ACCENT_CYCLE[i % ACCENT_CYCLE.length],
1981
+ tone.isLight
1982
+ )
1983
+ }));
1984
+ const hi = accent("accent", tone.isLight);
1985
+ return /* @__PURE__ */ jsxs(SlideFrame, { slide, index, tone: "ink", width: "lg", children: [
1986
+ /* @__PURE__ */ jsx(
1987
+ SlideHeader,
1988
+ {
1989
+ eyebrow: slide.eyebrow,
1990
+ title: slide.title,
1991
+ subtitle: slide.subtitle
1992
+ }
1993
+ ),
1994
+ /* @__PURE__ */ jsxs("div", { ...reveal(3), className: "mie-deck-reveal relative mt-8 pb-10", children: [
1995
+ slide.annotations?.map((note) => /* @__PURE__ */ jsx(
1996
+ "span",
1997
+ {
1998
+ className: cn(
1999
+ "absolute z-20 w-40 max-w-[42vw] -translate-x-1/2 rounded-lg border px-3 py-1.5 text-center text-xs leading-snug font-semibold",
2000
+ note.emphasis ? cn(hi.soft, hi.border, hi.text) : cn(tone.hairline, tone.card)
2001
+ ),
2002
+ style: {
2003
+ // rtl-ignore -- annotation anchored to LTR timeline axis coordinates
2004
+ left: `${note.atPct}%`,
2005
+ [note.side === "bottom" ? "bottom" : "top"]: 0
2006
+ },
2007
+ children: note.text
2008
+ },
2009
+ note.text
2010
+ )),
2011
+ /* @__PURE__ */ jsx("div", { className: "h-[clamp(180px,30vh,300px)] w-full", children: /* @__PURE__ */ jsxs(
2012
+ "svg",
2013
+ {
2014
+ viewBox: "0 0 100 56",
2015
+ preserveAspectRatio: "none",
2016
+ className: "size-full overflow-visible",
2017
+ role: "img",
2018
+ "aria-label": slide.segments.map((s) => `${s.label} ${s.pct}`).join(", "),
2019
+ children: [
2020
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("clipPath", { id: clipId, children: /* @__PURE__ */ jsx("path", { d: area }) }) }),
2021
+ /* @__PURE__ */ jsx("g", { clipPath: `url(#${clipId})`, children: bands.map((b) => /* @__PURE__ */ jsx(
2022
+ "rect",
2023
+ {
2024
+ x: b.x0,
2025
+ y: 0,
2026
+ width: b.w,
2027
+ height: BASE,
2028
+ className: b.spec.svgFill,
2029
+ opacity: 0.8
2030
+ },
2031
+ b.label
2032
+ )) }),
2033
+ /* @__PURE__ */ jsx(
2034
+ "path",
2035
+ {
2036
+ d: `M ${pts.join(" L ")}`,
2037
+ fill: "none",
2038
+ strokeWidth: 1,
2039
+ vectorEffect: "non-scaling-stroke",
2040
+ className: tone.isLight ? "stroke-neutral-900" : "stroke-white"
2041
+ }
2042
+ ),
2043
+ /* @__PURE__ */ jsx(
2044
+ "line",
2045
+ {
2046
+ x1: 0,
2047
+ y1: BASE,
2048
+ x2: 100,
2049
+ y2: BASE,
2050
+ strokeWidth: 0.5,
2051
+ vectorEffect: "non-scaling-stroke",
2052
+ className: tone.isLight ? "stroke-neutral-400" : "stroke-white/25"
2053
+ }
2054
+ )
2055
+ ]
2056
+ }
2057
+ ) }),
2058
+ /* @__PURE__ */ jsx("div", { "aria-hidden": "true", dir: "ltr", className: "mt-2 flex w-full", children: bands.map((b) => /* @__PURE__ */ jsxs(
2059
+ "div",
2060
+ {
2061
+ className: "min-w-0 px-1 text-center",
2062
+ style: { flexBasis: `${b.w}%` },
2063
+ children: [
2064
+ /* @__PURE__ */ jsx(
2065
+ "div",
2066
+ {
2067
+ className: cn("text-sm font-bold sm:text-base", b.spec.text),
2068
+ children: b.pct
2069
+ }
2070
+ ),
2071
+ /* @__PURE__ */ jsx(
2072
+ "div",
2073
+ {
2074
+ className: cn(
2075
+ "truncate text-[0.7rem] tracking-wide uppercase sm:text-xs",
2076
+ tone.muted
2077
+ ),
2078
+ children: b.label
2079
+ }
2080
+ )
2081
+ ]
2082
+ },
2083
+ b.label
2084
+ )) }),
2085
+ slide.marker && /* @__PURE__ */ jsxs(
2086
+ "div",
2087
+ {
2088
+ className: "absolute bottom-0 z-20 -translate-x-1/2 text-center",
2089
+ style: { left: `${slide.marker.atPct}%` },
2090
+ children: [
2091
+ /* @__PURE__ */ jsx(
2092
+ "div",
2093
+ {
2094
+ "aria-hidden": "true",
2095
+ className: cn("mx-auto h-4 w-px", hi.fill)
2096
+ }
2097
+ ),
2098
+ /* @__PURE__ */ jsx(
2099
+ "span",
2100
+ {
2101
+ className: cn(
2102
+ "mt-1 inline-block rounded-full border px-2.5 py-0.5 text-[0.65rem] font-semibold tracking-wide uppercase",
2103
+ hi.soft,
2104
+ hi.border,
2105
+ hi.text
2106
+ ),
2107
+ children: slide.marker.label
2108
+ }
2109
+ )
2110
+ ]
2111
+ }
2112
+ )
2113
+ ] }),
2114
+ slide.source && /* @__PURE__ */ jsx(SourceLink, { source: slide.source, className: "mt-4" })
2115
+ ] });
2116
+ }
2117
+ function DiagramRenderer({
2118
+ slide,
2119
+ index
2120
+ }) {
2121
+ const { components } = useDeck();
2122
+ const tone = toneOf(slide, "deep");
2123
+ const center = new Map(slide.nodes.map((n) => [n.id, n]));
2124
+ const left = slide.callouts?.filter((c) => c.side === "left") ?? [];
2125
+ const right = slide.callouts?.filter((c) => c.side === "right") ?? [];
2126
+ const cols = left.length && right.length ? "lg:grid-cols-[minmax(0,1fr)_minmax(0,2.4fr)_minmax(0,1fr)]" : right.length ? "lg:grid-cols-[minmax(0,2.7fr)_minmax(0,1.25fr)]" : left.length ? "lg:grid-cols-[minmax(0,1.25fr)_minmax(0,2.7fr)]" : "";
2127
+ const stageBg = tone.isLight ? "bg-white" : "bg-neutral-900";
2128
+ return /* @__PURE__ */ jsxs(SlideFrame, { slide, index, tone: "deep", children: [
2129
+ /* @__PURE__ */ jsx(
2130
+ SlideHeader,
2131
+ {
2132
+ eyebrow: slide.eyebrow,
2133
+ title: slide.title,
2134
+ subtitle: slide.subtitle
2135
+ }
2136
+ ),
2137
+ /* @__PURE__ */ jsxs("div", { className: cn("mt-8", cols && cn("grid items-center gap-6", cols)), children: [
2138
+ left.length > 0 && /* @__PURE__ */ jsx(Callouts, { callouts: left, end: true }),
2139
+ /* @__PURE__ */ jsxs(
2140
+ "div",
2141
+ {
2142
+ ...reveal(3),
2143
+ className: "mie-deck-reveal relative mx-auto h-[clamp(260px,40vh,440px)] w-full max-w-3xl",
2144
+ children: [
2145
+ slide.boundaries?.map((b) => {
2146
+ const xs = b.nodes.map((id) => center.get(id)?.x ?? 50);
2147
+ const ys = b.nodes.map((id) => center.get(id)?.y ?? 50);
2148
+ const l = Math.min(...xs) - 13;
2149
+ const t = Math.min(...ys) - 17;
2150
+ const spec = accent(b.accent ?? "primary", tone.isLight);
2151
+ return /* @__PURE__ */ jsx(
2152
+ "div",
2153
+ {
2154
+ className: cn(
2155
+ "absolute rounded-2xl border border-dashed",
2156
+ tone.hairline
2157
+ ),
2158
+ style: {
2159
+ // rtl-ignore -- group outline shares the SVG edge coordinate space
2160
+ left: `${l}%`,
2161
+ top: `${t}%`,
2162
+ width: `${Math.max(...xs) + 13 - l}%`,
2163
+ height: `${Math.max(...ys) + 17 - t}%`
2164
+ },
2165
+ children: /* @__PURE__ */ jsx(
2166
+ "span",
2167
+ {
2168
+ className: cn(
2169
+ "absolute start-4 -top-3 rounded-full border px-2.5 py-0.5 text-[0.6rem] font-semibold tracking-wide uppercase",
2170
+ stageBg,
2171
+ spec.border,
2172
+ spec.text
2173
+ ),
2174
+ children: b.label
2175
+ }
2176
+ )
2177
+ },
2178
+ b.label
2179
+ );
2180
+ }),
2181
+ /* @__PURE__ */ jsx(
2182
+ "svg",
2183
+ {
2184
+ "aria-hidden": "true",
2185
+ viewBox: "0 0 100 100",
2186
+ preserveAspectRatio: "none",
2187
+ className: "absolute inset-0 size-full",
2188
+ children: slide.edges.map((e) => {
2189
+ const a = center.get(e.from);
2190
+ const b = center.get(e.to);
2191
+ if (!a || !b) return null;
2192
+ return /* @__PURE__ */ jsx(
2193
+ "line",
2194
+ {
2195
+ x1: a.x,
2196
+ y1: a.y,
2197
+ x2: b.x,
2198
+ y2: b.y,
2199
+ strokeWidth: 1.2,
2200
+ strokeDasharray: e.dashed ? "4 3" : void 0,
2201
+ vectorEffect: "non-scaling-stroke",
2202
+ className: e.accent ? accent(e.accent, tone.isLight).svgStroke : tone.isLight ? "stroke-neutral-400" : "stroke-white/30"
2203
+ },
2204
+ `${e.from}-${e.to}`
2205
+ );
2206
+ })
2207
+ }
2208
+ ),
2209
+ slide.edges.map((e, i) => {
2210
+ const a = center.get(e.from);
2211
+ const b = center.get(e.to);
2212
+ if (!a || !b || !e.flow) return null;
2213
+ return /* @__PURE__ */ jsx(
2214
+ "span",
2215
+ {
2216
+ "aria-hidden": "true",
2217
+ className: cn(
2218
+ "mie-deck-flow absolute size-2 -translate-x-1/2 -translate-y-1/2 rounded-full",
2219
+ accent(e.accent ?? "accent", tone.isLight).fill
2220
+ ),
2221
+ style: {
2222
+ "--mie-from-x": `${a.x}%`,
2223
+ "--mie-from-y": `${a.y}%`,
2224
+ "--mie-to-x": `${b.x}%`,
2225
+ "--mie-to-y": `${b.y}%`,
2226
+ animationDelay: `${i * 0.5}s`
2227
+ }
2228
+ },
2229
+ `flow-${e.from}-${e.to}`
2230
+ );
2231
+ }),
2232
+ slide.edges.map((e) => {
2233
+ const a = center.get(e.from);
2234
+ const b = center.get(e.to);
2235
+ if (!a || !b || !e.label) return null;
2236
+ const at = e.labelAt ?? 0.5;
2237
+ return /* @__PURE__ */ jsx(
2238
+ "span",
2239
+ {
2240
+ className: cn(
2241
+ "absolute z-10 -translate-x-1/2 -translate-y-1/2 rounded-md border px-1.5 py-0.5 text-[0.6rem] font-medium whitespace-nowrap",
2242
+ stageBg,
2243
+ tone.hairline,
2244
+ tone.muted
2245
+ ),
2246
+ style: {
2247
+ // rtl-ignore -- edge label interpolated in the SVG line coordinate space
2248
+ left: `${a.x + (b.x - a.x) * at}%`,
2249
+ top: `${a.y + (b.y - a.y) * at}%`
2250
+ },
2251
+ children: e.label
2252
+ },
2253
+ `label-${e.from}-${e.to}`
2254
+ );
2255
+ }),
2256
+ slide.nodes.map((node) => {
2257
+ const spec = accent(node.accent ?? "primary", tone.isLight);
2258
+ return /* @__PURE__ */ jsx(
2259
+ "div",
2260
+ {
2261
+ className: "absolute z-[5] -translate-x-1/2 -translate-y-1/2",
2262
+ style: {
2263
+ // rtl-ignore -- node positioned in the SVG edge coordinate space
2264
+ left: `${node.x}%`,
2265
+ top: `${node.y}%`,
2266
+ width: `${node.w ?? 20}%`
2267
+ },
2268
+ children: /* @__PURE__ */ jsxs(
2269
+ "div",
2270
+ {
2271
+ className: cn(
2272
+ "flex flex-col items-center gap-1.5 rounded-xl border px-2 py-3 text-center shadow-lg",
2273
+ stageBg,
2274
+ spec.border
2275
+ ),
2276
+ children: [
2277
+ node.image ? /* @__PURE__ */ jsx(
2278
+ TemplateImg,
2279
+ {
2280
+ ...node.image,
2281
+ components,
2282
+ className: "h-7 w-auto object-contain sm:h-9"
2283
+ }
2284
+ ) : node.icon && /* @__PURE__ */ jsx(
2285
+ DeckIcon,
2286
+ {
2287
+ name: node.icon,
2288
+ className: cn("size-5 sm:size-6", spec.text)
2289
+ }
2290
+ ),
2291
+ /* @__PURE__ */ jsx("span", { className: "text-[0.62rem] leading-tight font-semibold sm:text-xs", children: node.label })
2292
+ ]
2293
+ }
2294
+ )
2295
+ },
2296
+ node.id
2297
+ );
2298
+ })
2299
+ ]
2300
+ }
2301
+ ),
2302
+ right.length > 0 && /* @__PURE__ */ jsx(Callouts, { callouts: right })
2303
+ ] })
2304
+ ] });
2305
+ }
2306
+ function Callouts({
2307
+ callouts,
2308
+ end
2309
+ }) {
2310
+ const tone = useTone();
2311
+ const a = accent("accent", tone.isLight);
2312
+ return /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-4", end && "lg:text-end"), children: callouts.map((c, i) => /* @__PURE__ */ jsxs(Card, { i: 4 + i, className: "p-4", children: [
2313
+ c.lead && /* @__PURE__ */ jsx("div", { className: cn("text-sm font-bold", a.text), children: c.lead }),
2314
+ /* @__PURE__ */ jsx("p", { className: cn("mt-1 text-sm leading-snug", tone.muted), children: c.text })
2315
+ ] }, c.text)) });
2316
+ }
2317
+ function BadgeCard({ cert, i }) {
2318
+ const { components } = useDeck();
2319
+ const tone = useTone();
2320
+ const a = accent(cert.accent ?? "accent", tone.isLight);
2321
+ return /* @__PURE__ */ jsxs(Card, { i, className: "flex flex-col items-center p-3 text-center", children: [
2322
+ cert.image ? /* @__PURE__ */ jsx("div", { className: "mb-2 flex h-11 items-center justify-center rounded-lg bg-white px-2.5", children: /* @__PURE__ */ jsx(
2323
+ TemplateImg,
2324
+ {
2325
+ ...cert.image,
2326
+ components,
2327
+ className: "h-7 w-auto max-w-[72px] object-contain"
2328
+ }
2329
+ ) }) : /* @__PURE__ */ jsx(
2330
+ "div",
2331
+ {
2332
+ "aria-hidden": "true",
2333
+ className: cn(
2334
+ "mb-2 flex size-10 items-center justify-center rounded-lg border text-sm font-extrabold",
2335
+ a.soft,
2336
+ a.border,
2337
+ a.text
2338
+ ),
2339
+ children: cert.badge ?? cert.name.slice(0, 3).toUpperCase()
2340
+ }
2341
+ ),
2342
+ /* @__PURE__ */ jsx("div", { className: "text-[0.8rem] leading-tight font-bold", children: cert.name }),
2343
+ cert.issuer && /* @__PURE__ */ jsx(
2344
+ "div",
2345
+ {
2346
+ className: cn(
2347
+ "mt-0.5 text-[0.62rem] tracking-wide uppercase",
2348
+ tone.muted
2349
+ ),
2350
+ children: cert.issuer
2351
+ }
2352
+ ),
2353
+ cert.source && /* @__PURE__ */ jsx(SourceLink, { source: cert.source, className: "mt-1.5" })
2354
+ ] });
2355
+ }
2356
+ function CertificationGridRenderer({
2357
+ slide,
2358
+ index
2359
+ }) {
2360
+ const { components } = useDeck();
2361
+ const tone = toneOf(slide, "deep");
2362
+ const count = slide.certifications.length;
2363
+ const featured = slide.featured;
2364
+ const cols = featured ? "sm:grid-cols-3 lg:grid-cols-4" : count >= 5 ? "sm:grid-cols-3 lg:grid-cols-5" : count === 4 ? "sm:grid-cols-2 lg:grid-cols-4" : "sm:grid-cols-3";
2365
+ return /* @__PURE__ */ jsxs(SlideFrame, { slide, index, tone: "deep", children: [
2366
+ /* @__PURE__ */ jsx(
2367
+ SlideHeader,
2368
+ {
2369
+ eyebrow: slide.eyebrow,
2370
+ title: slide.title,
2371
+ subtitle: slide.subtitle
2372
+ }
2373
+ ),
2374
+ /* @__PURE__ */ jsxs(
2375
+ "div",
2376
+ {
2377
+ className: featured ? "mt-7 grid items-center gap-8 lg:grid-cols-[auto_minmax(0,1fr)] lg:gap-12" : "mt-6",
2378
+ children: [
2379
+ featured && /* @__PURE__ */ jsxs(
2380
+ "div",
2381
+ {
2382
+ ...reveal(3),
2383
+ className: "mie-deck-reveal flex flex-col items-center text-center",
2384
+ children: [
2385
+ /* @__PURE__ */ jsx("div", { className: "flex size-40 items-center justify-center rounded-full bg-white p-2 shadow-2xl sm:size-48", children: featured.image ? /* @__PURE__ */ jsx(
2386
+ TemplateImg,
2387
+ {
2388
+ ...featured.image,
2389
+ components,
2390
+ className: "size-full object-contain"
2391
+ }
2392
+ ) : /* @__PURE__ */ jsx("span", { className: "text-2xl font-extrabold text-neutral-900", children: featured.badge ?? featured.name }) }),
2393
+ /* @__PURE__ */ jsx("p", { className: "mt-4 font-semibold", children: featured.name }),
2394
+ featured.description && /* @__PURE__ */ jsx(
2395
+ "p",
2396
+ {
2397
+ className: cn(
2398
+ "mt-1 max-w-[15rem] text-sm leading-snug",
2399
+ tone.muted
2400
+ ),
2401
+ children: featured.description
2402
+ }
2403
+ ),
2404
+ featured.source && /* @__PURE__ */ jsx(SourceLink, { source: featured.source, className: "mt-2.5" })
2405
+ ]
2406
+ }
2407
+ ),
2408
+ /* @__PURE__ */ jsx("div", { className: cn("grid grid-cols-2 gap-3", cols), children: slide.certifications.map((cert, i) => /* @__PURE__ */ jsx(BadgeCard, { cert, i: 4 + i }, cert.name)) })
2409
+ ]
2410
+ }
2411
+ ),
2412
+ slide.footnote && /* @__PURE__ */ jsx(SourceLink, { source: slide.footnote, className: "mt-6" })
2413
+ ] });
2414
+ }
2415
+ var VISIBLE = 3;
2416
+ function ShowcaseCategory({
2417
+ category,
2418
+ i
2419
+ }) {
2420
+ const { labels } = useDeck();
2421
+ const tone = useTone();
2422
+ const a = accent("primary", tone.isLight);
2423
+ const [open, setOpen] = React9.useState(false);
2424
+ const listId = React9.useId();
2425
+ const hidden = category.items.length - VISIBLE;
2426
+ return /* @__PURE__ */ jsxs(Card, { i, className: "p-4", children: [
2427
+ /* @__PURE__ */ jsxs(
2428
+ "h3",
2429
+ {
2430
+ className: cn(
2431
+ "mb-3 flex items-center gap-2 text-xs font-bold tracking-wider uppercase",
2432
+ a.text
2433
+ ),
2434
+ children: [
2435
+ category.icon && /* @__PURE__ */ jsx(DeckIcon, { name: category.icon, className: "size-4" }),
2436
+ category.title,
2437
+ /* @__PURE__ */ jsx("span", { className: cn("ms-auto tabular-nums", tone.muted), children: category.items.length })
2438
+ ]
2439
+ }
2440
+ ),
2441
+ /* @__PURE__ */ jsx("ul", { id: listId, className: "space-y-1", children: (open ? category.items : category.items.slice(0, VISIBLE)).map(
2442
+ (item) => /* @__PURE__ */ jsxs(
2443
+ "li",
2444
+ {
2445
+ className: cn("flex gap-2 text-xs leading-relaxed", tone.muted),
2446
+ children: [
2447
+ /* @__PURE__ */ jsx(
2448
+ ChevronRight,
2449
+ {
2450
+ "aria-hidden": "true",
2451
+ className: "mt-0.5 size-3 flex-none rtl:-scale-x-100"
2452
+ }
2453
+ ),
2454
+ item
2455
+ ]
2456
+ },
2457
+ item
2458
+ )
2459
+ ) }),
2460
+ hidden > 0 && /* @__PURE__ */ jsx(
2461
+ "button",
2462
+ {
2463
+ type: "button",
2464
+ "aria-expanded": open,
2465
+ "aria-controls": listId,
2466
+ onClick: () => setOpen((o) => !o),
2467
+ className: cn(
2468
+ "mt-2 text-xs font-medium underline-offset-2 hover:underline",
2469
+ a.text
2470
+ ),
2471
+ children: open ? labels.less : labels.more(hidden)
2472
+ }
2473
+ )
2474
+ ] });
2475
+ }
2476
+ function ShowcaseRenderer({
2477
+ slide,
2478
+ index
2479
+ }) {
2480
+ const { components, labels } = useDeck();
2481
+ const tone = toneOf(slide, "deep");
2482
+ const a = accent("accent", tone.isLight);
2483
+ const video = slide.video;
2484
+ const videoHref = video ? safeHref(video.href) : void 0;
2485
+ return /* @__PURE__ */ jsxs(SlideFrame, { slide, index, tone: "deep", children: [
2486
+ /* @__PURE__ */ jsxs("div", { className: "mb-6 flex flex-col items-start gap-4 sm:flex-row sm:items-end sm:justify-between", children: [
2487
+ /* @__PURE__ */ jsx(
2488
+ SlideHeader,
2489
+ {
2490
+ eyebrow: slide.eyebrow,
2491
+ title: slide.title,
2492
+ subtitle: slide.subtitle
2493
+ }
2494
+ ),
2495
+ slide.total && /* @__PURE__ */ jsxs(
2496
+ "div",
2497
+ {
2498
+ ...reveal(2),
2499
+ className: cn(
2500
+ "mie-deck-reveal flex flex-none items-baseline gap-2 rounded-full border px-5 py-2",
2501
+ a.soft,
2502
+ a.border
2503
+ ),
2504
+ children: [
2505
+ /* @__PURE__ */ jsx("span", { className: cn("text-3xl font-bold", a.text), children: /* @__PURE__ */ jsx(CountUp, { value: slide.total.value }) }),
2506
+ /* @__PURE__ */ jsx("span", { className: cn("text-sm", tone.muted), children: slide.total.label })
2507
+ ]
2508
+ }
2509
+ )
2510
+ ] }),
2511
+ /* @__PURE__ */ jsxs(
2512
+ "div",
2513
+ {
2514
+ className: cn("grid gap-6", videoHref && "lg:grid-cols-[1fr_300px]"),
2515
+ children: [
2516
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3", children: slide.categories.map((cat, i) => /* @__PURE__ */ jsx(ShowcaseCategory, { category: cat, i: 3 + i }, cat.title)) }),
2517
+ video && videoHref && /* @__PURE__ */ jsxs(
2518
+ "a",
2519
+ {
2520
+ href: videoHref,
2521
+ target: "_blank",
2522
+ rel: "noopener noreferrer",
2523
+ ...reveal(5),
2524
+ className: cn(
2525
+ "mie-deck-reveal group flex flex-col overflow-hidden rounded-xl border lg:self-start",
2526
+ tone.hairline,
2527
+ tone.card
2528
+ ),
2529
+ children: [
2530
+ /* @__PURE__ */ jsxs("div", { className: "relative flex aspect-video items-center justify-center overflow-hidden bg-neutral-900", children: [
2531
+ video.thumbnail && /* @__PURE__ */ jsx(
2532
+ TemplateImg,
2533
+ {
2534
+ ...video.thumbnail,
2535
+ components,
2536
+ className: "absolute inset-0 size-full object-cover transition-transform duration-300 group-hover:scale-105"
2537
+ }
2538
+ ),
2539
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-black/30" }),
2540
+ /* @__PURE__ */ jsx("span", { className: "bg-primary-600 relative flex size-14 items-center justify-center rounded-full border-2 border-white/30 shadow-xl transition-transform group-hover:scale-110", children: /* @__PURE__ */ jsx(
2541
+ Play,
2542
+ {
2543
+ "aria-hidden": "true",
2544
+ className: "ms-1 size-6 fill-white text-white"
2545
+ }
2546
+ ) }),
2547
+ video.duration && /* @__PURE__ */ jsx("span", { className: "absolute end-2 bottom-2 rounded bg-black/60 px-2 py-0.5 font-mono text-xs text-white tabular-nums", children: video.duration })
2548
+ ] }),
2549
+ /* @__PURE__ */ jsxs("div", { className: "p-4", children: [
2550
+ /* @__PURE__ */ jsx("p", { className: "mb-1 text-sm font-semibold", children: video.title }),
2551
+ video.speaker && /* @__PURE__ */ jsx("p", { className: cn("mb-2 text-xs", tone.muted), children: video.speaker }),
2552
+ /* @__PURE__ */ jsxs(
2553
+ "span",
2554
+ {
2555
+ className: cn(
2556
+ "inline-flex items-center gap-1 text-xs font-medium",
2557
+ a.text
2558
+ ),
2559
+ children: [
2560
+ video.cta ?? labels.watchVideo,
2561
+ /* @__PURE__ */ jsx(ExternalLink, { "aria-hidden": "true", className: "size-3" })
2562
+ ]
2563
+ }
2564
+ )
2565
+ ] })
2566
+ ]
2567
+ }
2568
+ )
2569
+ ]
2570
+ }
2571
+ )
2572
+ ] });
2573
+ }
2574
+ function Highlights({
2575
+ items
2576
+ }) {
2577
+ const r = reveal(3);
2578
+ return /* @__PURE__ */ jsx(
2579
+ "div",
2580
+ {
2581
+ className: cn(
2582
+ r.className,
2583
+ "mt-10 flex flex-wrap items-center justify-center gap-x-10 gap-y-6"
2584
+ ),
2585
+ style: r.style,
2586
+ children: items.map((h) => /* @__PURE__ */ jsx(HighlightFigure, { value: h.value, label: h.label }, h.label))
2587
+ }
2588
+ );
2589
+ }
2590
+ function CoverRenderer({
2591
+ slide,
2592
+ index
2593
+ }) {
2594
+ const { components } = useDeck();
2595
+ const tone = toneOf(slide, "brand");
2596
+ return /* @__PURE__ */ jsx(SlideFrame, { slide, index, tone: "brand", width: "md", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center text-center", children: [
2597
+ slide.image && /* @__PURE__ */ jsx(
2598
+ TemplateImg,
2599
+ {
2600
+ ...slide.image,
2601
+ priority: index === 0,
2602
+ components,
2603
+ className: "mb-8 h-32 w-auto object-contain sm:h-40"
2604
+ }
2605
+ ),
2606
+ slide.eyebrow && /* @__PURE__ */ jsx(Eyebrow, { children: slide.eyebrow }),
2607
+ /* @__PURE__ */ jsx(SlideTitle, { size: "xl", children: slide.title }),
2608
+ slide.subtitle && /* @__PURE__ */ jsx(Subtitle, { className: "mx-auto sm:text-xl", children: slide.subtitle }),
2609
+ slide.highlights && slide.highlights.length > 0 && /* @__PURE__ */ jsx(Highlights, { items: slide.highlights }),
2610
+ (slide.dateline || slide.preparedBy) && /* @__PURE__ */ jsx("p", { className: cn("mt-10 text-sm", tone.muted), children: [slide.preparedBy, slide.dateline].filter(Boolean).join(" \xB7 ") })
2611
+ ] }) });
2612
+ }
2613
+ function SectionDividerRenderer({
2614
+ slide,
2615
+ index
2616
+ }) {
2617
+ const { components } = useDeck();
2618
+ const tone = toneOf(slide, "glow");
2619
+ const a = accent("accent", tone.isLight);
2620
+ const hasImage = !!slide.image;
2621
+ return /* @__PURE__ */ jsx(SlideFrame, { slide, index, tone: "glow", children: /* @__PURE__ */ jsxs(
2622
+ "div",
2623
+ {
2624
+ className: hasImage ? "grid items-center gap-10 md:grid-cols-2 lg:gap-16" : "flex flex-col items-center text-center",
2625
+ children: [
2626
+ slide.image && /* @__PURE__ */ jsx("div", { ...reveal(0), className: "mie-deck-reveal order-2 md:order-1", children: /* @__PURE__ */ jsx(
2627
+ TemplateImg,
2628
+ {
2629
+ ...slide.image,
2630
+ components,
2631
+ className: "mx-auto aspect-[3/4] w-full max-w-sm rounded-2xl object-cover"
2632
+ }
2633
+ ) }),
2634
+ /* @__PURE__ */ jsxs("div", { className: hasImage ? "order-1 md:order-2" : "max-w-4xl", children: [
2635
+ slide.eyebrow && /* @__PURE__ */ jsx(Eyebrow, { children: slide.eyebrow }),
2636
+ slide.statement && /* @__PURE__ */ jsx(
2637
+ "p",
2638
+ {
2639
+ ...reveal(1),
2640
+ className: "mie-deck-reveal text-6xl font-extrabold tracking-tight text-balance sm:text-7xl lg:text-8xl",
2641
+ children: slide.statement
2642
+ }
2643
+ ),
2644
+ /* @__PURE__ */ jsx(
2645
+ SlideTitle,
2646
+ {
2647
+ size: slide.statement ? "md" : "lg",
2648
+ className: cn(slide.statement && "mt-3 font-semibold opacity-80"),
2649
+ children: slide.title
2650
+ }
2651
+ ),
2652
+ slide.description && /* @__PURE__ */ jsx(Subtitle, { className: cn(!hasImage && "mx-auto"), children: slide.description }),
2653
+ /* @__PURE__ */ jsx(
2654
+ "div",
2655
+ {
2656
+ "aria-hidden": "true",
2657
+ className: cn(
2658
+ "mt-8 h-1 w-24 rounded-full",
2659
+ a.fill,
2660
+ !hasImage && "mx-auto"
2661
+ )
2662
+ }
2663
+ )
2664
+ ] })
2665
+ ]
2666
+ }
2667
+ ) });
2668
+ }
2669
+ function TableOfContentsRenderer({
2670
+ slide,
2671
+ index
2672
+ }) {
2673
+ const { slides, activeSlide, goTo, labels } = useDeck();
2674
+ const tone = toneOf(slide, "brand");
2675
+ const a = accent("accent", tone.isLight);
2676
+ const sections = slide.sections ?? Object.entries(
2677
+ slides.reduce((acc, s, i) => {
2678
+ if (i === index || !("title" in s) || !s.title) return acc;
2679
+ (acc[s.section ?? ""] ??= []).push({
2680
+ number: i + 1,
2681
+ title: s.navLabel ?? s.title
2682
+ });
2683
+ return acc;
2684
+ }, {})
2685
+ ).map(([heading, items]) => ({ heading: heading || void 0, items }));
2686
+ return /* @__PURE__ */ jsxs(SlideFrame, { slide, index, tone: "brand", children: [
2687
+ /* @__PURE__ */ jsx(
2688
+ SlideHeader,
2689
+ {
2690
+ eyebrow: slide.eyebrow,
2691
+ title: slide.title,
2692
+ subtitle: slide.description
2693
+ }
2694
+ ),
2695
+ /* @__PURE__ */ jsx("nav", { "aria-label": labels.outline, className: "mt-6 md:columns-2 md:gap-12", children: sections.map((section, s) => /* @__PURE__ */ jsxs(
2696
+ "div",
2697
+ {
2698
+ ...reveal(3 + s),
2699
+ className: "mie-deck-reveal mb-5 break-inside-avoid",
2700
+ children: [
2701
+ section.heading && /* @__PURE__ */ jsx(
2702
+ "h3",
2703
+ {
2704
+ className: cn(
2705
+ "mb-1.5 text-xs font-semibold tracking-[0.2em] uppercase",
2706
+ a.text
2707
+ ),
2708
+ children: section.heading
2709
+ }
2710
+ ),
2711
+ /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-0.5", children: section.items.map((entry) => {
2712
+ const target = entry.number - 1;
2713
+ const current = target === activeSlide;
2714
+ return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
2715
+ "button",
2716
+ {
2717
+ type: "button",
2718
+ onClick: () => goTo(target),
2719
+ "aria-current": current ? "true" : void 0,
2720
+ className: cn(
2721
+ "flex w-full items-baseline gap-3 rounded-lg px-3 py-1 text-start transition-colors",
2722
+ current ? a.soft : tone.isLight ? "hover:bg-neutral-100" : "hover:bg-white/5"
2723
+ ),
2724
+ children: [
2725
+ /* @__PURE__ */ jsx(
2726
+ "span",
2727
+ {
2728
+ className: cn(
2729
+ "text-sm font-semibold tabular-nums",
2730
+ a.text
2731
+ ),
2732
+ children: String(entry.number).padStart(2, "0")
2733
+ }
2734
+ ),
2735
+ /* @__PURE__ */ jsxs("span", { children: [
2736
+ entry.title,
2737
+ entry.subtitle && /* @__PURE__ */ jsx("span", { className: cn("block text-xs", tone.muted), children: entry.subtitle })
2738
+ ] })
2739
+ ]
2740
+ }
2741
+ ) }, entry.number);
2742
+ }) })
2743
+ ]
2744
+ },
2745
+ section.heading ?? s
2746
+ )) })
2747
+ ] });
2748
+ }
2749
+ function BulletListRenderer({
2750
+ slide,
2751
+ index
2752
+ }) {
2753
+ const tone = toneOf(slide, "brand");
2754
+ const r = reveal(3);
2755
+ return /* @__PURE__ */ jsxs(SlideFrame, { slide, index, tone: "brand", width: "lg", children: [
2756
+ /* @__PURE__ */ jsx(
2757
+ SlideHeader,
2758
+ {
2759
+ eyebrow: slide.eyebrow,
2760
+ title: slide.title,
2761
+ subtitle: slide.subtitle
2762
+ }
2763
+ ),
2764
+ /* @__PURE__ */ jsx(
2765
+ "ul",
2766
+ {
2767
+ className: cn(r.className, "mt-10 flex flex-col gap-4"),
2768
+ style: r.style,
2769
+ children: slide.items.map((item, i) => /* @__PURE__ */ jsx(Bullet, { item }, i))
2770
+ }
2771
+ ),
2772
+ slide.note && /* @__PURE__ */ jsx("p", { className: cn("mt-8 text-sm italic", tone.muted), children: slide.note })
2773
+ ] });
2774
+ }
2775
+ function QuoteRenderer({
2776
+ slide,
2777
+ index
2778
+ }) {
2779
+ const tone = toneOf(slide, "brand");
2780
+ const a = accent("accent", tone.isLight);
2781
+ return /* @__PURE__ */ jsx(
2782
+ SlideFrame,
2783
+ {
2784
+ slide: {
2785
+ ...slide,
2786
+ navLabel: slide.navLabel ?? slide.title ?? slide.attribution
2787
+ },
2788
+ index,
2789
+ tone: "brand",
2790
+ width: "md",
2791
+ children: /* @__PURE__ */ jsxs("figure", { className: "flex flex-col items-center text-center", children: [
2792
+ slide.eyebrow && /* @__PURE__ */ jsx(Eyebrow, { children: slide.eyebrow }),
2793
+ slide.title && /* @__PURE__ */ jsx(SlideTitle, { size: "md", className: "mb-6", children: slide.title }),
2794
+ /* @__PURE__ */ jsx(
2795
+ "span",
2796
+ {
2797
+ "aria-hidden": "true",
2798
+ className: cn("text-7xl leading-none sm:text-8xl", a.text),
2799
+ children: "\u201C"
2800
+ }
2801
+ ),
2802
+ /* @__PURE__ */ jsx(
2803
+ "blockquote",
2804
+ {
2805
+ ...reveal(2),
2806
+ className: "mie-deck-reveal -mt-4 text-2xl leading-snug font-semibold text-balance sm:text-3xl lg:text-4xl",
2807
+ children: slide.quote
2808
+ }
2809
+ ),
2810
+ (slide.attribution || slide.role) && /* @__PURE__ */ jsxs("figcaption", { ...reveal(3), className: "mie-deck-reveal mt-8", children: [
2811
+ slide.attribution && /* @__PURE__ */ jsx("span", { className: cn("text-lg font-semibold", a.text), children: slide.attribution }),
2812
+ slide.role && /* @__PURE__ */ jsx("span", { className: cn("block text-sm", tone.muted), children: slide.role })
2813
+ ] }),
2814
+ slide.source && /* @__PURE__ */ jsx(SourceLink, { source: slide.source, className: "mt-5" })
2815
+ ] })
2816
+ }
2817
+ );
2818
+ }
2819
+ function ImageRenderer({
2820
+ slide,
2821
+ index
2822
+ }) {
2823
+ const { components } = useDeck();
2824
+ const tone = toneOf(slide, "ink");
2825
+ return /* @__PURE__ */ jsxs(SlideFrame, { slide, index, tone: "ink", children: [
2826
+ /* @__PURE__ */ jsx(SlideTitle, { className: "mb-8 text-center", children: slide.title }),
2827
+ /* @__PURE__ */ jsxs("figure", { ...reveal(2), className: "mie-deck-reveal", children: [
2828
+ /* @__PURE__ */ jsx(
2829
+ TemplateImg,
2830
+ {
2831
+ ...slide.image,
2832
+ components,
2833
+ className: "mx-auto max-h-[65dvh] w-auto rounded-2xl object-contain shadow-2xl"
2834
+ }
2835
+ ),
2836
+ slide.caption && /* @__PURE__ */ jsx("figcaption", { className: cn("mt-4 text-center text-sm", tone.muted), children: slide.caption })
2837
+ ] })
2838
+ ] });
2839
+ }
2840
+ function DefinitionListRenderer({
2841
+ slide,
2842
+ index
2843
+ }) {
2844
+ const tone = toneOf(slide, "brand");
2845
+ const a = accent("accent", tone.isLight);
2846
+ return /* @__PURE__ */ jsxs(SlideFrame, { slide, index, tone: "brand", children: [
2847
+ /* @__PURE__ */ jsx(
2848
+ SlideHeader,
2849
+ {
2850
+ eyebrow: slide.eyebrow,
2851
+ title: slide.title,
2852
+ subtitle: slide.subtitle
2853
+ }
2854
+ ),
2855
+ /* @__PURE__ */ jsx("dl", { className: "mt-6 flex flex-col gap-2", children: slide.terms.map((term, i) => {
2856
+ const initial = term.term.charAt(0);
2857
+ const r = reveal(3 + i);
2858
+ return (
2859
+ // A <dl> group div may contain only <dt>/<dd> (axe dlitem).
2860
+ /* @__PURE__ */ jsxs(
2861
+ "div",
2862
+ {
2863
+ className: cn(
2864
+ r.className,
2865
+ "rounded-xl border p-3",
2866
+ tone.card,
2867
+ tone.hairline
2868
+ ),
2869
+ style: r.style,
2870
+ children: [
2871
+ /* @__PURE__ */ jsxs("dt", { className: "flex items-center gap-4 text-base font-bold sm:text-lg", children: [
2872
+ /* @__PURE__ */ jsx(
2873
+ "span",
2874
+ {
2875
+ "aria-hidden": "true",
2876
+ className: cn(
2877
+ "flex size-10 flex-none items-center justify-center rounded-lg border text-xl font-extrabold",
2878
+ a.soft,
2879
+ a.border,
2880
+ a.text
2881
+ ),
2882
+ children: initial
2883
+ }
2884
+ ),
2885
+ term.term
2886
+ ] }),
2887
+ /* @__PURE__ */ jsxs(
2888
+ "dd",
2889
+ {
2890
+ className: cn(
2891
+ "ms-14 mt-0.5 text-sm leading-relaxed",
2892
+ tone.muted
2893
+ ),
2894
+ children: [
2895
+ term.lead && /* @__PURE__ */ jsxs("span", { className: cn("font-semibold", tone.text), children: [
2896
+ term.lead,
2897
+ " "
2898
+ ] }),
2899
+ term.definition
2900
+ ]
2901
+ }
2902
+ )
2903
+ ]
2904
+ },
2905
+ term.term
2906
+ )
2907
+ );
2908
+ }) }),
2909
+ slide.source && /* @__PURE__ */ jsx(SourceLink, { source: slide.source, className: "mt-4" })
2910
+ ] });
2911
+ }
2912
+ function CopyLink({ url }) {
2913
+ const { labels } = useDeck();
2914
+ const tone = useTone();
2915
+ const [copied, setCopied] = React9.useState(false);
2916
+ React9.useEffect(() => {
2917
+ if (!copied) return;
2918
+ const t = setTimeout(() => setCopied(false), 2e3);
2919
+ return () => clearTimeout(t);
2920
+ }, [copied]);
2921
+ return /* @__PURE__ */ jsxs(
2922
+ "div",
2923
+ {
2924
+ className: cn(
2925
+ "mt-8 flex w-full max-w-xl items-center gap-2 rounded-xl border p-2",
2926
+ tone.card,
2927
+ tone.hairline
2928
+ ),
2929
+ children: [
2930
+ /* @__PURE__ */ jsx("code", { className: "min-w-0 flex-1 truncate px-2 text-start text-sm", children: url }),
2931
+ /* @__PURE__ */ jsxs(
2932
+ "button",
2933
+ {
2934
+ type: "button",
2935
+ onClick: () => navigator.clipboard?.writeText(url).then(
2936
+ () => setCopied(true),
2937
+ () => {
2938
+ }
2939
+ ),
2940
+ className: cn(
2941
+ "inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-sm font-semibold",
2942
+ tone.isLight ? "bg-neutral-900 text-white" : "bg-white text-neutral-900"
2943
+ ),
2944
+ children: [
2945
+ copied ? /* @__PURE__ */ jsx(Check, { "aria-hidden": "true", className: "size-4" }) : /* @__PURE__ */ jsx(Copy, { "aria-hidden": "true", className: "size-4" }),
2946
+ /* @__PURE__ */ jsx("span", { "aria-live": "polite", children: copied ? labels.copied : labels.copy })
2947
+ ]
2948
+ }
2949
+ )
2950
+ ]
2951
+ }
2952
+ );
2953
+ }
2954
+ function CtaButton({ link, primary }) {
2955
+ const { components } = useDeck();
2956
+ const tone = useTone();
2957
+ return /* @__PURE__ */ jsxs(
2958
+ TemplateAnchor,
2959
+ {
2960
+ href: link.href,
2961
+ trackingId: link.trackingId,
2962
+ components,
2963
+ className: cn(
2964
+ "inline-flex items-center gap-2 rounded-full px-6 py-3 text-sm font-semibold transition-colors",
2965
+ primary ? "bg-accent text-neutral-950 hover:opacity-90" : cn(
2966
+ "border",
2967
+ tone.hairline,
2968
+ tone.isLight ? "hover:bg-neutral-100" : "hover:bg-white/10"
2969
+ )
2970
+ ),
2971
+ children: [
2972
+ link.label,
2973
+ primary && /* @__PURE__ */ jsx(ArrowRight, { "aria-hidden": "true", className: "size-4 rtl:-scale-x-100" })
2974
+ ]
2975
+ }
2976
+ );
2977
+ }
2978
+ function ConclusionRenderer({
2979
+ slide,
2980
+ index
2981
+ }) {
2982
+ const tone = toneOf(slide, "brand");
2983
+ return /* @__PURE__ */ jsx(SlideFrame, { slide, index, tone: "brand", width: "sm", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center text-center", children: [
2984
+ slide.eyebrow && /* @__PURE__ */ jsx(Eyebrow, { children: slide.eyebrow }),
2985
+ /* @__PURE__ */ jsx(SlideTitle, { children: slide.title }),
2986
+ slide.body && /* @__PURE__ */ jsx(Subtitle, { className: "mx-auto", children: slide.body }),
2987
+ slide.highlights && slide.highlights.length > 0 && /* @__PURE__ */ jsx(Highlights, { items: slide.highlights }),
2988
+ slide.takeaways && slide.takeaways.length > 0 && /* @__PURE__ */ jsx(
2989
+ "ul",
2990
+ {
2991
+ ...reveal(4),
2992
+ className: "mie-deck-reveal mt-10 flex flex-col gap-3 text-start",
2993
+ children: slide.takeaways.map((t) => /* @__PURE__ */ jsx(Bullet, { item: t }, t))
2994
+ }
2995
+ ),
2996
+ slide.share && /* @__PURE__ */ jsxs(Fragment, { children: [
2997
+ slide.share.instructions && /* @__PURE__ */ jsx("p", { className: cn("mt-10 text-sm", tone.muted), children: slide.share.instructions }),
2998
+ /* @__PURE__ */ jsx(CopyLink, { url: slide.share.url })
2999
+ ] }),
3000
+ (slide.cta || slide.secondaryCta) && /* @__PURE__ */ jsxs(
3001
+ "div",
3002
+ {
3003
+ ...reveal(5),
3004
+ className: "mie-deck-reveal mt-12 flex flex-wrap items-center justify-center gap-4",
3005
+ children: [
3006
+ slide.cta && /* @__PURE__ */ jsx(CtaButton, { link: slide.cta, primary: true }),
3007
+ slide.secondaryCta && /* @__PURE__ */ jsx(CtaButton, { link: slide.secondaryCta })
3008
+ ]
3009
+ }
3010
+ ),
3011
+ (slide.preparedBy || slide.dateline) && /* @__PURE__ */ jsx("p", { className: cn("mt-10 text-sm", tone.muted), children: [slide.preparedBy, slide.dateline].filter(Boolean).join(" \xB7 ") }),
3012
+ slide.confidentiality && /* @__PURE__ */ jsx(
3013
+ "p",
3014
+ {
3015
+ className: cn("mt-3 text-xs tracking-wider uppercase", tone.muted),
3016
+ children: slide.confidentiality
3017
+ }
3018
+ )
3019
+ ] }) });
3020
+ }
3021
+
3022
+ // src/components/Deck/registry.tsx
3023
+ var slideRenderers = {
3024
+ cover: CoverRenderer,
3025
+ "section-divider": SectionDividerRenderer,
3026
+ "table-of-contents": TableOfContentsRenderer,
3027
+ "bullet-list": BulletListRenderer,
3028
+ quote: QuoteRenderer,
3029
+ image: ImageRenderer,
3030
+ "definition-list": DefinitionListRenderer,
3031
+ conclusion: ConclusionRenderer,
3032
+ metrics: MetricsRenderer,
3033
+ chart: ChartRenderer,
3034
+ "feature-highlight": FeatureHighlightRenderer,
3035
+ "comparison-table": ComparisonTableRenderer,
3036
+ "impact-table": ImpactTableRenderer,
3037
+ cards: CardsRenderer,
3038
+ "ranked-list": RankedListRenderer,
3039
+ breakdown: BreakdownRenderer,
3040
+ cycle: CycleRenderer,
3041
+ roadmap: RoadmapRenderer,
3042
+ "adoption-curve": AdoptionCurveRenderer,
3043
+ diagram: DiagramRenderer,
3044
+ "certification-grid": CertificationGridRenderer,
3045
+ showcase: ShowcaseRenderer,
3046
+ tabs: TabsRenderer
3047
+ };
3048
+ var typingTarget = (el) => el instanceof HTMLElement && (["INPUT", "TEXTAREA", "SELECT"].includes(el.tagName) || el.isContentEditable || el.getAttribute("role") === "tab");
3049
+ var spaceActivates = (el) => el instanceof HTMLElement && (el.tagName === "BUTTON" || el.getAttribute("role") === "button");
3050
+ var Deck = React9.forwardRef(
3051
+ ({
3052
+ slides,
3053
+ meta,
3054
+ home,
3055
+ onSlideChange,
3056
+ renderers,
3057
+ graphics,
3058
+ components,
3059
+ icons,
3060
+ labels: labelOverrides,
3061
+ locale,
3062
+ syncHash = true,
3063
+ className,
3064
+ ...rest
3065
+ }, ref) => {
3066
+ const rootRef = React9.useRef(null);
3067
+ const scrollRef = React9.useRef(null);
3068
+ const touchStart = React9.useRef(null);
3069
+ const [active, setActive] = React9.useState(0);
3070
+ const [ready, setReady] = React9.useState(false);
3071
+ const [outline, setOutline] = React9.useState(false);
3072
+ const [fullscreen, setFullscreen] = React9.useState(false);
3073
+ const [hintPulse, setHintPulse] = React9.useState(0);
3074
+ const labels = React9.useMemo(
3075
+ () => ({ ...defaultDeckLabels, ...labelOverrides }),
3076
+ [labelOverrides]
3077
+ );
3078
+ const total = slides.length;
3079
+ React9.useImperativeHandle(ref, () => rootRef.current);
3080
+ const slideEl = React9.useCallback(
3081
+ (i) => scrollRef.current?.querySelector(
3082
+ `[data-slot="deck-slide"][data-index="${i}"]`
3083
+ ),
3084
+ []
3085
+ );
3086
+ const goTo = React9.useCallback(
3087
+ (i) => {
3088
+ const clamped = Math.max(0, Math.min(i, total - 1));
3089
+ const reduce = window.matchMedia?.(
3090
+ "(prefers-reduced-motion: reduce)"
3091
+ ).matches;
3092
+ slideEl(clamped)?.scrollIntoView({
3093
+ behavior: reduce ? "auto" : "smooth"
3094
+ });
3095
+ },
3096
+ [slideEl, total]
3097
+ );
3098
+ React9.useEffect(() => {
3099
+ const root = scrollRef.current;
3100
+ if (!root) return;
3101
+ const observer = new IntersectionObserver(
3102
+ (entries) => {
3103
+ for (const entry of entries) {
3104
+ if (!entry.isIntersecting) continue;
3105
+ const rootHeight = root.clientHeight || window.innerHeight;
3106
+ if (entry.intersectionRatio < 0.5 && entry.intersectionRect.height < rootHeight / 2)
3107
+ continue;
3108
+ const el = entry.target;
3109
+ el.dataset.seen = "";
3110
+ setActive(Number(el.dataset.index));
3111
+ }
3112
+ },
3113
+ { root, threshold: [0.1, 0.25, 0.5] }
3114
+ );
3115
+ root.querySelectorAll('[data-slot="deck-slide"]').forEach((el) => observer.observe(el));
3116
+ setReady(true);
3117
+ return () => observer.disconnect();
3118
+ }, [total]);
3119
+ React9.useEffect(() => {
3120
+ const raw = window.location.hash.slice(1);
3121
+ let hash = raw;
3122
+ try {
3123
+ hash = decodeURIComponent(raw);
3124
+ } catch {
3125
+ }
3126
+ if (!hash) return;
3127
+ const i = slides.findIndex((s, n) => slideAnchor(s, n) === hash);
3128
+ if (i > 0) requestAnimationFrame(() => slideEl(i)?.scrollIntoView());
3129
+ }, []);
3130
+ const reportedSlide = React9.useRef(-1);
3131
+ React9.useEffect(() => {
3132
+ const slide = slides[active];
3133
+ if (!slide) return;
3134
+ if (syncHash && ready) {
3135
+ const hash = `#${slideAnchor(slide, active)}`;
3136
+ if (window.location.hash !== hash)
3137
+ window.history.replaceState(window.history.state, "", hash);
3138
+ }
3139
+ if (reportedSlide.current !== active) {
3140
+ reportedSlide.current = active;
3141
+ onSlideChange?.(slide, active);
3142
+ }
3143
+ }, [active, slides, syncHash, ready]);
3144
+ const toggleFullscreen = React9.useCallback(() => {
3145
+ if (!document.fullscreenElement)
3146
+ rootRef.current?.requestFullscreen?.().catch(() => {
3147
+ });
3148
+ else document.exitFullscreen?.().catch(() => {
3149
+ });
3150
+ }, []);
3151
+ React9.useEffect(() => {
3152
+ const onChange = () => setFullscreen(!!document.fullscreenElement);
3153
+ document.addEventListener("fullscreenchange", onChange);
3154
+ return () => document.removeEventListener("fullscreenchange", onChange);
3155
+ }, []);
3156
+ React9.useEffect(() => {
3157
+ const onKey = (e) => {
3158
+ if (outline || e.defaultPrevented || e.metaKey || e.ctrlKey || e.altKey)
3159
+ return;
3160
+ if (typingTarget(e.target)) return;
3161
+ const key = e.key;
3162
+ if (key === " " && spaceActivates(e.target)) return;
3163
+ const rtl = isRtl(rootRef.current);
3164
+ const nextKey = rtl ? "ArrowLeft" : "ArrowRight";
3165
+ const prevKey = rtl ? "ArrowRight" : "ArrowLeft";
3166
+ if (["ArrowDown", nextKey, "PageDown", " "].includes(key)) {
3167
+ e.preventDefault();
3168
+ goTo(active + 1);
3169
+ } else if (["ArrowUp", prevKey, "PageUp"].includes(key)) {
3170
+ e.preventDefault();
3171
+ goTo(active - 1);
3172
+ } else if (key === "Home") {
3173
+ e.preventDefault();
3174
+ goTo(0);
3175
+ } else if (key === "End") {
3176
+ e.preventDefault();
3177
+ goTo(total - 1);
3178
+ } else if (/^[1-9]$/.test(key)) {
3179
+ goTo(Number(key) - 1);
3180
+ } else if (key.toLowerCase() === "f") {
3181
+ toggleFullscreen();
3182
+ } else if (key === "?") {
3183
+ setHintPulse((p) => p + 1);
3184
+ }
3185
+ };
3186
+ window.addEventListener("keydown", onKey);
3187
+ return () => window.removeEventListener("keydown", onKey);
3188
+ }, [active, goTo, outline, toggleFullscreen, total]);
3189
+ const onTouchEnd = (e) => {
3190
+ if (touchStart.current === null) return;
3191
+ const delta = touchStart.current - e.changedTouches[0].clientY;
3192
+ touchStart.current = null;
3193
+ const el = slideEl(active);
3194
+ if (el && scrollRef.current && el.scrollHeight > scrollRef.current.clientHeight + 20)
3195
+ return;
3196
+ if (Math.abs(delta) > 120) goTo(active + (delta > 0 ? 1 : -1));
3197
+ };
3198
+ const context = React9.useMemo(
3199
+ () => ({
3200
+ slides,
3201
+ activeSlide: active,
3202
+ goTo,
3203
+ labels,
3204
+ components,
3205
+ icons,
3206
+ graphics,
3207
+ renderers,
3208
+ locale
3209
+ }),
3210
+ [
3211
+ slides,
3212
+ active,
3213
+ goTo,
3214
+ labels,
3215
+ components,
3216
+ icons,
3217
+ graphics,
3218
+ renderers,
3219
+ locale
3220
+ ]
3221
+ );
3222
+ const closeOutline = React9.useCallback(() => setOutline(false), []);
3223
+ const progress = total > 1 ? active / (total - 1) * 100 : 0;
3224
+ return /* @__PURE__ */ jsx(DeckProvider, { value: context, children: /* @__PURE__ */ jsxs(
3225
+ "div",
3226
+ {
3227
+ ref: rootRef,
3228
+ role: "region",
3229
+ "aria-roledescription": labels.presentation,
3230
+ "aria-label": meta.title,
3231
+ "data-slot": "deck",
3232
+ "data-ready": ready || void 0,
3233
+ className: cn(
3234
+ "mie-deck relative h-dvh w-full overflow-hidden bg-neutral-950 text-white",
3235
+ className
3236
+ ),
3237
+ ...rest,
3238
+ children: [
3239
+ /* @__PURE__ */ jsxs("h1", { className: "sr-only", children: [
3240
+ meta.title,
3241
+ meta.period ? ` \u2014 ${meta.period}` : ""
3242
+ ] }),
3243
+ home && /* @__PURE__ */ jsxs(
3244
+ TemplateAnchor,
3245
+ {
3246
+ href: home.href,
3247
+ trackingId: home.trackingId,
3248
+ components,
3249
+ className: "mie-deck-chrome absolute start-3 top-3 z-50 inline-flex items-center gap-2 rounded-full border border-white/10 bg-black/25 py-1.5 ps-2 pe-3 text-xs font-semibold text-white/80 backdrop-blur transition-colors hover:bg-white/10 hover:text-white print:hidden",
3250
+ children: [
3251
+ home.logo && /* @__PURE__ */ jsx(
3252
+ TemplateImg,
3253
+ {
3254
+ ...home.logo,
3255
+ alt: "",
3256
+ components,
3257
+ className: "size-[18px] object-contain"
3258
+ }
3259
+ ),
3260
+ home.label
3261
+ ]
3262
+ }
3263
+ ),
3264
+ /* @__PURE__ */ jsx(ProgressBar, { progress }),
3265
+ /* @__PURE__ */ jsx(DotNav, { slides, active, goTo, labels }),
3266
+ /* @__PURE__ */ jsx(
3267
+ SlideCounter,
3268
+ {
3269
+ active,
3270
+ total,
3271
+ section: slides[active]?.section
3272
+ }
3273
+ ),
3274
+ /* @__PURE__ */ jsx(KeyboardHints, { pulse: hintPulse, labels }),
3275
+ /* @__PURE__ */ jsx(
3276
+ Controls,
3277
+ {
3278
+ isFullscreen: fullscreen,
3279
+ onToggleFullscreen: toggleFullscreen,
3280
+ onOpenOutline: () => setOutline(true),
3281
+ labels
3282
+ }
3283
+ ),
3284
+ /* @__PURE__ */ jsx(
3285
+ "div",
3286
+ {
3287
+ ref: scrollRef,
3288
+ onTouchStart: (e) => {
3289
+ touchStart.current = e.touches[0].clientY;
3290
+ },
3291
+ onTouchEnd,
3292
+ className: "mie-deck-scroll size-full snap-y snap-mandatory overflow-y-auto",
3293
+ children: slides.map((slide, i) => {
3294
+ const Renderer = slide.type === "custom" ? renderers?.[slide.component] : renderers?.[slide.type] ?? slideRenderers[slide.type];
3295
+ return Renderer ? /* @__PURE__ */ jsx(Renderer, { slide, index: i }, slideAnchor(slide, i)) : null;
3296
+ })
3297
+ }
3298
+ ),
3299
+ /* @__PURE__ */ jsx(
3300
+ MobileNav,
3301
+ {
3302
+ active,
3303
+ total,
3304
+ onPrev: () => goTo(active - 1),
3305
+ onNext: () => goTo(active + 1),
3306
+ onOpenOutline: () => setOutline(true),
3307
+ labels
3308
+ }
3309
+ ),
3310
+ /* @__PURE__ */ jsx(
3311
+ OutlineDialog,
3312
+ {
3313
+ open: outline,
3314
+ onClose: closeOutline,
3315
+ slides,
3316
+ active,
3317
+ goTo,
3318
+ labels
3319
+ }
3320
+ )
3321
+ ]
3322
+ }
3323
+ ) });
3324
+ }
3325
+ );
3326
+ Deck.displayName = "Deck";
3327
+
3328
+ export { Bullet, CountUp, Deck, DeckIcon, Graphic, HighlightFigure, IconChip, Card as SlideCard, Eyebrow as SlideEyebrow, SlideFrame, SlideHeader, Subtitle as SlideSubtitle, SlideTitle, SourceLink, defaultDeckLabels, reveal, accent as slideAccent, slideAnchor, slideRenderers, TONES as slideTones, toneOf, useDeck, useTone };
3329
+ //# sourceMappingURL=deck.js.map
3330
+ //# sourceMappingURL=deck.js.map