@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
@@ -0,0 +1,2657 @@
1
+ import { SectionShell, cardClass, SectionHeading, CtaLinks, mutedTextClass, toneClass, containerClass, IconTile, accentTextClass, headingTextClass, TemplateAnchor, TemplateImg, safeHref, TemplateIcon, MetricStatusBadge, ownProperty } from './chunk-FBCDYTWM.js';
2
+ import { inputVariants, RequiredMark } from './chunk-3IMM2PM4.js';
3
+ import { Badge } from './chunk-BMSG4NBH.js';
4
+ import { buttonVariants } from './chunk-GVM6DTR5.js';
5
+ import { cn } from './chunk-TQONQSJO.js';
6
+ import * as React5 from 'react';
7
+ import { ChevronDown, ArrowRight, ChevronRight, CircleCheck, Check, TrendingDown, TrendingUp, Star, Info, Download, ExternalLink, X } from 'lucide-react';
8
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
+
10
+ var cellClass = "px-3 py-3 sm:px-5 sm:py-4";
11
+ var ComparisonSection = React5.forwardRef(
12
+ ({
13
+ columns,
14
+ rows,
15
+ highlightColumn,
16
+ labels,
17
+ title,
18
+ tone = "default",
19
+ align = "center",
20
+ ...rest
21
+ }, ref) => {
22
+ const renderValue = (value) => typeof value === "string" ? value : value ? /* @__PURE__ */ jsxs(Fragment, { children: [
23
+ /* @__PURE__ */ jsx(
24
+ Check,
25
+ {
26
+ "aria-hidden": "true",
27
+ className: "text-success mx-auto size-5",
28
+ strokeWidth: 2.5
29
+ }
30
+ ),
31
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: labels?.included ?? "Included" })
32
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
33
+ /* @__PURE__ */ jsx(
34
+ X,
35
+ {
36
+ "aria-hidden": "true",
37
+ className: cn("mx-auto size-5", mutedTextClass(tone))
38
+ }
39
+ ),
40
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: labels?.notIncluded ?? "Not included" })
41
+ ] });
42
+ return /* @__PURE__ */ jsx(
43
+ SectionShell,
44
+ {
45
+ ref,
46
+ "data-slot": "comparison-section",
47
+ title,
48
+ tone,
49
+ align,
50
+ ...rest,
51
+ children: /* @__PURE__ */ jsx(
52
+ "div",
53
+ {
54
+ className: cn("mt-12 overflow-x-auto rounded-2xl", cardClass(tone)),
55
+ children: /* @__PURE__ */ jsxs(
56
+ "table",
57
+ {
58
+ className: cn(
59
+ "w-full border-collapse text-start",
60
+ // Two value columns fit a phone; more scroll sideways.
61
+ columns.length > 2 && "min-w-[36rem]"
62
+ ),
63
+ children: [
64
+ title && /* @__PURE__ */ jsx("caption", { className: "sr-only", children: title }),
65
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
66
+ /* @__PURE__ */ jsx(
67
+ "th",
68
+ {
69
+ scope: "col",
70
+ className: cn(cellClass, "text-start text-sm font-semibold"),
71
+ children: labels?.feature ?? "Feature"
72
+ }
73
+ ),
74
+ columns.map((column, i) => /* @__PURE__ */ jsx(
75
+ "th",
76
+ {
77
+ scope: "col",
78
+ className: cn(
79
+ cellClass,
80
+ "text-center text-sm font-semibold",
81
+ i === highlightColumn && "bg-primary-800 text-white"
82
+ ),
83
+ children: column
84
+ },
85
+ column
86
+ ))
87
+ ] }) }),
88
+ /* @__PURE__ */ jsx("tbody", { children: rows.map((row) => /* @__PURE__ */ jsxs(
89
+ "tr",
90
+ {
91
+ className: cn(
92
+ "border-t",
93
+ tone === "brand" ? "border-white/15" : "border-border"
94
+ ),
95
+ children: [
96
+ /* @__PURE__ */ jsx(
97
+ "th",
98
+ {
99
+ scope: "row",
100
+ className: cn(cellClass, "text-start font-medium"),
101
+ children: row.feature
102
+ }
103
+ ),
104
+ columns.map((column, i) => /* @__PURE__ */ jsx(
105
+ "td",
106
+ {
107
+ className: cn(
108
+ cellClass,
109
+ "text-center text-sm",
110
+ i === highlightColumn && "bg-primary-500/10 font-semibold"
111
+ ),
112
+ children: renderValue(row.values[i] ?? "")
113
+ },
114
+ column
115
+ ))
116
+ ]
117
+ },
118
+ row.feature
119
+ )) })
120
+ ]
121
+ }
122
+ )
123
+ }
124
+ )
125
+ }
126
+ );
127
+ }
128
+ );
129
+ ComparisonSection.displayName = "ComparisonSection";
130
+ var CtaSection = React5.forwardRef(
131
+ ({
132
+ eyebrow,
133
+ title,
134
+ description,
135
+ primaryCta,
136
+ secondaryCta,
137
+ note,
138
+ tone = "brand",
139
+ align = "center",
140
+ layout = "band",
141
+ components,
142
+ className,
143
+ ...rest
144
+ }, ref) => {
145
+ const titleId = React5.useId();
146
+ const body = /* @__PURE__ */ jsxs(Fragment, { children: [
147
+ /* @__PURE__ */ jsx(
148
+ SectionHeading,
149
+ {
150
+ eyebrow,
151
+ title,
152
+ description,
153
+ align,
154
+ tone,
155
+ titleId
156
+ }
157
+ ),
158
+ /* @__PURE__ */ jsx(
159
+ CtaLinks,
160
+ {
161
+ primary: primaryCta,
162
+ secondary: secondaryCta,
163
+ tone,
164
+ align,
165
+ components,
166
+ className: "mt-8"
167
+ }
168
+ ),
169
+ note && /* @__PURE__ */ jsx(
170
+ "p",
171
+ {
172
+ className: cn(
173
+ "mt-4 text-sm",
174
+ mutedTextClass(tone),
175
+ align === "center" && "text-center"
176
+ ),
177
+ children: note
178
+ }
179
+ )
180
+ ] });
181
+ return /* @__PURE__ */ jsx(
182
+ "section",
183
+ {
184
+ ref,
185
+ "data-slot": "cta-section",
186
+ "data-tone": tone,
187
+ "aria-labelledby": titleId,
188
+ className: cn(
189
+ "py-16 sm:py-24",
190
+ layout === "band" ? toneClass(tone) : "bg-background",
191
+ className
192
+ ),
193
+ ...rest,
194
+ children: /* @__PURE__ */ jsx("div", { className: containerClass(), children: layout === "panel" ? /* @__PURE__ */ jsx(
195
+ "div",
196
+ {
197
+ className: cn(
198
+ "rounded-3xl px-6 py-12 sm:px-12 sm:py-16",
199
+ toneClass(tone),
200
+ tone !== "brand" && "border-border border"
201
+ ),
202
+ children: body
203
+ }
204
+ ) : body })
205
+ }
206
+ );
207
+ }
208
+ );
209
+ CtaSection.displayName = "CtaSection";
210
+ var FaqSection = React5.forwardRef(
211
+ ({ items, tone = "default", align = "center", ...rest }, ref) => /* @__PURE__ */ jsx(
212
+ SectionShell,
213
+ {
214
+ ref,
215
+ "data-slot": "faq-section",
216
+ tone,
217
+ align,
218
+ width: "narrow",
219
+ ...rest,
220
+ children: /* @__PURE__ */ jsx("div", { className: "mt-10 space-y-3", children: items.map((item) => /* @__PURE__ */ jsxs(
221
+ "details",
222
+ {
223
+ id: item.id,
224
+ className: cn("group rounded-xl", cardClass(tone)),
225
+ children: [
226
+ /* @__PURE__ */ jsxs(
227
+ "summary",
228
+ {
229
+ className: cn(
230
+ "flex cursor-pointer list-none items-center justify-between gap-4 rounded-xl px-5 py-4 text-start font-semibold",
231
+ "focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none",
232
+ "[&::-webkit-details-marker]:hidden"
233
+ ),
234
+ children: [
235
+ item.question,
236
+ /* @__PURE__ */ jsx(
237
+ ChevronDown,
238
+ {
239
+ "aria-hidden": "true",
240
+ className: "size-5 shrink-0 transition-transform group-open:rotate-180 motion-reduce:transition-none"
241
+ }
242
+ )
243
+ ]
244
+ }
245
+ ),
246
+ /* @__PURE__ */ jsx(
247
+ "div",
248
+ {
249
+ className: cn(
250
+ "px-5 pb-5 whitespace-pre-line",
251
+ mutedTextClass(tone)
252
+ ),
253
+ children: item.answer
254
+ }
255
+ )
256
+ ]
257
+ },
258
+ item.id ?? item.question
259
+ )) })
260
+ }
261
+ )
262
+ );
263
+ FaqSection.displayName = "FaqSection";
264
+ var columnClass = {
265
+ 2: "lg:grid-cols-2",
266
+ 3: "lg:grid-cols-3",
267
+ 4: "lg:grid-cols-4"
268
+ };
269
+ var FeatureGridSection = React5.forwardRef(
270
+ ({
271
+ features,
272
+ columns = 3,
273
+ variant = "cards",
274
+ icons,
275
+ tone = "default",
276
+ align = "start",
277
+ components,
278
+ ...rest
279
+ }, ref) => /* @__PURE__ */ jsx(
280
+ SectionShell,
281
+ {
282
+ ref,
283
+ "data-slot": "feature-grid-section",
284
+ tone,
285
+ align,
286
+ ...rest,
287
+ children: /* @__PURE__ */ jsx(
288
+ "ul",
289
+ {
290
+ className: cn("mt-12 grid gap-6 sm:grid-cols-2", columnClass[columns]),
291
+ children: features.map((feature) => /* @__PURE__ */ jsxs(
292
+ "li",
293
+ {
294
+ className: cn(
295
+ "flex flex-col gap-3",
296
+ variant === "cards" && cn("rounded-2xl p-6", cardClass(tone))
297
+ ),
298
+ children: [
299
+ feature.icon && /* @__PURE__ */ jsx(IconTile, { name: feature.icon, icons, tone }),
300
+ feature.tag && /* @__PURE__ */ jsx(
301
+ "p",
302
+ {
303
+ className: cn(
304
+ "text-xs font-semibold tracking-wider uppercase",
305
+ accentTextClass(tone)
306
+ ),
307
+ children: feature.tag
308
+ }
309
+ ),
310
+ /* @__PURE__ */ jsx("h3", { className: cn("text-lg font-semibold", headingTextClass(tone)), children: feature.title }),
311
+ /* @__PURE__ */ jsx("p", { className: mutedTextClass(tone), children: feature.description }),
312
+ feature.link && /* @__PURE__ */ jsxs(
313
+ TemplateAnchor,
314
+ {
315
+ href: feature.link.href,
316
+ trackingId: feature.link.trackingId,
317
+ components,
318
+ className: cn(
319
+ "mt-auto inline-flex items-center gap-1 font-semibold hover:underline",
320
+ accentTextClass(tone)
321
+ ),
322
+ children: [
323
+ feature.link.label,
324
+ /* @__PURE__ */ jsx(
325
+ ArrowRight,
326
+ {
327
+ "aria-hidden": "true",
328
+ className: "size-4 rtl:-scale-x-100"
329
+ }
330
+ )
331
+ ]
332
+ }
333
+ )
334
+ ]
335
+ },
336
+ feature.title
337
+ ))
338
+ }
339
+ )
340
+ }
341
+ )
342
+ );
343
+ FeatureGridSection.displayName = "FeatureGridSection";
344
+ var HeroSection = React5.forwardRef(
345
+ ({
346
+ eyebrow,
347
+ title,
348
+ description,
349
+ variant = "centered",
350
+ tone = "default",
351
+ primaryCta,
352
+ secondaryCta,
353
+ ctaNote,
354
+ highlights,
355
+ meta,
356
+ logo,
357
+ image,
358
+ breadcrumbs,
359
+ headingLevel = "h1",
360
+ labels,
361
+ components,
362
+ className,
363
+ ...rest
364
+ }, ref) => {
365
+ const titleId = React5.useId();
366
+ const split = variant === "split" && !!image;
367
+ const align = split ? "start" : "center";
368
+ return /* @__PURE__ */ jsx(
369
+ "section",
370
+ {
371
+ ref,
372
+ "data-slot": "hero-section",
373
+ "data-tone": tone,
374
+ "aria-labelledby": titleId,
375
+ className: cn("py-16 sm:py-24 lg:py-28", toneClass(tone), className),
376
+ ...rest,
377
+ children: /* @__PURE__ */ jsxs(
378
+ "div",
379
+ {
380
+ className: cn(
381
+ containerClass(),
382
+ split && "grid items-center gap-12 lg:grid-cols-2"
383
+ ),
384
+ children: [
385
+ /* @__PURE__ */ jsxs("div", { className: cn(!split && "flex flex-col items-center"), children: [
386
+ breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(
387
+ "nav",
388
+ {
389
+ "aria-label": labels?.breadcrumb ?? "Breadcrumb",
390
+ className: "mb-6",
391
+ children: /* @__PURE__ */ jsx(
392
+ "ol",
393
+ {
394
+ className: cn(
395
+ "flex flex-wrap items-center gap-1 text-sm",
396
+ mutedTextClass(tone),
397
+ !split && "justify-center"
398
+ ),
399
+ children: breadcrumbs.map((crumb, i) => {
400
+ const last = i === breadcrumbs.length - 1;
401
+ return /* @__PURE__ */ jsx("li", { className: "flex items-center gap-1", children: last ? /* @__PURE__ */ jsx("span", { "aria-current": "page", children: crumb.label }) : /* @__PURE__ */ jsxs(Fragment, { children: [
402
+ /* @__PURE__ */ jsx(
403
+ TemplateAnchor,
404
+ {
405
+ href: crumb.href,
406
+ trackingId: crumb.trackingId,
407
+ components,
408
+ className: "hover:underline focus-visible:underline",
409
+ children: crumb.label
410
+ }
411
+ ),
412
+ /* @__PURE__ */ jsx(
413
+ ChevronRight,
414
+ {
415
+ "aria-hidden": "true",
416
+ className: "size-4 rtl:-scale-x-100"
417
+ }
418
+ )
419
+ ] }) }, crumb.href);
420
+ })
421
+ }
422
+ )
423
+ }
424
+ ),
425
+ logo && /* @__PURE__ */ jsx(
426
+ TemplateImg,
427
+ {
428
+ ...logo,
429
+ components,
430
+ className: "mb-6 h-12 w-auto"
431
+ }
432
+ ),
433
+ /* @__PURE__ */ jsx(
434
+ SectionHeading,
435
+ {
436
+ as: headingLevel,
437
+ size: "hero",
438
+ eyebrow,
439
+ title,
440
+ description,
441
+ align,
442
+ tone,
443
+ titleId
444
+ }
445
+ ),
446
+ meta && meta.length > 0 && /* @__PURE__ */ jsx(
447
+ "p",
448
+ {
449
+ "data-slot": "hero-meta",
450
+ className: cn(
451
+ "mt-6 flex flex-wrap gap-x-2 gap-y-1 text-sm font-medium",
452
+ mutedTextClass(tone),
453
+ !split && "justify-center"
454
+ ),
455
+ children: meta.map((item, i) => /* @__PURE__ */ jsxs(React5.Fragment, { children: [
456
+ i > 0 && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\xB7" }),
457
+ /* @__PURE__ */ jsx("span", { children: item })
458
+ ] }, item))
459
+ }
460
+ ),
461
+ /* @__PURE__ */ jsx(
462
+ CtaLinks,
463
+ {
464
+ primary: primaryCta,
465
+ secondary: secondaryCta,
466
+ tone,
467
+ align,
468
+ components,
469
+ className: "mt-8"
470
+ }
471
+ ),
472
+ ctaNote && /* @__PURE__ */ jsx("p", { className: cn("mt-4 text-sm", mutedTextClass(tone)), children: ctaNote }),
473
+ highlights && highlights.length > 0 && /* @__PURE__ */ jsx(
474
+ "ul",
475
+ {
476
+ className: cn(
477
+ "mt-8 flex flex-wrap gap-x-6 gap-y-2 text-sm font-medium",
478
+ !split && "justify-center"
479
+ ),
480
+ children: highlights.map((item) => /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2", children: [
481
+ /* @__PURE__ */ jsx(
482
+ CircleCheck,
483
+ {
484
+ "aria-hidden": "true",
485
+ className: cn("size-4 shrink-0", accentTextClass(tone))
486
+ }
487
+ ),
488
+ item
489
+ ] }, item))
490
+ }
491
+ )
492
+ ] }),
493
+ image && /* @__PURE__ */ jsx(
494
+ TemplateImg,
495
+ {
496
+ ...image,
497
+ priority: true,
498
+ components,
499
+ className: cn(
500
+ "h-auto w-full rounded-2xl object-cover shadow-xl",
501
+ !split && "mx-auto mt-12 max-w-5xl"
502
+ )
503
+ }
504
+ )
505
+ ]
506
+ }
507
+ )
508
+ }
509
+ );
510
+ }
511
+ );
512
+ HeroSection.displayName = "HeroSection";
513
+ var defaultLeadFormFields = [
514
+ {
515
+ name: "firstName",
516
+ label: "First name",
517
+ required: true,
518
+ autoComplete: "given-name",
519
+ width: "half"
520
+ },
521
+ {
522
+ name: "lastName",
523
+ label: "Last name",
524
+ required: true,
525
+ autoComplete: "family-name",
526
+ width: "half"
527
+ },
528
+ {
529
+ name: "email",
530
+ label: "Work email",
531
+ type: "email",
532
+ required: true,
533
+ autoComplete: "email"
534
+ },
535
+ {
536
+ name: "company",
537
+ label: "Company",
538
+ required: true,
539
+ autoComplete: "organization"
540
+ }
541
+ ];
542
+ var controlClass = cn(
543
+ // Input's field styling (single source of truth for form controls); h-auto
544
+ // and py-2.5 because this one class also sizes <textarea> and <select>.
545
+ inputVariants({ size: "md" }),
546
+ "block h-auto py-2.5"
547
+ );
548
+ var LeadFormSection = React5.forwardRef(
549
+ ({
550
+ eyebrow,
551
+ title,
552
+ description,
553
+ action,
554
+ method = "post",
555
+ fields = defaultLeadFormFields,
556
+ hiddenFields,
557
+ submitLabel = "Submit",
558
+ note,
559
+ layout = "split",
560
+ highlights,
561
+ tone = "muted",
562
+ submitTrackingId,
563
+ components,
564
+ className,
565
+ ...rest
566
+ }, ref) => {
567
+ const baseId = React5.useId();
568
+ const titleId = `${baseId}-title`;
569
+ const split = layout === "split";
570
+ const resolvedAction = typeof action === "string" ? safeHref(action) : action;
571
+ if (resolvedAction == null) return null;
572
+ return /* @__PURE__ */ jsx(
573
+ "section",
574
+ {
575
+ ref,
576
+ "data-slot": "lead-form-section",
577
+ "data-tone": tone,
578
+ "aria-labelledby": titleId,
579
+ className: cn("py-16 sm:py-24", toneClass(tone), className),
580
+ ...rest,
581
+ children: /* @__PURE__ */ jsxs(
582
+ "div",
583
+ {
584
+ className: cn(
585
+ containerClass(split ? "wide" : "narrow"),
586
+ split && "grid items-start gap-12 lg:grid-cols-2"
587
+ ),
588
+ children: [
589
+ /* @__PURE__ */ jsxs("div", { children: [
590
+ /* @__PURE__ */ jsx(
591
+ SectionHeading,
592
+ {
593
+ eyebrow,
594
+ title,
595
+ description,
596
+ align: split ? "start" : "center",
597
+ tone,
598
+ titleId
599
+ }
600
+ ),
601
+ highlights && highlights.length > 0 && /* @__PURE__ */ jsx(
602
+ "ul",
603
+ {
604
+ className: cn(
605
+ "mt-6 space-y-2",
606
+ !split && "mx-auto w-fit",
607
+ mutedTextClass(tone)
608
+ ),
609
+ children: highlights.map((item) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2", children: [
610
+ /* @__PURE__ */ jsx(
611
+ CircleCheck,
612
+ {
613
+ "aria-hidden": "true",
614
+ className: cn(
615
+ "mt-0.5 size-4 shrink-0",
616
+ accentTextClass(tone)
617
+ )
618
+ }
619
+ ),
620
+ item
621
+ ] }, item))
622
+ }
623
+ )
624
+ ] }),
625
+ /* @__PURE__ */ jsxs(
626
+ "form",
627
+ {
628
+ action: resolvedAction,
629
+ method: typeof resolvedAction === "string" ? method : void 0,
630
+ "aria-labelledby": titleId,
631
+ className: cn(
632
+ "grid gap-5 rounded-2xl p-6 sm:grid-cols-2 sm:p-8",
633
+ // The form card always uses the theme surface so inputs stay legible on a brand band.
634
+ cardClass("default"),
635
+ !split && "mt-10"
636
+ ),
637
+ children: [
638
+ hiddenFields && Object.entries(hiddenFields).map(([name, value]) => /* @__PURE__ */ jsx("input", { type: "hidden", name, value }, name)),
639
+ fields.map((field) => {
640
+ const id = `${baseId}-${field.name}`;
641
+ const common = {
642
+ id,
643
+ name: field.name,
644
+ required: field.required,
645
+ autoComplete: field.autoComplete,
646
+ className: controlClass
647
+ };
648
+ return /* @__PURE__ */ jsxs(
649
+ "div",
650
+ {
651
+ className: cn(field.width !== "half" && "sm:col-span-2"),
652
+ children: [
653
+ /* @__PURE__ */ jsxs(
654
+ "label",
655
+ {
656
+ htmlFor: id,
657
+ className: "mb-1.5 block text-sm font-medium",
658
+ children: [
659
+ field.label,
660
+ field.required && /* @__PURE__ */ jsx(RequiredMark, {})
661
+ ]
662
+ }
663
+ ),
664
+ field.type === "textarea" ? /* @__PURE__ */ jsx(
665
+ "textarea",
666
+ {
667
+ ...common,
668
+ rows: 4,
669
+ placeholder: field.placeholder
670
+ }
671
+ ) : field.type === "select" ? /* @__PURE__ */ jsxs("select", { ...common, defaultValue: "", children: [
672
+ /* @__PURE__ */ jsx("option", { value: "", disabled: true, children: field.placeholder ?? "" }),
673
+ field.options?.map((option) => /* @__PURE__ */ jsx("option", { value: option, children: option }, option))
674
+ ] }) : /* @__PURE__ */ jsx(
675
+ "input",
676
+ {
677
+ ...common,
678
+ type: field.type ?? "text",
679
+ placeholder: field.placeholder
680
+ }
681
+ )
682
+ ]
683
+ },
684
+ field.name
685
+ );
686
+ }),
687
+ /* @__PURE__ */ jsxs("div", { className: "sm:col-span-2", children: [
688
+ /* @__PURE__ */ jsx(
689
+ "button",
690
+ {
691
+ type: "submit",
692
+ "data-track": submitTrackingId,
693
+ className: cn(
694
+ buttonVariants({
695
+ variant: "primary",
696
+ size: "lg",
697
+ fullWidth: true
698
+ }),
699
+ "h-auto min-h-12 py-3 whitespace-normal"
700
+ ),
701
+ children: submitLabel
702
+ }
703
+ ),
704
+ note && /* @__PURE__ */ jsx("p", { className: cn("mt-3 text-xs", mutedTextClass("default")), children: note })
705
+ ] })
706
+ ]
707
+ }
708
+ )
709
+ ]
710
+ }
711
+ )
712
+ }
713
+ );
714
+ }
715
+ );
716
+ LeadFormSection.displayName = "LeadFormSection";
717
+ var duration = { slow: "60s", normal: "40s", fast: "25s" };
718
+ function Logo({
719
+ logo,
720
+ tone,
721
+ hidden,
722
+ components
723
+ }) {
724
+ const mark = logo.src ? /* @__PURE__ */ jsx(
725
+ "img",
726
+ {
727
+ src: logo.src,
728
+ alt: hidden ? "" : logo.name,
729
+ loading: "lazy",
730
+ decoding: "async",
731
+ className: cn(
732
+ "h-8 w-auto max-w-[9rem] object-contain opacity-70 grayscale transition hover:opacity-100 hover:grayscale-0",
733
+ // Logos are drawn white on dark surfaces so dark wordmarks stay visible.
734
+ tone === "brand" ? "brightness-0 invert" : "dark:brightness-0 dark:invert"
735
+ )
736
+ }
737
+ ) : /* @__PURE__ */ jsx(
738
+ "span",
739
+ {
740
+ className: cn(
741
+ "text-lg font-semibold whitespace-nowrap",
742
+ mutedTextClass(tone ?? "default")
743
+ ),
744
+ children: logo.name
745
+ }
746
+ );
747
+ return logo.href ? /* @__PURE__ */ jsx(
748
+ TemplateAnchor,
749
+ {
750
+ href: logo.href,
751
+ trackingId: logo.trackingId,
752
+ components,
753
+ tabIndex: hidden ? -1 : void 0,
754
+ className: "focus-visible:ring-ring inline-flex rounded focus-visible:ring-2 focus-visible:outline-none",
755
+ children: mark
756
+ }
757
+ ) : mark;
758
+ }
759
+ var LogoCloudSection = React5.forwardRef(
760
+ ({
761
+ logos,
762
+ variant = "grid",
763
+ speed = "normal",
764
+ tone = "default",
765
+ align = "center",
766
+ components,
767
+ ...rest
768
+ }, ref) => /* @__PURE__ */ jsx(
769
+ SectionShell,
770
+ {
771
+ ref,
772
+ "data-slot": "logo-cloud-section",
773
+ tone,
774
+ align,
775
+ spacing: "compact",
776
+ ...rest,
777
+ children: variant === "marquee" ? /* @__PURE__ */ jsx(
778
+ "div",
779
+ {
780
+ className: "mie-marquee-host mt-8 overflow-hidden [mask-image:linear-gradient(90deg,transparent,black_10%,black_90%,transparent)]",
781
+ style: { "--mie-marquee-duration": duration[speed] },
782
+ children: /* @__PURE__ */ jsxs("ul", { className: "mie-marquee flex w-max items-center", children: [
783
+ logos.map((logo) => /* @__PURE__ */ jsx("li", { className: "shrink-0 pe-12", children: /* @__PURE__ */ jsx(Logo, { logo, tone, components }) }, logo.name)),
784
+ logos.map((logo) => /* @__PURE__ */ jsx(
785
+ "li",
786
+ {
787
+ "data-duplicate": "",
788
+ "aria-hidden": "true",
789
+ className: "shrink-0 pe-12",
790
+ children: /* @__PURE__ */ jsx(Logo, { logo, tone, components, hidden: true })
791
+ },
792
+ `${logo.name}-copy`
793
+ ))
794
+ ] })
795
+ }
796
+ ) : /* @__PURE__ */ jsx("ul", { className: "mt-8 flex flex-wrap items-center justify-center gap-x-12 gap-y-8", children: logos.map((logo) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Logo, { logo, tone, components }) }, logo.name)) })
797
+ }
798
+ )
799
+ );
800
+ LogoCloudSection.displayName = "LogoCloudSection";
801
+ var columnClass2 = [
802
+ "",
803
+ "lg:grid-cols-1",
804
+ "lg:grid-cols-2",
805
+ "lg:grid-cols-3",
806
+ "lg:grid-cols-4"
807
+ ];
808
+ var PricingSection = React5.forwardRef(
809
+ ({ plans, note, tone = "default", align = "center", components, ...rest }, ref) => /* @__PURE__ */ jsxs(
810
+ SectionShell,
811
+ {
812
+ ref,
813
+ "data-slot": "pricing-section",
814
+ tone,
815
+ align,
816
+ ...rest,
817
+ children: [
818
+ /* @__PURE__ */ jsx(
819
+ "ul",
820
+ {
821
+ className: cn(
822
+ "mt-12 grid items-stretch gap-6 md:grid-cols-2",
823
+ columnClass2[Math.min(plans.length, 4)],
824
+ plans.length === 1 && "mx-auto max-w-md"
825
+ ),
826
+ children: plans.map((plan) => /* @__PURE__ */ jsxs(
827
+ "li",
828
+ {
829
+ className: cn(
830
+ "relative flex flex-col rounded-2xl p-6 sm:p-8",
831
+ cardClass(tone),
832
+ plan.highlighted && "ring-primary-600 dark:ring-primary-400 ring-2"
833
+ ),
834
+ children: [
835
+ plan.highlighted && plan.badge && /* @__PURE__ */ jsx(Badge, { className: "bg-primary-800 dark:bg-primary-800 absolute start-6 -top-3 px-3 py-1 text-xs font-semibold text-white dark:text-white", children: plan.badge }),
836
+ /* @__PURE__ */ jsx("h3", { className: cn("text-lg font-semibold", headingTextClass(tone)), children: plan.name }),
837
+ plan.description && /* @__PURE__ */ jsx("p", { className: cn("mt-2 text-sm", mutedTextClass(tone)), children: plan.description }),
838
+ /* @__PURE__ */ jsxs("p", { className: "mt-6 flex flex-wrap items-baseline gap-x-2", children: [
839
+ /* @__PURE__ */ jsx(
840
+ "span",
841
+ {
842
+ className: cn(
843
+ "text-4xl font-bold tracking-tight",
844
+ headingTextClass(tone)
845
+ ),
846
+ children: plan.price
847
+ }
848
+ ),
849
+ plan.period && /* @__PURE__ */ jsx("span", { className: cn("text-sm", mutedTextClass(tone)), children: plan.period })
850
+ ] }),
851
+ /* @__PURE__ */ jsx("ul", { className: "mt-6 flex-1 space-y-3 text-sm", children: plan.features.map((feature) => /* @__PURE__ */ jsxs("li", { className: "flex gap-3", children: [
852
+ /* @__PURE__ */ jsx(
853
+ Check,
854
+ {
855
+ "aria-hidden": "true",
856
+ className: cn(
857
+ "mt-0.5 size-4 shrink-0",
858
+ accentTextClass(tone)
859
+ )
860
+ }
861
+ ),
862
+ feature
863
+ ] }, feature)) }),
864
+ plan.cta && /* @__PURE__ */ jsx(
865
+ TemplateAnchor,
866
+ {
867
+ href: plan.cta.href,
868
+ trackingId: plan.cta.trackingId,
869
+ components,
870
+ className: cn(
871
+ buttonVariants({
872
+ variant: plan.highlighted ? "primary" : "outline",
873
+ size: "lg",
874
+ fullWidth: true
875
+ }),
876
+ "mt-8 h-auto min-h-12 py-3 whitespace-normal",
877
+ tone === "brand" && (plan.highlighted ? "text-primary-900 hover:bg-primary-50 bg-white" : "border-white/70 text-white hover:bg-white/10 hover:text-white dark:border-white/70 dark:text-white")
878
+ ),
879
+ children: plan.cta.label
880
+ }
881
+ )
882
+ ]
883
+ },
884
+ plan.name
885
+ ))
886
+ }
887
+ ),
888
+ note && /* @__PURE__ */ jsx(
889
+ "p",
890
+ {
891
+ className: cn(
892
+ "mt-8 text-sm",
893
+ mutedTextClass(tone),
894
+ align === "center" && "text-center"
895
+ ),
896
+ children: note
897
+ }
898
+ )
899
+ ]
900
+ }
901
+ )
902
+ );
903
+ PricingSection.displayName = "PricingSection";
904
+ var columnClass3 = [
905
+ "",
906
+ "",
907
+ "lg:grid-cols-2",
908
+ "lg:grid-cols-3",
909
+ "lg:grid-cols-4"
910
+ ];
911
+ var connectorInset = [
912
+ "",
913
+ "",
914
+ "inset-x-[25%]",
915
+ "inset-x-[16.667%]",
916
+ "inset-x-[12.5%]"
917
+ ];
918
+ var ProcessStepsSection = React5.forwardRef(({ steps, icons, tone = "default", align = "center", ...rest }, ref) => {
919
+ const columns = Math.min(steps.length, 4);
920
+ return /* @__PURE__ */ jsx(
921
+ SectionShell,
922
+ {
923
+ ref,
924
+ "data-slot": "process-steps-section",
925
+ tone,
926
+ align,
927
+ ...rest,
928
+ children: /* @__PURE__ */ jsxs("div", { className: "relative mt-12", children: [
929
+ steps.length > 1 && steps.length <= 4 && /* @__PURE__ */ jsx(
930
+ "div",
931
+ {
932
+ "aria-hidden": "true",
933
+ className: cn(
934
+ "absolute top-6 hidden h-px lg:block",
935
+ connectorInset[columns],
936
+ tone === "brand" ? "bg-white/25" : "bg-border"
937
+ )
938
+ }
939
+ ),
940
+ /* @__PURE__ */ jsx("ol", { className: cn("relative grid gap-10", columnClass3[columns]), children: steps.map((step, i) => /* @__PURE__ */ jsxs(
941
+ "li",
942
+ {
943
+ className: "flex flex-col items-center text-center",
944
+ children: [
945
+ /* @__PURE__ */ jsx(
946
+ "span",
947
+ {
948
+ "aria-hidden": "true",
949
+ className: cn(
950
+ "flex size-12 items-center justify-center rounded-full text-lg font-bold",
951
+ tone === "brand" ? "text-primary-900 bg-white" : "bg-primary-800 text-white"
952
+ ),
953
+ children: step.icon ? /* @__PURE__ */ jsx(TemplateIcon, { name: step.icon, icons }) : i + 1
954
+ }
955
+ ),
956
+ /* @__PURE__ */ jsx(
957
+ "h3",
958
+ {
959
+ className: cn(
960
+ "mt-5 text-lg font-semibold",
961
+ headingTextClass(tone)
962
+ ),
963
+ children: step.title
964
+ }
965
+ ),
966
+ /* @__PURE__ */ jsx("p", { className: cn("mt-2 max-w-xs", mutedTextClass(tone)), children: step.description })
967
+ ]
968
+ },
969
+ step.title
970
+ )) })
971
+ ] })
972
+ }
973
+ );
974
+ });
975
+ ProcessStepsSection.displayName = "ProcessStepsSection";
976
+ var columnClass4 = {
977
+ 2: "lg:grid-cols-2",
978
+ 3: "lg:grid-cols-3",
979
+ 4: "lg:grid-cols-4"
980
+ };
981
+ var ResourceCardsSection = React5.forwardRef(
982
+ ({
983
+ items,
984
+ columns = 3,
985
+ viewAll,
986
+ tone = "default",
987
+ align = "start",
988
+ components,
989
+ ...rest
990
+ }, ref) => /* @__PURE__ */ jsxs(
991
+ SectionShell,
992
+ {
993
+ ref,
994
+ "data-slot": "resource-cards-section",
995
+ tone,
996
+ align,
997
+ ...rest,
998
+ children: [
999
+ /* @__PURE__ */ jsx(
1000
+ "ul",
1001
+ {
1002
+ className: cn("mt-12 grid gap-6 sm:grid-cols-2", columnClass4[columns]),
1003
+ children: items.map((item) => /* @__PURE__ */ jsxs(
1004
+ "li",
1005
+ {
1006
+ className: cn(
1007
+ "group relative flex flex-col overflow-hidden rounded-2xl",
1008
+ "focus-within:ring-ring focus-within:ring-2",
1009
+ cardClass(tone)
1010
+ ),
1011
+ children: [
1012
+ item.image && /* @__PURE__ */ jsx(
1013
+ TemplateImg,
1014
+ {
1015
+ ...item.image,
1016
+ components,
1017
+ className: "aspect-video w-full object-cover"
1018
+ }
1019
+ ),
1020
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-col gap-2 p-6", children: [
1021
+ item.kind && /* @__PURE__ */ jsx(
1022
+ "p",
1023
+ {
1024
+ className: cn(
1025
+ "text-xs font-semibold tracking-wider uppercase",
1026
+ accentTextClass(tone)
1027
+ ),
1028
+ children: item.kind
1029
+ }
1030
+ ),
1031
+ /* @__PURE__ */ jsx(
1032
+ "h3",
1033
+ {
1034
+ className: cn("text-lg font-semibold", headingTextClass(tone)),
1035
+ children: /* @__PURE__ */ jsx(
1036
+ TemplateAnchor,
1037
+ {
1038
+ href: item.href,
1039
+ trackingId: item.trackingId,
1040
+ components,
1041
+ className: "group-hover:underline after:absolute after:inset-0 focus-visible:outline-none",
1042
+ children: item.title
1043
+ }
1044
+ )
1045
+ }
1046
+ ),
1047
+ item.excerpt && /* @__PURE__ */ jsx("p", { className: cn("line-clamp-3", mutedTextClass(tone)), children: item.excerpt }),
1048
+ item.meta && /* @__PURE__ */ jsx("p", { className: cn("mt-auto pt-2 text-sm", mutedTextClass(tone)), children: item.meta })
1049
+ ] })
1050
+ ]
1051
+ },
1052
+ item.href
1053
+ ))
1054
+ }
1055
+ ),
1056
+ viewAll && /* @__PURE__ */ jsx("p", { className: cn("mt-10", align === "center" && "text-center"), children: /* @__PURE__ */ jsxs(
1057
+ TemplateAnchor,
1058
+ {
1059
+ href: viewAll.href,
1060
+ trackingId: viewAll.trackingId,
1061
+ components,
1062
+ className: cn(
1063
+ "inline-flex items-center gap-1 font-semibold hover:underline",
1064
+ accentTextClass(tone)
1065
+ ),
1066
+ children: [
1067
+ viewAll.label,
1068
+ /* @__PURE__ */ jsx(
1069
+ ArrowRight,
1070
+ {
1071
+ "aria-hidden": "true",
1072
+ className: "size-4 rtl:-scale-x-100"
1073
+ }
1074
+ )
1075
+ ]
1076
+ }
1077
+ ) })
1078
+ ]
1079
+ }
1080
+ )
1081
+ );
1082
+ ResourceCardsSection.displayName = "ResourceCardsSection";
1083
+ var SplitContentSection = React5.forwardRef(
1084
+ ({
1085
+ eyebrow,
1086
+ title,
1087
+ description,
1088
+ image,
1089
+ caption,
1090
+ bullets,
1091
+ primaryCta,
1092
+ secondaryCta,
1093
+ mediaPosition = "end",
1094
+ tone = "default",
1095
+ components,
1096
+ className,
1097
+ ...rest
1098
+ }, ref) => {
1099
+ const titleId = React5.useId();
1100
+ return /* @__PURE__ */ jsx(
1101
+ "section",
1102
+ {
1103
+ ref,
1104
+ "data-slot": "split-content-section",
1105
+ "data-tone": tone,
1106
+ "aria-labelledby": titleId,
1107
+ className: cn("py-16 sm:py-24", toneClass(tone), className),
1108
+ ...rest,
1109
+ children: /* @__PURE__ */ jsxs(
1110
+ "div",
1111
+ {
1112
+ className: cn(
1113
+ containerClass(),
1114
+ "grid items-center gap-12 lg:grid-cols-2"
1115
+ ),
1116
+ children: [
1117
+ /* @__PURE__ */ jsxs("div", { children: [
1118
+ /* @__PURE__ */ jsx(
1119
+ SectionHeading,
1120
+ {
1121
+ eyebrow,
1122
+ title,
1123
+ description,
1124
+ tone,
1125
+ titleId
1126
+ }
1127
+ ),
1128
+ bullets && bullets.length > 0 && /* @__PURE__ */ jsx("ul", { className: "mt-6 space-y-3", children: bullets.map((item) => /* @__PURE__ */ jsxs("li", { className: "flex gap-3", children: [
1129
+ /* @__PURE__ */ jsx(
1130
+ CircleCheck,
1131
+ {
1132
+ "aria-hidden": "true",
1133
+ className: cn(
1134
+ "mt-0.5 size-5 shrink-0",
1135
+ accentTextClass(tone)
1136
+ )
1137
+ }
1138
+ ),
1139
+ /* @__PURE__ */ jsx("span", { className: mutedTextClass(tone), children: item })
1140
+ ] }, item)) }),
1141
+ /* @__PURE__ */ jsx(
1142
+ CtaLinks,
1143
+ {
1144
+ primary: primaryCta,
1145
+ secondary: secondaryCta,
1146
+ tone,
1147
+ components,
1148
+ className: "mt-8"
1149
+ }
1150
+ )
1151
+ ] }),
1152
+ /* @__PURE__ */ jsxs("figure", { className: cn(mediaPosition === "start" && "lg:order-first"), children: [
1153
+ /* @__PURE__ */ jsx(
1154
+ TemplateImg,
1155
+ {
1156
+ ...image,
1157
+ components,
1158
+ className: "h-auto w-full rounded-2xl object-cover shadow-lg"
1159
+ }
1160
+ ),
1161
+ caption && /* @__PURE__ */ jsx("figcaption", { className: cn("mt-3 text-sm", mutedTextClass(tone)), children: caption })
1162
+ ] })
1163
+ ]
1164
+ }
1165
+ )
1166
+ }
1167
+ );
1168
+ }
1169
+ );
1170
+ SplitContentSection.displayName = "SplitContentSection";
1171
+ var columnClass5 = [
1172
+ "",
1173
+ "",
1174
+ "lg:grid-cols-2",
1175
+ "lg:grid-cols-3",
1176
+ "lg:grid-cols-4"
1177
+ ];
1178
+ var StatsSection = React5.forwardRef(
1179
+ ({
1180
+ stats,
1181
+ variant = "plain",
1182
+ locale,
1183
+ tone = "default",
1184
+ align = "center",
1185
+ ...rest
1186
+ }, ref) => {
1187
+ const format = new Intl.NumberFormat(locale);
1188
+ return /* @__PURE__ */ jsx(
1189
+ SectionShell,
1190
+ {
1191
+ ref,
1192
+ "data-slot": "stats-section",
1193
+ tone,
1194
+ align,
1195
+ ...rest,
1196
+ children: /* @__PURE__ */ jsx(
1197
+ "dl",
1198
+ {
1199
+ className: cn(
1200
+ "mt-12 grid gap-6 sm:grid-cols-2",
1201
+ columnClass5[Math.min(stats.length, 4)]
1202
+ ),
1203
+ children: stats.map((stat) => {
1204
+ const Trend = stat.trend === "down" ? TrendingDown : TrendingUp;
1205
+ const ruled = variant === "ruled";
1206
+ const shown = typeof stat.value === "number" ? format.format(stat.value) : stat.value;
1207
+ const long = `${stat.prefix ?? ""}${shown}${stat.suffix ?? ""}`.length > 6;
1208
+ return /* @__PURE__ */ jsxs(
1209
+ "div",
1210
+ {
1211
+ className: cn(
1212
+ "flex flex-col-reverse gap-2",
1213
+ align === "center" && !ruled && "items-center text-center",
1214
+ variant === "cards" && cn("rounded-2xl p-6", cardClass(tone)),
1215
+ ruled && "border-accent/70 border-s-2 ps-5"
1216
+ ),
1217
+ children: [
1218
+ /* @__PURE__ */ jsxs("dt", { children: [
1219
+ /* @__PURE__ */ jsx("span", { className: "font-semibold", children: stat.label }),
1220
+ stat.description && /* @__PURE__ */ jsx(
1221
+ "span",
1222
+ {
1223
+ className: cn("mt-1 block text-sm", mutedTextClass(tone)),
1224
+ children: stat.description
1225
+ }
1226
+ )
1227
+ ] }),
1228
+ /* @__PURE__ */ jsxs(
1229
+ "dd",
1230
+ {
1231
+ className: cn(
1232
+ "flex items-center gap-2 font-bold tracking-tight tabular-nums",
1233
+ ruled && long ? "text-2xl sm:text-3xl" : "text-4xl sm:text-5xl",
1234
+ tone === "brand" ? "text-white" : "text-primary-800 dark:text-primary-300"
1235
+ ),
1236
+ children: [
1237
+ stat.trend && /* @__PURE__ */ jsx(Trend, { "aria-hidden": "true", className: "size-7 shrink-0" }),
1238
+ stat.prefix,
1239
+ shown,
1240
+ stat.suffix
1241
+ ]
1242
+ }
1243
+ )
1244
+ ]
1245
+ },
1246
+ stat.label
1247
+ );
1248
+ })
1249
+ }
1250
+ )
1251
+ }
1252
+ );
1253
+ }
1254
+ );
1255
+ StatsSection.displayName = "StatsSection";
1256
+ var TestimonialSection = React5.forwardRef(
1257
+ ({
1258
+ testimonials,
1259
+ variant = "cards",
1260
+ labels,
1261
+ tone = "default",
1262
+ align = "center",
1263
+ components,
1264
+ ...rest
1265
+ }, ref) => {
1266
+ const featured = variant === "featured";
1267
+ const items = featured ? testimonials.slice(0, 1) : testimonials;
1268
+ return /* @__PURE__ */ jsx(
1269
+ SectionShell,
1270
+ {
1271
+ ref,
1272
+ "data-slot": "testimonial-section",
1273
+ tone,
1274
+ align,
1275
+ width: featured ? "narrow" : "wide",
1276
+ ...rest,
1277
+ children: /* @__PURE__ */ jsx(
1278
+ "ul",
1279
+ {
1280
+ className: cn(
1281
+ "mt-12 grid gap-6",
1282
+ !featured && "md:grid-cols-2 lg:grid-cols-3"
1283
+ ),
1284
+ children: items.map(({ rating, ...t }) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
1285
+ "figure",
1286
+ {
1287
+ className: cn(
1288
+ "flex h-full flex-col gap-6",
1289
+ featured ? "items-center text-center" : cn("rounded-2xl p-6", cardClass(tone))
1290
+ ),
1291
+ children: [
1292
+ rating && /* @__PURE__ */ jsxs("p", { className: "text-warning flex gap-0.5", children: [
1293
+ Array.from({ length: 5 }, (_, i) => /* @__PURE__ */ jsx(
1294
+ Star,
1295
+ {
1296
+ "aria-hidden": "true",
1297
+ className: cn(
1298
+ "size-4",
1299
+ i < rating ? "fill-current" : "opacity-30"
1300
+ )
1301
+ },
1302
+ i
1303
+ )),
1304
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: (labels?.rating ?? "Rated {rating} out of 5").replace(
1305
+ "{rating}",
1306
+ String(rating)
1307
+ ) })
1308
+ ] }),
1309
+ /* @__PURE__ */ jsx(
1310
+ "blockquote",
1311
+ {
1312
+ className: cn(
1313
+ "text-pretty",
1314
+ featured ? cn(
1315
+ "text-2xl font-medium sm:text-3xl",
1316
+ headingTextClass(tone)
1317
+ ) : "text-base"
1318
+ ),
1319
+ children: /* @__PURE__ */ jsx("p", { children: t.quote })
1320
+ }
1321
+ ),
1322
+ /* @__PURE__ */ jsxs("figcaption", { className: "mt-auto flex items-center gap-3", children: [
1323
+ t.avatar && /* @__PURE__ */ jsx(
1324
+ TemplateImg,
1325
+ {
1326
+ src: t.avatar,
1327
+ alt: "",
1328
+ width: 44,
1329
+ height: 44,
1330
+ components,
1331
+ className: "size-11 rounded-full object-cover"
1332
+ }
1333
+ ),
1334
+ /* @__PURE__ */ jsxs("span", { className: cn(!featured && "text-start"), children: [
1335
+ /* @__PURE__ */ jsx("span", { className: "block font-semibold", children: t.author }),
1336
+ (t.role || t.company) && /* @__PURE__ */ jsx(
1337
+ "span",
1338
+ {
1339
+ className: cn("block text-sm", mutedTextClass(tone)),
1340
+ children: [t.role, t.company].filter(Boolean).join(", ")
1341
+ }
1342
+ )
1343
+ ] })
1344
+ ] })
1345
+ ]
1346
+ }
1347
+ ) }, `${t.author}-${t.quote.slice(0, 24)}`))
1348
+ }
1349
+ )
1350
+ }
1351
+ );
1352
+ }
1353
+ );
1354
+ TestimonialSection.displayName = "TestimonialSection";
1355
+ var VideoSection = React5.forwardRef(
1356
+ ({ video, caption, tone = "default", align = "center", ...rest }, ref) => /* @__PURE__ */ jsx(
1357
+ SectionShell,
1358
+ {
1359
+ ref,
1360
+ "data-slot": "video-section",
1361
+ tone,
1362
+ align,
1363
+ ...rest,
1364
+ children: /* @__PURE__ */ jsxs("figure", { className: "mx-auto mt-12 max-w-5xl", children: [
1365
+ /* @__PURE__ */ jsx("div", { className: "aspect-video overflow-hidden rounded-2xl bg-neutral-900 shadow-xl", children: "youtubeId" in video ? /* @__PURE__ */ jsx(
1366
+ "iframe",
1367
+ {
1368
+ src: `https://www.youtube-nocookie.com/embed/${encodeURIComponent(video.youtubeId)}`,
1369
+ title: video.title,
1370
+ loading: "lazy",
1371
+ allow: "accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
1372
+ allowFullScreen: true,
1373
+ referrerPolicy: "strict-origin-when-cross-origin",
1374
+ className: "size-full border-0"
1375
+ }
1376
+ ) : /* @__PURE__ */ jsx(
1377
+ "video",
1378
+ {
1379
+ src: video.src,
1380
+ poster: video.poster,
1381
+ title: video.title,
1382
+ "aria-label": video.title,
1383
+ controls: true,
1384
+ preload: "none",
1385
+ className: "size-full object-cover",
1386
+ children: /* @__PURE__ */ jsx(
1387
+ "track",
1388
+ {
1389
+ kind: "captions",
1390
+ src: video.captions.src,
1391
+ srcLang: video.captions.srcLang,
1392
+ label: video.captions.label,
1393
+ default: true
1394
+ }
1395
+ )
1396
+ }
1397
+ ) }),
1398
+ caption && /* @__PURE__ */ jsx(
1399
+ "figcaption",
1400
+ {
1401
+ className: cn(
1402
+ "mt-3 text-sm",
1403
+ mutedTextClass(tone),
1404
+ align === "center" && "text-center"
1405
+ ),
1406
+ children: caption
1407
+ }
1408
+ )
1409
+ ] })
1410
+ }
1411
+ )
1412
+ );
1413
+ VideoSection.displayName = "VideoSection";
1414
+ var BenchmarkTableSection = React5.forwardRef(
1415
+ ({
1416
+ columns,
1417
+ rows,
1418
+ rowHeader,
1419
+ caption,
1420
+ footnote,
1421
+ locale,
1422
+ tone = "default",
1423
+ components,
1424
+ title,
1425
+ ...rest
1426
+ }, ref) => {
1427
+ const formatters = columns.map(
1428
+ (col) => new Intl.NumberFormat(locale, col.format)
1429
+ );
1430
+ const maxima = columns.map(
1431
+ (col) => col.bar ? Math.max(
1432
+ 1,
1433
+ ...rows.map((r) => {
1434
+ const v = r.values[col.key];
1435
+ return typeof v === "number" ? v : 0;
1436
+ })
1437
+ ) : 1
1438
+ );
1439
+ const cellBase = "px-4 py-3 tabular-nums";
1440
+ const stickyBg = tone === "brand" ? "bg-primary-900" : "bg-card";
1441
+ return /* @__PURE__ */ jsxs(
1442
+ SectionShell,
1443
+ {
1444
+ ref,
1445
+ "data-slot": "benchmark-table-section",
1446
+ tone,
1447
+ title,
1448
+ components,
1449
+ ...rest,
1450
+ children: [
1451
+ /* @__PURE__ */ jsx(
1452
+ "div",
1453
+ {
1454
+ className: cn("mt-10 overflow-x-auto rounded-2xl", cardClass(tone)),
1455
+ children: /* @__PURE__ */ jsxs("table", { className: "divide-border min-w-full divide-y text-sm", children: [
1456
+ (caption ?? title) && /* @__PURE__ */ jsx("caption", { className: "sr-only", children: caption ?? title }),
1457
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
1458
+ /* @__PURE__ */ jsx(
1459
+ "th",
1460
+ {
1461
+ scope: "col",
1462
+ className: cn(
1463
+ "sticky start-0 z-10 px-4 py-3 text-start font-semibold",
1464
+ stickyBg
1465
+ ),
1466
+ children: rowHeader
1467
+ }
1468
+ ),
1469
+ columns.map((col) => /* @__PURE__ */ jsx(
1470
+ "th",
1471
+ {
1472
+ scope: "col",
1473
+ className: cn(
1474
+ "px-4 py-3 font-semibold whitespace-nowrap",
1475
+ col.bar ? "text-start" : "text-end",
1476
+ col.emphasis && "bg-primary-500/10"
1477
+ ),
1478
+ children: col.label
1479
+ },
1480
+ col.key
1481
+ ))
1482
+ ] }) }),
1483
+ /* @__PURE__ */ jsx("tbody", { className: "divide-border divide-y", children: rows.map((row) => /* @__PURE__ */ jsxs("tr", { children: [
1484
+ /* @__PURE__ */ jsxs(
1485
+ "th",
1486
+ {
1487
+ scope: "row",
1488
+ className: cn(
1489
+ "sticky start-0 z-10 px-4 py-3 text-start font-medium",
1490
+ stickyBg
1491
+ ),
1492
+ children: [
1493
+ row.href ? /* @__PURE__ */ jsx(
1494
+ TemplateAnchor,
1495
+ {
1496
+ href: row.href,
1497
+ components,
1498
+ className: cn(
1499
+ "underline-offset-2 hover:underline",
1500
+ accentTextClass(tone)
1501
+ ),
1502
+ children: row.label
1503
+ }
1504
+ ) : row.label,
1505
+ row.sublabel && /* @__PURE__ */ jsx(
1506
+ "span",
1507
+ {
1508
+ className: cn(
1509
+ "block text-xs font-normal",
1510
+ mutedTextClass(tone)
1511
+ ),
1512
+ children: row.sublabel
1513
+ }
1514
+ )
1515
+ ]
1516
+ }
1517
+ ),
1518
+ columns.map((col, c) => {
1519
+ const v = row.values[col.key];
1520
+ const shown = v == null ? "\u2014" : typeof v === "number" ? formatters[c].format(v) : v;
1521
+ return /* @__PURE__ */ jsx(
1522
+ "td",
1523
+ {
1524
+ className: cn(
1525
+ cellBase,
1526
+ col.bar ? "text-start" : "text-end whitespace-nowrap",
1527
+ col.emphasis && cn(
1528
+ "bg-primary-500/10 font-semibold",
1529
+ accentTextClass(tone)
1530
+ )
1531
+ ),
1532
+ children: col.bar && typeof v === "number" ? /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-3", children: [
1533
+ /* @__PURE__ */ jsx(
1534
+ "span",
1535
+ {
1536
+ "aria-hidden": "true",
1537
+ className: "bg-muted h-2 w-32 max-w-full flex-none overflow-hidden rounded-full",
1538
+ children: /* @__PURE__ */ jsx(
1539
+ "span",
1540
+ {
1541
+ className: "bg-primary-600 block h-full rounded-full",
1542
+ style: {
1543
+ width: `${Math.round(v / maxima[c] * 100)}%`
1544
+ }
1545
+ }
1546
+ )
1547
+ }
1548
+ ),
1549
+ shown
1550
+ ] }) : shown
1551
+ },
1552
+ col.key
1553
+ );
1554
+ })
1555
+ ] }, row.label)) })
1556
+ ] })
1557
+ }
1558
+ ),
1559
+ footnote && /* @__PURE__ */ jsx("p", { className: cn("mt-4 max-w-3xl text-sm", mutedTextClass(tone)), children: footnote })
1560
+ ]
1561
+ }
1562
+ );
1563
+ }
1564
+ );
1565
+ BenchmarkTableSection.displayName = "BenchmarkTableSection";
1566
+ var LinkGroupsSection = React5.forwardRef(({ groups, columns = 3, tone = "muted", components, ...rest }, ref) => /* @__PURE__ */ jsx(
1567
+ SectionShell,
1568
+ {
1569
+ ref,
1570
+ "data-slot": "link-groups-section",
1571
+ tone,
1572
+ components,
1573
+ ...rest,
1574
+ children: /* @__PURE__ */ jsx(
1575
+ "div",
1576
+ {
1577
+ className: cn(
1578
+ "mt-10 grid gap-6",
1579
+ columns === 3 ? "lg:grid-cols-3" : "md:grid-cols-2"
1580
+ ),
1581
+ children: groups.map((group) => /* @__PURE__ */ jsxs(
1582
+ "div",
1583
+ {
1584
+ className: cn("rounded-2xl p-6", cardClass(tone)),
1585
+ children: [
1586
+ /* @__PURE__ */ jsx("h3", { className: cn("text-lg font-semibold", headingTextClass(tone)), children: group.title }),
1587
+ group.description && /* @__PURE__ */ jsx("p", { className: cn("mt-1 text-sm", mutedTextClass(tone)), children: group.description }),
1588
+ /* @__PURE__ */ jsx("ul", { className: "mt-4 space-y-1", children: group.links.map((link) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
1589
+ TemplateAnchor,
1590
+ {
1591
+ href: link.href,
1592
+ trackingId: link.trackingId,
1593
+ components,
1594
+ className: cn(
1595
+ "group flex items-center justify-between gap-2 rounded-lg px-3 py-2 text-sm font-medium transition-colors",
1596
+ tone === "brand" ? "hover:bg-white/10" : "hover:bg-primary-500/10 hover:text-primary-800 dark:hover:text-primary-300"
1597
+ ),
1598
+ children: [
1599
+ /* @__PURE__ */ jsx("span", { children: link.label }),
1600
+ /* @__PURE__ */ jsx(
1601
+ ArrowRight,
1602
+ {
1603
+ "aria-hidden": "true",
1604
+ className: "size-4 flex-none opacity-50 group-hover:opacity-100 rtl:-scale-x-100"
1605
+ }
1606
+ )
1607
+ ]
1608
+ }
1609
+ ) }, link.href)) })
1610
+ ]
1611
+ },
1612
+ group.title
1613
+ ))
1614
+ }
1615
+ )
1616
+ }
1617
+ ));
1618
+ LinkGroupsSection.displayName = "LinkGroupsSection";
1619
+ var MetricListSection = React5.forwardRef(
1620
+ ({
1621
+ metrics,
1622
+ takeaway,
1623
+ positive,
1624
+ labels,
1625
+ tone = "default",
1626
+ components,
1627
+ ...rest
1628
+ }, ref) => {
1629
+ const measured = metrics.some((m) => m.value);
1630
+ return /* @__PURE__ */ jsxs(
1631
+ SectionShell,
1632
+ {
1633
+ ref,
1634
+ "data-slot": "metric-list-section",
1635
+ "data-measured": measured || void 0,
1636
+ tone,
1637
+ spacing: "compact",
1638
+ status: measured ? "live" : "maturing",
1639
+ components,
1640
+ ...rest,
1641
+ children: [
1642
+ !measured && /* @__PURE__ */ jsx("p", { className: cn("mt-3 text-xs font-medium", mutedTextClass(tone)), children: labels?.preview ?? "Roadmap preview" }),
1643
+ takeaway && /* @__PURE__ */ jsx(
1644
+ "p",
1645
+ {
1646
+ className: cn(
1647
+ "mt-6 max-w-3xl rounded-xl border p-4 text-sm leading-relaxed font-medium",
1648
+ tone === "brand" ? "border-white/20 bg-white/5" : "border-success/30 bg-success/10 text-foreground"
1649
+ ),
1650
+ children: takeaway
1651
+ }
1652
+ ),
1653
+ /* @__PURE__ */ jsx(
1654
+ "ul",
1655
+ {
1656
+ className: cn(
1657
+ "mt-8 grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
1658
+ !measured && "border-border rounded-3xl border border-dashed p-4"
1659
+ ),
1660
+ children: metrics.map((metric) => /* @__PURE__ */ jsxs(
1661
+ "li",
1662
+ {
1663
+ className: cn(
1664
+ "rounded-xl p-5",
1665
+ cardClass(tone),
1666
+ positive && metric.value && "border-s-success border-s-4"
1667
+ ),
1668
+ children: [
1669
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3", children: [
1670
+ /* @__PURE__ */ jsx(
1671
+ "h3",
1672
+ {
1673
+ className: cn(
1674
+ "min-w-0 text-sm font-semibold",
1675
+ headingTextClass(tone)
1676
+ ),
1677
+ children: metric.label
1678
+ }
1679
+ ),
1680
+ metric.unit && /* @__PURE__ */ jsx("span", { className: "bg-primary-500/10 flex-none rounded-full px-2 py-0.5 text-xs font-medium", children: metric.unit })
1681
+ ] }),
1682
+ metric.value && /* @__PURE__ */ jsx(
1683
+ "p",
1684
+ {
1685
+ className: cn(
1686
+ "mt-3 text-3xl font-bold tracking-tight tabular-nums",
1687
+ headingTextClass(tone)
1688
+ ),
1689
+ children: metric.value
1690
+ }
1691
+ ),
1692
+ /* @__PURE__ */ jsx(
1693
+ "p",
1694
+ {
1695
+ className: cn(
1696
+ "mt-2 text-sm leading-relaxed",
1697
+ mutedTextClass(tone)
1698
+ ),
1699
+ children: metric.description
1700
+ }
1701
+ )
1702
+ ]
1703
+ },
1704
+ metric.label
1705
+ ))
1706
+ }
1707
+ )
1708
+ ]
1709
+ }
1710
+ );
1711
+ }
1712
+ );
1713
+ MetricListSection.displayName = "MetricListSection";
1714
+ var PdfEmbedSection = React5.forwardRef(
1715
+ ({
1716
+ title,
1717
+ src,
1718
+ downloadAs,
1719
+ aspectRatio = 0.5625,
1720
+ notice,
1721
+ labels,
1722
+ tone = "muted",
1723
+ align = "center",
1724
+ components,
1725
+ ...rest
1726
+ }, ref) => {
1727
+ const pdfSrc = safeHref(src);
1728
+ const viewerSrc = pdfSrc && (pdfSrc.includes("#") ? pdfSrc : `${pdfSrc}#view=FitH`);
1729
+ const onBrand = tone === "brand";
1730
+ return /* @__PURE__ */ jsxs(
1731
+ SectionShell,
1732
+ {
1733
+ ref,
1734
+ "data-slot": "pdf-embed-section",
1735
+ title,
1736
+ tone,
1737
+ align,
1738
+ components,
1739
+ ...rest,
1740
+ children: [
1741
+ notice && /* @__PURE__ */ jsxs("p", { className: "border-primary-500/30 bg-primary-500/10 mx-auto mt-8 flex max-w-3xl items-start gap-3 rounded-xl border px-4 py-3 text-start text-sm", children: [
1742
+ /* @__PURE__ */ jsx(Info, { "aria-hidden": "true", className: "mt-0.5 size-5 flex-none" }),
1743
+ notice
1744
+ ] }),
1745
+ pdfSrc && /* @__PURE__ */ jsxs(Fragment, { children: [
1746
+ /* @__PURE__ */ jsx(
1747
+ "div",
1748
+ {
1749
+ className: "border-border bg-card relative mt-10 overflow-hidden rounded-2xl border shadow-lg",
1750
+ style: { paddingTop: `${(aspectRatio * 100).toFixed(4)}%` },
1751
+ children: /* @__PURE__ */ jsx(
1752
+ "object",
1753
+ {
1754
+ data: viewerSrc,
1755
+ type: "application/pdf",
1756
+ "aria-label": title,
1757
+ className: "absolute inset-0 size-full",
1758
+ children: /* @__PURE__ */ jsx(
1759
+ "p",
1760
+ {
1761
+ className: cn(
1762
+ "flex size-full items-center justify-center p-6 text-center text-sm",
1763
+ mutedTextClass("default")
1764
+ ),
1765
+ children: /* @__PURE__ */ jsx("a", { href: pdfSrc, className: "underline underline-offset-2", children: labels?.fallback ?? "Open the PDF" })
1766
+ }
1767
+ )
1768
+ }
1769
+ )
1770
+ }
1771
+ ),
1772
+ /* @__PURE__ */ jsxs(
1773
+ "div",
1774
+ {
1775
+ className: cn(
1776
+ "mt-6 flex flex-wrap gap-3",
1777
+ align === "center" && "justify-center"
1778
+ ),
1779
+ children: [
1780
+ /* @__PURE__ */ jsxs(
1781
+ "a",
1782
+ {
1783
+ href: pdfSrc,
1784
+ download: downloadAs ?? true,
1785
+ className: cn(
1786
+ buttonVariants({ variant: "primary" }),
1787
+ onBrand && "text-primary-900 hover:bg-primary-50 bg-white"
1788
+ ),
1789
+ children: [
1790
+ /* @__PURE__ */ jsx(Download, { "aria-hidden": "true", className: "size-4" }),
1791
+ labels?.download ?? "Download PDF"
1792
+ ]
1793
+ }
1794
+ ),
1795
+ /* @__PURE__ */ jsxs(
1796
+ "a",
1797
+ {
1798
+ href: pdfSrc,
1799
+ target: "_blank",
1800
+ rel: "noopener noreferrer",
1801
+ className: cn(
1802
+ buttonVariants({ variant: "outline" }),
1803
+ onBrand && "border-white/70 text-white hover:bg-white/10"
1804
+ ),
1805
+ children: [
1806
+ /* @__PURE__ */ jsx(ExternalLink, { "aria-hidden": "true", className: "size-4" }),
1807
+ labels?.open ?? "Open in new tab"
1808
+ ]
1809
+ }
1810
+ )
1811
+ ]
1812
+ }
1813
+ )
1814
+ ] })
1815
+ ]
1816
+ }
1817
+ );
1818
+ }
1819
+ );
1820
+ PdfEmbedSection.displayName = "PdfEmbedSection";
1821
+ var barClass = {
1822
+ primary: "bg-primary-600",
1823
+ accent: "bg-accent",
1824
+ success: "bg-success"
1825
+ };
1826
+ var RankedListSection = React5.forwardRef(
1827
+ ({
1828
+ lists,
1829
+ numbered,
1830
+ layout = "stacked",
1831
+ bar = "primary",
1832
+ locale,
1833
+ tone = "default",
1834
+ components,
1835
+ ...rest
1836
+ }, ref) => {
1837
+ const format = new Intl.NumberFormat(locale);
1838
+ return /* @__PURE__ */ jsx(
1839
+ SectionShell,
1840
+ {
1841
+ ref,
1842
+ "data-slot": "ranked-list-section",
1843
+ tone,
1844
+ components,
1845
+ ...rest,
1846
+ children: /* @__PURE__ */ jsx(
1847
+ "div",
1848
+ {
1849
+ className: cn(
1850
+ "mt-10 grid gap-6",
1851
+ lists.length > 1 && "lg:grid-cols-2"
1852
+ ),
1853
+ children: lists.map((list, l) => {
1854
+ const max = Math.max(1, ...list.items.map((i) => i.value));
1855
+ return /* @__PURE__ */ jsxs(
1856
+ "div",
1857
+ {
1858
+ className: cn(
1859
+ layout === "inline" && cn("rounded-2xl p-6", cardClass(tone))
1860
+ ),
1861
+ children: [
1862
+ list.title && /* @__PURE__ */ jsx(
1863
+ "h3",
1864
+ {
1865
+ className: cn(
1866
+ "mb-4 text-lg font-semibold",
1867
+ headingTextClass(tone)
1868
+ ),
1869
+ children: list.title
1870
+ }
1871
+ ),
1872
+ /* @__PURE__ */ jsx("ol", { className: "space-y-3", children: list.items.map((item, i) => {
1873
+ const label = item.href ? /* @__PURE__ */ jsx(
1874
+ TemplateAnchor,
1875
+ {
1876
+ href: item.href,
1877
+ components,
1878
+ className: cn(
1879
+ "font-medium underline-offset-2 hover:underline",
1880
+ accentTextClass(tone)
1881
+ ),
1882
+ children: item.label
1883
+ }
1884
+ ) : /* @__PURE__ */ jsx(
1885
+ "span",
1886
+ {
1887
+ className: cn("font-medium", headingTextClass(tone)),
1888
+ children: item.label
1889
+ }
1890
+ );
1891
+ const track = /* @__PURE__ */ jsx(
1892
+ "span",
1893
+ {
1894
+ "aria-hidden": "true",
1895
+ className: cn(
1896
+ "block h-2 overflow-hidden rounded-full",
1897
+ tone === "brand" ? "bg-white/10" : "bg-muted"
1898
+ ),
1899
+ children: /* @__PURE__ */ jsx(
1900
+ "span",
1901
+ {
1902
+ className: cn(
1903
+ "block h-full rounded-full",
1904
+ barClass[bar]
1905
+ ),
1906
+ style: {
1907
+ width: `${Math.round(item.value / max * 100)}%`
1908
+ }
1909
+ }
1910
+ )
1911
+ }
1912
+ );
1913
+ const rank = numbered && /* @__PURE__ */ jsx(
1914
+ "span",
1915
+ {
1916
+ className: cn(
1917
+ "text-sm font-semibold tabular-nums",
1918
+ mutedTextClass(tone)
1919
+ ),
1920
+ children: String(i + 1).padStart(2, "0")
1921
+ }
1922
+ );
1923
+ const value = item.display ?? format.format(item.value);
1924
+ return layout === "inline" ? /* @__PURE__ */ jsxs(
1925
+ "li",
1926
+ {
1927
+ className: "flex items-center gap-3 text-sm",
1928
+ children: [
1929
+ rank,
1930
+ /* @__PURE__ */ jsx("span", { className: "w-28 flex-none truncate sm:w-36", children: label }),
1931
+ /* @__PURE__ */ jsx("span", { className: "flex-1", children: track }),
1932
+ /* @__PURE__ */ jsx("span", { className: "w-20 flex-none text-end font-semibold tabular-nums", children: value })
1933
+ ]
1934
+ },
1935
+ item.label
1936
+ ) : /* @__PURE__ */ jsxs(
1937
+ "li",
1938
+ {
1939
+ className: cn("rounded-xl p-4", cardClass(tone)),
1940
+ children: [
1941
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4", children: [
1942
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-3", children: [
1943
+ rank,
1944
+ label
1945
+ ] }),
1946
+ /* @__PURE__ */ jsxs("span", { className: cn("text-xs", mutedTextClass(tone)), children: [
1947
+ item.note ?? value,
1948
+ item.note && /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
1949
+ ": ",
1950
+ value
1951
+ ] })
1952
+ ] })
1953
+ ] }),
1954
+ /* @__PURE__ */ jsx("span", { className: "mt-2 block", children: track })
1955
+ ]
1956
+ },
1957
+ item.label
1958
+ );
1959
+ }) })
1960
+ ]
1961
+ },
1962
+ list.title ?? l
1963
+ );
1964
+ })
1965
+ }
1966
+ )
1967
+ }
1968
+ );
1969
+ }
1970
+ );
1971
+ RankedListSection.displayName = "RankedListSection";
1972
+ var ReportByline = React5.forwardRef(
1973
+ ({
1974
+ authors,
1975
+ published,
1976
+ updated,
1977
+ labels,
1978
+ tone = "default",
1979
+ components,
1980
+ className,
1981
+ ...rest
1982
+ }, ref) => {
1983
+ const headingId = React5.useId();
1984
+ return /* @__PURE__ */ jsx(
1985
+ "section",
1986
+ {
1987
+ ref,
1988
+ "data-slot": "report-byline",
1989
+ "data-tone": tone,
1990
+ "aria-labelledby": headingId,
1991
+ className: cn(
1992
+ "border-border border-t py-8",
1993
+ toneClass(tone),
1994
+ className
1995
+ ),
1996
+ ...rest,
1997
+ children: /* @__PURE__ */ jsxs("div", { className: containerClass(), children: [
1998
+ /* @__PURE__ */ jsx("h2", { id: headingId, className: "sr-only", children: labels?.heading ?? "About the author" }),
1999
+ /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-6", children: authors.map((author) => /* @__PURE__ */ jsxs(
2000
+ "li",
2001
+ {
2002
+ className: "flex flex-wrap items-center gap-4",
2003
+ children: [
2004
+ author.avatar && /* @__PURE__ */ jsx(
2005
+ TemplateImg,
2006
+ {
2007
+ ...author.avatar,
2008
+ width: author.avatar.width ?? 48,
2009
+ height: author.avatar.height ?? 48,
2010
+ components,
2011
+ className: "ring-border size-12 flex-none rounded-full object-cover ring-1"
2012
+ }
2013
+ ),
2014
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
2015
+ /* @__PURE__ */ jsxs("p", { className: cn("text-sm", mutedTextClass(tone)), children: [
2016
+ labels?.by ?? "By",
2017
+ " ",
2018
+ author.href ? /* @__PURE__ */ jsx(
2019
+ TemplateAnchor,
2020
+ {
2021
+ href: author.href,
2022
+ components,
2023
+ className: cn(
2024
+ "font-semibold underline-offset-2 hover:underline",
2025
+ headingTextClass(tone)
2026
+ ),
2027
+ children: author.name
2028
+ }
2029
+ ) : /* @__PURE__ */ jsx(
2030
+ "span",
2031
+ {
2032
+ className: cn("font-semibold", headingTextClass(tone)),
2033
+ children: author.name
2034
+ }
2035
+ ),
2036
+ author.role && /* @__PURE__ */ jsxs("span", { children: [
2037
+ " \xB7 ",
2038
+ author.role
2039
+ ] })
2040
+ ] }),
2041
+ (published || updated) && /* @__PURE__ */ jsxs("p", { className: cn("text-sm", mutedTextClass(tone)), children: [
2042
+ published && `${labels?.published ?? "Published"} ${published}`,
2043
+ published && updated && " \xB7 ",
2044
+ updated && `${labels?.updated ?? "Updated"} ${updated}`
2045
+ ] })
2046
+ ] }),
2047
+ author.profiles && author.profiles.length > 0 && /* @__PURE__ */ jsx("div", { className: "ms-auto flex flex-wrap gap-2", children: author.profiles.map((profile) => {
2048
+ const href = safeHref(profile.href);
2049
+ if (!href) return null;
2050
+ return /* @__PURE__ */ jsxs(
2051
+ "a",
2052
+ {
2053
+ href,
2054
+ target: "_blank",
2055
+ rel: "noopener noreferrer",
2056
+ "data-track": profile.trackingId,
2057
+ className: "border-border hover:border-primary-600 hover:text-primary-800 dark:hover:text-primary-300 inline-flex items-center rounded-full border px-3 py-1.5 text-sm font-medium",
2058
+ children: [
2059
+ /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
2060
+ author.name,
2061
+ " on "
2062
+ ] }),
2063
+ profile.label
2064
+ ]
2065
+ },
2066
+ profile.href
2067
+ );
2068
+ }) })
2069
+ ]
2070
+ },
2071
+ author.name
2072
+ )) })
2073
+ ] })
2074
+ }
2075
+ );
2076
+ }
2077
+ );
2078
+ ReportByline.displayName = "ReportByline";
2079
+ var ReportLegend = React5.forwardRef(
2080
+ ({
2081
+ entries,
2082
+ title = "How to read the data",
2083
+ tone = "muted",
2084
+ components,
2085
+ ...rest
2086
+ }, ref) => /* @__PURE__ */ jsx(
2087
+ SectionShell,
2088
+ {
2089
+ ref,
2090
+ "data-slot": "report-legend",
2091
+ title,
2092
+ tone,
2093
+ spacing: "compact",
2094
+ components,
2095
+ ...rest,
2096
+ children: /* @__PURE__ */ jsx("dl", { className: "mt-6 grid gap-3 sm:grid-cols-2 lg:grid-cols-3", children: entries.map((entry) => /* @__PURE__ */ jsxs(
2097
+ "div",
2098
+ {
2099
+ className: cn(
2100
+ "flex flex-col gap-2 rounded-xl p-4",
2101
+ cardClass(tone)
2102
+ ),
2103
+ children: [
2104
+ /* @__PURE__ */ jsx("dt", { children: /* @__PURE__ */ jsx(
2105
+ MetricStatusBadge,
2106
+ {
2107
+ status: entry.status,
2108
+ label: entry.label,
2109
+ onDark: tone === "brand"
2110
+ }
2111
+ ) }),
2112
+ /* @__PURE__ */ jsx("dd", { className: cn("text-sm leading-snug", mutedTextClass(tone)), children: entry.description })
2113
+ ]
2114
+ },
2115
+ entry.status
2116
+ )) })
2117
+ }
2118
+ )
2119
+ );
2120
+ ReportLegend.displayName = "ReportLegend";
2121
+ var ReportMethodology = React5.forwardRef(
2122
+ ({
2123
+ sources,
2124
+ citation,
2125
+ notes,
2126
+ resources,
2127
+ labels,
2128
+ tone = "muted",
2129
+ components,
2130
+ ...rest
2131
+ }, ref) => {
2132
+ const card = cn("rounded-2xl p-6", cardClass(tone));
2133
+ const subheading = cn(
2134
+ "text-sm font-semibold tracking-wide uppercase",
2135
+ mutedTextClass(tone)
2136
+ );
2137
+ return /* @__PURE__ */ jsxs(
2138
+ SectionShell,
2139
+ {
2140
+ ref,
2141
+ "data-slot": "report-methodology",
2142
+ tone,
2143
+ components,
2144
+ ...rest,
2145
+ children: [
2146
+ /* @__PURE__ */ jsx("dl", { className: "mt-10 grid gap-6 sm:grid-cols-2", children: sources.map((source) => /* @__PURE__ */ jsxs("div", { className: card, children: [
2147
+ /* @__PURE__ */ jsx("dt", { className: cn("font-semibold", headingTextClass(tone)), children: source.label }),
2148
+ /* @__PURE__ */ jsxs("dd", { className: cn("mt-2 text-sm", mutedTextClass(tone)), children: [
2149
+ source.description,
2150
+ safeHref(source.href) && /* @__PURE__ */ jsxs(Fragment, { children: [
2151
+ " ",
2152
+ /* @__PURE__ */ jsxs(
2153
+ "a",
2154
+ {
2155
+ href: safeHref(source.href),
2156
+ rel: "noopener noreferrer",
2157
+ className: cn(
2158
+ "font-medium underline underline-offset-2",
2159
+ accentTextClass(tone)
2160
+ ),
2161
+ children: [
2162
+ labels?.sourceLink ?? "Source",
2163
+ /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
2164
+ ": ",
2165
+ source.label
2166
+ ] })
2167
+ ]
2168
+ }
2169
+ )
2170
+ ] })
2171
+ ] })
2172
+ ] }, source.label)) }),
2173
+ citation && /* @__PURE__ */ jsxs("div", { className: cn(card, "mt-10 border-dashed"), children: [
2174
+ /* @__PURE__ */ jsx("h3", { className: subheading, children: labels?.citation ?? "How to cite this report" }),
2175
+ /* @__PURE__ */ jsx("p", { className: "mt-3 font-mono text-sm break-words select-all", children: citation })
2176
+ ] }),
2177
+ notes?.map((note) => /* @__PURE__ */ jsxs("div", { className: cn(card, "mt-6"), children: [
2178
+ /* @__PURE__ */ jsx("h3", { className: subheading, children: note.title }),
2179
+ /* @__PURE__ */ jsx("p", { className: cn("mt-3 max-w-3xl text-sm", mutedTextClass(tone)), children: note.body })
2180
+ ] }, note.title)),
2181
+ resources && /* @__PURE__ */ jsxs("div", { className: cn(card, "mt-6"), children: [
2182
+ /* @__PURE__ */ jsx("h3", { className: subheading, children: resources.title }),
2183
+ resources.description && /* @__PURE__ */ jsx("p", { className: cn("mt-3 max-w-3xl text-sm", mutedTextClass(tone)), children: resources.description }),
2184
+ /* @__PURE__ */ jsx("div", { className: "mt-4 flex flex-wrap gap-3", children: resources.links.map((link) => /* @__PURE__ */ jsx(
2185
+ TemplateAnchor,
2186
+ {
2187
+ href: link.href,
2188
+ trackingId: link.trackingId,
2189
+ components,
2190
+ className: cn(
2191
+ "border-border hover:border-primary-600 inline-flex items-center rounded-full border px-4 py-2 text-sm font-medium",
2192
+ accentTextClass(tone)
2193
+ ),
2194
+ children: link.label
2195
+ },
2196
+ link.href
2197
+ )) })
2198
+ ] })
2199
+ ]
2200
+ }
2201
+ );
2202
+ }
2203
+ );
2204
+ ReportMethodology.displayName = "ReportMethodology";
2205
+
2206
+ // src/components/TileCartogramSection/tiles.ts
2207
+ var grid = [
2208
+ ["AK", "Alaska", 0, 0],
2209
+ ["ME", "Maine", 0, 10],
2210
+ ["VT", "Vermont", 1, 9],
2211
+ ["NH", "New Hampshire", 1, 10],
2212
+ ["WA", "Washington", 2, 0],
2213
+ ["ID", "Idaho", 2, 1],
2214
+ ["MT", "Montana", 2, 2],
2215
+ ["ND", "North Dakota", 2, 3],
2216
+ ["MN", "Minnesota", 2, 4],
2217
+ ["IL", "Illinois", 2, 5],
2218
+ ["WI", "Wisconsin", 2, 6],
2219
+ ["MI", "Michigan", 2, 8],
2220
+ ["NY", "New York", 2, 9],
2221
+ ["MA", "Massachusetts", 2, 10],
2222
+ ["OR", "Oregon", 3, 0],
2223
+ ["NV", "Nevada", 3, 1],
2224
+ ["WY", "Wyoming", 3, 2],
2225
+ ["SD", "South Dakota", 3, 3],
2226
+ ["IA", "Iowa", 3, 4],
2227
+ ["IN", "Indiana", 3, 5],
2228
+ ["OH", "Ohio", 3, 6],
2229
+ ["PA", "Pennsylvania", 3, 7],
2230
+ ["NJ", "New Jersey", 3, 8],
2231
+ ["CT", "Connecticut", 3, 9],
2232
+ ["RI", "Rhode Island", 3, 10],
2233
+ ["CA", "California", 4, 0],
2234
+ ["UT", "Utah", 4, 1],
2235
+ ["CO", "Colorado", 4, 2],
2236
+ ["NE", "Nebraska", 4, 3],
2237
+ ["MO", "Missouri", 4, 4],
2238
+ ["KY", "Kentucky", 4, 5],
2239
+ ["WV", "West Virginia", 4, 6],
2240
+ ["VA", "Virginia", 4, 7],
2241
+ ["MD", "Maryland", 4, 8],
2242
+ ["DE", "Delaware", 4, 9],
2243
+ ["AZ", "Arizona", 5, 1],
2244
+ ["NM", "New Mexico", 5, 2],
2245
+ ["KS", "Kansas", 5, 3],
2246
+ ["AR", "Arkansas", 5, 4],
2247
+ ["TN", "Tennessee", 5, 5],
2248
+ ["NC", "North Carolina", 5, 6],
2249
+ ["SC", "South Carolina", 5, 7],
2250
+ ["DC", "District of Columbia", 5, 8],
2251
+ ["OK", "Oklahoma", 6, 3],
2252
+ ["LA", "Louisiana", 6, 4],
2253
+ ["MS", "Mississippi", 6, 5],
2254
+ ["AL", "Alabama", 6, 6],
2255
+ ["GA", "Georgia", 6, 7],
2256
+ ["HI", "Hawaii", 7, 0],
2257
+ ["TX", "Texas", 7, 3],
2258
+ ["FL", "Florida", 7, 7]
2259
+ ];
2260
+ var usStateTiles = grid.map(
2261
+ ([code, name, row, col]) => ({ code, name, row, col })
2262
+ );
2263
+ function quartileBuckets(values) {
2264
+ const sorted = Object.values(values).filter((v) => typeof v === "number").sort((a, b) => a - b);
2265
+ const q = (p) => sorted[Math.floor((sorted.length - 1) * p)];
2266
+ const out = {};
2267
+ for (const [code, v] of Object.entries(values)) {
2268
+ out[code] = typeof v !== "number" || sorted.length === 0 ? 0 : v <= q(0.25) ? 1 : v <= q(0.5) ? 2 : v <= q(0.75) ? 3 : 4;
2269
+ }
2270
+ return out;
2271
+ }
2272
+ var bucketClass = {
2273
+ 0: "bg-muted text-muted-foreground",
2274
+ 1: "bg-primary-600/20 text-foreground",
2275
+ 2: "bg-primary-600/40 text-foreground",
2276
+ 3: "bg-primary-800 text-white",
2277
+ 4: "bg-primary-950 text-white"
2278
+ };
2279
+ var TileCartogramSection = React5.forwardRef(
2280
+ ({
2281
+ values,
2282
+ legend,
2283
+ layout = usStateTiles,
2284
+ mapTitle,
2285
+ mapDescription,
2286
+ tone = "default",
2287
+ components,
2288
+ ...rest
2289
+ }, ref) => {
2290
+ const columns = Math.max(...layout.map((t) => t.col)) + 1;
2291
+ return /* @__PURE__ */ jsx(
2292
+ SectionShell,
2293
+ {
2294
+ ref,
2295
+ "data-slot": "tile-cartogram-section",
2296
+ tone,
2297
+ components,
2298
+ ...rest,
2299
+ children: /* @__PURE__ */ jsxs("div", { className: cn("mt-10 rounded-2xl p-6", cardClass(tone)), children: [
2300
+ mapTitle && /* @__PURE__ */ jsx("h3", { className: cn("text-lg font-semibold", headingTextClass(tone)), children: mapTitle }),
2301
+ mapDescription && /* @__PURE__ */ jsx("p", { className: cn("mt-1 text-sm", mutedTextClass(tone)), children: mapDescription }),
2302
+ /* @__PURE__ */ jsx(
2303
+ "ul",
2304
+ {
2305
+ className: "mx-auto mt-6 grid w-full max-w-xl gap-1",
2306
+ style: {
2307
+ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`
2308
+ },
2309
+ children: layout.map((tile) => {
2310
+ const value = values[tile.code];
2311
+ const bucket = value?.bucket ?? 0;
2312
+ return /* @__PURE__ */ jsxs(
2313
+ "li",
2314
+ {
2315
+ title: value?.detail ? `${tile.name}: ${value.detail}` : tile.name,
2316
+ style: {
2317
+ gridColumnStart: tile.col + 1,
2318
+ gridRowStart: tile.row + 1
2319
+ },
2320
+ className: cn(
2321
+ "flex aspect-square items-center justify-center rounded-md text-[9px] font-semibold sm:text-[11px]",
2322
+ bucketClass[bucket]
2323
+ ),
2324
+ children: [
2325
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: tile.code }),
2326
+ /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
2327
+ tile.name,
2328
+ value?.detail ? `: ${value.detail}` : ""
2329
+ ] })
2330
+ ]
2331
+ },
2332
+ tile.code
2333
+ );
2334
+ })
2335
+ }
2336
+ ),
2337
+ /* @__PURE__ */ jsx("ul", { className: "mt-6 flex flex-wrap items-center justify-center gap-x-4 gap-y-2 text-xs", children: legend.map((entry) => /* @__PURE__ */ jsxs(
2338
+ "li",
2339
+ {
2340
+ className: "inline-flex items-center gap-1.5",
2341
+ children: [
2342
+ /* @__PURE__ */ jsx(
2343
+ "span",
2344
+ {
2345
+ "aria-hidden": "true",
2346
+ className: cn(
2347
+ "ring-border size-3 rounded ring-1",
2348
+ bucketClass[entry.bucket]
2349
+ )
2350
+ }
2351
+ ),
2352
+ entry.label
2353
+ ]
2354
+ },
2355
+ entry.bucket
2356
+ )) })
2357
+ ] })
2358
+ }
2359
+ );
2360
+ }
2361
+ );
2362
+ TileCartogramSection.displayName = "TileCartogramSection";
2363
+ var sections = {
2364
+ hero: HeroSection,
2365
+ logos: LogoCloudSection,
2366
+ features: FeatureGridSection,
2367
+ split: SplitContentSection,
2368
+ process: ProcessStepsSection,
2369
+ stats: StatsSection,
2370
+ comparison: ComparisonSection,
2371
+ pricing: PricingSection,
2372
+ video: VideoSection,
2373
+ testimonials: TestimonialSection,
2374
+ resources: ResourceCardsSection,
2375
+ faq: FaqSection,
2376
+ "lead-form": LeadFormSection,
2377
+ cta: CtaSection,
2378
+ "report-legend": ReportLegend,
2379
+ "benchmark-table": BenchmarkTableSection,
2380
+ "ranked-list": RankedListSection,
2381
+ "tile-cartogram": TileCartogramSection,
2382
+ "metric-list": MetricListSection,
2383
+ methodology: ReportMethodology,
2384
+ byline: ReportByline,
2385
+ "link-groups": LinkGroupsSection,
2386
+ "pdf-embed": PdfEmbedSection
2387
+ };
2388
+ var landingBlockTypes = [
2389
+ ...Object.keys(sections),
2390
+ "custom"
2391
+ ];
2392
+ var takesIcons = /* @__PURE__ */ new Set(["features", "process"]);
2393
+ var LandingPage = React5.forwardRef(
2394
+ ({ blocks, icons, components, custom, actions, ...rest }, ref) => /* @__PURE__ */ jsx("div", { ref, "data-slot": "landing-page", ...rest, children: blocks.map((block, i) => {
2395
+ const key = block.id ?? `${block.type}-${i}`;
2396
+ if (block.type === "custom") {
2397
+ const Custom = ownProperty(custom, block.component);
2398
+ return Custom ? /* @__PURE__ */ jsx(Custom, { id: block.id, ...block.props }, key) : null;
2399
+ }
2400
+ const { type, ...props } = block;
2401
+ const Section = ownProperty(
2402
+ sections,
2403
+ type
2404
+ );
2405
+ if (!Section) return null;
2406
+ const action = block.type === "lead-form" ? ownProperty(actions, block.action) ?? safeHref(block.action) : void 0;
2407
+ if (block.type === "lead-form" && action == null) return null;
2408
+ const data = { ...props };
2409
+ delete data.children;
2410
+ delete data.dangerouslySetInnerHTML;
2411
+ return /* @__PURE__ */ jsx(
2412
+ Section,
2413
+ {
2414
+ ...data,
2415
+ components,
2416
+ ...takesIcons.has(type) ? { icons } : {},
2417
+ ...block.type === "lead-form" ? { action } : {}
2418
+ },
2419
+ key
2420
+ );
2421
+ }) })
2422
+ );
2423
+ LandingPage.displayName = "LandingPage";
2424
+
2425
+ // src/components/LandingPage/presets.ts
2426
+ var landingPresets = {
2427
+ "vertical-hub": {
2428
+ label: "Industry / vertical hub",
2429
+ description: "One page per industry served: the sector problem, what the product does for it, proof, and a way in.",
2430
+ sequence: [
2431
+ "hero",
2432
+ "logos",
2433
+ "features",
2434
+ "split",
2435
+ "stats",
2436
+ "process",
2437
+ "testimonials",
2438
+ "resources",
2439
+ "faq",
2440
+ "cta"
2441
+ ],
2442
+ required: ["hero", "features", "faq", "cta"]
2443
+ },
2444
+ "service-detail": {
2445
+ label: "Service / product detail",
2446
+ description: "One offering explained: what it is, how it works, how it compares, and how to start.",
2447
+ sequence: [
2448
+ "hero",
2449
+ "features",
2450
+ "video",
2451
+ "process",
2452
+ "comparison",
2453
+ "pricing",
2454
+ "stats",
2455
+ "testimonials",
2456
+ "faq",
2457
+ "cta"
2458
+ ],
2459
+ required: ["hero", "features", "cta"]
2460
+ },
2461
+ campaign: {
2462
+ label: "Campaign / ABM landing",
2463
+ description: "A focused page for a campaign or named account that converts on the page itself.",
2464
+ sequence: [
2465
+ "hero",
2466
+ "logos",
2467
+ "features",
2468
+ "stats",
2469
+ "testimonials",
2470
+ "lead-form",
2471
+ "faq"
2472
+ ],
2473
+ required: ["hero", "lead-form"]
2474
+ },
2475
+ comparison: {
2476
+ label: "Comparison",
2477
+ description: "Your product against an alternative or the status quo, row by row.",
2478
+ sequence: ["hero", "comparison", "features", "testimonials", "faq", "cta"],
2479
+ required: ["hero", "comparison", "cta"]
2480
+ },
2481
+ resource: {
2482
+ label: "Resource / lead magnet",
2483
+ description: "A guide, report or tool offered in exchange for contact details.",
2484
+ sequence: ["hero", "split", "lead-form", "resources", "faq"],
2485
+ required: ["hero", "lead-form"]
2486
+ },
2487
+ pricing: {
2488
+ label: "Pricing",
2489
+ description: "Plans and what each includes, the proof that they are worth it, and the questions buyers ask before they pay.",
2490
+ sequence: [
2491
+ "hero",
2492
+ "pricing",
2493
+ "comparison",
2494
+ "stats",
2495
+ "testimonials",
2496
+ "faq",
2497
+ "cta"
2498
+ ],
2499
+ required: ["hero", "pricing", "faq"]
2500
+ },
2501
+ "benchmark-report": {
2502
+ label: "Benchmark report",
2503
+ description: "A published data report: headline findings, the figures with their provenance, how they were built, and who wrote it.",
2504
+ sequence: [
2505
+ "hero",
2506
+ "stats",
2507
+ "report-legend",
2508
+ "features",
2509
+ "benchmark-table",
2510
+ "tile-cartogram",
2511
+ "ranked-list",
2512
+ "metric-list",
2513
+ "methodology",
2514
+ "byline",
2515
+ "link-groups",
2516
+ "pdf-embed",
2517
+ "lead-form",
2518
+ "cta"
2519
+ ],
2520
+ required: ["hero", "methodology"]
2521
+ }
2522
+ };
2523
+ var headedItems = /* @__PURE__ */ new Set([
2524
+ "features",
2525
+ "process",
2526
+ "pricing",
2527
+ "resources",
2528
+ "metric-list",
2529
+ "link-groups"
2530
+ ]);
2531
+ var rendersH3 = (b) => headedItems.has(b.type) || b.type === "ranked-list" && b.lists.some((l) => l.title) || b.type === "tile-cartogram" && !!b.mapTitle || b.type === "methodology" && !!(b.citation || b.notes?.length || b.resources);
2532
+ function validateLandingPage(blocks, preset) {
2533
+ const issues = [];
2534
+ const types = blocks.map((b) => b.type);
2535
+ const knownTypes = new Set(landingBlockTypes);
2536
+ blocks.forEach((b, index) => {
2537
+ if (!knownTypes.has(b.type))
2538
+ issues.push({
2539
+ severity: "error",
2540
+ index,
2541
+ message: `Unknown block type "${b.type}": the renderer skips this block.`
2542
+ });
2543
+ if (b.type === "lead-form" && safeHref(b.action) == null)
2544
+ issues.push({
2545
+ severity: "error",
2546
+ index,
2547
+ message: `Unsafe lead-form action "${b.action}": the renderer skips this block.`
2548
+ });
2549
+ });
2550
+ const h1Heroes = blocks.flatMap(
2551
+ (b, i) => b.type === "hero" && (b.headingLevel ?? "h1") === "h1" ? [i] : []
2552
+ );
2553
+ if (h1Heroes.length > 1)
2554
+ h1Heroes.slice(1).forEach(
2555
+ (index) => issues.push({
2556
+ severity: "error",
2557
+ index,
2558
+ message: 'A second h1 hero: a page has one h1. Set headingLevel: "h2" or remove it.'
2559
+ })
2560
+ );
2561
+ if (h1Heroes.length === 0)
2562
+ issues.push({
2563
+ severity: "warning",
2564
+ message: "No h1 hero. The page must render its own h1 outside the blocks."
2565
+ });
2566
+ const firstHero = types.indexOf("hero");
2567
+ if (firstHero > 0)
2568
+ issues.push({
2569
+ severity: "warning",
2570
+ index: firstHero,
2571
+ message: "The hero is not the first block."
2572
+ });
2573
+ if (h1Heroes.length > 0 && h1Heroes[0] !== firstHero)
2574
+ issues.push({
2575
+ severity: "warning",
2576
+ index: h1Heroes[0],
2577
+ message: "The h1 hero is not the first hero: an h2 hero precedes the page h1."
2578
+ });
2579
+ const seen = /* @__PURE__ */ new Map();
2580
+ blocks.forEach((b, index) => {
2581
+ const ids = [
2582
+ ...b.id ? [b.id] : [],
2583
+ ...b.type === "faq" ? b.items.flatMap((item) => item.id ? [item.id] : []) : []
2584
+ ];
2585
+ ids.forEach((id) => {
2586
+ if (seen.has(id))
2587
+ issues.push({
2588
+ severity: "error",
2589
+ index,
2590
+ message: `Duplicate id "${id}" (also block ${seen.get(id)}).`
2591
+ });
2592
+ else seen.set(id, index);
2593
+ });
2594
+ });
2595
+ blocks.forEach((b, index) => {
2596
+ if (rendersH3(b) && !("title" in b && b.title))
2597
+ issues.push({
2598
+ severity: "warning",
2599
+ index,
2600
+ message: `"${b.type}" has no title, so its h3 item titles skip the h2 level.`
2601
+ });
2602
+ if (b.type === "benchmark-table") {
2603
+ const keys = new Set(b.columns.map((c) => c.key));
2604
+ b.rows.forEach((row) => {
2605
+ const unknown = Object.keys(row.values).filter((k) => !keys.has(k));
2606
+ if (unknown.length)
2607
+ issues.push({
2608
+ severity: "warning",
2609
+ index,
2610
+ message: `Benchmark row "${row.label}" has values for unknown columns: ${unknown.join(", ")}.`
2611
+ });
2612
+ });
2613
+ }
2614
+ if (b.type !== "comparison") return;
2615
+ b.rows.forEach((row, r) => {
2616
+ if (row.values.length !== b.columns.length)
2617
+ issues.push({
2618
+ severity: "error",
2619
+ index,
2620
+ message: `Comparison row ${r} ("${row.feature}") has ${row.values.length} values for ${b.columns.length} columns.`
2621
+ });
2622
+ });
2623
+ if (b.highlightColumn !== void 0 && (b.highlightColumn < 0 || b.highlightColumn >= b.columns.length))
2624
+ issues.push({
2625
+ severity: "warning",
2626
+ index,
2627
+ message: `highlightColumn ${b.highlightColumn} is outside the ${b.columns.length} comparison columns.`
2628
+ });
2629
+ });
2630
+ if (!preset) return issues;
2631
+ const spec = typeof preset === "string" ? landingPresets[preset] : preset;
2632
+ for (const type of spec.required)
2633
+ if (!types.includes(type))
2634
+ issues.push({
2635
+ severity: "error",
2636
+ message: `Missing required "${type}" block for the ${spec.label} preset.`
2637
+ });
2638
+ let last = -1;
2639
+ const placed = /* @__PURE__ */ new Set();
2640
+ blocks.forEach((b, index) => {
2641
+ const rank = spec.sequence.indexOf(b.type);
2642
+ if (rank === -1 || placed.has(b.type)) return;
2643
+ placed.add(b.type);
2644
+ if (rank < last)
2645
+ issues.push({
2646
+ severity: "warning",
2647
+ index,
2648
+ message: `"${b.type}" is out of the ${spec.label} preset's recommended order.`
2649
+ });
2650
+ else last = rank;
2651
+ });
2652
+ return issues;
2653
+ }
2654
+
2655
+ export { BenchmarkTableSection, ComparisonSection, CtaSection, FaqSection, FeatureGridSection, HeroSection, LandingPage, LeadFormSection, LinkGroupsSection, LogoCloudSection, MetricListSection, PdfEmbedSection, PricingSection, ProcessStepsSection, RankedListSection, ReportByline, ReportLegend, ReportMethodology, ResourceCardsSection, SplitContentSection, StatsSection, TestimonialSection, TileCartogramSection, VideoSection, defaultLeadFormFields, landingPresets, quartileBuckets, usStateTiles, validateLandingPage };
2656
+ //# sourceMappingURL=chunk-T4JYUICS.js.map
2657
+ //# sourceMappingURL=chunk-T4JYUICS.js.map