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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/agent/README.md +7 -7
  2. package/agent/agents/mieweb-ui-design.agent.md +8 -3
  3. package/agent/agents/mieweb-ui-i18n.agent.md +91 -0
  4. package/agent/agents/mieweb-ui-styling.agent.md +1 -1
  5. package/agent/skills/mieweb-ui-catalog/SKILL.md +15 -10
  6. package/agent/skills/mieweb-ui-catalog/selection-guidance.md +14 -7
  7. package/agent/skills/mieweb-ui-i18n-checklist/SKILL.md +133 -0
  8. package/dist/CsvBlock-AV4VM7JT.cjs +18 -0
  9. package/dist/{CsvBlock-RGO7JXHJ.cjs.map → CsvBlock-AV4VM7JT.cjs.map} +1 -1
  10. package/dist/CsvBlock-XBNYCEMP.js +9 -0
  11. package/dist/{CsvBlock-CFXSDPBI.js.map → CsvBlock-XBNYCEMP.js.map} +1 -1
  12. package/dist/HtmlPreviewBlock-DQAVD6IO.cjs +18 -0
  13. package/dist/{HtmlPreviewBlock-VBYXCXVT.cjs.map → HtmlPreviewBlock-DQAVD6IO.cjs.map} +1 -1
  14. package/dist/HtmlPreviewBlock-QQHRNLIY.js +9 -0
  15. package/dist/{HtmlPreviewBlock-Z2GCK325.js.map → HtmlPreviewBlock-QQHRNLIY.js.map} +1 -1
  16. package/dist/MermaidBlock-LHGYKC23.cjs +18 -0
  17. package/dist/{MermaidBlock-I2R2BQOX.cjs.map → MermaidBlock-LHGYKC23.cjs.map} +1 -1
  18. package/dist/MermaidBlock-QPKMIP3B.js +9 -0
  19. package/dist/{MermaidBlock-XCAK7IA5.js.map → MermaidBlock-QPKMIP3B.js.map} +1 -1
  20. package/dist/SurveyBlock-6DPTWHKI.js +9 -0
  21. package/dist/{SurveyBlock-KI5JOWCL.js.map → SurveyBlock-6DPTWHKI.js.map} +1 -1
  22. package/dist/SurveyBlock-6IXNVHS5.cjs +18 -0
  23. package/dist/{SurveyBlock-UKSGISRT.cjs.map → SurveyBlock-6IXNVHS5.cjs.map} +1 -1
  24. package/dist/{chunk-7XKM6V2K.cjs → chunk-2OXNJJHJ.cjs} +8 -8
  25. package/dist/{chunk-7XKM6V2K.cjs.map → chunk-2OXNJJHJ.cjs.map} +1 -1
  26. package/dist/{chunk-AJPFQF3H.cjs → chunk-2R3ILG4Y.cjs} +11 -11
  27. package/dist/{chunk-AJPFQF3H.cjs.map → chunk-2R3ILG4Y.cjs.map} +1 -1
  28. package/dist/{chunk-XQHDQ64G.cjs → chunk-2Z2GFDRS.cjs} +4 -4
  29. package/dist/{chunk-XQHDQ64G.cjs.map → chunk-2Z2GFDRS.cjs.map} +1 -1
  30. package/dist/{chunk-GM32IDVL.cjs → chunk-32ZILZ2T.cjs} +6 -6
  31. package/dist/{chunk-GM32IDVL.cjs.map → chunk-32ZILZ2T.cjs.map} +1 -1
  32. package/dist/{chunk-VOEXGDL5.js → chunk-33Y3KQWL.js} +3 -3
  33. package/dist/{chunk-VOEXGDL5.js.map → chunk-33Y3KQWL.js.map} +1 -1
  34. package/dist/{chunk-GYXSF6BJ.cjs → chunk-3IKIRGHI.cjs} +6 -6
  35. package/dist/{chunk-GYXSF6BJ.cjs.map → chunk-3IKIRGHI.cjs.map} +1 -1
  36. package/dist/{chunk-5HKZR6UG.js → chunk-43L4KGLU.js} +4 -4
  37. package/dist/{chunk-5HKZR6UG.js.map → chunk-43L4KGLU.js.map} +1 -1
  38. package/dist/{chunk-6BNZLN4B.cjs → chunk-4I5V6SXP.cjs} +10 -10
  39. package/dist/{chunk-6BNZLN4B.cjs.map → chunk-4I5V6SXP.cjs.map} +1 -1
  40. package/dist/{chunk-NUFUV43P.cjs → chunk-4UDEMJE4.cjs} +2 -2
  41. package/dist/chunk-4UDEMJE4.cjs.map +1 -0
  42. package/dist/{chunk-L5Y52F2E.cjs → chunk-4VSK3EE5.cjs} +4 -4
  43. package/dist/{chunk-L5Y52F2E.cjs.map → chunk-4VSK3EE5.cjs.map} +1 -1
  44. package/dist/{chunk-Y7ZJZLJY.js → chunk-566FIEPE.js} +4 -4
  45. package/dist/{chunk-Y7ZJZLJY.js.map → chunk-566FIEPE.js.map} +1 -1
  46. package/dist/{chunk-UTIPENPW.cjs → chunk-67SD6VPF.cjs} +5 -5
  47. package/dist/{chunk-UTIPENPW.cjs.map → chunk-67SD6VPF.cjs.map} +1 -1
  48. package/dist/{chunk-6CGM5H4J.js → chunk-6LIC3DKE.js} +2 -2
  49. package/dist/chunk-6LIC3DKE.js.map +1 -0
  50. package/dist/{chunk-6N7NMOSV.js → chunk-76ECYE5G.js} +3 -3
  51. package/dist/{chunk-6N7NMOSV.js.map → chunk-76ECYE5G.js.map} +1 -1
  52. package/dist/{chunk-56VTM4OX.js → chunk-7LKTIZLR.js} +3 -3
  53. package/dist/{chunk-56VTM4OX.js.map → chunk-7LKTIZLR.js.map} +1 -1
  54. package/dist/{chunk-7C5W744U.cjs → chunk-ARRJRFPD.cjs} +8 -8
  55. package/dist/{chunk-7C5W744U.cjs.map → chunk-ARRJRFPD.cjs.map} +1 -1
  56. package/dist/{chunk-5KGYTNOA.cjs → chunk-BP4LXRC6.cjs} +9 -9
  57. package/dist/{chunk-5KGYTNOA.cjs.map → chunk-BP4LXRC6.cjs.map} +1 -1
  58. package/dist/{chunk-UNFDIBKJ.js → chunk-CLNTWFEB.js} +3 -3
  59. package/dist/{chunk-UNFDIBKJ.js.map → chunk-CLNTWFEB.js.map} +1 -1
  60. package/dist/{chunk-X5JOEZVR.js → chunk-CRSJRWN2.js} +4 -4
  61. package/dist/{chunk-X5JOEZVR.js.map → chunk-CRSJRWN2.js.map} +1 -1
  62. package/dist/{chunk-FIKO4WR6.js → chunk-CVMD2A3J.js} +3 -3
  63. package/dist/{chunk-FIKO4WR6.js.map → chunk-CVMD2A3J.js.map} +1 -1
  64. package/dist/{chunk-SMPLM6K3.js → chunk-DG3CXR24.js} +5 -5
  65. package/dist/{chunk-SMPLM6K3.js.map → chunk-DG3CXR24.js.map} +1 -1
  66. package/dist/{chunk-LRAAJRE7.cjs → chunk-DO7EED3B.cjs} +154 -154
  67. package/dist/{chunk-LRAAJRE7.cjs.map → chunk-DO7EED3B.cjs.map} +1 -1
  68. package/dist/{chunk-UJDWFDKE.js → chunk-DXKE4YZT.js} +3 -3
  69. package/dist/{chunk-UJDWFDKE.js.map → chunk-DXKE4YZT.js.map} +1 -1
  70. package/dist/{chunk-KQ6GLYFZ.cjs → chunk-ECKIFQSD.cjs} +6 -6
  71. package/dist/{chunk-KQ6GLYFZ.cjs.map → chunk-ECKIFQSD.cjs.map} +1 -1
  72. package/dist/{chunk-4P27Y52M.js → chunk-EPKPHWIL.js} +4 -4
  73. package/dist/{chunk-4P27Y52M.js.map → chunk-EPKPHWIL.js.map} +1 -1
  74. package/dist/{chunk-RIUQP2QS.cjs → chunk-FNSFMM4F.cjs} +5 -5
  75. package/dist/{chunk-RIUQP2QS.cjs.map → chunk-FNSFMM4F.cjs.map} +1 -1
  76. package/dist/{chunk-3Y3ZCDNF.cjs → chunk-FQUSSPXX.cjs} +19 -19
  77. package/dist/{chunk-3Y3ZCDNF.cjs.map → chunk-FQUSSPXX.cjs.map} +1 -1
  78. package/dist/{chunk-ANMX7YDL.cjs → chunk-FSARTLUE.cjs} +4 -4
  79. package/dist/{chunk-ANMX7YDL.cjs.map → chunk-FSARTLUE.cjs.map} +1 -1
  80. package/dist/{chunk-ERACGSDY.cjs → chunk-G42V64UW.cjs} +8 -8
  81. package/dist/{chunk-ERACGSDY.cjs.map → chunk-G42V64UW.cjs.map} +1 -1
  82. package/dist/{chunk-UUI7WXI5.js → chunk-GAI6SRJ3.js} +3 -3
  83. package/dist/{chunk-UUI7WXI5.js.map → chunk-GAI6SRJ3.js.map} +1 -1
  84. package/dist/{chunk-4I6BW3FB.js → chunk-GLRKXJCR.js} +3 -3
  85. package/dist/{chunk-4I6BW3FB.js.map → chunk-GLRKXJCR.js.map} +1 -1
  86. package/dist/{chunk-NPKPCYAT.cjs → chunk-GM376OD6.cjs} +17 -17
  87. package/dist/{chunk-NPKPCYAT.cjs.map → chunk-GM376OD6.cjs.map} +1 -1
  88. package/dist/{chunk-DXEPYK3I.cjs → chunk-HGJHWI7W.cjs} +5 -3
  89. package/dist/chunk-HGJHWI7W.cjs.map +1 -0
  90. package/dist/{chunk-6ZA574PU.cjs → chunk-IIV5GNSK.cjs} +5 -5
  91. package/dist/{chunk-6ZA574PU.cjs.map → chunk-IIV5GNSK.cjs.map} +1 -1
  92. package/dist/{chunk-XPVQI3MM.cjs → chunk-INMDLVUB.cjs} +17 -2
  93. package/dist/chunk-INMDLVUB.cjs.map +1 -0
  94. package/dist/{chunk-RZSSQ7AT.js → chunk-JATLYCS4.js} +3 -3
  95. package/dist/{chunk-RZSSQ7AT.js.map → chunk-JATLYCS4.js.map} +1 -1
  96. package/dist/{chunk-4NB4WOGU.cjs → chunk-JCO62XMU.cjs} +6 -6
  97. package/dist/{chunk-4NB4WOGU.cjs.map → chunk-JCO62XMU.cjs.map} +1 -1
  98. package/dist/{chunk-QR7B6UPR.js → chunk-JN2CL7MK.js} +3 -3
  99. package/dist/{chunk-QR7B6UPR.js.map → chunk-JN2CL7MK.js.map} +1 -1
  100. package/dist/{chunk-FBCDYTWM.js → chunk-JNSSA4YN.js} +3 -3
  101. package/dist/{chunk-FBCDYTWM.js.map → chunk-JNSSA4YN.js.map} +1 -1
  102. package/dist/{chunk-BIQIE3VW.js → chunk-JQAGNAY2.js} +5 -5
  103. package/dist/{chunk-BIQIE3VW.js.map → chunk-JQAGNAY2.js.map} +1 -1
  104. package/dist/{chunk-TOJ56HKQ.cjs → chunk-KD7YD6US.cjs} +8 -8
  105. package/dist/{chunk-TOJ56HKQ.cjs.map → chunk-KD7YD6US.cjs.map} +1 -1
  106. package/dist/{chunk-5LNLB2XT.js → chunk-KSQQBFDQ.js} +3 -3
  107. package/dist/{chunk-5LNLB2XT.js.map → chunk-KSQQBFDQ.js.map} +1 -1
  108. package/dist/{chunk-3NOVISM6.js → chunk-L52HKEUD.js} +3 -3
  109. package/dist/{chunk-3NOVISM6.js.map → chunk-L52HKEUD.js.map} +1 -1
  110. package/dist/{chunk-IXUIOR4K.cjs → chunk-M42FTWY2.cjs} +6 -6
  111. package/dist/{chunk-IXUIOR4K.cjs.map → chunk-M42FTWY2.cjs.map} +1 -1
  112. package/dist/{chunk-32ZCJOSR.cjs → chunk-N7AIZWQS.cjs} +4 -4
  113. package/dist/{chunk-32ZCJOSR.cjs.map → chunk-N7AIZWQS.cjs.map} +1 -1
  114. package/dist/{chunk-P7D7BYFE.js → chunk-NA3NRLX2.js} +4 -4
  115. package/dist/{chunk-P7D7BYFE.js.map → chunk-NA3NRLX2.js.map} +1 -1
  116. package/dist/{chunk-Y424YL55.js → chunk-OLA7OYAS.js} +3 -3
  117. package/dist/{chunk-Y424YL55.js.map → chunk-OLA7OYAS.js.map} +1 -1
  118. package/dist/{chunk-F6W62K4J.js → chunk-OWYWRBED.js} +3 -3
  119. package/dist/{chunk-F6W62K4J.js.map → chunk-OWYWRBED.js.map} +1 -1
  120. package/dist/{chunk-RSJGTWLM.js → chunk-OYLZ5PF2.js} +3 -3
  121. package/dist/{chunk-RSJGTWLM.js.map → chunk-OYLZ5PF2.js.map} +1 -1
  122. package/dist/{chunk-7XC6E4BT.cjs → chunk-PJN4HM2X.cjs} +37 -37
  123. package/dist/{chunk-7XC6E4BT.cjs.map → chunk-PJN4HM2X.cjs.map} +1 -1
  124. package/dist/{chunk-NIO3XVUV.js → chunk-PLBWZW4F.js} +4 -4
  125. package/dist/{chunk-NIO3XVUV.js.map → chunk-PLBWZW4F.js.map} +1 -1
  126. package/dist/{chunk-XI74P5F2.cjs → chunk-PW2E7YBD.cjs} +5 -5
  127. package/dist/{chunk-XI74P5F2.cjs.map → chunk-PW2E7YBD.cjs.map} +1 -1
  128. package/dist/{chunk-HDY7YQFX.js → chunk-Q5APDRMO.js} +3 -3
  129. package/dist/{chunk-HDY7YQFX.js.map → chunk-Q5APDRMO.js.map} +1 -1
  130. package/dist/{chunk-FGLIP6YR.js → chunk-QATEO4KC.js} +4 -4
  131. package/dist/{chunk-FGLIP6YR.js.map → chunk-QATEO4KC.js.map} +1 -1
  132. package/dist/{chunk-254QK722.cjs → chunk-QHCAWDMG.cjs} +18 -7
  133. package/dist/chunk-QHCAWDMG.cjs.map +1 -0
  134. package/dist/{chunk-7HFZL5V5.js → chunk-QNJEDBIN.js} +4 -4
  135. package/dist/{chunk-7HFZL5V5.js.map → chunk-QNJEDBIN.js.map} +1 -1
  136. package/dist/{chunk-AIJYZP7M.js → chunk-R3MJKY63.js} +6 -6
  137. package/dist/{chunk-AIJYZP7M.js.map → chunk-R3MJKY63.js.map} +1 -1
  138. package/dist/{chunk-N54FYWG6.js → chunk-R5P7NAJQ.js} +4 -4
  139. package/dist/{chunk-N54FYWG6.js.map → chunk-R5P7NAJQ.js.map} +1 -1
  140. package/dist/{chunk-BWSZ2BHJ.cjs → chunk-S6457ZNC.cjs} +5 -5
  141. package/dist/{chunk-BWSZ2BHJ.cjs.map → chunk-S6457ZNC.cjs.map} +1 -1
  142. package/dist/{chunk-Z2OOJGHL.cjs → chunk-SCYLVQWA.cjs} +53 -53
  143. package/dist/{chunk-Z2OOJGHL.cjs.map → chunk-SCYLVQWA.cjs.map} +1 -1
  144. package/dist/{chunk-7IRTD4JT.cjs → chunk-SGDNEIJM.cjs} +4 -4
  145. package/dist/{chunk-7IRTD4JT.cjs.map → chunk-SGDNEIJM.cjs.map} +1 -1
  146. package/dist/{chunk-4JXO5JTE.js → chunk-SNAMNKFH.js} +17 -2
  147. package/dist/chunk-SNAMNKFH.js.map +1 -0
  148. package/dist/{chunk-GW4RFJZ5.js → chunk-TUYWCUKH.js} +18 -7
  149. package/dist/chunk-TUYWCUKH.js.map +1 -0
  150. package/dist/{chunk-CLQW724U.cjs → chunk-TXB3UHIO.cjs} +9 -9
  151. package/dist/{chunk-CLQW724U.cjs.map → chunk-TXB3UHIO.cjs.map} +1 -1
  152. package/dist/{chunk-4RI3CQGE.js → chunk-ULEX7OOJ.js} +4 -4
  153. package/dist/{chunk-4RI3CQGE.js.map → chunk-ULEX7OOJ.js.map} +1 -1
  154. package/dist/{chunk-KDW6BD4O.cjs → chunk-UVVZD3AS.cjs} +4 -4
  155. package/dist/{chunk-KDW6BD4O.cjs.map → chunk-UVVZD3AS.cjs.map} +1 -1
  156. package/dist/{chunk-MA3Y6AYA.cjs → chunk-V2KSJLUL.cjs} +8 -8
  157. package/dist/{chunk-MA3Y6AYA.cjs.map → chunk-V2KSJLUL.cjs.map} +1 -1
  158. package/dist/{chunk-SW2E7XKY.cjs → chunk-VIVS44IG.cjs} +9 -9
  159. package/dist/{chunk-SW2E7XKY.cjs.map → chunk-VIVS44IG.cjs.map} +1 -1
  160. package/dist/{chunk-GVM6DTR5.js → chunk-VP3XNLUL.js} +5 -3
  161. package/dist/chunk-VP3XNLUL.js.map +1 -0
  162. package/dist/{chunk-IGDO62KR.cjs → chunk-VVKUYQER.cjs} +5 -5
  163. package/dist/{chunk-IGDO62KR.cjs.map → chunk-VVKUYQER.cjs.map} +1 -1
  164. package/dist/{chunk-BJ6ABRSQ.cjs → chunk-WG2ANSDG.cjs} +6 -6
  165. package/dist/{chunk-BJ6ABRSQ.cjs.map → chunk-WG2ANSDG.cjs.map} +1 -1
  166. package/dist/{chunk-WFBUBT54.js → chunk-WX2XB6FP.js} +3 -3
  167. package/dist/{chunk-WFBUBT54.js.map → chunk-WX2XB6FP.js.map} +1 -1
  168. package/dist/{chunk-7QW6TU4X.js → chunk-YCPWQWQQ.js} +3 -3
  169. package/dist/{chunk-7QW6TU4X.js.map → chunk-YCPWQWQQ.js.map} +1 -1
  170. package/dist/{chunk-DSQCYX7L.js → chunk-YSIFPHLX.js} +7 -7
  171. package/dist/{chunk-DSQCYX7L.js.map → chunk-YSIFPHLX.js.map} +1 -1
  172. package/dist/{chunk-2X54ZLT6.js → chunk-ZFJJMDV3.js} +4 -4
  173. package/dist/{chunk-2X54ZLT6.js.map → chunk-ZFJJMDV3.js.map} +1 -1
  174. package/dist/{chunk-PYI2IWNX.cjs → chunk-ZOSM6D7F.cjs} +4 -4
  175. package/dist/{chunk-PYI2IWNX.cjs.map → chunk-ZOSM6D7F.cjs.map} +1 -1
  176. package/dist/components/ActionPlan/index.cjs +6 -6
  177. package/dist/components/ActionPlan/index.js +4 -4
  178. package/dist/components/ActivityFeed/index.cjs +6 -6
  179. package/dist/components/ActivityFeed/index.js +4 -4
  180. package/dist/components/AlertDialog/index.cjs +7 -7
  181. package/dist/components/AlertDialog/index.js +3 -3
  182. package/dist/components/AssociationList/index.cjs +6 -6
  183. package/dist/components/AssociationList/index.js +4 -4
  184. package/dist/components/Button/index.cjs +4 -4
  185. package/dist/components/Button/index.d.cts +1 -1
  186. package/dist/components/Button/index.d.ts +1 -1
  187. package/dist/components/Button/index.js +2 -2
  188. package/dist/components/CalendarView/index.cjs +5 -5
  189. package/dist/components/CalendarView/index.js +3 -3
  190. package/dist/components/CustomizableDashboard/index.cjs +10 -10
  191. package/dist/components/CustomizableDashboard/index.js +3 -3
  192. package/dist/components/EmailEditor/index.cjs +14 -14
  193. package/dist/components/EmailEditor/index.js +5 -5
  194. package/dist/components/FieldHistory/index.cjs +6 -6
  195. package/dist/components/FieldHistory/index.js +4 -4
  196. package/dist/components/FloatingWindow/index.cjs +5 -5
  197. package/dist/components/FloatingWindow/index.js +3 -3
  198. package/dist/components/ListView/index.cjs +5 -5
  199. package/dist/components/ListView/index.js +3 -3
  200. package/dist/components/Markdown/index.cjs +17 -17
  201. package/dist/components/Markdown/index.js +8 -8
  202. package/dist/components/MediaEditor/index.cjs +12 -12
  203. package/dist/components/MediaEditor/index.d.cts +13 -0
  204. package/dist/components/MediaEditor/index.d.ts +13 -0
  205. package/dist/components/MediaEditor/index.js +7 -7
  206. package/dist/components/MediaFeed/index.cjs +6 -6
  207. package/dist/components/MediaFeed/index.js +5 -5
  208. package/dist/components/MediaPlayer/index.cjs +7 -7
  209. package/dist/components/MediaPlayer/index.js +4 -4
  210. package/dist/components/MegaMenu/index.cjs +6 -6
  211. package/dist/components/MegaMenu/index.js +3 -3
  212. package/dist/components/RadialExplorer/index.cjs +4 -4
  213. package/dist/components/RadialExplorer/index.js +3 -3
  214. package/dist/components/RecordHeader/index.cjs +5 -5
  215. package/dist/components/RecordHeader/index.d.cts +1 -1
  216. package/dist/components/RecordHeader/index.d.ts +1 -1
  217. package/dist/components/RecordHeader/index.js +3 -3
  218. package/dist/components/RichTextEditor/index.cjs +6 -6
  219. package/dist/components/RichTextEditor/index.js +3 -3
  220. package/dist/components/SectionSpyNav/index.cjs +4 -4
  221. package/dist/components/SectionSpyNav/index.js +3 -3
  222. package/dist/components/SuperChat/index.cjs +9 -9
  223. package/dist/components/SuperChat/index.js +5 -5
  224. package/dist/components/Textarea/index.cjs +7 -7
  225. package/dist/components/Textarea/index.js +4 -4
  226. package/dist/components/TranscriptView/index.cjs +2 -2
  227. package/dist/components/TranscriptView/index.d.cts +14 -1
  228. package/dist/components/TranscriptView/index.d.ts +14 -1
  229. package/dist/components/TranscriptView/index.js +1 -1
  230. package/dist/components/ViewSet/index.cjs +6 -6
  231. package/dist/components/ViewSet/index.js +5 -5
  232. package/dist/datavis.cjs +3 -3
  233. package/dist/datavis.js +2 -2
  234. package/dist/deck.cjs +15 -15
  235. package/dist/deck.js +2 -2
  236. package/dist/esheet.cjs +130 -130
  237. package/dist/esheet.js +8 -8
  238. package/dist/hooks/index.cjs +12 -12
  239. package/dist/hooks/index.d.cts +15 -2
  240. package/dist/hooks/index.d.ts +15 -2
  241. package/dist/hooks/index.js +3 -3
  242. package/dist/index.cjs +2056 -418
  243. package/dist/index.cjs.map +1 -1
  244. package/dist/index.d.cts +178 -87
  245. package/dist/index.d.ts +178 -87
  246. package/dist/index.js +1693 -55
  247. package/dist/index.js.map +1 -1
  248. package/dist/{model-Y7WRIGGA.cjs → model-NPW2JMHZ.cjs} +20 -20
  249. package/dist/{model-Y7WRIGGA.cjs.map → model-NPW2JMHZ.cjs.map} +1 -1
  250. package/dist/{model-WFFZRQMY.js → model-SG5H3TCJ.js} +6 -6
  251. package/dist/{model-WFFZRQMY.js.map → model-SG5H3TCJ.js.map} +1 -1
  252. package/dist/org-chart.cjs +4 -4
  253. package/dist/org-chart.js +2 -2
  254. package/dist/styles.css +1 -1
  255. package/dist/tailwind-preset.cjs +4 -4
  256. package/dist/tailwind-preset.js +1 -1
  257. package/dist/templates.cjs +38 -38
  258. package/dist/templates.js +3 -3
  259. package/package.json +1 -1
  260. package/dist/CsvBlock-CFXSDPBI.js +0 -9
  261. package/dist/CsvBlock-RGO7JXHJ.cjs +0 -18
  262. package/dist/HtmlPreviewBlock-VBYXCXVT.cjs +0 -18
  263. package/dist/HtmlPreviewBlock-Z2GCK325.js +0 -9
  264. package/dist/MermaidBlock-I2R2BQOX.cjs +0 -18
  265. package/dist/MermaidBlock-XCAK7IA5.js +0 -9
  266. package/dist/SurveyBlock-KI5JOWCL.js +0 -9
  267. package/dist/SurveyBlock-UKSGISRT.cjs +0 -18
  268. package/dist/chunk-254QK722.cjs.map +0 -1
  269. package/dist/chunk-4JXO5JTE.js.map +0 -1
  270. package/dist/chunk-6CGM5H4J.js.map +0 -1
  271. package/dist/chunk-DXEPYK3I.cjs.map +0 -1
  272. package/dist/chunk-GVM6DTR5.js.map +0 -1
  273. package/dist/chunk-GW4RFJZ5.js.map +0 -1
  274. package/dist/chunk-NUFUV43P.cjs.map +0 -1
  275. package/dist/chunk-XPVQI3MM.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ActivityFeed/ActivityFeed.tsx"],"names":["React","usePrefersReducedMotion","useLiveAnnouncement","usePendingOverrides","groupByDay","accentClasses","toDateTime","withLocale","body","jsxs","Fragment","jsx","cn","Avatar","DateTime","Pin","RecordState","Button","formatDayLabel","Rows4"],"mappings":"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","file":"chunk-6BNZLN4B.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { DateTime } from 'luxon';\nimport { Pin, Rows4, type LucideIcon } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Avatar } from '../Avatar';\nimport { Button } from '../Button';\nimport { useLiveAnnouncement } from '../../hooks/useLiveAnnouncement';\nimport { usePrefersReducedMotion } from '../../hooks/usePrefersReducedMotion';\nimport { accentClasses, toDateTime, type Accent } from '../../views/types';\nimport { formatDayLabel, groupByDay, withLocale } from './dayGroups';\nimport { RecordState } from './RecordState';\nimport { usePendingOverrides } from './usePendingOverrides';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type ActivityFeedDensity = 'comfortable' | 'compact';\n\nexport interface ActivityFeedCategory {\n id: string;\n label: string;\n icon?: LucideIcon;\n /** Token name, resolved to `--mieweb-*` colours. */\n color?: Accent;\n}\n\nexport interface ActivityFeedActor {\n name: string;\n avatarUrl?: string;\n}\n\nexport interface ActivityFeedLabels {\n loading: string;\n empty: string;\n /** Shown when items exist but the active filters hide all of them. */\n noMatches: string;\n error: string;\n retry: string;\n today: string;\n yesterday: string;\n undated: string;\n pinned: string;\n /** Accessible name of the category filter group. */\n filters: string;\n /** The chip that clears every filter. */\n allCategories: string;\n compact: string;\n pin: string;\n loadMore: string;\n /** Announced politely after a filter change. */\n resultCount: (count: number) => string;\n}\n\nexport const defaultActivityFeedLabels: ActivityFeedLabels = {\n loading: 'Loading activity',\n empty: 'No activity yet',\n noMatches: 'No activity matches these filters',\n error: 'Could not load activity',\n retry: 'Try again',\n today: 'Today',\n yesterday: 'Yesterday',\n undated: 'Undated',\n pinned: 'Pinned',\n filters: 'Filter by category',\n allCategories: 'All',\n compact: 'Compact view',\n pin: 'Pin',\n loadMore: 'Load more',\n resultCount: (count) =>\n count === 1 ? '1 activity shown' : `${count} activities shown`,\n};\n\nexport type ActivityFeedSlot =\n | 'toolbar'\n | 'filter'\n | 'section'\n | 'dayHeader'\n | 'item'\n | 'highlightedItem'\n | 'state'\n | 'loadMore';\n\nexport interface ActivityFeedItemContext {\n density: ActivityFeedDensity;\n pinned: boolean;\n category?: ActivityFeedCategory;\n}\n\nexport interface ActivityFeedProps<T> extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n items: T[];\n getId: (item: T) => string;\n /** ISO string or `Date`. Date-only strings are wall dates in `timeZone`. */\n getDate: (item: T) => Date | string | null | undefined;\n /** Matched against `categories[].id`. */\n getCategory?: (item: T) => string | undefined;\n getTitle?: (item: T) => string | undefined;\n getDescription?: (item: T) => string | undefined;\n getActor?: (item: T) => ActivityFeedActor | undefined;\n /** Filter chips, icons and colours, in display order. */\n categories?: readonly ActivityFeedCategory[];\n loading?: boolean;\n error?: Error | null;\n onRetry?: () => void;\n /** BCP 47 locale for day headers and times. Defaults to the runtime's. */\n locale?: string;\n /** IANA zone that decides which day an item falls on. Defaults to local. */\n timeZone?: string;\n /** Pins \"today\" so stories and tests stay deterministic. */\n now?: Date;\n pinnedIds?: readonly string[];\n /** Receives the requested state; the row moves optimistically and restores on rejection. */\n onTogglePin?: (id: string, pinned: boolean) => void | Promise<void>;\n onOpen?: (id: string, item: T) => void;\n getHref?: (id: string, item: T) => string;\n /** Scrolls this row into view and highlights it — for deep links. */\n highlightedId?: string | null;\n hasMore?: boolean;\n /** The button shows pending until the returned promise settles. */\n onLoadMore?: () => void | Promise<void>;\n defaultCategories?: readonly string[];\n defaultDensity?: ActivityFeedDensity;\n /** Persists the selected categories and density in `localStorage` under this key. */\n storageKey?: string;\n /** Replaces the built-in row body. Pinning and opening still wrap it. */\n renderItem?: (item: T, context: ActivityFeedItemContext) => React.ReactNode;\n /** Extra content on the row's meta line (badges, durations, sentiment). */\n renderItemMeta?: (item: T) => React.ReactNode;\n /** Rendered under each day header, e.g. a roll-up of that day's calls. */\n renderDaySummary?: (dayKey: string, items: T[]) => React.ReactNode;\n emptyState?: React.ReactNode;\n labels?: Partial<ActivityFeedLabels>;\n classNames?: Partial<Record<ActivityFeedSlot, string>>;\n headingLevel?: 'h2' | 'h3' | 'h4';\n}\n\ninterface StoredPrefs {\n categories?: string[];\n density?: ActivityFeedDensity;\n}\n\nfunction readPrefs(key: string): StoredPrefs {\n try {\n const raw: unknown = JSON.parse(window.localStorage.getItem(key) ?? '{}');\n if (!raw || typeof raw !== 'object') return {};\n const { categories, density } = raw as Record<string, unknown>;\n return {\n categories:\n Array.isArray(categories) &&\n categories.every((c) => typeof c === 'string')\n ? categories\n : undefined,\n density:\n density === 'compact' || density === 'comfortable'\n ? density\n : undefined,\n };\n } catch {\n return {};\n }\n}\n\nfunction writePrefs(key: string, prefs: StoredPrefs) {\n try {\n window.localStorage.setItem(key, JSON.stringify(prefs));\n } catch {\n // Storage full or blocked: the preference just doesn't persist.\n }\n}\n\nconst chipClasses =\n 'inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs font-medium transition-colors motion-reduce:transition-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring';\n\n// =============================================================================\n// Component\n// =============================================================================\n\nfunction ActivityFeedInner<T>(\n {\n items,\n getId,\n getDate,\n getCategory,\n getTitle,\n getDescription,\n getActor,\n categories = [],\n loading = false,\n error = null,\n onRetry,\n locale,\n timeZone = 'local',\n now,\n pinnedIds,\n onTogglePin,\n onOpen,\n getHref,\n highlightedId = null,\n hasMore = false,\n onLoadMore,\n defaultCategories,\n defaultDensity = 'comfortable',\n storageKey,\n renderItem,\n renderItemMeta,\n renderDaySummary,\n emptyState,\n labels,\n classNames,\n headingLevel: Heading = 'h3',\n className,\n ...rest\n }: ActivityFeedProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n const text = { ...defaultActivityFeedLabels, ...labels };\n const baseId = React.useId();\n const reducedMotion = usePrefersReducedMotion();\n const [announcement, announce] = useLiveAnnouncement();\n const [pinOverrides, runPin] = usePendingOverrides<boolean>();\n const [loadingMore, setLoadingMore] = React.useState(false);\n const [selected, setSelected] = React.useState<readonly string[]>(\n defaultCategories ?? []\n );\n const [density, setDensity] =\n React.useState<ActivityFeedDensity>(defaultDensity);\n const rowRefs = React.useRef(new Map<string, HTMLElement>());\n\n // Read after mount so server and first client render agree.\n React.useEffect(() => {\n if (!storageKey) return;\n const stored = readPrefs(storageKey);\n if (stored.categories) setSelected(stored.categories);\n if (stored.density) setDensity(stored.density);\n }, [storageKey]);\n\n React.useEffect(() => {\n if (!highlightedId) return;\n rowRefs.current.get(highlightedId)?.scrollIntoView?.({\n block: 'center',\n behavior: reducedMotion ? 'auto' : 'smooth',\n });\n }, [highlightedId, loading, reducedMotion]);\n\n const categoryById = React.useMemo(\n () => new Map(categories.map((c) => [c.id, c])),\n [categories]\n );\n // Persisted IDs may reference renamed/removed categories; applying them\n // verbatim would filter out everything with no chip shown as active.\n const effectiveFilter = React.useMemo(\n () => selected.filter((id) => categoryById.has(id)),\n [selected, categoryById]\n );\n const pinnedSet = React.useMemo(() => new Set(pinnedIds), [pinnedIds]);\n const isPinned = (id: string) => pinOverrides.get(id) ?? pinnedSet.has(id);\n const matches = (item: T, filter: readonly string[]) =>\n filter.length === 0 || filter.includes(getCategory?.(item) ?? '');\n\n const updateFilters = (next: readonly string[]) => {\n setSelected(next);\n if (storageKey) writePrefs(storageKey, { categories: [...next], density });\n announce(text.resultCount(items.filter((i) => matches(i, next)).length));\n };\n\n const toggleDensity = () => {\n const next = density === 'compact' ? 'comfortable' : 'compact';\n setDensity(next);\n if (storageKey)\n writePrefs(storageKey, { categories: [...selected], density: next });\n };\n\n const loadMore = async () => {\n if (!onLoadMore) return;\n setLoadingMore(true);\n try {\n await onLoadMore();\n } catch {\n // The caller reports the failure; the button becomes usable again.\n } finally {\n setLoadingMore(false);\n }\n };\n\n const zone = timeZone;\n const reference = now ?? new Date();\n const compact = density === 'compact';\n const visible = items.filter((item) => matches(item, effectiveFilter));\n const pinnedItems = groupByDay(\n visible.filter((item) => isPinned(getId(item))),\n getDate,\n zone\n ).flatMap((g) => g.items);\n const days = groupByDay(\n visible.filter((item) => !isPinned(getId(item))),\n getDate,\n zone\n );\n\n let row = 0;\n const renderRow = (item: T) => {\n const id = getId(item);\n const pinned = isPinned(id);\n const pending = pinOverrides.has(id);\n const highlighted = id === highlightedId;\n const category = categoryById.get(getCategory?.(item) ?? '');\n const titleId = `${baseId}-title-${row++}`;\n const accent = accentClasses[category?.color ?? 'neutral'];\n const Icon = category?.icon;\n const dt = toDateTime(getDate(item), zone);\n const localDt = dt && withLocale(dt, locale);\n const actor = getActor?.(item);\n const description = compact ? undefined : getDescription?.(item);\n\n const body = renderItem?.(item, { density, pinned, category }) ?? (\n <>\n <span\n aria-hidden\n className={cn(\n 'flex shrink-0 items-center justify-center rounded-full',\n compact ? 'size-5' : 'mt-0.5 size-7',\n accent.tint\n )}\n >\n {Icon ? (\n <Icon className=\"text-foreground size-3.5\" />\n ) : (\n <span className={cn('size-2 rounded-full', accent.marker)} />\n )}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span\n id={titleId}\n className=\"text-foreground block truncate text-sm font-medium\"\n >\n {getTitle?.(item) ?? category?.label ?? id}\n </span>\n {description && (\n <span className=\"text-muted-foreground line-clamp-2 block text-sm\">\n {description}\n </span>\n )}\n <span className=\"text-muted-foreground mt-0.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs\">\n {actor && (\n <span className=\"inline-flex items-center gap-1.5\">\n {!compact && (\n <Avatar\n size=\"xs\"\n name={actor.name}\n src={actor.avatarUrl}\n alt=\"\"\n aria-hidden\n />\n )}\n {actor.name}\n </span>\n )}\n {category && <span>{category.label}</span>}\n {localDt && (\n <time\n dateTime={localDt.toISO() ?? undefined}\n title={localDt.toLocaleString(DateTime.DATETIME_MED)}\n >\n {localDt.toLocaleString(DateTime.TIME_SIMPLE)}\n </time>\n )}\n {renderItemMeta?.(item)}\n </span>\n </span>\n </>\n );\n\n const mainClasses =\n 'flex min-w-0 flex-1 items-start gap-3 rounded-md text-start focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring';\n const href = getHref?.(id, item);\n let main: React.ReactNode;\n if (href) {\n main = (\n <a\n href={href}\n className={mainClasses}\n onClick={(event) => {\n if (\n !onOpen ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.button !== 0\n )\n return;\n event.preventDefault();\n onOpen(id, item);\n }}\n onKeyDown={(event) => {\n // Anchors ignore Space natively; rows open on Enter and Space alike.\n if (event.key !== ' ') return;\n event.preventDefault();\n event.currentTarget.click();\n }}\n >\n {body}\n </a>\n );\n } else if (onOpen) {\n main = (\n <button\n type=\"button\"\n className={mainClasses}\n onClick={() => onOpen(id, item)}\n >\n {body}\n </button>\n );\n } else {\n main = <div className={mainClasses}>{body}</div>;\n }\n\n return (\n <li\n key={id}\n ref={(el) => {\n if (el) rowRefs.current.set(id, el);\n else rowRefs.current.delete(id);\n }}\n data-slot=\"activity-feed-item\"\n data-highlighted={highlighted || undefined}\n aria-busy={pending || undefined}\n className={cn(\n 'flex items-start gap-2 px-3',\n compact ? 'py-1.5' : 'py-3',\n highlighted && 'ring-primary-500 bg-primary-500/10 ring-2 ring-inset',\n classNames?.item,\n highlighted && classNames?.highlightedItem\n )}\n >\n {main}\n {onTogglePin && renderItem && (\n <span id={titleId} hidden>\n {getTitle?.(item) ?? category?.label ?? id}\n </span>\n )}\n {onTogglePin && (\n <button\n type=\"button\"\n aria-pressed={pinned}\n aria-label={text.pin}\n aria-describedby={titleId}\n disabled={pending}\n title={text.pin}\n onClick={() =>\n void runPin(id, !pinned, () => onTogglePin(id, !pinned))\n }\n className={cn(\n 'text-muted-foreground hover:bg-muted hover:text-foreground shrink-0 rounded-md p-1.5',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n 'disabled:opacity-50',\n pinned && 'text-foreground'\n )}\n >\n <Pin\n className={cn('size-4', pinned && 'fill-current')}\n aria-hidden\n />\n </button>\n )}\n </li>\n );\n };\n\n const section = (\n key: string,\n label: React.ReactNode,\n sectionItems: T[],\n summary?: React.ReactNode\n ) => {\n const headingId = `${baseId}-day-${key || 'none'}`;\n return (\n <section\n key={key}\n aria-labelledby={headingId}\n data-slot=\"activity-feed-section\"\n className={classNames?.section}\n >\n <Heading\n id={headingId}\n data-slot=\"activity-feed-day-header\"\n className={cn(\n 'border-border bg-card text-muted-foreground sticky top-0 z-10 flex items-center gap-1.5 border-b px-3 py-2 text-xs font-semibold tracking-wide uppercase',\n classNames?.dayHeader\n )}\n >\n {label}\n </Heading>\n {summary}\n <ul className=\"divide-border divide-y\">\n {sectionItems.map(renderRow)}\n </ul>\n </section>\n );\n };\n\n let body: React.ReactNode;\n if (error) {\n body = (\n <RecordState\n kind=\"error\"\n slot=\"activity-feed-state\"\n message={text.error}\n retryLabel={text.retry}\n onRetry={onRetry}\n className={classNames?.state}\n />\n );\n } else if (loading) {\n body = (\n <RecordState\n kind=\"loading\"\n slot=\"activity-feed-state\"\n message={text.loading}\n className={classNames?.state}\n />\n );\n } else if (items.length === 0) {\n body = emptyState ?? (\n <RecordState\n kind=\"empty\"\n slot=\"activity-feed-state\"\n message={text.empty}\n className={classNames?.state}\n />\n );\n } else if (visible.length === 0) {\n body = (\n <RecordState\n kind=\"empty\"\n slot=\"activity-feed-state\"\n message={text.noMatches}\n className={classNames?.state}\n >\n <Button variant=\"ghost\" size=\"sm\" onClick={() => updateFilters([])}>\n {text.allCategories}\n </Button>\n </RecordState>\n );\n } else {\n body = (\n <>\n {pinnedItems.length > 0 &&\n section(\n 'pinned',\n <>\n <Pin className=\"size-3.5\" aria-hidden />\n {text.pinned}\n </>,\n pinnedItems\n )}\n {days.map((day) =>\n section(\n day.key,\n formatDayLabel(day.key, {\n now: reference,\n zone,\n locale,\n today: text.today,\n yesterday: text.yesterday,\n undated: text.undated,\n }),\n day.items,\n renderDaySummary?.(day.key, day.items)\n )\n )}\n {hasMore && onLoadMore && (\n <div\n data-slot=\"activity-feed-load-more\"\n className={cn('border-border border-t p-3', classNames?.loadMore)}\n >\n <Button\n variant=\"ghost\"\n size=\"sm\"\n fullWidth\n isLoading={loadingMore}\n onClick={() => void loadMore()}\n >\n {text.loadMore}\n </Button>\n </div>\n )}\n </>\n );\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"activity-feed\"\n className={cn(\n 'border-border bg-card overflow-hidden rounded-lg border',\n className\n )}\n {...rest}\n >\n {(categories.length > 0 || items.length > 0) && (\n <div\n data-slot=\"activity-feed-toolbar\"\n className={cn(\n 'border-border flex items-center gap-2 border-b px-3 py-2',\n classNames?.toolbar\n )}\n >\n {categories.length > 0 && (\n <div\n role=\"group\"\n aria-label={text.filters}\n className=\"flex min-w-0 flex-1 flex-wrap gap-1.5\"\n >\n <button\n type=\"button\"\n aria-pressed={effectiveFilter.length === 0}\n onClick={() => updateFilters([])}\n data-slot=\"activity-feed-filter\"\n className={cn(\n chipClasses,\n effectiveFilter.length === 0\n ? 'border-primary-500/40 bg-primary-500/10 text-foreground'\n : 'border-border text-muted-foreground hover:bg-muted',\n classNames?.filter\n )}\n >\n {text.allCategories}\n </button>\n {categories.map((category) => {\n const active = effectiveFilter.includes(category.id);\n const accent = accentClasses[category.color ?? 'primary'];\n const Icon = category.icon;\n return (\n <button\n key={category.id}\n type=\"button\"\n aria-pressed={active}\n onClick={() =>\n updateFilters(\n active\n ? effectiveFilter.filter((c) => c !== category.id)\n : [...effectiveFilter, category.id]\n )\n }\n data-slot=\"activity-feed-filter\"\n className={cn(\n chipClasses,\n active\n ? cn(accent.tint, accent.border, 'text-foreground')\n : 'border-border text-muted-foreground hover:bg-muted',\n classNames?.filter\n )}\n >\n {Icon && <Icon className=\"size-3.5\" aria-hidden />}\n {category.label}\n </button>\n );\n })}\n </div>\n )}\n <button\n type=\"button\"\n aria-pressed={compact}\n aria-label={text.compact}\n title={text.compact}\n onClick={toggleDensity}\n className={cn(\n 'text-muted-foreground hover:bg-muted ms-auto shrink-0 rounded-md p-1.5',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n compact && 'bg-muted text-foreground'\n )}\n >\n <Rows4 className=\"size-4\" aria-hidden />\n </button>\n </div>\n )}\n <div aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </div>\n {body}\n </div>\n );\n}\n\n/**\n * A day-grouped feed of a record's activity. Declared\n * `parameters.catalog.collection` — its load states are part of the API.\n */\nexport const ActivityFeed = React.forwardRef(ActivityFeedInner) as <T>(\n props: ActivityFeedProps<T> & { ref?: React.ForwardedRef<HTMLDivElement> }\n) => React.ReactElement;\n\n(ActivityFeed as React.FC).displayName = 'ActivityFeed';\n"]}
1
+ {"version":3,"sources":["../src/components/ActivityFeed/ActivityFeed.tsx"],"names":["React","usePrefersReducedMotion","useLiveAnnouncement","usePendingOverrides","groupByDay","accentClasses","toDateTime","withLocale","body","jsxs","Fragment","jsx","cn","Avatar","DateTime","Pin","RecordState","Button","formatDayLabel","Rows4"],"mappings":"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","file":"chunk-4I5V6SXP.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { DateTime } from 'luxon';\nimport { Pin, Rows4, type LucideIcon } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Avatar } from '../Avatar';\nimport { Button } from '../Button';\nimport { useLiveAnnouncement } from '../../hooks/useLiveAnnouncement';\nimport { usePrefersReducedMotion } from '../../hooks/usePrefersReducedMotion';\nimport { accentClasses, toDateTime, type Accent } from '../../views/types';\nimport { formatDayLabel, groupByDay, withLocale } from './dayGroups';\nimport { RecordState } from './RecordState';\nimport { usePendingOverrides } from './usePendingOverrides';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type ActivityFeedDensity = 'comfortable' | 'compact';\n\nexport interface ActivityFeedCategory {\n id: string;\n label: string;\n icon?: LucideIcon;\n /** Token name, resolved to `--mieweb-*` colours. */\n color?: Accent;\n}\n\nexport interface ActivityFeedActor {\n name: string;\n avatarUrl?: string;\n}\n\nexport interface ActivityFeedLabels {\n loading: string;\n empty: string;\n /** Shown when items exist but the active filters hide all of them. */\n noMatches: string;\n error: string;\n retry: string;\n today: string;\n yesterday: string;\n undated: string;\n pinned: string;\n /** Accessible name of the category filter group. */\n filters: string;\n /** The chip that clears every filter. */\n allCategories: string;\n compact: string;\n pin: string;\n loadMore: string;\n /** Announced politely after a filter change. */\n resultCount: (count: number) => string;\n}\n\nexport const defaultActivityFeedLabels: ActivityFeedLabels = {\n loading: 'Loading activity',\n empty: 'No activity yet',\n noMatches: 'No activity matches these filters',\n error: 'Could not load activity',\n retry: 'Try again',\n today: 'Today',\n yesterday: 'Yesterday',\n undated: 'Undated',\n pinned: 'Pinned',\n filters: 'Filter by category',\n allCategories: 'All',\n compact: 'Compact view',\n pin: 'Pin',\n loadMore: 'Load more',\n resultCount: (count) =>\n count === 1 ? '1 activity shown' : `${count} activities shown`,\n};\n\nexport type ActivityFeedSlot =\n | 'toolbar'\n | 'filter'\n | 'section'\n | 'dayHeader'\n | 'item'\n | 'highlightedItem'\n | 'state'\n | 'loadMore';\n\nexport interface ActivityFeedItemContext {\n density: ActivityFeedDensity;\n pinned: boolean;\n category?: ActivityFeedCategory;\n}\n\nexport interface ActivityFeedProps<T> extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n items: T[];\n getId: (item: T) => string;\n /** ISO string or `Date`. Date-only strings are wall dates in `timeZone`. */\n getDate: (item: T) => Date | string | null | undefined;\n /** Matched against `categories[].id`. */\n getCategory?: (item: T) => string | undefined;\n getTitle?: (item: T) => string | undefined;\n getDescription?: (item: T) => string | undefined;\n getActor?: (item: T) => ActivityFeedActor | undefined;\n /** Filter chips, icons and colours, in display order. */\n categories?: readonly ActivityFeedCategory[];\n loading?: boolean;\n error?: Error | null;\n onRetry?: () => void;\n /** BCP 47 locale for day headers and times. Defaults to the runtime's. */\n locale?: string;\n /** IANA zone that decides which day an item falls on. Defaults to local. */\n timeZone?: string;\n /** Pins \"today\" so stories and tests stay deterministic. */\n now?: Date;\n pinnedIds?: readonly string[];\n /** Receives the requested state; the row moves optimistically and restores on rejection. */\n onTogglePin?: (id: string, pinned: boolean) => void | Promise<void>;\n onOpen?: (id: string, item: T) => void;\n getHref?: (id: string, item: T) => string;\n /** Scrolls this row into view and highlights it — for deep links. */\n highlightedId?: string | null;\n hasMore?: boolean;\n /** The button shows pending until the returned promise settles. */\n onLoadMore?: () => void | Promise<void>;\n defaultCategories?: readonly string[];\n defaultDensity?: ActivityFeedDensity;\n /** Persists the selected categories and density in `localStorage` under this key. */\n storageKey?: string;\n /** Replaces the built-in row body. Pinning and opening still wrap it. */\n renderItem?: (item: T, context: ActivityFeedItemContext) => React.ReactNode;\n /** Extra content on the row's meta line (badges, durations, sentiment). */\n renderItemMeta?: (item: T) => React.ReactNode;\n /** Rendered under each day header, e.g. a roll-up of that day's calls. */\n renderDaySummary?: (dayKey: string, items: T[]) => React.ReactNode;\n emptyState?: React.ReactNode;\n labels?: Partial<ActivityFeedLabels>;\n classNames?: Partial<Record<ActivityFeedSlot, string>>;\n headingLevel?: 'h2' | 'h3' | 'h4';\n}\n\ninterface StoredPrefs {\n categories?: string[];\n density?: ActivityFeedDensity;\n}\n\nfunction readPrefs(key: string): StoredPrefs {\n try {\n const raw: unknown = JSON.parse(window.localStorage.getItem(key) ?? '{}');\n if (!raw || typeof raw !== 'object') return {};\n const { categories, density } = raw as Record<string, unknown>;\n return {\n categories:\n Array.isArray(categories) &&\n categories.every((c) => typeof c === 'string')\n ? categories\n : undefined,\n density:\n density === 'compact' || density === 'comfortable'\n ? density\n : undefined,\n };\n } catch {\n return {};\n }\n}\n\nfunction writePrefs(key: string, prefs: StoredPrefs) {\n try {\n window.localStorage.setItem(key, JSON.stringify(prefs));\n } catch {\n // Storage full or blocked: the preference just doesn't persist.\n }\n}\n\nconst chipClasses =\n 'inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs font-medium transition-colors motion-reduce:transition-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring';\n\n// =============================================================================\n// Component\n// =============================================================================\n\nfunction ActivityFeedInner<T>(\n {\n items,\n getId,\n getDate,\n getCategory,\n getTitle,\n getDescription,\n getActor,\n categories = [],\n loading = false,\n error = null,\n onRetry,\n locale,\n timeZone = 'local',\n now,\n pinnedIds,\n onTogglePin,\n onOpen,\n getHref,\n highlightedId = null,\n hasMore = false,\n onLoadMore,\n defaultCategories,\n defaultDensity = 'comfortable',\n storageKey,\n renderItem,\n renderItemMeta,\n renderDaySummary,\n emptyState,\n labels,\n classNames,\n headingLevel: Heading = 'h3',\n className,\n ...rest\n }: ActivityFeedProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n const text = { ...defaultActivityFeedLabels, ...labels };\n const baseId = React.useId();\n const reducedMotion = usePrefersReducedMotion();\n const [announcement, announce] = useLiveAnnouncement();\n const [pinOverrides, runPin] = usePendingOverrides<boolean>();\n const [loadingMore, setLoadingMore] = React.useState(false);\n const [selected, setSelected] = React.useState<readonly string[]>(\n defaultCategories ?? []\n );\n const [density, setDensity] =\n React.useState<ActivityFeedDensity>(defaultDensity);\n const rowRefs = React.useRef(new Map<string, HTMLElement>());\n\n // Read after mount so server and first client render agree.\n React.useEffect(() => {\n if (!storageKey) return;\n const stored = readPrefs(storageKey);\n if (stored.categories) setSelected(stored.categories);\n if (stored.density) setDensity(stored.density);\n }, [storageKey]);\n\n React.useEffect(() => {\n if (!highlightedId) return;\n rowRefs.current.get(highlightedId)?.scrollIntoView?.({\n block: 'center',\n behavior: reducedMotion ? 'auto' : 'smooth',\n });\n }, [highlightedId, loading, reducedMotion]);\n\n const categoryById = React.useMemo(\n () => new Map(categories.map((c) => [c.id, c])),\n [categories]\n );\n // Persisted IDs may reference renamed/removed categories; applying them\n // verbatim would filter out everything with no chip shown as active.\n const effectiveFilter = React.useMemo(\n () => selected.filter((id) => categoryById.has(id)),\n [selected, categoryById]\n );\n const pinnedSet = React.useMemo(() => new Set(pinnedIds), [pinnedIds]);\n const isPinned = (id: string) => pinOverrides.get(id) ?? pinnedSet.has(id);\n const matches = (item: T, filter: readonly string[]) =>\n filter.length === 0 || filter.includes(getCategory?.(item) ?? '');\n\n const updateFilters = (next: readonly string[]) => {\n setSelected(next);\n if (storageKey) writePrefs(storageKey, { categories: [...next], density });\n announce(text.resultCount(items.filter((i) => matches(i, next)).length));\n };\n\n const toggleDensity = () => {\n const next = density === 'compact' ? 'comfortable' : 'compact';\n setDensity(next);\n if (storageKey)\n writePrefs(storageKey, { categories: [...selected], density: next });\n };\n\n const loadMore = async () => {\n if (!onLoadMore) return;\n setLoadingMore(true);\n try {\n await onLoadMore();\n } catch {\n // The caller reports the failure; the button becomes usable again.\n } finally {\n setLoadingMore(false);\n }\n };\n\n const zone = timeZone;\n const reference = now ?? new Date();\n const compact = density === 'compact';\n const visible = items.filter((item) => matches(item, effectiveFilter));\n const pinnedItems = groupByDay(\n visible.filter((item) => isPinned(getId(item))),\n getDate,\n zone\n ).flatMap((g) => g.items);\n const days = groupByDay(\n visible.filter((item) => !isPinned(getId(item))),\n getDate,\n zone\n );\n\n let row = 0;\n const renderRow = (item: T) => {\n const id = getId(item);\n const pinned = isPinned(id);\n const pending = pinOverrides.has(id);\n const highlighted = id === highlightedId;\n const category = categoryById.get(getCategory?.(item) ?? '');\n const titleId = `${baseId}-title-${row++}`;\n const accent = accentClasses[category?.color ?? 'neutral'];\n const Icon = category?.icon;\n const dt = toDateTime(getDate(item), zone);\n const localDt = dt && withLocale(dt, locale);\n const actor = getActor?.(item);\n const description = compact ? undefined : getDescription?.(item);\n\n const body = renderItem?.(item, { density, pinned, category }) ?? (\n <>\n <span\n aria-hidden\n className={cn(\n 'flex shrink-0 items-center justify-center rounded-full',\n compact ? 'size-5' : 'mt-0.5 size-7',\n accent.tint\n )}\n >\n {Icon ? (\n <Icon className=\"text-foreground size-3.5\" />\n ) : (\n <span className={cn('size-2 rounded-full', accent.marker)} />\n )}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span\n id={titleId}\n className=\"text-foreground block truncate text-sm font-medium\"\n >\n {getTitle?.(item) ?? category?.label ?? id}\n </span>\n {description && (\n <span className=\"text-muted-foreground line-clamp-2 block text-sm\">\n {description}\n </span>\n )}\n <span className=\"text-muted-foreground mt-0.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs\">\n {actor && (\n <span className=\"inline-flex items-center gap-1.5\">\n {!compact && (\n <Avatar\n size=\"xs\"\n name={actor.name}\n src={actor.avatarUrl}\n alt=\"\"\n aria-hidden\n />\n )}\n {actor.name}\n </span>\n )}\n {category && <span>{category.label}</span>}\n {localDt && (\n <time\n dateTime={localDt.toISO() ?? undefined}\n title={localDt.toLocaleString(DateTime.DATETIME_MED)}\n >\n {localDt.toLocaleString(DateTime.TIME_SIMPLE)}\n </time>\n )}\n {renderItemMeta?.(item)}\n </span>\n </span>\n </>\n );\n\n const mainClasses =\n 'flex min-w-0 flex-1 items-start gap-3 rounded-md text-start focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring';\n const href = getHref?.(id, item);\n let main: React.ReactNode;\n if (href) {\n main = (\n <a\n href={href}\n className={mainClasses}\n onClick={(event) => {\n if (\n !onOpen ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.button !== 0\n )\n return;\n event.preventDefault();\n onOpen(id, item);\n }}\n onKeyDown={(event) => {\n // Anchors ignore Space natively; rows open on Enter and Space alike.\n if (event.key !== ' ') return;\n event.preventDefault();\n event.currentTarget.click();\n }}\n >\n {body}\n </a>\n );\n } else if (onOpen) {\n main = (\n <button\n type=\"button\"\n className={mainClasses}\n onClick={() => onOpen(id, item)}\n >\n {body}\n </button>\n );\n } else {\n main = <div className={mainClasses}>{body}</div>;\n }\n\n return (\n <li\n key={id}\n ref={(el) => {\n if (el) rowRefs.current.set(id, el);\n else rowRefs.current.delete(id);\n }}\n data-slot=\"activity-feed-item\"\n data-highlighted={highlighted || undefined}\n aria-busy={pending || undefined}\n className={cn(\n 'flex items-start gap-2 px-3',\n compact ? 'py-1.5' : 'py-3',\n highlighted && 'ring-primary-500 bg-primary-500/10 ring-2 ring-inset',\n classNames?.item,\n highlighted && classNames?.highlightedItem\n )}\n >\n {main}\n {onTogglePin && renderItem && (\n <span id={titleId} hidden>\n {getTitle?.(item) ?? category?.label ?? id}\n </span>\n )}\n {onTogglePin && (\n <button\n type=\"button\"\n aria-pressed={pinned}\n aria-label={text.pin}\n aria-describedby={titleId}\n disabled={pending}\n title={text.pin}\n onClick={() =>\n void runPin(id, !pinned, () => onTogglePin(id, !pinned))\n }\n className={cn(\n 'text-muted-foreground hover:bg-muted hover:text-foreground shrink-0 rounded-md p-1.5',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n 'disabled:opacity-50',\n pinned && 'text-foreground'\n )}\n >\n <Pin\n className={cn('size-4', pinned && 'fill-current')}\n aria-hidden\n />\n </button>\n )}\n </li>\n );\n };\n\n const section = (\n key: string,\n label: React.ReactNode,\n sectionItems: T[],\n summary?: React.ReactNode\n ) => {\n const headingId = `${baseId}-day-${key || 'none'}`;\n return (\n <section\n key={key}\n aria-labelledby={headingId}\n data-slot=\"activity-feed-section\"\n className={classNames?.section}\n >\n <Heading\n id={headingId}\n data-slot=\"activity-feed-day-header\"\n className={cn(\n 'border-border bg-card text-muted-foreground sticky top-0 z-10 flex items-center gap-1.5 border-b px-3 py-2 text-xs font-semibold tracking-wide uppercase',\n classNames?.dayHeader\n )}\n >\n {label}\n </Heading>\n {summary}\n <ul className=\"divide-border divide-y\">\n {sectionItems.map(renderRow)}\n </ul>\n </section>\n );\n };\n\n let body: React.ReactNode;\n if (error) {\n body = (\n <RecordState\n kind=\"error\"\n slot=\"activity-feed-state\"\n message={text.error}\n retryLabel={text.retry}\n onRetry={onRetry}\n className={classNames?.state}\n />\n );\n } else if (loading) {\n body = (\n <RecordState\n kind=\"loading\"\n slot=\"activity-feed-state\"\n message={text.loading}\n className={classNames?.state}\n />\n );\n } else if (items.length === 0) {\n body = emptyState ?? (\n <RecordState\n kind=\"empty\"\n slot=\"activity-feed-state\"\n message={text.empty}\n className={classNames?.state}\n />\n );\n } else if (visible.length === 0) {\n body = (\n <RecordState\n kind=\"empty\"\n slot=\"activity-feed-state\"\n message={text.noMatches}\n className={classNames?.state}\n >\n <Button variant=\"ghost\" size=\"sm\" onClick={() => updateFilters([])}>\n {text.allCategories}\n </Button>\n </RecordState>\n );\n } else {\n body = (\n <>\n {pinnedItems.length > 0 &&\n section(\n 'pinned',\n <>\n <Pin className=\"size-3.5\" aria-hidden />\n {text.pinned}\n </>,\n pinnedItems\n )}\n {days.map((day) =>\n section(\n day.key,\n formatDayLabel(day.key, {\n now: reference,\n zone,\n locale,\n today: text.today,\n yesterday: text.yesterday,\n undated: text.undated,\n }),\n day.items,\n renderDaySummary?.(day.key, day.items)\n )\n )}\n {hasMore && onLoadMore && (\n <div\n data-slot=\"activity-feed-load-more\"\n className={cn('border-border border-t p-3', classNames?.loadMore)}\n >\n <Button\n variant=\"ghost\"\n size=\"sm\"\n fullWidth\n isLoading={loadingMore}\n onClick={() => void loadMore()}\n >\n {text.loadMore}\n </Button>\n </div>\n )}\n </>\n );\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"activity-feed\"\n className={cn(\n 'border-border bg-card overflow-hidden rounded-lg border',\n className\n )}\n {...rest}\n >\n {(categories.length > 0 || items.length > 0) && (\n <div\n data-slot=\"activity-feed-toolbar\"\n className={cn(\n 'border-border flex items-center gap-2 border-b px-3 py-2',\n classNames?.toolbar\n )}\n >\n {categories.length > 0 && (\n <div\n role=\"group\"\n aria-label={text.filters}\n className=\"flex min-w-0 flex-1 flex-wrap gap-1.5\"\n >\n <button\n type=\"button\"\n aria-pressed={effectiveFilter.length === 0}\n onClick={() => updateFilters([])}\n data-slot=\"activity-feed-filter\"\n className={cn(\n chipClasses,\n effectiveFilter.length === 0\n ? 'border-primary-500/40 bg-primary-500/10 text-foreground'\n : 'border-border text-muted-foreground hover:bg-muted',\n classNames?.filter\n )}\n >\n {text.allCategories}\n </button>\n {categories.map((category) => {\n const active = effectiveFilter.includes(category.id);\n const accent = accentClasses[category.color ?? 'primary'];\n const Icon = category.icon;\n return (\n <button\n key={category.id}\n type=\"button\"\n aria-pressed={active}\n onClick={() =>\n updateFilters(\n active\n ? effectiveFilter.filter((c) => c !== category.id)\n : [...effectiveFilter, category.id]\n )\n }\n data-slot=\"activity-feed-filter\"\n className={cn(\n chipClasses,\n active\n ? cn(accent.tint, accent.border, 'text-foreground')\n : 'border-border text-muted-foreground hover:bg-muted',\n classNames?.filter\n )}\n >\n {Icon && <Icon className=\"size-3.5\" aria-hidden />}\n {category.label}\n </button>\n );\n })}\n </div>\n )}\n <button\n type=\"button\"\n aria-pressed={compact}\n aria-label={text.compact}\n title={text.compact}\n onClick={toggleDensity}\n className={cn(\n 'text-muted-foreground hover:bg-muted ms-auto shrink-0 rounded-md p-1.5',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n compact && 'bg-muted text-foreground'\n )}\n >\n <Rows4 className=\"size-4\" aria-hidden />\n </button>\n </div>\n )}\n <div aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </div>\n {body}\n </div>\n );\n}\n\n/**\n * A day-grouped feed of a record's activity. Declared\n * `parameters.catalog.collection` — its load states are part of the API.\n */\nexport const ActivityFeed = React.forwardRef(ActivityFeedInner) as <T>(\n props: ActivityFeedProps<T> & { ref?: React.ForwardedRef<HTMLDivElement> }\n) => React.ReactElement;\n\n(ActivityFeed as React.FC).displayName = 'ActivityFeed';\n"]}
@@ -16,5 +16,5 @@ var PLAYBACK_SPEEDS = [
16
16
 
17
17
  exports.PLAYBACK_SPEEDS = PLAYBACK_SPEEDS;
18
18
  exports.isSilenceType = isSilenceType;
19
- //# sourceMappingURL=chunk-NUFUV43P.cjs.map
20
- //# sourceMappingURL=chunk-NUFUV43P.cjs.map
19
+ //# sourceMappingURL=chunk-4UDEMJE4.cjs.map
20
+ //# sourceMappingURL=chunk-4UDEMJE4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/TranscriptView/transcript.ts"],"names":[],"mappings":";;;AAiBO,SAAS,cAAc,QAAA,EAAyC;AACrE,EAAA,OAAO,QAAA,KAAa,aAAa,QAAA,KAAa,iBAAA;AAChD;AAmFO,IAAM,eAAA,GAAmC;AAAA,EAC9C,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,CAAA;AAAA,EAAG,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM;AACjC","file":"chunk-4UDEMJE4.cjs","sourcesContent":["/**\n * Transcript schema for @mieweb/ui media components.\n *\n * Provider-agnostic and persistence-agnostic. Canonical time unit is\n * **milliseconds** (consumers with seconds-based data, e.g. osheet, adapt\n * at the boundary).\n *\n * Shared by TranscriptView, MediaEditor, and useTranscriptEdits.\n */\n\n/** Type of transcript word - 'word' for spoken content, 'silence' for detected gaps, 'silence-newline' for longer pauses */\nexport type WordType = 'word' | 'silence' | 'silence-newline';\n\n/** True for BOTH silence pseudo-word types ('silence' and 'silence-newline').\n * Use this instead of comparing against 'silence' directly — checking only one\n * of the two types is the root cause of a whole family of review findings\n * (stats, splitting, filler analysis, clipboard copy). */\nexport function isSilenceType(wordType: WordType | undefined): boolean {\n return wordType === 'silence' || wordType === 'silence-newline';\n}\n\nexport interface TranscriptWord {\n text: string;\n startMs: number;\n endMs: number;\n /** References Speaker.id when diarization is available */\n speakerId?: string;\n confidence?: number;\n /** Type of word: 'word' for spoken content, 'silence' for detected gaps. Defaults to 'word' */\n wordType?: WordType;\n}\n\n/** A diarized segment of contiguous speech (osheet-style granularity) */\nexport interface TranscriptSegment {\n text: string;\n startMs: number;\n endMs: number;\n /** References Speaker.id when diarization is available */\n speakerId?: string;\n /** Other Speaker.ids talking at the same time (overlapping speech) */\n overlapSpeakerIds?: string[];\n words: TranscriptWord[];\n}\n\nexport interface Speaker {\n id: string;\n /** Display name (e.g. 'Clinician', 'Patient'). Hosts may remap via speakerLabels props. */\n name?: string;\n}\n\n/** One stretch of a speaker talking, straight from diarization; stretches may overlap. */\nexport interface SpeakerActivity {\n speakerId: string;\n startMs: number;\n endMs: number;\n}\n\nexport interface Transcript {\n durationMs: number;\n speakers?: Speaker[];\n words: TranscriptWord[];\n segments?: TranscriptSegment[];\n /**\n * Who spoke when, independent of the words: includes overlap and speech with no transcript\n * (e.g. \"mm-hm\"). Consumers without it can derive activity from `segments`.\n */\n speakerActivity?: SpeakerActivity[];\n}\n\n/**\n * An editable word that references the original transcript word.\n * Used in the edited timeline to track deletions and reordering.\n */\nexport interface EditableWord {\n /** Index into the SILENCE-INSERTED baseline timeline (transcript.words\n * with detected silence pseudo-words interleaved) — NOT into\n * transcript.words. -1 for split/inserted entries with no baseline slot.\n * Consumers persisting edits should key by this timeline. */\n originalIndex: number;\n /** The word data (from original transcript) */\n word: TranscriptWord;\n /** Whether this word is marked as deleted */\n deleted: boolean;\n /** Whether this word was inserted (pasted from clipboard) */\n inserted?: boolean;\n}\n\n/**\n * Represents a contiguous segment of playback from the original media.\n * Used when playing back an edited timeline with potentially reordered/deleted words.\n */\nexport interface PlaybackSegment {\n startMs: number;\n endMs: number;\n /** Indices into the editedWords array that this segment covers */\n editedIndices: number[];\n}\n\n/** Available playback speed multipliers */\nexport type PlaybackSpeed = 0.5 | 0.75 | 1 | 1.25 | 1.5 | 1.75 | 2;\n\n/** Array of all available speed options for dropdowns */\nexport const PLAYBACK_SPEEDS: PlaybackSpeed[] = [\n 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2,\n];\n\n/**\n * A speed marker applied to a word in the transcript.\n * The speed applies from this word until the next speed marker or end of transcript.\n */\nexport interface SpeedMarker {\n /** Index in the editedWords array where the speed marker is placed */\n wordIndex: number;\n /** The playback speed multiplier */\n speed: PlaybackSpeed;\n}\n"]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var chunkYW2AKBLS_cjs = require('./chunk-YW2AKBLS.cjs');
4
4
  var chunk7E46YDOT_cjs = require('./chunk-7E46YDOT.cjs');
5
- var chunkDXEPYK3I_cjs = require('./chunk-DXEPYK3I.cjs');
5
+ var chunkHGJHWI7W_cjs = require('./chunk-HGJHWI7W.cjs');
6
6
  var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
7
7
  var React = require('react');
8
8
  var lucideReact = require('lucide-react');
@@ -311,7 +311,7 @@ function Detail({
311
311
  description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-[15px] leading-snug", children: description }),
312
312
  caption && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-sm", children: caption }),
313
313
  (cta || href) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1 flex flex-wrap items-center gap-3", children: [
314
- cta && /* @__PURE__ */ jsxRuntime.jsxs("a", { href: cta.href, className: chunkDXEPYK3I_cjs.buttonVariants({ effect: "sheen" }), children: [
314
+ cta && /* @__PURE__ */ jsxRuntime.jsxs("a", { href: cta.href, className: chunkHGJHWI7W_cjs.buttonVariants({ effect: "sheen" }), children: [
315
315
  cta.label,
316
316
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { size: 16, "aria-hidden": true, className: "rtl:-scale-x-100" })
317
317
  ] }),
@@ -328,5 +328,5 @@ function Detail({
328
328
  }
329
329
 
330
330
  exports.RadialExplorer = RadialExplorer;
331
- //# sourceMappingURL=chunk-L5Y52F2E.cjs.map
332
- //# sourceMappingURL=chunk-L5Y52F2E.cjs.map
331
+ //# sourceMappingURL=chunk-4VSK3EE5.cjs.map
332
+ //# sourceMappingURL=chunk-4VSK3EE5.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/RadialExplorer/RadialExplorer.tsx"],"names":["usePrefersReducedMotion","React","jsxs","cn","jsx","Badge","buttonVariants","ArrowRight"],"mappings":"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","file":"chunk-L5Y52F2E.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { ArrowRight } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Badge } from '../Badge';\nimport { buttonVariants } from '../Button';\nimport { usePrefersReducedMotion } from '../../hooks/usePrefersReducedMotion';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface RadialSpoke {\n id: string;\n /** Label under the tile. */\n label: string;\n /** Tile icon (Lucide, ~22px). */\n icon: React.ReactNode;\n /** Small caps tag above the detail heading. Defaults to `label`. */\n tag?: string;\n /** Detail heading. Defaults to `label`. */\n title?: string;\n description?: string;\n /** Detail media — a `VideoCard variant=\"plate\"`, an image, a chart. */\n media?: React.ReactNode;\n /** Caption under the media, e.g. \"AI Medical Assistant · 2:44\". */\n caption?: string;\n /** Primary CTA in the detail panel. */\n cta?: { label: string; href: string };\n /** Secondary \"Explore module →\" link. */\n href?: string;\n hrefLabel?: string;\n}\n\nexport interface RadialExplorerProps {\n spokes: RadialSpoke[];\n /** Centre node — a brand mark or product tile. */\n center: React.ReactNode;\n /** Small caps label over the whole explorer. */\n eyebrow?: string;\n /** Controlled active spoke. */\n activeId?: string | null;\n defaultActiveId?: string | null;\n onActiveChange?: (id: string | null) => void;\n /** Shown in the detail panel before any spoke is chosen. */\n welcome?: {\n tag?: string;\n title: string;\n description?: string;\n media?: React.ReactNode;\n cta?: { label: string; href: string };\n };\n /**\n * Auto-advance through the spokes until the visitor interacts. Default\n * 2200ms; pass 0 to disable. Skipped under `prefers-reduced-motion`.\n */\n attractMs?: number;\n /** Hint under the ring. Default \"Hover a module to preview\". */\n hint?: string;\n /** Orbit radius. Default `clamp(118px, 17vw, 188px)`. */\n radius?: string;\n /** Accessible name for the spoke group. Default \"Modules\". */\n groupLabel?: string;\n className?: string;\n}\n\n// =============================================================================\n// RadialExplorer\n// =============================================================================\n\n/**\n * A radial product explorer: a centre mark with N icon tiles orbiting it, a\n * glowing tracer ray from the core to the active tile, tab dots, and a detail\n * panel beside the ring that shows the active spoke's media, copy and CTAs\n * (with a welcome state before any pick). Auto-advances gently until the\n * visitor engages. Below `lg` the ring becomes a chip grid above the panel.\n * Ported from the Enterprise Health hero HUD.\n *\n * @example\n * ```tsx\n * <RadialExplorer\n * eyebrow=\"Explore the platform\"\n * center={<img src=\"/mark.svg\" alt=\"\" />}\n * spokes={[{ id: 'ehr', label: 'Certified EHR', icon: <FileText />, description: '…',\n * media: <VideoCard variant=\"plate\" title=\"EHR tour\" youtubeId=\"…\" duration=\"2:44\" />,\n * cta: { label: 'Request a demo', href: '/demo/' }, href: '/platform/ehr/' }]}\n * />\n * ```\n */\nexport function RadialExplorer({\n spokes,\n center,\n eyebrow,\n activeId: controlled,\n defaultActiveId = null,\n onActiveChange,\n welcome,\n attractMs = 2200,\n hint = 'Hover a module to preview',\n radius = 'clamp(118px, 17vw, 188px)',\n groupLabel = 'Modules',\n className,\n}: RadialExplorerProps) {\n const reduced = usePrefersReducedMotion();\n const [inner, setInner] = React.useState<string | null>(defaultActiveId);\n const [engaged, setEngaged] = React.useState(false);\n const activeId = controlled !== undefined ? controlled : inner;\n const id = React.useId();\n\n const select = React.useCallback(\n (next: string | null) => {\n setEngaged(true);\n if (controlled === undefined) setInner(next);\n onActiveChange?.(next);\n },\n [controlled, onActiveChange]\n );\n\n // Attract loop until the visitor interacts. Never runs in controlled mode:\n // `activeId` is owned by the host, so cycling it (or firing unsolicited\n // `onActiveChange` ticks) would fight the controlled API contract.\n React.useEffect(() => {\n if (\n controlled !== undefined ||\n engaged ||\n reduced ||\n !attractMs ||\n spokes.length === 0\n )\n return;\n let i = spokes.findIndex((s) => s.id === activeId);\n const t = window.setInterval(() => {\n i = (i + 1) % spokes.length;\n setInner(spokes[i].id);\n onActiveChange?.(spokes[i].id);\n }, attractMs);\n return () => window.clearInterval(t);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [engaged, reduced, attractMs, spokes.length, controlled]);\n\n const activeIndex = spokes.findIndex((s) => s.id === activeId);\n const active = activeIndex >= 0 ? spokes[activeIndex] : null;\n const step = 360 / Math.max(spokes.length, 1);\n const angle = (i: number) => `${i * step - 90}deg`;\n\n return (\n <section\n data-slot=\"radial-explorer\"\n style={{ '--re-r': radius } as React.CSSProperties}\n className={cn(\n 'grid gap-8 lg:grid-cols-[1.1fr_minmax(300px,380px)] lg:items-center',\n className\n )}\n aria-labelledby={eyebrow ? `${id}-eyebrow` : undefined}\n >\n <div className=\"flex flex-col items-center gap-5\">\n {eyebrow && (\n <p\n id={`${id}-eyebrow`}\n className=\"text-primary-800 dark:text-primary-300 text-[11px] font-bold tracking-[0.18em] uppercase\"\n >\n {eyebrow}\n </p>\n )}\n\n {/* Ring (lg+) */}\n <div\n role=\"group\"\n aria-label={groupLabel}\n data-slot=\"radial-explorer-ring\"\n className=\"relative hidden aspect-square w-[calc(var(--re-r)*2+120px)] place-items-center lg:grid\"\n >\n <span\n aria-hidden\n data-slot=\"radial-explorer-core\"\n className={cn(\n // rtl-ignore -- physical centering paired with -translate-x-1/2 is direction-independent; start-1/2 would break it in RTL\n 'absolute top-1/2 left-1/2 grid h-[100px] w-[100px] -translate-x-1/2 -translate-y-1/2 place-items-center rounded-[24%] border border-white/15 text-white shadow-[0_14px_30px_rgba(0,0,0,0.3),inset_0_1px_0_rgba(255,255,255,0.08)]',\n '[background:radial-gradient(90%_90%_at_24%_8%,color-mix(in_srgb,var(--mieweb-primary-400)_35%,transparent),transparent_60%),linear-gradient(145deg,var(--mieweb-primary-700)_0%,var(--mieweb-primary-900)_68%,var(--mieweb-primary-950)_100%)]',\n '[&>*]:h-[54px] [&>*]:w-[54px] [&>img]:object-contain'\n )}\n >\n {center}\n </span>\n\n {active && (\n <span\n aria-hidden\n data-slot=\"radial-explorer-ray\"\n style={{\n width: 'var(--re-r)',\n transform: `translateY(-50%) rotate(${angle(activeIndex)})`,\n }}\n className={cn(\n // rtl-ignore -- the ray is rotated to a computed angle from the physical center; origin/tip geometry must stay physical\n 'pointer-events-none absolute top-1/2 left-1/2 z-0 h-0.5 origin-left rounded-full transition-transform duration-500 [transition-timing-function:cubic-bezier(0.4,0.85,0.3,1)]',\n '[filter:drop-shadow(0_0_6px_color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-300))_55%,transparent))] [background:linear-gradient(90deg,transparent_4%,var(--mieweb-accent,var(--mieweb-primary-300))_94%)]',\n // rtl-ignore -- tip dot sits at the physical end of the rotated ray\n 'after:absolute after:top-1/2 after:-right-[3px] after:h-[7px] after:w-[7px] after:-translate-y-1/2 after:rounded-full after:bg-[var(--mieweb-accent,var(--mieweb-primary-300))] after:shadow-[0_0_9px_2px_color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-300))_70%,transparent)] after:content-[\"\"]'\n )}\n />\n )}\n\n {spokes.map((s, i) => {\n const on = s.id === activeId;\n return (\n <button\n key={s.id}\n type=\"button\"\n aria-pressed={on}\n data-slot=\"radial-explorer-spoke\"\n data-active={on || undefined}\n style={{\n transform: `translate(-50%,-50%) rotate(${angle(i)}) translate(var(--re-r)) rotate(calc(-1 * ${angle(i)}))`,\n }}\n onMouseEnter={() => select(s.id)}\n onFocus={() => select(s.id)}\n onClick={() => select(s.id)}\n // rtl-ignore -- spokes are placed by rotate/translate trig from the physical center; the wheel is rotationally symmetric\n className=\"group/spoke absolute top-1/2 left-1/2 grid w-24 justify-items-center gap-2 focus-visible:outline-none\"\n >\n <SpokeTile icon={s.icon} active={on} />\n <span\n className={cn(\n 'text-muted-foreground group-hover/spoke:text-primary-800 dark:group-hover/spoke:text-primary-200 text-[13px] font-semibold transition-colors',\n on && 'text-primary-800 dark:text-primary-200'\n )}\n >\n {s.label}\n </span>\n </button>\n );\n })}\n </div>\n\n {/* Chip grid (< lg) */}\n <div\n role=\"group\"\n aria-label={groupLabel}\n className=\"grid w-full grid-cols-3 gap-3 lg:hidden\"\n >\n {spokes.map((s) => {\n const on = s.id === activeId;\n return (\n <button\n key={s.id}\n type=\"button\"\n aria-pressed={on}\n data-slot=\"radial-explorer-chip\"\n onClick={() => select(s.id)}\n className=\"group/spoke grid justify-items-center gap-1.5 focus-visible:outline-none\"\n >\n <SpokeTile icon={s.icon} active={on} size=\"sm\" />\n <span\n className={cn(\n 'text-muted-foreground text-center text-xs font-semibold',\n on && 'text-primary-800 dark:text-primary-200'\n )}\n >\n {s.label}\n </span>\n </button>\n );\n })}\n </div>\n\n {/* dots + hint */}\n <div className=\"flex flex-col items-center gap-2\">\n <div role=\"group\" aria-label={groupLabel} className=\"flex gap-2\">\n {spokes.map((s, i) => (\n <button\n key={s.id}\n type=\"button\"\n aria-pressed={i === activeIndex}\n aria-label={s.label}\n onClick={() => select(s.id)}\n className={cn(\n 'h-2 rounded-full transition-all',\n i === activeIndex\n ? 'w-6 bg-[var(--mieweb-accent,var(--mieweb-primary-400))]'\n : 'bg-primary-300/60 hover:bg-primary-400 w-2'\n )}\n />\n ))}\n </div>\n {hint && (\n <p\n className={cn(\n 'text-muted-foreground text-xs transition-opacity',\n engaged && 'opacity-0'\n )}\n aria-hidden={engaged}\n >\n {hint}\n </p>\n )}\n </div>\n </div>\n\n {/* Detail */}\n <div\n data-slot=\"radial-explorer-detail\"\n aria-live={engaged ? 'polite' : 'off'}\n className=\"border-border bg-card text-card-foreground grid content-center gap-3.5 rounded-2xl border p-5 shadow-xl\"\n >\n {active ? (\n <Detail\n key={active.id}\n tag={active.tag ?? active.label}\n title={active.title ?? active.label}\n description={active.description}\n media={active.media}\n caption={active.caption}\n cta={active.cta}\n href={active.href}\n hrefLabel={active.hrefLabel ?? 'Explore module'}\n />\n ) : welcome ? (\n <Detail\n key=\"welcome\"\n tag={welcome.tag}\n title={welcome.title}\n description={welcome.description}\n media={welcome.media}\n cta={welcome.cta}\n />\n ) : null}\n </div>\n </section>\n );\n}\n\n// =============================================================================\n// Pieces\n// =============================================================================\n\nfunction SpokeTile({\n icon,\n active,\n size = 'md',\n}: {\n icon: React.ReactNode;\n active: boolean;\n size?: 'sm' | 'md';\n}) {\n return (\n <span\n aria-hidden\n className={cn(\n 'mie-fx-sheen relative grid place-items-center rounded-[17px] border transition-[transform,border-color,color,box-shadow,background] duration-200',\n size === 'md'\n ? 'h-[60px] w-[60px] [&>svg]:h-[22px] [&>svg]:w-[22px]'\n : 'h-12 w-12 rounded-xl [&>svg]:h-5 [&>svg]:w-5',\n 'border-border bg-primary-500/10 text-primary-800 dark:text-primary-300 shadow-md backdrop-blur-sm',\n 'group-hover/spoke:-translate-y-0.5 group-hover/spoke:scale-[1.04] group-hover/spoke:border-transparent group-hover/spoke:text-white group-hover/spoke:shadow-xl',\n 'group-hover/spoke:[background:linear-gradient(150deg,var(--mieweb-primary-700),var(--mieweb-primary-900))_padding-box,linear-gradient(135deg,var(--mieweb-accent,var(--mieweb-primary-300)),var(--mieweb-primary-200)_55%,var(--mieweb-accent,var(--mieweb-primary-300)))_border-box]',\n 'group-focus-visible/spoke:outline-primary-500 group-focus-visible/spoke:outline group-focus-visible/spoke:outline-2 group-focus-visible/spoke:outline-offset-[3px]',\n active &&\n '-translate-y-0.5 scale-[1.04] border-transparent text-white shadow-xl [background:linear-gradient(150deg,var(--mieweb-primary-700),var(--mieweb-primary-900))_padding-box,linear-gradient(135deg,var(--mieweb-accent,var(--mieweb-primary-300)),var(--mieweb-primary-200)_55%,var(--mieweb-accent,var(--mieweb-primary-300)))_border-box]'\n )}\n >\n {icon}\n </span>\n );\n}\n\nfunction Detail({\n tag,\n title,\n description,\n media,\n caption,\n cta,\n href,\n hrefLabel,\n}: {\n tag?: string;\n title: string;\n description?: string;\n media?: React.ReactNode;\n caption?: string;\n cta?: { label: string; href: string };\n href?: string;\n hrefLabel?: string;\n}) {\n return (\n <div className=\"grid gap-3.5 motion-safe:animate-[mie-fade-in_0.25s_ease-out]\">\n {media && <div data-slot=\"radial-explorer-media\">{media}</div>}\n {tag && (\n <Badge\n size=\"sm\"\n className=\"w-fit text-[10px] font-bold tracking-[0.14em] uppercase\"\n >\n {tag}\n </Badge>\n )}\n <h3 className=\"text-foreground text-2xl leading-tight font-semibold\">\n {title}\n </h3>\n {description && (\n <p className=\"text-muted-foreground text-[15px] leading-snug\">\n {description}\n </p>\n )}\n {caption && <p className=\"text-muted-foreground text-sm\">{caption}</p>}\n {(cta || href) && (\n <div className=\"mt-1 flex flex-wrap items-center gap-3\">\n {cta && (\n <a href={cta.href} className={buttonVariants({ effect: 'sheen' })}>\n {cta.label}\n <ArrowRight size={16} aria-hidden className=\"rtl:-scale-x-100\" />\n </a>\n )}\n {href && (\n <a\n href={href}\n className=\"text-primary-800 dark:text-primary-200 text-sm font-semibold underline-offset-4 hover:underline\"\n >\n {hrefLabel}\n </a>\n )}\n </div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/RadialExplorer/RadialExplorer.tsx"],"names":["usePrefersReducedMotion","React","jsxs","cn","jsx","Badge","buttonVariants","ArrowRight"],"mappings":"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","file":"chunk-4VSK3EE5.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { ArrowRight } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Badge } from '../Badge';\nimport { buttonVariants } from '../Button';\nimport { usePrefersReducedMotion } from '../../hooks/usePrefersReducedMotion';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface RadialSpoke {\n id: string;\n /** Label under the tile. */\n label: string;\n /** Tile icon (Lucide, ~22px). */\n icon: React.ReactNode;\n /** Small caps tag above the detail heading. Defaults to `label`. */\n tag?: string;\n /** Detail heading. Defaults to `label`. */\n title?: string;\n description?: string;\n /** Detail media — a `VideoCard variant=\"plate\"`, an image, a chart. */\n media?: React.ReactNode;\n /** Caption under the media, e.g. \"AI Medical Assistant · 2:44\". */\n caption?: string;\n /** Primary CTA in the detail panel. */\n cta?: { label: string; href: string };\n /** Secondary \"Explore module →\" link. */\n href?: string;\n hrefLabel?: string;\n}\n\nexport interface RadialExplorerProps {\n spokes: RadialSpoke[];\n /** Centre node — a brand mark or product tile. */\n center: React.ReactNode;\n /** Small caps label over the whole explorer. */\n eyebrow?: string;\n /** Controlled active spoke. */\n activeId?: string | null;\n defaultActiveId?: string | null;\n onActiveChange?: (id: string | null) => void;\n /** Shown in the detail panel before any spoke is chosen. */\n welcome?: {\n tag?: string;\n title: string;\n description?: string;\n media?: React.ReactNode;\n cta?: { label: string; href: string };\n };\n /**\n * Auto-advance through the spokes until the visitor interacts. Default\n * 2200ms; pass 0 to disable. Skipped under `prefers-reduced-motion`.\n */\n attractMs?: number;\n /** Hint under the ring. Default \"Hover a module to preview\". */\n hint?: string;\n /** Orbit radius. Default `clamp(118px, 17vw, 188px)`. */\n radius?: string;\n /** Accessible name for the spoke group. Default \"Modules\". */\n groupLabel?: string;\n className?: string;\n}\n\n// =============================================================================\n// RadialExplorer\n// =============================================================================\n\n/**\n * A radial product explorer: a centre mark with N icon tiles orbiting it, a\n * glowing tracer ray from the core to the active tile, tab dots, and a detail\n * panel beside the ring that shows the active spoke's media, copy and CTAs\n * (with a welcome state before any pick). Auto-advances gently until the\n * visitor engages. Below `lg` the ring becomes a chip grid above the panel.\n * Ported from the Enterprise Health hero HUD.\n *\n * @example\n * ```tsx\n * <RadialExplorer\n * eyebrow=\"Explore the platform\"\n * center={<img src=\"/mark.svg\" alt=\"\" />}\n * spokes={[{ id: 'ehr', label: 'Certified EHR', icon: <FileText />, description: '…',\n * media: <VideoCard variant=\"plate\" title=\"EHR tour\" youtubeId=\"…\" duration=\"2:44\" />,\n * cta: { label: 'Request a demo', href: '/demo/' }, href: '/platform/ehr/' }]}\n * />\n * ```\n */\nexport function RadialExplorer({\n spokes,\n center,\n eyebrow,\n activeId: controlled,\n defaultActiveId = null,\n onActiveChange,\n welcome,\n attractMs = 2200,\n hint = 'Hover a module to preview',\n radius = 'clamp(118px, 17vw, 188px)',\n groupLabel = 'Modules',\n className,\n}: RadialExplorerProps) {\n const reduced = usePrefersReducedMotion();\n const [inner, setInner] = React.useState<string | null>(defaultActiveId);\n const [engaged, setEngaged] = React.useState(false);\n const activeId = controlled !== undefined ? controlled : inner;\n const id = React.useId();\n\n const select = React.useCallback(\n (next: string | null) => {\n setEngaged(true);\n if (controlled === undefined) setInner(next);\n onActiveChange?.(next);\n },\n [controlled, onActiveChange]\n );\n\n // Attract loop until the visitor interacts. Never runs in controlled mode:\n // `activeId` is owned by the host, so cycling it (or firing unsolicited\n // `onActiveChange` ticks) would fight the controlled API contract.\n React.useEffect(() => {\n if (\n controlled !== undefined ||\n engaged ||\n reduced ||\n !attractMs ||\n spokes.length === 0\n )\n return;\n let i = spokes.findIndex((s) => s.id === activeId);\n const t = window.setInterval(() => {\n i = (i + 1) % spokes.length;\n setInner(spokes[i].id);\n onActiveChange?.(spokes[i].id);\n }, attractMs);\n return () => window.clearInterval(t);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [engaged, reduced, attractMs, spokes.length, controlled]);\n\n const activeIndex = spokes.findIndex((s) => s.id === activeId);\n const active = activeIndex >= 0 ? spokes[activeIndex] : null;\n const step = 360 / Math.max(spokes.length, 1);\n const angle = (i: number) => `${i * step - 90}deg`;\n\n return (\n <section\n data-slot=\"radial-explorer\"\n style={{ '--re-r': radius } as React.CSSProperties}\n className={cn(\n 'grid gap-8 lg:grid-cols-[1.1fr_minmax(300px,380px)] lg:items-center',\n className\n )}\n aria-labelledby={eyebrow ? `${id}-eyebrow` : undefined}\n >\n <div className=\"flex flex-col items-center gap-5\">\n {eyebrow && (\n <p\n id={`${id}-eyebrow`}\n className=\"text-primary-800 dark:text-primary-300 text-[11px] font-bold tracking-[0.18em] uppercase\"\n >\n {eyebrow}\n </p>\n )}\n\n {/* Ring (lg+) */}\n <div\n role=\"group\"\n aria-label={groupLabel}\n data-slot=\"radial-explorer-ring\"\n className=\"relative hidden aspect-square w-[calc(var(--re-r)*2+120px)] place-items-center lg:grid\"\n >\n <span\n aria-hidden\n data-slot=\"radial-explorer-core\"\n className={cn(\n // rtl-ignore -- physical centering paired with -translate-x-1/2 is direction-independent; start-1/2 would break it in RTL\n 'absolute top-1/2 left-1/2 grid h-[100px] w-[100px] -translate-x-1/2 -translate-y-1/2 place-items-center rounded-[24%] border border-white/15 text-white shadow-[0_14px_30px_rgba(0,0,0,0.3),inset_0_1px_0_rgba(255,255,255,0.08)]',\n '[background:radial-gradient(90%_90%_at_24%_8%,color-mix(in_srgb,var(--mieweb-primary-400)_35%,transparent),transparent_60%),linear-gradient(145deg,var(--mieweb-primary-700)_0%,var(--mieweb-primary-900)_68%,var(--mieweb-primary-950)_100%)]',\n '[&>*]:h-[54px] [&>*]:w-[54px] [&>img]:object-contain'\n )}\n >\n {center}\n </span>\n\n {active && (\n <span\n aria-hidden\n data-slot=\"radial-explorer-ray\"\n style={{\n width: 'var(--re-r)',\n transform: `translateY(-50%) rotate(${angle(activeIndex)})`,\n }}\n className={cn(\n // rtl-ignore -- the ray is rotated to a computed angle from the physical center; origin/tip geometry must stay physical\n 'pointer-events-none absolute top-1/2 left-1/2 z-0 h-0.5 origin-left rounded-full transition-transform duration-500 [transition-timing-function:cubic-bezier(0.4,0.85,0.3,1)]',\n '[filter:drop-shadow(0_0_6px_color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-300))_55%,transparent))] [background:linear-gradient(90deg,transparent_4%,var(--mieweb-accent,var(--mieweb-primary-300))_94%)]',\n // rtl-ignore -- tip dot sits at the physical end of the rotated ray\n 'after:absolute after:top-1/2 after:-right-[3px] after:h-[7px] after:w-[7px] after:-translate-y-1/2 after:rounded-full after:bg-[var(--mieweb-accent,var(--mieweb-primary-300))] after:shadow-[0_0_9px_2px_color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-300))_70%,transparent)] after:content-[\"\"]'\n )}\n />\n )}\n\n {spokes.map((s, i) => {\n const on = s.id === activeId;\n return (\n <button\n key={s.id}\n type=\"button\"\n aria-pressed={on}\n data-slot=\"radial-explorer-spoke\"\n data-active={on || undefined}\n style={{\n transform: `translate(-50%,-50%) rotate(${angle(i)}) translate(var(--re-r)) rotate(calc(-1 * ${angle(i)}))`,\n }}\n onMouseEnter={() => select(s.id)}\n onFocus={() => select(s.id)}\n onClick={() => select(s.id)}\n // rtl-ignore -- spokes are placed by rotate/translate trig from the physical center; the wheel is rotationally symmetric\n className=\"group/spoke absolute top-1/2 left-1/2 grid w-24 justify-items-center gap-2 focus-visible:outline-none\"\n >\n <SpokeTile icon={s.icon} active={on} />\n <span\n className={cn(\n 'text-muted-foreground group-hover/spoke:text-primary-800 dark:group-hover/spoke:text-primary-200 text-[13px] font-semibold transition-colors',\n on && 'text-primary-800 dark:text-primary-200'\n )}\n >\n {s.label}\n </span>\n </button>\n );\n })}\n </div>\n\n {/* Chip grid (< lg) */}\n <div\n role=\"group\"\n aria-label={groupLabel}\n className=\"grid w-full grid-cols-3 gap-3 lg:hidden\"\n >\n {spokes.map((s) => {\n const on = s.id === activeId;\n return (\n <button\n key={s.id}\n type=\"button\"\n aria-pressed={on}\n data-slot=\"radial-explorer-chip\"\n onClick={() => select(s.id)}\n className=\"group/spoke grid justify-items-center gap-1.5 focus-visible:outline-none\"\n >\n <SpokeTile icon={s.icon} active={on} size=\"sm\" />\n <span\n className={cn(\n 'text-muted-foreground text-center text-xs font-semibold',\n on && 'text-primary-800 dark:text-primary-200'\n )}\n >\n {s.label}\n </span>\n </button>\n );\n })}\n </div>\n\n {/* dots + hint */}\n <div className=\"flex flex-col items-center gap-2\">\n <div role=\"group\" aria-label={groupLabel} className=\"flex gap-2\">\n {spokes.map((s, i) => (\n <button\n key={s.id}\n type=\"button\"\n aria-pressed={i === activeIndex}\n aria-label={s.label}\n onClick={() => select(s.id)}\n className={cn(\n 'h-2 rounded-full transition-all',\n i === activeIndex\n ? 'w-6 bg-[var(--mieweb-accent,var(--mieweb-primary-400))]'\n : 'bg-primary-300/60 hover:bg-primary-400 w-2'\n )}\n />\n ))}\n </div>\n {hint && (\n <p\n className={cn(\n 'text-muted-foreground text-xs transition-opacity',\n engaged && 'opacity-0'\n )}\n aria-hidden={engaged}\n >\n {hint}\n </p>\n )}\n </div>\n </div>\n\n {/* Detail */}\n <div\n data-slot=\"radial-explorer-detail\"\n aria-live={engaged ? 'polite' : 'off'}\n className=\"border-border bg-card text-card-foreground grid content-center gap-3.5 rounded-2xl border p-5 shadow-xl\"\n >\n {active ? (\n <Detail\n key={active.id}\n tag={active.tag ?? active.label}\n title={active.title ?? active.label}\n description={active.description}\n media={active.media}\n caption={active.caption}\n cta={active.cta}\n href={active.href}\n hrefLabel={active.hrefLabel ?? 'Explore module'}\n />\n ) : welcome ? (\n <Detail\n key=\"welcome\"\n tag={welcome.tag}\n title={welcome.title}\n description={welcome.description}\n media={welcome.media}\n cta={welcome.cta}\n />\n ) : null}\n </div>\n </section>\n );\n}\n\n// =============================================================================\n// Pieces\n// =============================================================================\n\nfunction SpokeTile({\n icon,\n active,\n size = 'md',\n}: {\n icon: React.ReactNode;\n active: boolean;\n size?: 'sm' | 'md';\n}) {\n return (\n <span\n aria-hidden\n className={cn(\n 'mie-fx-sheen relative grid place-items-center rounded-[17px] border transition-[transform,border-color,color,box-shadow,background] duration-200',\n size === 'md'\n ? 'h-[60px] w-[60px] [&>svg]:h-[22px] [&>svg]:w-[22px]'\n : 'h-12 w-12 rounded-xl [&>svg]:h-5 [&>svg]:w-5',\n 'border-border bg-primary-500/10 text-primary-800 dark:text-primary-300 shadow-md backdrop-blur-sm',\n 'group-hover/spoke:-translate-y-0.5 group-hover/spoke:scale-[1.04] group-hover/spoke:border-transparent group-hover/spoke:text-white group-hover/spoke:shadow-xl',\n 'group-hover/spoke:[background:linear-gradient(150deg,var(--mieweb-primary-700),var(--mieweb-primary-900))_padding-box,linear-gradient(135deg,var(--mieweb-accent,var(--mieweb-primary-300)),var(--mieweb-primary-200)_55%,var(--mieweb-accent,var(--mieweb-primary-300)))_border-box]',\n 'group-focus-visible/spoke:outline-primary-500 group-focus-visible/spoke:outline group-focus-visible/spoke:outline-2 group-focus-visible/spoke:outline-offset-[3px]',\n active &&\n '-translate-y-0.5 scale-[1.04] border-transparent text-white shadow-xl [background:linear-gradient(150deg,var(--mieweb-primary-700),var(--mieweb-primary-900))_padding-box,linear-gradient(135deg,var(--mieweb-accent,var(--mieweb-primary-300)),var(--mieweb-primary-200)_55%,var(--mieweb-accent,var(--mieweb-primary-300)))_border-box]'\n )}\n >\n {icon}\n </span>\n );\n}\n\nfunction Detail({\n tag,\n title,\n description,\n media,\n caption,\n cta,\n href,\n hrefLabel,\n}: {\n tag?: string;\n title: string;\n description?: string;\n media?: React.ReactNode;\n caption?: string;\n cta?: { label: string; href: string };\n href?: string;\n hrefLabel?: string;\n}) {\n return (\n <div className=\"grid gap-3.5 motion-safe:animate-[mie-fade-in_0.25s_ease-out]\">\n {media && <div data-slot=\"radial-explorer-media\">{media}</div>}\n {tag && (\n <Badge\n size=\"sm\"\n className=\"w-fit text-[10px] font-bold tracking-[0.14em] uppercase\"\n >\n {tag}\n </Badge>\n )}\n <h3 className=\"text-foreground text-2xl leading-tight font-semibold\">\n {title}\n </h3>\n {description && (\n <p className=\"text-muted-foreground text-[15px] leading-snug\">\n {description}\n </p>\n )}\n {caption && <p className=\"text-muted-foreground text-sm\">{caption}</p>}\n {(cta || href) && (\n <div className=\"mt-1 flex flex-wrap items-center gap-3\">\n {cta && (\n <a href={cta.href} className={buttonVariants({ effect: 'sheen' })}>\n {cta.label}\n <ArrowRight size={16} aria-hidden className=\"rtl:-scale-x-100\" />\n </a>\n )}\n {href && (\n <a\n href={href}\n className=\"text-primary-800 dark:text-primary-200 text-sm font-semibold underline-offset-4 hover:underline\"\n >\n {hrefLabel}\n </a>\n )}\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
- import { SectionShell, cardClass, SectionHeading, CtaLinks, mutedTextClass, toneClass, containerClass, IconTile, accentTextClass, headingTextClass, TemplateAnchor, TemplateImg, safeHref, TemplateIcon, MetricStatusBadge, ownProperty } from './chunk-FBCDYTWM.js';
1
+ import { SectionShell, cardClass, SectionHeading, CtaLinks, mutedTextClass, toneClass, containerClass, IconTile, accentTextClass, headingTextClass, TemplateAnchor, TemplateImg, safeHref, TemplateIcon, MetricStatusBadge, ownProperty } from './chunk-JNSSA4YN.js';
2
2
  import { inputVariants, RequiredMark } from './chunk-3IMM2PM4.js';
3
3
  import { Badge } from './chunk-522WJIVI.js';
4
- import { buttonVariants } from './chunk-GVM6DTR5.js';
4
+ import { buttonVariants } from './chunk-VP3XNLUL.js';
5
5
  import { cn } from './chunk-TQONQSJO.js';
6
6
  import * as React5 from 'react';
7
7
  import { ChevronDown, ArrowRight, ChevronRight, CircleCheck, Check, TrendingDown, TrendingUp, Star, Info, Download, ExternalLink, X } from 'lucide-react';
@@ -2653,5 +2653,5 @@ function validateLandingPage(blocks, preset) {
2653
2653
  }
2654
2654
 
2655
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-Y7ZJZLJY.js.map
2657
- //# sourceMappingURL=chunk-Y7ZJZLJY.js.map
2656
+ //# sourceMappingURL=chunk-566FIEPE.js.map
2657
+ //# sourceMappingURL=chunk-566FIEPE.js.map