@mieweb/ui 0.10.0-dev.1 → 0.10.0-dev.3
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.
- package/dist/CsvBlock-ROJCKJDP.cjs +16 -0
- package/dist/{CsvBlock-CVYA3HYS.cjs.map → CsvBlock-ROJCKJDP.cjs.map} +1 -1
- package/dist/CsvBlock-UWPMTLE2.js +7 -0
- package/dist/{CsvBlock-SM4NKSHA.js.map → CsvBlock-UWPMTLE2.js.map} +1 -1
- package/dist/HtmlPreviewBlock-DWFN6EUB.cjs +16 -0
- package/dist/{HtmlPreviewBlock-JF454L2L.cjs.map → HtmlPreviewBlock-DWFN6EUB.cjs.map} +1 -1
- package/dist/HtmlPreviewBlock-ME5U3XNS.js +7 -0
- package/dist/{HtmlPreviewBlock-FAMF4W24.js.map → HtmlPreviewBlock-ME5U3XNS.js.map} +1 -1
- package/dist/MermaidBlock-2B6CPD6Y.js +7 -0
- package/dist/{MermaidBlock-7V5G4K5A.js.map → MermaidBlock-2B6CPD6Y.js.map} +1 -1
- package/dist/MermaidBlock-D2UC5M55.cjs +16 -0
- package/dist/{MermaidBlock-FR5SQX4Q.cjs.map → MermaidBlock-D2UC5M55.cjs.map} +1 -1
- package/dist/SurveyBlock-4CD4AYMJ.cjs +16 -0
- package/dist/{SurveyBlock-MCJVWR7H.cjs.map → SurveyBlock-4CD4AYMJ.cjs.map} +1 -1
- package/dist/SurveyBlock-4DO62RBT.js +7 -0
- package/dist/{SurveyBlock-6K2POV7S.js.map → SurveyBlock-4DO62RBT.js.map} +1 -1
- package/dist/brands/index.cjs +13 -13
- package/dist/brands/index.js +4 -4
- package/dist/brands/types.cjs +4 -4
- package/dist/brands/types.d.cts +9 -0
- package/dist/brands/types.d.ts +9 -0
- package/dist/brands/types.js +1 -1
- package/dist/{chunk-XTHMC76F.cjs → chunk-2G75X6TS.cjs} +4 -4
- package/dist/{chunk-XTHMC76F.cjs.map → chunk-2G75X6TS.cjs.map} +1 -1
- package/dist/chunk-2IZLKPUW.js +412 -0
- package/dist/chunk-2IZLKPUW.js.map +1 -0
- package/dist/{chunk-AZP3DDBT.cjs → chunk-2QKBTPUC.cjs} +8 -8
- package/dist/{chunk-AZP3DDBT.cjs.map → chunk-2QKBTPUC.cjs.map} +1 -1
- package/dist/{chunk-7KWNY3HG.js → chunk-2YCERQWC.js} +8 -8
- package/dist/{chunk-7KWNY3HG.js.map → chunk-2YCERQWC.js.map} +1 -1
- package/dist/{chunk-VSVGMMNO.js → chunk-3M7TAXNR.js} +3 -3
- package/dist/{chunk-VSVGMMNO.js.map → chunk-3M7TAXNR.js.map} +1 -1
- package/dist/{chunk-5Z6UPVGC.cjs → chunk-3QEVGSFG.cjs} +5 -5
- package/dist/{chunk-5Z6UPVGC.cjs.map → chunk-3QEVGSFG.cjs.map} +1 -1
- package/dist/{chunk-PYHFVYVZ.js → chunk-3QGS6CXD.js} +3 -3
- package/dist/{chunk-PYHFVYVZ.js.map → chunk-3QGS6CXD.js.map} +1 -1
- package/dist/chunk-462XSCP3.cjs +199 -0
- package/dist/chunk-462XSCP3.cjs.map +1 -0
- package/dist/{chunk-WOYUQ4AT.js → chunk-5GOWFNQ6.js} +9 -3
- package/dist/chunk-5GOWFNQ6.js.map +1 -0
- package/dist/chunk-5GUOOLPR.cjs +436 -0
- package/dist/chunk-5GUOOLPR.cjs.map +1 -0
- package/dist/{chunk-WUBMDOTG.js → chunk-5JJ2DAE4.js} +4 -4
- package/dist/{chunk-WUBMDOTG.js.map → chunk-5JJ2DAE4.js.map} +1 -1
- package/dist/{chunk-RSCA5AZW.cjs → chunk-5MCBWTIF.cjs} +4 -4
- package/dist/{chunk-RSCA5AZW.cjs.map → chunk-5MCBWTIF.cjs.map} +1 -1
- package/dist/chunk-6EN3IQQI.cjs +332 -0
- package/dist/chunk-6EN3IQQI.cjs.map +1 -0
- package/dist/chunk-74ENCTIK.js +162 -0
- package/dist/chunk-74ENCTIK.js.map +1 -0
- package/dist/{chunk-OAZUDUGX.js → chunk-7IBZA7G6.js} +4 -4
- package/dist/{chunk-OAZUDUGX.js.map → chunk-7IBZA7G6.js.map} +1 -1
- package/dist/{chunk-AUOTJQGO.cjs → chunk-7ZDPD5ZX.cjs} +4 -4
- package/dist/{chunk-AUOTJQGO.cjs.map → chunk-7ZDPD5ZX.cjs.map} +1 -1
- package/dist/{chunk-IB54SKWB.cjs → chunk-7ZXAQTV4.cjs} +8 -8
- package/dist/{chunk-IB54SKWB.cjs.map → chunk-7ZXAQTV4.cjs.map} +1 -1
- package/dist/{chunk-IIFQ6BSJ.js → chunk-ACCAXVOG.js} +6 -6
- package/dist/{chunk-IIFQ6BSJ.js.map → chunk-ACCAXVOG.js.map} +1 -1
- package/dist/chunk-CR2SDI23.cjs +322 -0
- package/dist/chunk-CR2SDI23.cjs.map +1 -0
- package/dist/{chunk-OSPTA4UR.js → chunk-DEDN5HAG.js} +3 -3
- package/dist/{chunk-OSPTA4UR.js.map → chunk-DEDN5HAG.js.map} +1 -1
- package/dist/{chunk-PKD3JLS2.cjs → chunk-E4IBHYJ7.cjs} +9 -9
- package/dist/{chunk-PKD3JLS2.cjs.map → chunk-E4IBHYJ7.cjs.map} +1 -1
- package/dist/{chunk-E3KC2XLN.cjs → chunk-ELPW32ZI.cjs} +50 -50
- package/dist/{chunk-E3KC2XLN.cjs.map → chunk-ELPW32ZI.cjs.map} +1 -1
- package/dist/{chunk-QSVQABXD.js → chunk-ENKFJJZX.js} +7 -7
- package/dist/{chunk-QSVQABXD.js.map → chunk-ENKFJJZX.js.map} +1 -1
- package/dist/{chunk-MUIDWFYJ.js → chunk-FJ7YPVKV.js} +3 -3
- package/dist/{chunk-MUIDWFYJ.js.map → chunk-FJ7YPVKV.js.map} +1 -1
- package/dist/{chunk-3LHICE4I.cjs → chunk-FXO5ARBB.cjs} +5 -5
- package/dist/{chunk-3LHICE4I.cjs.map → chunk-FXO5ARBB.cjs.map} +1 -1
- package/dist/{chunk-QKAYRHWP.cjs → chunk-G3JX3UAU.cjs} +12 -12
- package/dist/{chunk-QKAYRHWP.cjs.map → chunk-G3JX3UAU.cjs.map} +1 -1
- package/dist/{chunk-OMAACCFW.cjs → chunk-GD7EBGC4.cjs} +19 -19
- package/dist/{chunk-OMAACCFW.cjs.map → chunk-GD7EBGC4.cjs.map} +1 -1
- package/dist/{chunk-KREUYVMZ.js → chunk-GOALNQZ2.js} +13 -4
- package/dist/chunk-GOALNQZ2.js.map +1 -0
- package/dist/{chunk-CK3KLRNF.js → chunk-H4ZXMQQW.js} +3 -3
- package/dist/{chunk-CK3KLRNF.js.map → chunk-H4ZXMQQW.js.map} +1 -1
- package/dist/{chunk-AHINB2TP.cjs → chunk-IX6KFB3K.cjs} +9 -9
- package/dist/{chunk-AHINB2TP.cjs.map → chunk-IX6KFB3K.cjs.map} +1 -1
- package/dist/chunk-IXFC7LK2.cjs +174 -0
- package/dist/chunk-IXFC7LK2.cjs.map +1 -0
- package/dist/{chunk-VNAREBLV.cjs → chunk-J5CSLNCN.cjs} +3 -3
- package/dist/{chunk-VNAREBLV.cjs.map → chunk-J5CSLNCN.cjs.map} +1 -1
- package/dist/{chunk-24SEAAOH.js → chunk-JHULS3EC.js} +2 -2
- package/dist/{chunk-24SEAAOH.js.map → chunk-JHULS3EC.js.map} +1 -1
- package/dist/{chunk-X5YM3KXY.js → chunk-JI244Y7C.js} +177 -3
- package/dist/chunk-JI244Y7C.js.map +1 -0
- package/dist/{chunk-MM7QKUE3.cjs → chunk-JID7AZTO.cjs} +5 -5
- package/dist/{chunk-MM7QKUE3.cjs.map → chunk-JID7AZTO.cjs.map} +1 -1
- package/dist/{chunk-ZB54MTMQ.js → chunk-KZFBQ7GY.js} +3 -3
- package/dist/{chunk-ZB54MTMQ.js.map → chunk-KZFBQ7GY.js.map} +1 -1
- package/dist/{chunk-XBXDUAIM.js → chunk-LL6IWKI3.js} +4 -4
- package/dist/{chunk-XBXDUAIM.js.map → chunk-LL6IWKI3.js.map} +1 -1
- package/dist/{chunk-ON4JULCA.js → chunk-LMBXJZLG.js} +3 -3
- package/dist/{chunk-ON4JULCA.js.map → chunk-LMBXJZLG.js.map} +1 -1
- package/dist/chunk-MWVW4APN.cjs +260 -0
- package/dist/chunk-MWVW4APN.cjs.map +1 -0
- package/dist/{chunk-BZAGP5W6.cjs → chunk-N6IY47YA.cjs} +8 -8
- package/dist/{chunk-BZAGP5W6.cjs.map → chunk-N6IY47YA.cjs.map} +1 -1
- package/dist/{chunk-OCV33S5Q.cjs → chunk-NFKX6QJP.cjs} +3 -3
- package/dist/{chunk-OCV33S5Q.cjs.map → chunk-NFKX6QJP.cjs.map} +1 -1
- package/dist/{chunk-J644FU54.cjs → chunk-NGQRS7AW.cjs} +9 -3
- package/dist/chunk-NGQRS7AW.cjs.map +1 -0
- package/dist/{chunk-QAKASRE6.js → chunk-NJ6MY6V5.js} +4 -4
- package/dist/{chunk-QAKASRE6.js.map → chunk-NJ6MY6V5.js.map} +1 -1
- package/dist/{chunk-P52GA3GJ.cjs → chunk-NM7O7RY5.cjs} +4 -2
- package/dist/chunk-NM7O7RY5.cjs.map +1 -0
- package/dist/{chunk-OFUKTVBN.cjs → chunk-OD47TTAW.cjs} +9 -9
- package/dist/{chunk-OFUKTVBN.cjs.map → chunk-OD47TTAW.cjs.map} +1 -1
- package/dist/{chunk-QKFJDQEK.js → chunk-OE5CKRUC.js} +4 -4
- package/dist/{chunk-QKFJDQEK.js.map → chunk-OE5CKRUC.js.map} +1 -1
- package/dist/chunk-OGNADPM4.cjs +170 -0
- package/dist/chunk-OGNADPM4.cjs.map +1 -0
- package/dist/{chunk-MBWF36DJ.js → chunk-P2CA3XGI.js} +3 -3
- package/dist/{chunk-MBWF36DJ.js.map → chunk-P2CA3XGI.js.map} +1 -1
- package/dist/chunk-POWS35OT.js +152 -0
- package/dist/chunk-POWS35OT.js.map +1 -0
- package/dist/chunk-PYJDVWXM.js +237 -0
- package/dist/chunk-PYJDVWXM.js.map +1 -0
- package/dist/{chunk-MTZPVOP6.js → chunk-Q77TE5DZ.js} +4 -2
- package/dist/chunk-Q77TE5DZ.js.map +1 -0
- package/dist/{chunk-L5W7TJQ5.js → chunk-RJ6NTJHC.js} +4 -4
- package/dist/{chunk-L5W7TJQ5.js.map → chunk-RJ6NTJHC.js.map} +1 -1
- package/dist/{chunk-C3DUS2VE.cjs → chunk-RS5VA6QU.cjs} +3 -3
- package/dist/{chunk-C3DUS2VE.cjs.map → chunk-RS5VA6QU.cjs.map} +1 -1
- package/dist/{chunk-IGNWT6RP.js → chunk-S7WCHDBO.js} +4 -4
- package/dist/{chunk-IGNWT6RP.js.map → chunk-S7WCHDBO.js.map} +1 -1
- package/dist/{chunk-RXPEZXAB.cjs → chunk-SGFYA22I.cjs} +5 -5
- package/dist/{chunk-RXPEZXAB.cjs.map → chunk-SGFYA22I.cjs.map} +1 -1
- package/dist/chunk-SQJFBZ42.js +297 -0
- package/dist/chunk-SQJFBZ42.js.map +1 -0
- package/dist/chunk-SUS3WFY3.js +156 -0
- package/dist/chunk-SUS3WFY3.js.map +1 -0
- package/dist/{chunk-H4AVMUOC.cjs → chunk-TAXD5ADA.cjs} +4 -4
- package/dist/{chunk-H4AVMUOC.cjs.map → chunk-TAXD5ADA.cjs.map} +1 -1
- package/dist/{chunk-NHN6A3ZO.js → chunk-TMMVIUUN.js} +4 -4
- package/dist/{chunk-NHN6A3ZO.js.map → chunk-TMMVIUUN.js.map} +1 -1
- package/dist/chunk-TPWKM7JH.js +196 -0
- package/dist/chunk-TPWKM7JH.js.map +1 -0
- package/dist/chunk-TU63764L.cjs +158 -0
- package/dist/chunk-TU63764L.cjs.map +1 -0
- package/dist/{chunk-PY7XAG4D.cjs → chunk-U42F3HLE.cjs} +177 -3
- package/dist/chunk-U42F3HLE.cjs.map +1 -0
- package/dist/{chunk-X5QRRMGB.cjs → chunk-UAMXCMST.cjs} +4 -4
- package/dist/{chunk-X5QRRMGB.cjs.map → chunk-UAMXCMST.cjs.map} +1 -1
- package/dist/{chunk-QAQOCS2J.js → chunk-UBOVDAD7.js} +3 -3
- package/dist/{chunk-QAQOCS2J.js.map → chunk-UBOVDAD7.js.map} +1 -1
- package/dist/{chunk-IGSIWNX3.cjs → chunk-UQ3VVR6A.cjs} +4 -4
- package/dist/{chunk-IGSIWNX3.cjs.map → chunk-UQ3VVR6A.cjs.map} +1 -1
- package/dist/{chunk-6QKMMKRY.cjs → chunk-UV2FVNWT.cjs} +5 -5
- package/dist/{chunk-6QKMMKRY.cjs.map → chunk-UV2FVNWT.cjs.map} +1 -1
- package/dist/{chunk-EG7XFZ3W.js → chunk-V7D3YGUV.js} +4 -4
- package/dist/{chunk-EG7XFZ3W.js.map → chunk-V7D3YGUV.js.map} +1 -1
- package/dist/{chunk-Y6DFMDMH.js → chunk-VILW53UZ.js} +3 -3
- package/dist/{chunk-Y6DFMDMH.js.map → chunk-VILW53UZ.js.map} +1 -1
- package/dist/{chunk-5WOB4UBD.js → chunk-VKELAMAZ.js} +3 -3
- package/dist/{chunk-5WOB4UBD.js.map → chunk-VKELAMAZ.js.map} +1 -1
- package/dist/{chunk-IINZWUGK.cjs → chunk-VNYW4C4J.cjs} +13 -4
- package/dist/chunk-VNYW4C4J.cjs.map +1 -0
- package/dist/{chunk-RD3JDFYJ.js → chunk-VOKVG3ER.js} +4 -4
- package/dist/{chunk-RD3JDFYJ.js.map → chunk-VOKVG3ER.js.map} +1 -1
- package/dist/{chunk-37UZHCLM.cjs → chunk-VPWJCJCX.cjs} +3 -3
- package/dist/{chunk-37UZHCLM.cjs.map → chunk-VPWJCJCX.cjs.map} +1 -1
- package/dist/{chunk-3RB35GYK.js → chunk-VU6UTJRM.js} +4 -4
- package/dist/{chunk-3RB35GYK.js.map → chunk-VU6UTJRM.js.map} +1 -1
- package/dist/{chunk-6SAYPXHX.js → chunk-WGPLUCBD.js} +4 -4
- package/dist/{chunk-6SAYPXHX.js.map → chunk-WGPLUCBD.js.map} +1 -1
- package/dist/{chunk-QO6PRHDX.cjs → chunk-WNAA6CLE.cjs} +2 -2
- package/dist/{chunk-QO6PRHDX.cjs.map → chunk-WNAA6CLE.cjs.map} +1 -1
- package/dist/{chunk-ZX2XRFE5.js → chunk-WNM7IZJ7.js} +7 -7
- package/dist/{chunk-ZX2XRFE5.js.map → chunk-WNM7IZJ7.js.map} +1 -1
- package/dist/{chunk-KLJGJJHN.cjs → chunk-WNZAYBVB.cjs} +49 -49
- package/dist/{chunk-KLJGJJHN.cjs.map → chunk-WNZAYBVB.cjs.map} +1 -1
- package/dist/{chunk-BVMABVC4.cjs → chunk-WWJIW2IH.cjs} +3 -3
- package/dist/{chunk-BVMABVC4.cjs.map → chunk-WWJIW2IH.cjs.map} +1 -1
- package/dist/{chunk-OYQ7GYAA.cjs → chunk-X4XPNTCZ.cjs} +12 -12
- package/dist/{chunk-OYQ7GYAA.cjs.map → chunk-X4XPNTCZ.cjs.map} +1 -1
- package/dist/{chunk-IFDC4TXM.cjs → chunk-XEAT7XJG.cjs} +4 -4
- package/dist/{chunk-IFDC4TXM.cjs.map → chunk-XEAT7XJG.cjs.map} +1 -1
- package/dist/{chunk-S3BCHPXT.cjs → chunk-XI34EGK5.cjs} +9 -9
- package/dist/{chunk-S3BCHPXT.cjs.map → chunk-XI34EGK5.cjs.map} +1 -1
- package/dist/chunk-Y5HFM7LO.js +310 -0
- package/dist/chunk-Y5HFM7LO.js.map +1 -0
- package/dist/{chunk-LECJMLNE.js → chunk-YQDA366U.js} +3 -3
- package/dist/{chunk-LECJMLNE.js.map → chunk-YQDA366U.js.map} +1 -1
- package/dist/{chunk-PHK4XBO5.js → chunk-Z5V7SAZ4.js} +4 -4
- package/dist/{chunk-PHK4XBO5.js.map → chunk-Z5V7SAZ4.js.map} +1 -1
- package/dist/{chunk-TZX76ZNZ.js → chunk-ZGRCSNPK.js} +5 -5
- package/dist/{chunk-TZX76ZNZ.js.map → chunk-ZGRCSNPK.js.map} +1 -1
- package/dist/{chunk-SRA2L3SQ.cjs → chunk-ZSGEGISB.cjs} +4 -4
- package/dist/{chunk-SRA2L3SQ.cjs.map → chunk-ZSGEGISB.cjs.map} +1 -1
- package/dist/components/AlertDialog/index.cjs +6 -6
- package/dist/components/AlertDialog/index.js +5 -5
- package/dist/components/Autocomplete/index.cjs +3 -3
- package/dist/components/Autocomplete/index.js +2 -2
- package/dist/components/Button/index.cjs +3 -3
- package/dist/components/Button/index.d.cts +3 -0
- package/dist/components/Button/index.d.ts +3 -0
- package/dist/components/Button/index.js +1 -1
- package/dist/components/Collapsible/index.cjs +5 -5
- package/dist/components/Collapsible/index.js +2 -2
- package/dist/components/CountryCodeDropdown/index.cjs +6 -6
- package/dist/components/CountryCodeDropdown/index.js +3 -3
- package/dist/components/CustomizableDashboard/index.cjs +11 -11
- package/dist/components/CustomizableDashboard/index.js +4 -4
- package/dist/components/DateInput/index.cjs +4 -4
- package/dist/components/DateInput/index.js +3 -3
- package/dist/components/Dropdown/index.cjs +11 -11
- package/dist/components/Dropdown/index.js +4 -4
- package/dist/components/FloatingWindow/index.cjs +4 -4
- package/dist/components/FloatingWindow/index.js +2 -2
- package/dist/components/GlossaryTooltip/index.cjs +4 -4
- package/dist/components/GlossaryTooltip/index.js +3 -3
- package/dist/components/KeyboardShortcutsOverlay/index.cjs +6 -6
- package/dist/components/KeyboardShortcutsOverlay/index.js +4 -4
- package/dist/components/Markdown/index.cjs +19 -19
- package/dist/components/Markdown/index.js +7 -7
- package/dist/components/MediaEditor/index.cjs +16 -16
- package/dist/components/MediaEditor/index.js +11 -11
- package/dist/components/MediaPlayer/index.cjs +6 -6
- package/dist/components/MediaPlayer/index.js +3 -3
- package/dist/components/MegaMenu/index.cjs +23 -0
- package/dist/components/MegaMenu/index.cjs.map +1 -0
- package/dist/components/MegaMenu/index.d.cts +106 -0
- package/dist/components/MegaMenu/index.d.ts +106 -0
- package/dist/components/MegaMenu/index.js +6 -0
- package/dist/components/MegaMenu/index.js.map +1 -0
- package/dist/components/Modal/index.cjs +11 -11
- package/dist/components/Modal/index.js +3 -3
- package/dist/components/OrbitRing/index.cjs +14 -0
- package/dist/components/OrbitRing/index.cjs.map +1 -0
- package/dist/components/OrbitRing/index.d.cts +64 -0
- package/dist/components/OrbitRing/index.d.ts +64 -0
- package/dist/components/OrbitRing/index.js +5 -0
- package/dist/components/OrbitRing/index.js.map +1 -0
- package/dist/components/RadialExplorer/index.cjs +18 -0
- package/dist/components/RadialExplorer/index.cjs.map +1 -0
- package/dist/components/RadialExplorer/index.d.cts +83 -0
- package/dist/components/RadialExplorer/index.d.ts +83 -0
- package/dist/components/RadialExplorer/index.js +9 -0
- package/dist/components/RadialExplorer/index.js.map +1 -0
- package/dist/components/RichTextEditor/index.cjs +9 -9
- package/dist/components/RichTextEditor/index.js +6 -6
- package/dist/components/SectionSpyNav/index.cjs +4 -4
- package/dist/components/SectionSpyNav/index.js +3 -3
- package/dist/components/Select/index.cjs +5 -5
- package/dist/components/Select/index.js +3 -3
- package/dist/components/Sheet/index.cjs +11 -11
- package/dist/components/Sheet/index.js +2 -2
- package/dist/components/SliderCalculator/index.cjs +20 -0
- package/dist/components/SliderCalculator/index.cjs.map +1 -0
- package/dist/components/SliderCalculator/index.d.cts +100 -0
- package/dist/components/SliderCalculator/index.d.ts +100 -0
- package/dist/components/SliderCalculator/index.js +7 -0
- package/dist/components/SliderCalculator/index.js.map +1 -0
- package/dist/components/SourceTip/index.cjs +4 -4
- package/dist/components/SourceTip/index.js +3 -3
- package/dist/components/SuperChat/index.cjs +12 -12
- package/dist/components/SuperChat/index.js +5 -5
- package/dist/components/SuperChat/plugins/index.cjs +8 -8
- package/dist/components/SuperChat/plugins/index.js +7 -7
- package/dist/components/ThemeProvider/index.cjs +9 -9
- package/dist/components/ThemeProvider/index.js +3 -3
- package/dist/components/Tooltip/index.cjs +3 -3
- package/dist/components/Tooltip/index.js +2 -2
- package/dist/components/VideoCard/index.cjs +21 -0
- package/dist/components/VideoCard/index.cjs.map +1 -0
- package/dist/components/VideoCard/index.d.cts +75 -0
- package/dist/components/VideoCard/index.d.ts +75 -0
- package/dist/components/VideoCard/index.js +8 -0
- package/dist/components/VideoCard/index.js.map +1 -0
- package/dist/components/YearTimeline/index.cjs +26 -0
- package/dist/components/YearTimeline/index.cjs.map +1 -0
- package/dist/components/YearTimeline/index.d.cts +82 -0
- package/dist/components/YearTimeline/index.d.ts +82 -0
- package/dist/components/YearTimeline/index.js +5 -0
- package/dist/components/YearTimeline/index.js.map +1 -0
- package/dist/datavis.cjs +2 -2
- package/dist/datavis.js +1 -1
- package/dist/enterprise-health-ITUNXDIW.js +4 -0
- package/dist/{enterprise-health-CWLUB77O.js.map → enterprise-health-ITUNXDIW.js.map} +1 -1
- package/dist/enterprise-health-UHHPVPU6.cjs +19 -0
- package/dist/{enterprise-health-75VYWAVG.cjs.map → enterprise-health-UHHPVPU6.cjs.map} +1 -1
- package/dist/esheet.cjs +18 -18
- package/dist/esheet.js +15 -15
- package/dist/globe.cjs +306 -0
- package/dist/globe.cjs.map +1 -0
- package/dist/globe.d.cts +99 -0
- package/dist/globe.d.ts +99 -0
- package/dist/globe.js +279 -0
- package/dist/globe.js.map +1 -0
- package/dist/hooks/index.cjs +29 -24
- package/dist/hooks/index.d.cts +41 -1
- package/dist/hooks/index.d.ts +41 -1
- package/dist/hooks/index.js +5 -4
- package/dist/index.cjs +1160 -1108
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +69 -24
- package/dist/index.d.ts +69 -24
- package/dist/index.js +265 -285
- package/dist/index.js.map +1 -1
- package/dist/{speaker-verify-5GTWAN5Y.cjs → speaker-verify-4NEJAK6C.cjs} +57 -90
- package/dist/speaker-verify-4NEJAK6C.cjs.map +1 -0
- package/dist/{speaker-verify-R67P433H.js → speaker-verify-AWSKI6DI.js} +57 -90
- package/dist/speaker-verify-AWSKI6DI.js.map +1 -0
- package/dist/styles/effects.css +128 -0
- package/dist/styles/init.css +15 -0
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/dist/utils/index.cjs +5 -5
- package/dist/utils/index.js +1 -1
- package/package.json +23 -2
- package/dist/CsvBlock-CVYA3HYS.cjs +0 -16
- package/dist/CsvBlock-SM4NKSHA.js +0 -7
- package/dist/HtmlPreviewBlock-FAMF4W24.js +0 -7
- package/dist/HtmlPreviewBlock-JF454L2L.cjs +0 -16
- package/dist/MermaidBlock-7V5G4K5A.js +0 -7
- package/dist/MermaidBlock-FR5SQX4Q.cjs +0 -16
- package/dist/SurveyBlock-6K2POV7S.js +0 -7
- package/dist/SurveyBlock-MCJVWR7H.cjs +0 -16
- package/dist/chunk-IINZWUGK.cjs.map +0 -1
- package/dist/chunk-J644FU54.cjs.map +0 -1
- package/dist/chunk-KREUYVMZ.js.map +0 -1
- package/dist/chunk-MTZPVOP6.js.map +0 -1
- package/dist/chunk-P52GA3GJ.cjs.map +0 -1
- package/dist/chunk-PY7XAG4D.cjs.map +0 -1
- package/dist/chunk-WOYUQ4AT.js.map +0 -1
- package/dist/chunk-X5YM3KXY.js.map +0 -1
- package/dist/enterprise-health-75VYWAVG.cjs +0 -19
- package/dist/enterprise-health-CWLUB77O.js +0 -4
- package/dist/speaker-verify-5GTWAN5Y.cjs.map +0 -1
- package/dist/speaker-verify-R67P433H.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkUV2FVNWT_cjs = require('./chunk-UV2FVNWT.cjs');
|
|
4
4
|
var DOMPurify = require('dompurify');
|
|
5
5
|
var react = require('react');
|
|
6
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -130,7 +130,7 @@ var MermaidBlock = ({ code, id }) => {
|
|
|
130
130
|
return () => observer.disconnect();
|
|
131
131
|
}, [render]);
|
|
132
132
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
133
|
-
|
|
133
|
+
chunkUV2FVNWT_cjs.FenceBlock,
|
|
134
134
|
{
|
|
135
135
|
code,
|
|
136
136
|
language: "mermaid",
|
|
@@ -150,5 +150,5 @@ var MermaidBlock = ({ code, id }) => {
|
|
|
150
150
|
};
|
|
151
151
|
|
|
152
152
|
exports.MermaidBlock = MermaidBlock;
|
|
153
|
-
//# sourceMappingURL=chunk-
|
|
154
|
-
//# sourceMappingURL=chunk-
|
|
153
|
+
//# sourceMappingURL=chunk-5MCBWTIF.cjs.map
|
|
154
|
+
//# sourceMappingURL=chunk-5MCBWTIF.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Markdown/MermaidBlock.tsx"],"names":["DOMPurify","useState","useMemo","useCallback","useEffect","jsx","FenceBlock"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Markdown/MermaidBlock.tsx"],"names":["DOMPurify","useState","useMemo","useCallback","useEffect","jsx","FenceBlock"],"mappings":"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","file":"chunk-5MCBWTIF.cjs","sourcesContent":["/**\n * MermaidBlock — Renders Mermaid diagrams.\n * Requires `mermaid` to be installed by the consumer (optional peer dependency).\n */\nimport DOMPurify from 'dompurify';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { FenceBlock } from './FenceBlock';\n\ninterface MermaidBlockProps {\n code: string;\n id: string;\n}\n\ntype MermaidApi = {\n initialize: (config: Record<string, unknown>) => void;\n parse: (text: string) => Promise<unknown>;\n render: (id: string, text: string) => Promise<{ svg: string }>;\n};\n\nlet mermaidInstance: MermaidApi | null = null;\nlet mermaidReady: Promise<MermaidApi> | null = null;\nlet mermaidTheme: 'dark' | 'default' = 'default';\n\nfunction currentTheme(): 'dark' | 'default' {\n return document.documentElement.classList.contains('dark') ||\n document.documentElement.getAttribute('data-theme') === 'dark'\n ? 'dark'\n : 'default';\n}\n\nfunction buildConfig(theme: 'dark' | 'default'): Record<string, unknown> {\n const base: Record<string, unknown> = {\n startOnLoad: false,\n theme,\n securityLevel: 'strict',\n };\n if (theme === 'dark') {\n base.themeVariables = {\n nodeBorder: '#6b7280',\n mainBkg: '#4a4a4a',\n nodeTextColor: '#ffffff',\n clusterBkg: '#374151',\n titleColor: '#ffffff',\n edgeLabelBackground: '#374151',\n lineColor: '#9ca3af',\n };\n }\n return base;\n}\n\nasync function getMermaid(): Promise<MermaidApi> {\n const theme = currentTheme();\n if (mermaidInstance) {\n if (theme !== mermaidTheme) {\n mermaidTheme = theme;\n mermaidInstance.initialize(buildConfig(theme));\n }\n return mermaidInstance;\n }\n if (!mermaidReady) {\n mermaidReady = import(/* @vite-ignore */ 'mermaid').then((mod) => {\n const m = (mod as { default: MermaidApi }).default;\n mermaidTheme = currentTheme();\n m.initialize(buildConfig(mermaidTheme));\n mermaidInstance = m;\n return m;\n });\n }\n return mermaidReady;\n}\n\nfunction sanitiseSvg(svg: string): string {\n return DOMPurify.sanitize(svg, {\n USE_PROFILES: { svg: true, svgFilters: true },\n // Allow <style> so mermaid's embedded CSS applies, and <foreignObject>\n // so node label text renders (mermaid escapes its content in strict mode).\n ADD_TAGS: ['style', 'foreignObject'],\n ADD_ATTR: [\n 'style',\n 'class',\n 'dominant-baseline',\n 'text-anchor',\n 'font-size',\n 'font-family',\n 'marker-end',\n 'marker-start',\n 'marker-mid',\n 'stroke-dasharray',\n 'stroke-width',\n ],\n FORBID_TAGS: ['script'],\n FORBID_ATTR: ['onload', 'onerror', 'onclick', 'onmouseover'],\n }) as string;\n}\n\nexport const MermaidBlock: React.FC<MermaidBlockProps> = ({ code, id }) => {\n const [svg, setSvg] = useState<string>('');\n const [error, setError] = useState<string>('');\n const [loading, setLoading] = useState(true);\n\n // Derive an accessible label from the diagram's declared type (first keyword).\n const diagramLabel = useMemo(() => {\n const firstWord =\n code\n .trim()\n .split(/[\\s\\n]/)[0]\n ?.toLowerCase() ?? '';\n const typeMap: Record<string, string> = {\n graph: 'Flowchart',\n flowchart: 'Flowchart',\n sequencediagram: 'Sequence diagram',\n classdiagram: 'Class diagram',\n statediagram: 'State diagram',\n 'statediagram-v2': 'State diagram',\n erdiagram: 'Entity relationship diagram',\n gantt: 'Gantt chart',\n pie: 'Pie chart',\n journey: 'User journey diagram',\n gitgraph: 'Git graph',\n mindmap: 'Mind map',\n timeline: 'Timeline',\n quadrantchart: 'Quadrant chart',\n };\n return `${typeMap[firstWord] ?? 'Mermaid'} diagram`;\n }, [code]);\n\n const render = useCallback(async () => {\n setLoading(true);\n setError('');\n try {\n const mermaid = await getMermaid();\n await mermaid.parse(code);\n const { svg: rendered } = await mermaid.render(`mermaid-${id}`, code);\n setSvg(sanitiseSvg(rendered));\n } catch (err) {\n setError((err as Error).message ?? 'Failed to render diagram');\n } finally {\n setLoading(false);\n }\n }, [code, id]);\n\n useEffect(() => {\n void render();\n }, [render]);\n\n // Re-render when the page theme changes (dark ↔ light)\n useEffect(() => {\n const observer = new MutationObserver(() => void render());\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme'],\n });\n return () => observer.disconnect();\n }, [render]);\n\n return (\n <FenceBlock\n code={code}\n language=\"mermaid\"\n supportsRawView\n error={error || undefined}\n >\n {loading ? (\n <div className=\"flex items-center justify-center p-8\">\n <div className=\"border-primary-500 h-6 w-6 animate-spin rounded-full border-2 border-t-transparent\" />\n </div>\n ) : (\n <div\n className=\"mermaid-svg flex justify-center p-4\"\n role=\"img\"\n aria-label={diagramLabel}\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n )}\n </FenceBlock>\n );\n};\n"]}
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk6HFFWEM3_cjs = require('./chunk-6HFFWEM3.cjs');
|
|
4
|
+
var chunkYVL3XATO_cjs = require('./chunk-YVL3XATO.cjs');
|
|
5
|
+
var chunkVNYW4C4J_cjs = require('./chunk-VNYW4C4J.cjs');
|
|
6
|
+
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
var lucideReact = require('lucide-react');
|
|
9
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
10
|
+
|
|
11
|
+
function _interopNamespace(e) {
|
|
12
|
+
if (e && e.__esModule) return e;
|
|
13
|
+
var n = Object.create(null);
|
|
14
|
+
if (e) {
|
|
15
|
+
Object.keys(e).forEach(function (k) {
|
|
16
|
+
if (k !== 'default') {
|
|
17
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
18
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () { return e[k]; }
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
n.default = e;
|
|
26
|
+
return Object.freeze(n);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
30
|
+
|
|
31
|
+
function RadialExplorer({
|
|
32
|
+
spokes,
|
|
33
|
+
center,
|
|
34
|
+
eyebrow,
|
|
35
|
+
activeId: controlled,
|
|
36
|
+
defaultActiveId = null,
|
|
37
|
+
onActiveChange,
|
|
38
|
+
welcome,
|
|
39
|
+
attractMs = 2200,
|
|
40
|
+
hint = "Hover a module to preview",
|
|
41
|
+
radius = "clamp(118px, 17vw, 188px)",
|
|
42
|
+
groupLabel = "Modules",
|
|
43
|
+
className
|
|
44
|
+
}) {
|
|
45
|
+
const reduced = chunk6HFFWEM3_cjs.usePrefersReducedMotion();
|
|
46
|
+
const [inner, setInner] = React__namespace.useState(defaultActiveId);
|
|
47
|
+
const [engaged, setEngaged] = React__namespace.useState(false);
|
|
48
|
+
const activeId = controlled !== void 0 ? controlled : inner;
|
|
49
|
+
const id = React__namespace.useId();
|
|
50
|
+
const select = React__namespace.useCallback(
|
|
51
|
+
(next) => {
|
|
52
|
+
setEngaged(true);
|
|
53
|
+
if (controlled === void 0) setInner(next);
|
|
54
|
+
onActiveChange?.(next);
|
|
55
|
+
},
|
|
56
|
+
[controlled, onActiveChange]
|
|
57
|
+
);
|
|
58
|
+
React__namespace.useEffect(() => {
|
|
59
|
+
if (controlled !== void 0 || engaged || reduced || !attractMs || spokes.length === 0)
|
|
60
|
+
return;
|
|
61
|
+
let i = spokes.findIndex((s) => s.id === activeId);
|
|
62
|
+
const t = window.setInterval(() => {
|
|
63
|
+
i = (i + 1) % spokes.length;
|
|
64
|
+
setInner(spokes[i].id);
|
|
65
|
+
onActiveChange?.(spokes[i].id);
|
|
66
|
+
}, attractMs);
|
|
67
|
+
return () => window.clearInterval(t);
|
|
68
|
+
}, [engaged, reduced, attractMs, spokes.length, controlled]);
|
|
69
|
+
const activeIndex = spokes.findIndex((s) => s.id === activeId);
|
|
70
|
+
const active = activeIndex >= 0 ? spokes[activeIndex] : null;
|
|
71
|
+
const step = 360 / Math.max(spokes.length, 1);
|
|
72
|
+
const angle = (i) => `${i * step - 90}deg`;
|
|
73
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
74
|
+
"section",
|
|
75
|
+
{
|
|
76
|
+
"data-slot": "radial-explorer",
|
|
77
|
+
style: { "--re-r": radius },
|
|
78
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
79
|
+
"grid gap-8 lg:grid-cols-[1.1fr_minmax(300px,380px)] lg:items-center",
|
|
80
|
+
className
|
|
81
|
+
),
|
|
82
|
+
"aria-labelledby": eyebrow ? `${id}-eyebrow` : void 0,
|
|
83
|
+
children: [
|
|
84
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-5", children: [
|
|
85
|
+
eyebrow && /* @__PURE__ */ jsxRuntime.jsx(
|
|
86
|
+
"p",
|
|
87
|
+
{
|
|
88
|
+
id: `${id}-eyebrow`,
|
|
89
|
+
className: "text-primary-800 dark:text-primary-300 text-[11px] font-bold tracking-[0.18em] uppercase",
|
|
90
|
+
children: eyebrow
|
|
91
|
+
}
|
|
92
|
+
),
|
|
93
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
94
|
+
"div",
|
|
95
|
+
{
|
|
96
|
+
role: "group",
|
|
97
|
+
"aria-label": groupLabel,
|
|
98
|
+
"data-slot": "radial-explorer-ring",
|
|
99
|
+
className: "relative hidden aspect-square w-[calc(var(--re-r)*2+120px)] place-items-center lg:grid",
|
|
100
|
+
children: [
|
|
101
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
102
|
+
"span",
|
|
103
|
+
{
|
|
104
|
+
"aria-hidden": true,
|
|
105
|
+
"data-slot": "radial-explorer-core",
|
|
106
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
107
|
+
// rtl-ignore -- physical centering paired with -translate-x-1/2 is direction-independent; start-1/2 would break it in RTL
|
|
108
|
+
"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)]",
|
|
109
|
+
"[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%)]",
|
|
110
|
+
"[&>*]:h-[54px] [&>*]:w-[54px] [&>img]:object-contain"
|
|
111
|
+
),
|
|
112
|
+
children: center
|
|
113
|
+
}
|
|
114
|
+
),
|
|
115
|
+
active && /* @__PURE__ */ jsxRuntime.jsx(
|
|
116
|
+
"span",
|
|
117
|
+
{
|
|
118
|
+
"aria-hidden": true,
|
|
119
|
+
"data-slot": "radial-explorer-ray",
|
|
120
|
+
style: {
|
|
121
|
+
width: "var(--re-r)",
|
|
122
|
+
transform: `translateY(-50%) rotate(${angle(activeIndex)})`
|
|
123
|
+
},
|
|
124
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
125
|
+
// rtl-ignore -- the ray is rotated to a computed angle from the physical center; origin/tip geometry must stay physical
|
|
126
|
+
"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)]",
|
|
127
|
+
"[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%)]",
|
|
128
|
+
// rtl-ignore -- tip dot sits at the physical end of the rotated ray
|
|
129
|
+
'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-[""]'
|
|
130
|
+
)
|
|
131
|
+
}
|
|
132
|
+
),
|
|
133
|
+
spokes.map((s, i) => {
|
|
134
|
+
const on = s.id === activeId;
|
|
135
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
136
|
+
"button",
|
|
137
|
+
{
|
|
138
|
+
type: "button",
|
|
139
|
+
"aria-pressed": on,
|
|
140
|
+
"data-slot": "radial-explorer-spoke",
|
|
141
|
+
"data-active": on || void 0,
|
|
142
|
+
style: {
|
|
143
|
+
transform: `translate(-50%,-50%) rotate(${angle(i)}) translate(var(--re-r)) rotate(calc(-1 * ${angle(i)}))`
|
|
144
|
+
},
|
|
145
|
+
onMouseEnter: () => select(s.id),
|
|
146
|
+
onFocus: () => select(s.id),
|
|
147
|
+
onClick: () => select(s.id),
|
|
148
|
+
className: "group/spoke absolute top-1/2 left-1/2 grid w-24 justify-items-center gap-2 focus-visible:outline-none",
|
|
149
|
+
children: [
|
|
150
|
+
/* @__PURE__ */ jsxRuntime.jsx(SpokeTile, { icon: s.icon, active: on }),
|
|
151
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
152
|
+
"span",
|
|
153
|
+
{
|
|
154
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
155
|
+
"text-muted-foreground group-hover/spoke:text-primary-800 dark:group-hover/spoke:text-primary-200 text-[13px] font-semibold transition-colors",
|
|
156
|
+
on && "text-primary-800 dark:text-primary-200"
|
|
157
|
+
),
|
|
158
|
+
children: s.label
|
|
159
|
+
}
|
|
160
|
+
)
|
|
161
|
+
]
|
|
162
|
+
},
|
|
163
|
+
s.id
|
|
164
|
+
);
|
|
165
|
+
})
|
|
166
|
+
]
|
|
167
|
+
}
|
|
168
|
+
),
|
|
169
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
170
|
+
"div",
|
|
171
|
+
{
|
|
172
|
+
role: "group",
|
|
173
|
+
"aria-label": groupLabel,
|
|
174
|
+
className: "grid w-full grid-cols-3 gap-3 lg:hidden",
|
|
175
|
+
children: spokes.map((s) => {
|
|
176
|
+
const on = s.id === activeId;
|
|
177
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
178
|
+
"button",
|
|
179
|
+
{
|
|
180
|
+
type: "button",
|
|
181
|
+
"aria-pressed": on,
|
|
182
|
+
"data-slot": "radial-explorer-chip",
|
|
183
|
+
onClick: () => select(s.id),
|
|
184
|
+
className: "group/spoke grid justify-items-center gap-1.5 focus-visible:outline-none",
|
|
185
|
+
children: [
|
|
186
|
+
/* @__PURE__ */ jsxRuntime.jsx(SpokeTile, { icon: s.icon, active: on, size: "sm" }),
|
|
187
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
188
|
+
"span",
|
|
189
|
+
{
|
|
190
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
191
|
+
"text-muted-foreground text-center text-xs font-semibold",
|
|
192
|
+
on && "text-primary-800 dark:text-primary-200"
|
|
193
|
+
),
|
|
194
|
+
children: s.label
|
|
195
|
+
}
|
|
196
|
+
)
|
|
197
|
+
]
|
|
198
|
+
},
|
|
199
|
+
s.id
|
|
200
|
+
);
|
|
201
|
+
})
|
|
202
|
+
}
|
|
203
|
+
),
|
|
204
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-2", children: [
|
|
205
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { role: "group", "aria-label": groupLabel, className: "flex gap-2", children: spokes.map((s, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
206
|
+
"button",
|
|
207
|
+
{
|
|
208
|
+
type: "button",
|
|
209
|
+
"aria-pressed": i === activeIndex,
|
|
210
|
+
"aria-label": s.label,
|
|
211
|
+
onClick: () => select(s.id),
|
|
212
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
213
|
+
"h-2 rounded-full transition-all",
|
|
214
|
+
i === activeIndex ? "w-6 bg-[var(--mieweb-accent,var(--mieweb-primary-400))]" : "bg-primary-300/60 hover:bg-primary-400 w-2"
|
|
215
|
+
)
|
|
216
|
+
},
|
|
217
|
+
s.id
|
|
218
|
+
)) }),
|
|
219
|
+
hint && /* @__PURE__ */ jsxRuntime.jsx(
|
|
220
|
+
"p",
|
|
221
|
+
{
|
|
222
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
223
|
+
"text-muted-foreground text-xs transition-opacity",
|
|
224
|
+
engaged && "opacity-0"
|
|
225
|
+
),
|
|
226
|
+
"aria-hidden": engaged,
|
|
227
|
+
children: hint
|
|
228
|
+
}
|
|
229
|
+
)
|
|
230
|
+
] })
|
|
231
|
+
] }),
|
|
232
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
233
|
+
"div",
|
|
234
|
+
{
|
|
235
|
+
"data-slot": "radial-explorer-detail",
|
|
236
|
+
"aria-live": engaged ? "polite" : "off",
|
|
237
|
+
className: "border-border bg-card text-card-foreground grid content-center gap-3.5 rounded-2xl border p-5 shadow-xl",
|
|
238
|
+
children: active ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
239
|
+
Detail,
|
|
240
|
+
{
|
|
241
|
+
tag: active.tag ?? active.label,
|
|
242
|
+
title: active.title ?? active.label,
|
|
243
|
+
description: active.description,
|
|
244
|
+
media: active.media,
|
|
245
|
+
caption: active.caption,
|
|
246
|
+
cta: active.cta,
|
|
247
|
+
href: active.href,
|
|
248
|
+
hrefLabel: active.hrefLabel ?? "Explore module"
|
|
249
|
+
},
|
|
250
|
+
active.id
|
|
251
|
+
) : welcome ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
252
|
+
Detail,
|
|
253
|
+
{
|
|
254
|
+
tag: welcome.tag,
|
|
255
|
+
title: welcome.title,
|
|
256
|
+
description: welcome.description,
|
|
257
|
+
media: welcome.media,
|
|
258
|
+
cta: welcome.cta
|
|
259
|
+
},
|
|
260
|
+
"welcome"
|
|
261
|
+
) : null
|
|
262
|
+
}
|
|
263
|
+
)
|
|
264
|
+
]
|
|
265
|
+
}
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
function SpokeTile({
|
|
269
|
+
icon,
|
|
270
|
+
active,
|
|
271
|
+
size = "md"
|
|
272
|
+
}) {
|
|
273
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
274
|
+
"span",
|
|
275
|
+
{
|
|
276
|
+
"aria-hidden": true,
|
|
277
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
278
|
+
"mie-fx-sheen relative grid place-items-center rounded-[17px] border transition-[transform,border-color,color,box-shadow,background] duration-200",
|
|
279
|
+
size === "md" ? "h-[60px] w-[60px] [&>svg]:h-[22px] [&>svg]:w-[22px]" : "h-12 w-12 rounded-xl [&>svg]:h-5 [&>svg]:w-5",
|
|
280
|
+
"border-border bg-primary-500/10 text-primary-800 dark:text-primary-300 shadow-md backdrop-blur-sm",
|
|
281
|
+
"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",
|
|
282
|
+
"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]",
|
|
283
|
+
"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]",
|
|
284
|
+
active && "-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]"
|
|
285
|
+
),
|
|
286
|
+
children: icon
|
|
287
|
+
}
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
function Detail({
|
|
291
|
+
tag,
|
|
292
|
+
title,
|
|
293
|
+
description,
|
|
294
|
+
media,
|
|
295
|
+
caption,
|
|
296
|
+
cta,
|
|
297
|
+
href,
|
|
298
|
+
hrefLabel
|
|
299
|
+
}) {
|
|
300
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-3.5 motion-safe:animate-[mie-fade-in_0.25s_ease-out]", children: [
|
|
301
|
+
media && /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "radial-explorer-media", children: media }),
|
|
302
|
+
tag && /* @__PURE__ */ jsxRuntime.jsx(
|
|
303
|
+
chunkYVL3XATO_cjs.Badge,
|
|
304
|
+
{
|
|
305
|
+
size: "sm",
|
|
306
|
+
className: "w-fit text-[10px] font-bold tracking-[0.14em] uppercase",
|
|
307
|
+
children: tag
|
|
308
|
+
}
|
|
309
|
+
),
|
|
310
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-foreground text-2xl leading-tight font-semibold", children: title }),
|
|
311
|
+
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-[15px] leading-snug", children: description }),
|
|
312
|
+
caption && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-sm", children: caption }),
|
|
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: chunkVNYW4C4J_cjs.buttonVariants({ effect: "sheen" }), children: [
|
|
315
|
+
cta.label,
|
|
316
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { size: 16, "aria-hidden": true })
|
|
317
|
+
] }),
|
|
318
|
+
href && /* @__PURE__ */ jsxRuntime.jsx(
|
|
319
|
+
"a",
|
|
320
|
+
{
|
|
321
|
+
href,
|
|
322
|
+
className: "text-primary-800 dark:text-primary-200 text-sm font-semibold underline-offset-4 hover:underline",
|
|
323
|
+
children: hrefLabel
|
|
324
|
+
}
|
|
325
|
+
)
|
|
326
|
+
] })
|
|
327
|
+
] });
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
exports.RadialExplorer = RadialExplorer;
|
|
331
|
+
//# sourceMappingURL=chunk-6EN3IQQI.cjs.map
|
|
332
|
+
//# sourceMappingURL=chunk-6EN3IQQI.cjs.map
|
|
@@ -0,0 +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-6EN3IQQI.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 />\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"]}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
// src/components/AI/voiceprintStore.ts
|
|
2
|
+
var DB_NAME = "ozwell-voice";
|
|
3
|
+
var STORE = "voiceprints";
|
|
4
|
+
var DB_VERSION = 1;
|
|
5
|
+
function voiceprintStorageKey(key, namespace) {
|
|
6
|
+
if (namespace === void 0) return key;
|
|
7
|
+
const ns = namespace.trim();
|
|
8
|
+
if (ns.length === 0)
|
|
9
|
+
throw new Error("Voiceprint namespace must not be empty");
|
|
10
|
+
return `${key}:${encodeURIComponent(ns)}`;
|
|
11
|
+
}
|
|
12
|
+
function openDb() {
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
const req = indexedDB.open(DB_NAME, DB_VERSION);
|
|
15
|
+
req.onupgradeneeded = () => {
|
|
16
|
+
if (!req.result.objectStoreNames.contains(STORE))
|
|
17
|
+
req.result.createObjectStore(STORE);
|
|
18
|
+
};
|
|
19
|
+
req.onsuccess = () => resolve(req.result);
|
|
20
|
+
req.onerror = () => reject(req.error);
|
|
21
|
+
req.onblocked = () => reject(
|
|
22
|
+
new Error("IndexedDB open blocked (another tab holds an upgrade lock)")
|
|
23
|
+
);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function idbGet(key) {
|
|
27
|
+
return openDb().then(
|
|
28
|
+
(db) => new Promise((resolve, reject) => {
|
|
29
|
+
const req = db.transaction(STORE, "readonly").objectStore(STORE).get(key);
|
|
30
|
+
req.onsuccess = () => {
|
|
31
|
+
resolve(req.result);
|
|
32
|
+
db.close();
|
|
33
|
+
};
|
|
34
|
+
req.onerror = () => {
|
|
35
|
+
reject(req.error);
|
|
36
|
+
db.close();
|
|
37
|
+
};
|
|
38
|
+
})
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
function idbSet(key, value) {
|
|
42
|
+
return openDb().then(
|
|
43
|
+
(db) => new Promise((resolve, reject) => {
|
|
44
|
+
const tx = db.transaction(STORE, "readwrite");
|
|
45
|
+
tx.objectStore(STORE).put(value, key);
|
|
46
|
+
tx.oncomplete = () => {
|
|
47
|
+
resolve();
|
|
48
|
+
db.close();
|
|
49
|
+
};
|
|
50
|
+
tx.onerror = () => {
|
|
51
|
+
reject(tx.error);
|
|
52
|
+
db.close();
|
|
53
|
+
};
|
|
54
|
+
tx.onabort = () => {
|
|
55
|
+
reject(tx.error);
|
|
56
|
+
db.close();
|
|
57
|
+
};
|
|
58
|
+
})
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
function idbDel(key) {
|
|
62
|
+
return openDb().then(
|
|
63
|
+
(db) => new Promise((resolve, reject) => {
|
|
64
|
+
const tx = db.transaction(STORE, "readwrite");
|
|
65
|
+
tx.objectStore(STORE).delete(key);
|
|
66
|
+
tx.oncomplete = () => {
|
|
67
|
+
resolve();
|
|
68
|
+
db.close();
|
|
69
|
+
};
|
|
70
|
+
tx.onerror = () => {
|
|
71
|
+
reject(tx.error);
|
|
72
|
+
db.close();
|
|
73
|
+
};
|
|
74
|
+
tx.onabort = () => {
|
|
75
|
+
reject(tx.error);
|
|
76
|
+
db.close();
|
|
77
|
+
};
|
|
78
|
+
})
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
async function getVoiceprints(key, migrateLegacy) {
|
|
82
|
+
try {
|
|
83
|
+
const existing = await idbGet(key);
|
|
84
|
+
if (existing !== void 0) return existing;
|
|
85
|
+
if (migrateLegacy) {
|
|
86
|
+
let raw = null;
|
|
87
|
+
try {
|
|
88
|
+
raw = localStorage.getItem(key);
|
|
89
|
+
} catch {
|
|
90
|
+
}
|
|
91
|
+
if (raw != null) {
|
|
92
|
+
let migrated;
|
|
93
|
+
try {
|
|
94
|
+
migrated = migrateLegacy(raw);
|
|
95
|
+
} catch {
|
|
96
|
+
try {
|
|
97
|
+
localStorage.removeItem(key);
|
|
98
|
+
} catch {
|
|
99
|
+
}
|
|
100
|
+
return void 0;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
await idbSet(key, migrated);
|
|
104
|
+
} catch {
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
localStorage.removeItem(key);
|
|
108
|
+
} catch {
|
|
109
|
+
}
|
|
110
|
+
return migrated;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return void 0;
|
|
114
|
+
} catch {
|
|
115
|
+
return void 0;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async function setVoiceprints(key, value) {
|
|
119
|
+
try {
|
|
120
|
+
await idbSet(key, value);
|
|
121
|
+
} catch {
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function clearVoiceprints(key) {
|
|
125
|
+
try {
|
|
126
|
+
await idbDel(key);
|
|
127
|
+
} catch {
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
localStorage.removeItem(key);
|
|
131
|
+
} catch {
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
var WHAT_KEY = "ozwellWhatPrints";
|
|
135
|
+
function parseLegacyWhat(raw) {
|
|
136
|
+
let o;
|
|
137
|
+
try {
|
|
138
|
+
o = JSON.parse(raw || "{}") || {};
|
|
139
|
+
} catch {
|
|
140
|
+
return {};
|
|
141
|
+
}
|
|
142
|
+
const out = /* @__PURE__ */ Object.create(null);
|
|
143
|
+
for (const k of Object.keys(o))
|
|
144
|
+
out[k] = (o[k] || []).map((a) => Float32Array.from(a));
|
|
145
|
+
return out;
|
|
146
|
+
}
|
|
147
|
+
function loadWhatPrints(namespace) {
|
|
148
|
+
return getVoiceprints(
|
|
149
|
+
voiceprintStorageKey(WHAT_KEY, namespace),
|
|
150
|
+
namespace === void 0 ? parseLegacyWhat : void 0
|
|
151
|
+
).then((v) => v ?? {});
|
|
152
|
+
}
|
|
153
|
+
function saveWhatPrints(map, namespace) {
|
|
154
|
+
return setVoiceprints(voiceprintStorageKey(WHAT_KEY, namespace), map);
|
|
155
|
+
}
|
|
156
|
+
function clearWhatPrints(namespace) {
|
|
157
|
+
return clearVoiceprints(voiceprintStorageKey(WHAT_KEY, namespace));
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export { clearVoiceprints, clearWhatPrints, getVoiceprints, loadWhatPrints, saveWhatPrints, setVoiceprints, voiceprintStorageKey };
|
|
161
|
+
//# sourceMappingURL=chunk-74ENCTIK.js.map
|
|
162
|
+
//# sourceMappingURL=chunk-74ENCTIK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/AI/voiceprintStore.ts"],"names":[],"mappings":"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","file":"chunk-74ENCTIK.js","sourcesContent":["/**\n * IndexedDB store for on-device voiceprints (enrollment vectors), replacing localStorage for this data.\n *\n * Why IndexedDB and not localStorage: it's asynchronous (off the main thread), stores `Float32Array`\n * natively via structured clone (no JSON-stringifying embeddings into bloated number arrays), and isn't\n * capped at ~5 MB. Why not OPFS: these are small *structured records* keyed by id, not large files —\n * IndexedDB is the right tool; OPFS is for the big model files.\n *\n * One object store, keyed by a string id; values are any structured-cloneable object, so `Float32Array`s\n * survive the round-trip intact. On first read of a key it migrates a legacy localStorage value (if a\n * parser is supplied) and then clears it.\n */\n\nconst DB_NAME = 'ozwell-voice';\nconst STORE = 'voiceprints';\nconst DB_VERSION = 1;\n\nexport function voiceprintStorageKey(key: string, namespace?: string): string {\n if (namespace === undefined) return key;\n // Trim before encoding so accidental whitespace (\"user-a \" vs \"user-a\") can't silently split a\n // user's voiceprints across distinct stores.\n const ns = namespace.trim();\n if (ns.length === 0)\n throw new Error('Voiceprint namespace must not be empty');\n return `${key}:${encodeURIComponent(ns)}`;\n}\n\nfunction openDb(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const req = indexedDB.open(DB_NAME, DB_VERSION);\n req.onupgradeneeded = () => {\n if (!req.result.objectStoreNames.contains(STORE))\n req.result.createObjectStore(STORE);\n };\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n // If another tab holds an open connection during a version upgrade, the open stays \"blocked\" and\n // would otherwise hang forever — surface it instead so callers hit their catch/fallback paths.\n req.onblocked = () =>\n reject(\n new Error('IndexedDB open blocked (another tab holds an upgrade lock)')\n );\n });\n}\n\nfunction idbGet<T>(key: string): Promise<T | undefined> {\n return openDb().then(\n (db) =>\n new Promise<T | undefined>((resolve, reject) => {\n const req = db\n .transaction(STORE, 'readonly')\n .objectStore(STORE)\n .get(key);\n req.onsuccess = () => {\n resolve(req.result as T | undefined);\n db.close();\n };\n req.onerror = () => {\n reject(req.error);\n db.close();\n };\n })\n );\n}\n\nfunction idbSet(key: string, value: unknown): Promise<void> {\n return openDb().then(\n (db) =>\n new Promise<void>((resolve, reject) => {\n const tx = db.transaction(STORE, 'readwrite');\n tx.objectStore(STORE).put(value, key);\n tx.oncomplete = () => {\n resolve();\n db.close();\n };\n tx.onerror = () => {\n reject(tx.error);\n db.close();\n };\n tx.onabort = () => {\n reject(tx.error);\n db.close();\n }; // else an aborted tx leaves the promise pending\n })\n );\n}\n\nfunction idbDel(key: string): Promise<void> {\n return openDb().then(\n (db) =>\n new Promise<void>((resolve, reject) => {\n const tx = db.transaction(STORE, 'readwrite');\n tx.objectStore(STORE).delete(key);\n tx.oncomplete = () => {\n resolve();\n db.close();\n };\n tx.onerror = () => {\n reject(tx.error);\n db.close();\n };\n tx.onabort = () => {\n reject(tx.error);\n db.close();\n }; // else an aborted tx leaves the promise pending\n })\n );\n}\n\n/**\n * Read a voiceprint record. If IndexedDB has nothing for `key` but localStorage does, migrate it via\n * `migrateLegacy` (parse the old JSON string → the new shape), persist it to IndexedDB, and clear the\n * localStorage copy. Returns `undefined` if neither has it. Never throws (best-effort storage).\n */\nexport async function getVoiceprints<T>(\n key: string,\n migrateLegacy?: (raw: string) => T\n): Promise<T | undefined> {\n try {\n const existing = await idbGet<T>(key);\n if (existing !== undefined) return existing;\n if (migrateLegacy) {\n let raw: string | null = null;\n try {\n raw = localStorage.getItem(key);\n } catch {\n /* ignore */\n }\n if (raw != null) {\n let migrated: T;\n try {\n migrated = migrateLegacy(raw);\n } catch {\n // Corrupt legacy value — drop it so we don't retry the failing migration on every load.\n try {\n localStorage.removeItem(key);\n } catch {\n /* ignore */\n }\n return undefined;\n }\n try {\n await idbSet(key, migrated);\n } catch {\n /* persist is best-effort; still return the migrated value */\n }\n try {\n localStorage.removeItem(key);\n } catch {\n /* ignore */\n }\n return migrated;\n }\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\n/** Persist a voiceprint record (Float32Arrays stored natively). Best-effort — resolves even on failure. */\nexport async function setVoiceprints(\n key: string,\n value: unknown\n): Promise<void> {\n try {\n await idbSet(key, value);\n } catch {\n /* best-effort */\n }\n}\n\n/** Remove a voiceprint record (and any stale localStorage copy). */\nexport async function clearVoiceprints(key: string): Promise<void> {\n try {\n await idbDel(key);\n } catch {\n /* ignore */\n }\n try {\n localStorage.removeItem(key);\n } catch {\n /* ignore */\n }\n}\n\n// --- WHAT phrase-prints: per-phrase wake-embedding templates (the WHAT gate). Previously each story kept\n// its own copy of these load/save helpers against localStorage; centralized here on IndexedDB. ---\nconst WHAT_KEY = 'ozwellWhatPrints';\n\n// Legacy localStorage format: JSON `{ phrase: number[][] }`. New IndexedDB format stores Float32Array[]\n// natively, so migration just rehydrates the number arrays once.\nfunction parseLegacyWhat(raw: string): Record<string, Float32Array[]> {\n let o: Record<string, number[][]>;\n try {\n o = (JSON.parse(raw || '{}') || {}) as Record<string, number[][]>;\n } catch {\n return {};\n }\n // Null-prototype output + Object.keys so a legacy `__proto__` key can't pollute Object.prototype.\n const out: Record<string, Float32Array[]> = Object.create(null);\n for (const k of Object.keys(o))\n out[k] = (o[k] || []).map((a) => Float32Array.from(a));\n return out;\n}\n\nexport function loadWhatPrints(\n namespace?: string\n): Promise<Record<string, Float32Array[]>> {\n return getVoiceprints<Record<string, Float32Array[]>>(\n voiceprintStorageKey(WHAT_KEY, namespace),\n namespace === undefined ? parseLegacyWhat : undefined\n ).then((v) => v ?? {});\n}\n\nexport function saveWhatPrints(\n map: Record<string, Float32Array[]>,\n namespace?: string\n): Promise<void> {\n return setVoiceprints(voiceprintStorageKey(WHAT_KEY, namespace), map);\n}\n\nexport function clearWhatPrints(namespace?: string): Promise<void> {\n return clearVoiceprints(voiceprintStorageKey(WHAT_KEY, namespace));\n}\n"]}
|