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

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