@mieweb/ui 0.10.0-dev.1 → 0.10.0-dev.2
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-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-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 +1100 -968
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +22 -4
- package/dist/index.d.ts +22 -4
- package/dist/index.js +176 -99
- package/dist/index.js.map +1 -1
- 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
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
|
|
5
|
+
function _interopNamespace(e) {
|
|
6
|
+
if (e && e.__esModule) return e;
|
|
7
|
+
var n = Object.create(null);
|
|
8
|
+
if (e) {
|
|
9
|
+
Object.keys(e).forEach(function (k) {
|
|
10
|
+
if (k !== 'default') {
|
|
11
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
12
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () { return e[k]; }
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
n.default = e;
|
|
20
|
+
return Object.freeze(n);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
24
|
+
|
|
25
|
+
// src/hooks/useYouTubeHoverPreview.ts
|
|
26
|
+
var ytApiPromise = null;
|
|
27
|
+
var YT_API_TIMEOUT_MS = 1e4;
|
|
28
|
+
function loadYouTubeIframeApi() {
|
|
29
|
+
if (typeof window === "undefined") return Promise.resolve();
|
|
30
|
+
const w = window;
|
|
31
|
+
if (w.YT?.Player) return Promise.resolve();
|
|
32
|
+
if (ytApiPromise) return ytApiPromise;
|
|
33
|
+
ytApiPromise = new Promise((resolve, reject) => {
|
|
34
|
+
const prev = w.onYouTubeIframeAPIReady;
|
|
35
|
+
let timer;
|
|
36
|
+
const settle = (err) => {
|
|
37
|
+
if (timer !== void 0) window.clearTimeout(timer);
|
|
38
|
+
timer = void 0;
|
|
39
|
+
if (err) {
|
|
40
|
+
ytApiPromise = null;
|
|
41
|
+
reject(err);
|
|
42
|
+
} else {
|
|
43
|
+
resolve();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
w.onYouTubeIframeAPIReady = () => {
|
|
47
|
+
prev?.();
|
|
48
|
+
settle();
|
|
49
|
+
};
|
|
50
|
+
const tag = document.createElement("script");
|
|
51
|
+
tag.src = "https://www.youtube.com/iframe_api";
|
|
52
|
+
tag.async = true;
|
|
53
|
+
tag.onerror = () => settle(new Error("Failed to load the YouTube iframe API"));
|
|
54
|
+
timer = window.setTimeout(
|
|
55
|
+
() => settle(new Error("Timed out loading the YouTube iframe API")),
|
|
56
|
+
YT_API_TIMEOUT_MS
|
|
57
|
+
);
|
|
58
|
+
document.head.appendChild(tag);
|
|
59
|
+
});
|
|
60
|
+
return ytApiPromise;
|
|
61
|
+
}
|
|
62
|
+
function useYouTubeHoverPreview(youtubeId, {
|
|
63
|
+
dwellMs = 600,
|
|
64
|
+
host = "https://www.youtube-nocookie.com",
|
|
65
|
+
enabled = true
|
|
66
|
+
} = {}) {
|
|
67
|
+
const [preview, setPreview] = React__namespace.useState("idle");
|
|
68
|
+
const [progress, setProgress] = React__namespace.useState(0);
|
|
69
|
+
const hostRef = React__namespace.useRef(null);
|
|
70
|
+
const playerRef = React__namespace.useRef(null);
|
|
71
|
+
const hoveringRef = React__namespace.useRef(false);
|
|
72
|
+
const enterTimerRef = React__namespace.useRef(null);
|
|
73
|
+
const pollRef = React__namespace.useRef(null);
|
|
74
|
+
const stopPreview = React__namespace.useCallback(() => {
|
|
75
|
+
hoveringRef.current = false;
|
|
76
|
+
if (enterTimerRef.current !== null) {
|
|
77
|
+
window.clearTimeout(enterTimerRef.current);
|
|
78
|
+
enterTimerRef.current = null;
|
|
79
|
+
}
|
|
80
|
+
if (pollRef.current !== null) {
|
|
81
|
+
window.clearInterval(pollRef.current);
|
|
82
|
+
pollRef.current = null;
|
|
83
|
+
}
|
|
84
|
+
if (playerRef.current) {
|
|
85
|
+
try {
|
|
86
|
+
playerRef.current.destroy();
|
|
87
|
+
} catch {
|
|
88
|
+
}
|
|
89
|
+
playerRef.current = null;
|
|
90
|
+
}
|
|
91
|
+
if (hostRef.current) hostRef.current.innerHTML = "";
|
|
92
|
+
setPreview("idle");
|
|
93
|
+
setProgress(0);
|
|
94
|
+
}, []);
|
|
95
|
+
const beginPlayer = React__namespace.useCallback(() => {
|
|
96
|
+
const el = hostRef.current;
|
|
97
|
+
const YT = window.YT;
|
|
98
|
+
if (!el || !YT?.Player || playerRef.current || !hoveringRef.current || !youtubeId)
|
|
99
|
+
return;
|
|
100
|
+
const target = document.createElement("div");
|
|
101
|
+
el.appendChild(target);
|
|
102
|
+
const startPolling = () => {
|
|
103
|
+
if (pollRef.current !== null) return;
|
|
104
|
+
pollRef.current = window.setInterval(() => {
|
|
105
|
+
const p = playerRef.current;
|
|
106
|
+
if (!p) return;
|
|
107
|
+
const d = p.getDuration();
|
|
108
|
+
if (d > 0) setProgress(Math.min(p.getCurrentTime() / d, 1));
|
|
109
|
+
}, 200);
|
|
110
|
+
};
|
|
111
|
+
playerRef.current = new YT.Player(target, {
|
|
112
|
+
videoId: youtubeId,
|
|
113
|
+
host,
|
|
114
|
+
width: "100%",
|
|
115
|
+
height: "100%",
|
|
116
|
+
playerVars: {
|
|
117
|
+
autoplay: 1,
|
|
118
|
+
mute: 1,
|
|
119
|
+
controls: 0,
|
|
120
|
+
playsinline: 1,
|
|
121
|
+
modestbranding: 1,
|
|
122
|
+
rel: 0,
|
|
123
|
+
disablekb: 1,
|
|
124
|
+
fs: 0,
|
|
125
|
+
iv_load_policy: 3,
|
|
126
|
+
start: 0
|
|
127
|
+
},
|
|
128
|
+
events: {
|
|
129
|
+
onReady: (e) => {
|
|
130
|
+
if (!hoveringRef.current) {
|
|
131
|
+
stopPreview();
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
e.target.mute();
|
|
135
|
+
e.target.playVideo();
|
|
136
|
+
},
|
|
137
|
+
onStateChange: (e) => {
|
|
138
|
+
if (e.data === 1) {
|
|
139
|
+
setPreview("playing");
|
|
140
|
+
startPolling();
|
|
141
|
+
} else if (e.data === 0 && playerRef.current) {
|
|
142
|
+
playerRef.current.seekTo(0, true);
|
|
143
|
+
playerRef.current.playVideo();
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
onError: () => stopPreview()
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
if (!hoveringRef.current) stopPreview();
|
|
150
|
+
}, [youtubeId, host, stopPreview]);
|
|
151
|
+
const handleEnter = React__namespace.useCallback(() => {
|
|
152
|
+
if (!enabled || !youtubeId || typeof window === "undefined" || !window.matchMedia("(hover: hover)").matches || window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
hoveringRef.current = true;
|
|
156
|
+
if (enterTimerRef.current !== null || playerRef.current) return;
|
|
157
|
+
enterTimerRef.current = window.setTimeout(() => {
|
|
158
|
+
enterTimerRef.current = null;
|
|
159
|
+
if (!hoveringRef.current) return;
|
|
160
|
+
setPreview("loading");
|
|
161
|
+
void loadYouTubeIframeApi().then(() => {
|
|
162
|
+
if (hoveringRef.current) beginPlayer();
|
|
163
|
+
}).catch(() => {
|
|
164
|
+
stopPreview();
|
|
165
|
+
});
|
|
166
|
+
}, dwellMs);
|
|
167
|
+
}, [enabled, youtubeId, dwellMs, beginPlayer, stopPreview]);
|
|
168
|
+
React__namespace.useEffect(() => stopPreview, [stopPreview]);
|
|
169
|
+
return { preview, progress, hostRef, handleEnter, stopPreview };
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
exports.useYouTubeHoverPreview = useYouTubeHoverPreview;
|
|
173
|
+
//# sourceMappingURL=chunk-IXFC7LK2.cjs.map
|
|
174
|
+
//# sourceMappingURL=chunk-IXFC7LK2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useYouTubeHoverPreview.ts"],"names":["React"],"mappings":"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","file":"chunk-IXFC7LK2.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\n\n// =============================================================================\n// YouTube IFrame API (lazy, shared)\n// =============================================================================\n// Loaded only the first time a visitor dwells on a card, then reused. A minimal\n// hand-written shape instead of @types/youtube keeps the dependency graph flat.\n\ninterface YTPreviewPlayer {\n playVideo(): void;\n mute(): void;\n getCurrentTime(): number;\n getDuration(): number;\n seekTo(seconds: number, allowSeekAhead: boolean): void;\n destroy(): void;\n}\n\ninterface YTPlayerEvent {\n target: YTPreviewPlayer;\n data?: number;\n}\n\ninterface YTNamespace {\n Player: new (\n el: HTMLElement,\n opts: Record<string, unknown>\n ) => YTPreviewPlayer;\n}\n\ntype YTWindow = Window & {\n YT?: YTNamespace;\n onYouTubeIframeAPIReady?: () => void;\n};\n\nlet ytApiPromise: Promise<void> | null = null;\n\nconst YT_API_TIMEOUT_MS = 10_000;\n\nfunction loadYouTubeIframeApi(): Promise<void> {\n if (typeof window === 'undefined') return Promise.resolve();\n const w = window as YTWindow;\n if (w.YT?.Player) return Promise.resolve();\n if (ytApiPromise) return ytApiPromise;\n ytApiPromise = new Promise<void>((resolve, reject) => {\n const prev = w.onYouTubeIframeAPIReady;\n let timer: number | undefined;\n const settle = (err?: Error) => {\n if (timer !== undefined) window.clearTimeout(timer);\n timer = undefined;\n if (err) {\n // Clear the shared promise so a later hover can retry a transient\n // failure (CSP, ad blocker, flaky network).\n ytApiPromise = null;\n reject(err);\n } else {\n resolve();\n }\n };\n w.onYouTubeIframeAPIReady = () => {\n prev?.();\n settle();\n };\n const tag = document.createElement('script');\n tag.src = 'https://www.youtube.com/iframe_api';\n tag.async = true;\n tag.onerror = () =>\n settle(new Error('Failed to load the YouTube iframe API'));\n timer = window.setTimeout(\n () => settle(new Error('Timed out loading the YouTube iframe API')),\n YT_API_TIMEOUT_MS\n );\n document.head.appendChild(tag);\n });\n return ytApiPromise;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport type HoverPreviewState = 'idle' | 'loading' | 'playing';\n\nexport interface UseYouTubeHoverPreviewOptions {\n /** Hover dwell before the player mounts. Default 600ms. */\n dwellMs?: number;\n /** Player host. Default `https://www.youtube-nocookie.com`. */\n host?: string;\n /** Disable entirely (e.g. when the card has no YouTube id). */\n enabled?: boolean;\n}\n\nexport interface UseYouTubeHoverPreviewReturn {\n /** Lifecycle phase of the muted preview. */\n preview: HoverPreviewState;\n /** Normalised playback position (0–1) for a timeline bar. */\n progress: number;\n /** Attach to the element the muted iframe should fill. */\n hostRef: React.RefObject<HTMLDivElement | null>;\n /** Wire to the hover target's `onMouseEnter` / `onFocus`. */\n handleEnter: () => void;\n /** Wire to the hover target's `onMouseLeave` / `onBlur` (and any manual reset). */\n stopPreview: () => void;\n}\n\n/**\n * Drives a muted, looping YouTube hover preview for a single `youtubeId` — the\n * \"silent autoplay on dwell\" pattern from YouTube's own grid. After a short\n * hover dwell a muted player is mounted lazily inside `hostRef`; `progress`\n * tracks playback for a timeline bar; everything tears down on leave so only\n * one preview is ever live. Honours `prefers-reduced-motion` and skips\n * pointer-less (touch) inputs.\n *\n * @example\n * ```tsx\n * const { preview, progress, hostRef, handleEnter, stopPreview } =\n * useYouTubeHoverPreview('dQw4w9WgXcQ');\n * <a onMouseEnter={handleEnter} onMouseLeave={stopPreview}>\n * <div ref={hostRef} className={preview === 'playing' ? 'opacity-100' : 'opacity-0'} />\n * </a>\n * ```\n */\nexport function useYouTubeHoverPreview(\n youtubeId: string | undefined,\n {\n dwellMs = 600,\n host = 'https://www.youtube-nocookie.com',\n enabled = true,\n }: UseYouTubeHoverPreviewOptions = {}\n): UseYouTubeHoverPreviewReturn {\n const [preview, setPreview] = React.useState<HoverPreviewState>('idle');\n const [progress, setProgress] = React.useState(0);\n\n const hostRef = React.useRef<HTMLDivElement | null>(null);\n const playerRef = React.useRef<YTPreviewPlayer | null>(null);\n const hoveringRef = React.useRef(false);\n const enterTimerRef = React.useRef<number | null>(null);\n const pollRef = React.useRef<number | null>(null);\n\n const stopPreview = React.useCallback(() => {\n hoveringRef.current = false;\n if (enterTimerRef.current !== null) {\n window.clearTimeout(enterTimerRef.current);\n enterTimerRef.current = null;\n }\n if (pollRef.current !== null) {\n window.clearInterval(pollRef.current);\n pollRef.current = null;\n }\n if (playerRef.current) {\n try {\n playerRef.current.destroy();\n } catch {\n /* player already torn down */\n }\n playerRef.current = null;\n }\n if (hostRef.current) hostRef.current.innerHTML = '';\n setPreview('idle');\n setProgress(0);\n }, []);\n\n const beginPlayer = React.useCallback(() => {\n const el = hostRef.current;\n const YT = (window as YTWindow).YT;\n if (\n !el ||\n !YT?.Player ||\n playerRef.current ||\n !hoveringRef.current ||\n !youtubeId\n )\n return;\n\n const target = document.createElement('div');\n el.appendChild(target);\n\n const startPolling = () => {\n if (pollRef.current !== null) return;\n pollRef.current = window.setInterval(() => {\n const p = playerRef.current;\n if (!p) return;\n const d = p.getDuration();\n if (d > 0) setProgress(Math.min(p.getCurrentTime() / d, 1));\n }, 200);\n };\n\n playerRef.current = new YT.Player(target, {\n videoId: youtubeId,\n host,\n width: '100%',\n height: '100%',\n playerVars: {\n autoplay: 1,\n mute: 1,\n controls: 0,\n playsinline: 1,\n modestbranding: 1,\n rel: 0,\n disablekb: 1,\n fs: 0,\n iv_load_policy: 3,\n start: 0,\n },\n events: {\n onReady: (e: YTPlayerEvent) => {\n if (!hoveringRef.current) {\n stopPreview();\n return;\n }\n e.target.mute();\n e.target.playVideo();\n },\n onStateChange: (e: YTPlayerEvent) => {\n if (e.data === 1) {\n // PLAYING — reveal only once frames are actually flowing\n setPreview('playing');\n startPolling();\n } else if (e.data === 0 && playerRef.current) {\n // ENDED — loop like YouTube's own previews\n playerRef.current.seekTo(0, true);\n playerRef.current.playVideo();\n }\n },\n onError: () => stopPreview(),\n },\n });\n\n // the visitor may have left during async player construction\n if (!hoveringRef.current) stopPreview();\n }, [youtubeId, host, stopPreview]);\n\n const handleEnter = React.useCallback(() => {\n if (\n !enabled ||\n !youtubeId ||\n typeof window === 'undefined' ||\n !window.matchMedia('(hover: hover)').matches ||\n window.matchMedia('(prefers-reduced-motion: reduce)').matches\n ) {\n return;\n }\n hoveringRef.current = true;\n if (enterTimerRef.current !== null || playerRef.current) return;\n enterTimerRef.current = window.setTimeout(() => {\n enterTimerRef.current = null;\n if (!hoveringRef.current) return;\n setPreview('loading');\n void loadYouTubeIframeApi()\n .then(() => {\n // If the visitor left while the API loaded, mouseleave/blur/unmount\n // already ran stopPreview — calling it again here could set state\n // after unmount when the script finally arrives.\n if (hoveringRef.current) beginPlayer();\n })\n .catch(() => {\n // API blocked or timed out — return the card to its idle poster\n // instead of leaving it stuck in `loading`.\n stopPreview();\n });\n }, dwellMs);\n }, [enabled, youtubeId, dwellMs, beginPlayer, stopPreview]);\n\n React.useEffect(() => stopPreview, [stopPreview]);\n\n return { preview, progress, hostRef, handleEnter, stopPreview };\n}\n"]}
|
|
@@ -5,7 +5,7 @@ var brands = {
|
|
|
5
5
|
bluehive: () => import('./brands/bluehive.cjs').then((m) => m.bluehiveBrand),
|
|
6
6
|
ccme: () => import('./brands/ccme.cjs').then((m) => m.ccmeBrand),
|
|
7
7
|
default: () => import('./default-CCMUBXP6.cjs').then((m) => m.defaultBrand),
|
|
8
|
-
"enterprise-health": () => import('./enterprise-health-
|
|
8
|
+
"enterprise-health": () => import('./enterprise-health-UHHPVPU6.cjs').then((m) => m.enterpriseHealthBrand),
|
|
9
9
|
mieweb: () => import('./mieweb-72YOL44I.cjs').then((m) => m.miewebBrand),
|
|
10
10
|
ozwell: () => import('./brands/ozwell.cjs').then((m) => m.ozwellBrand),
|
|
11
11
|
waggleline: () => import('./waggleline-5CBT4MNN.cjs').then((m) => m.wagglelineBrand),
|
|
@@ -13,5 +13,5 @@ var brands = {
|
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
exports.brands = brands;
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
17
|
-
//# sourceMappingURL=chunk-
|
|
16
|
+
//# sourceMappingURL=chunk-J5CSLNCN.cjs.map
|
|
17
|
+
//# sourceMappingURL=chunk-J5CSLNCN.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/brands/index.ts"],"names":[],"mappings":";;;AAkCO,IAAM,MAAA,GAAS;AAAA,EACpB,QAAA,EAAU,MAAM,OAAO,uBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAAA,EAChE,IAAA,EAAM,MAAM,OAAO,mBAAQ,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA;AAAA,EACpD,OAAA,EAAS,MAAM,OAAO,wBAAW,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,CAAA;AAAA,EAC7D,mBAAA,EAAqB,MACnB,OAAO,kCAAqB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,qBAAqB,CAAA;AAAA,EACnE,MAAA,EAAQ,MAAM,OAAO,uBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,MAAA,EAAQ,MAAM,OAAO,qBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,UAAA,EAAY,MAAM,OAAO,2BAAc,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAAA,EACtE,QAAA,EAAU,MAAM,OAAO,yBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa;AAClE","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/brands/index.ts"],"names":[],"mappings":";;;AAkCO,IAAM,MAAA,GAAS;AAAA,EACpB,QAAA,EAAU,MAAM,OAAO,uBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAAA,EAChE,IAAA,EAAM,MAAM,OAAO,mBAAQ,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA;AAAA,EACpD,OAAA,EAAS,MAAM,OAAO,wBAAW,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,CAAA;AAAA,EAC7D,mBAAA,EAAqB,MACnB,OAAO,kCAAqB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,qBAAqB,CAAA;AAAA,EACnE,MAAA,EAAQ,MAAM,OAAO,uBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,MAAA,EAAQ,MAAM,OAAO,qBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,UAAA,EAAY,MAAM,OAAO,2BAAc,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAAA,EACtE,QAAA,EAAU,MAAM,OAAO,yBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa;AAClE","file":"chunk-J5CSLNCN.cjs","sourcesContent":["/**\n * @mieweb/ui Brand System\n *\n * Export all brand-related types, utilities, and configurations.\n */\n\n// Types and utilities\nexport type {\n BrandConfig,\n BrandColors,\n BrandTypography,\n BrandBorderRadius,\n BrandBoxShadow,\n ColorScale,\n SemanticColors,\n} from './types';\n\nexport {\n generateBrandCSS,\n generateTailwindTheme,\n createBrandPreset,\n} from './types';\n\n// Brand configurations\nexport { bluehiveBrand } from './bluehive';\nexport { ccmeBrand } from './ccme';\nexport { defaultBrand } from './default';\nexport { enterpriseHealthBrand } from './enterprise-health';\nexport { miewebBrand } from './mieweb';\nexport { ozwellBrand } from './ozwell';\nexport { wagglelineBrand } from './waggleline';\nexport { webchartBrand } from './webchart';\n\n// All brands for iteration\nexport const brands = {\n bluehive: () => import('./bluehive').then((m) => m.bluehiveBrand),\n ccme: () => import('./ccme').then((m) => m.ccmeBrand),\n default: () => import('./default').then((m) => m.defaultBrand),\n 'enterprise-health': () =>\n import('./enterprise-health').then((m) => m.enterpriseHealthBrand),\n mieweb: () => import('./mieweb').then((m) => m.miewebBrand),\n ozwell: () => import('./ozwell').then((m) => m.ozwellBrand),\n waggleline: () => import('./waggleline').then((m) => m.wagglelineBrand),\n webchart: () => import('./webchart').then((m) => m.webchartBrand),\n} as const;\n"]}
|
|
@@ -126,5 +126,5 @@ function useIsMobileOrTablet() {
|
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
export { RTL_LOCALES, isRtlLocale, useCommandK, useDirection, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useMediaQuery };
|
|
129
|
-
//# sourceMappingURL=chunk-
|
|
130
|
-
//# sourceMappingURL=chunk-
|
|
129
|
+
//# sourceMappingURL=chunk-JHULS3EC.js.map
|
|
130
|
+
//# sourceMappingURL=chunk-JHULS3EC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useDirection.ts","../src/hooks/useKeyboardShortcut.ts","../src/hooks/useMediaQuery.ts"],"names":["useEffect","useState"],"mappings":"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","file":"chunk-24SEAAOH.js","sourcesContent":["import { useState, useEffect } from 'react';\nimport type { RefObject } from 'react';\n\nexport type Direction = 'ltr' | 'rtl';\n\n/** Locales whose primary script reads right-to-left. */\nexport const RTL_LOCALES = ['ar', 'he', 'fa', 'ur'] as const;\n\n/**\n * Returns true when the given locale (e.g. `ar`, `ar-SA`, `he_IL`) uses a\n * right-to-left script.\n */\nexport function isRtlLocale(locale: string): boolean {\n const lang = locale.toLowerCase().split(/[-_]/)[0];\n return (RTL_LOCALES as readonly string[]).includes(lang);\n}\n\nfunction resolveDirection(element?: HTMLElement | null): Direction {\n if (typeof document === 'undefined') return 'ltr';\n const target = element ?? document.documentElement;\n return getComputedStyle(target).direction === 'rtl' ? 'rtl' : 'ltr';\n}\n\n/**\n * Hook returning the effective text direction (`ltr` | `rtl`) inherited from\n * the nearest `dir` attribute — zero setup for consumers who set\n * `<html dir=\"rtl\">`.\n *\n * Use for JS-level direction logic that CSS logical properties can't cover:\n * inverting ArrowLeft/ArrowRight keyboard handling, popover/toast placement,\n * drag math, etc.\n *\n * @param elementRef - Optional ref; when provided, direction is resolved from\n * that element (respecting any local `dir` override) instead of `<html>`.\n *\n * @example\n * ```tsx\n * const direction = useDirection();\n * const nextKey = direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight';\n * ```\n */\nexport function useDirection(\n elementRef?: RefObject<HTMLElement | null>\n): Direction {\n const [direction, setDirection] = useState<Direction>(() =>\n resolveDirection(elementRef?.current)\n );\n\n useEffect(() => {\n const update = () => setDirection(resolveDirection(elementRef?.current));\n update();\n // dir changes are rare; observing the whole tree for just this attribute is cheap.\n const observer = new MutationObserver(update);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['dir'],\n subtree: true,\n });\n return () => observer.disconnect();\n }, [elementRef]);\n\n // Re-sync when a re-render points elementRef.current at a different node:\n // the MutationObserver only fires on `dir` attribute mutations, so a swapped\n // ref target with a different inherited direction would otherwise go stale.\n const currentElement = elementRef?.current ?? null;\n useEffect(() => {\n setDirection(resolveDirection(currentElement));\n }, [currentElement]);\n\n return direction;\n}\n","import { useEffect, useCallback } from 'react';\n\n/**\n * Options for keyboard shortcut hook\n */\nexport interface KeyboardShortcutOptions {\n /** Whether the shortcut is currently enabled (default: true) */\n enabled?: boolean;\n /** Modifier keys required (default: none) */\n modifiers?: {\n ctrl?: boolean;\n shift?: boolean;\n alt?: boolean;\n meta?: boolean;\n };\n /** Whether to prevent default browser behavior (default: true) */\n preventDefault?: boolean;\n /** Whether to stop event propagation (default: false) */\n stopPropagation?: boolean;\n /** Element types to ignore when the shortcut is pressed (default: ['INPUT', 'TEXTAREA', 'SELECT']) */\n ignoreInputs?: boolean;\n}\n\n/**\n * Hook that triggers a callback when a specific keyboard shortcut is pressed.\n * Supports modifier keys (Ctrl, Shift, Alt, Meta) and ignores input fields by default.\n *\n * @param key - The key to listen for (e.g., 'k', 'Enter', 'Escape', '/')\n * @param callback - Function to call when the shortcut is pressed\n * @param options - Configuration options\n *\n * @example\n * ```tsx\n * // Cmd/Ctrl+K to open search\n * useKeyboardShortcut('k', openSearch, { modifiers: { meta: true, ctrl: true } });\n *\n * // Forward slash to focus search (ignoring when typing)\n * useKeyboardShortcut('/', focusSearch);\n *\n * // Escape to close modal\n * useKeyboardShortcut('Escape', closeModal);\n * ```\n */\nexport function useKeyboardShortcut(\n key: string,\n callback: (event: KeyboardEvent) => void,\n options: KeyboardShortcutOptions = {}\n): void {\n const {\n enabled = true,\n modifiers = {},\n preventDefault = true,\n stopPropagation = false,\n ignoreInputs = true,\n } = options;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n // Check if we should ignore input fields\n if (ignoreInputs) {\n const target = event.target as HTMLElement;\n const tagName = target.tagName.toUpperCase();\n if (\n tagName === 'INPUT' ||\n tagName === 'TEXTAREA' ||\n tagName === 'SELECT' ||\n target.isContentEditable\n ) {\n return;\n }\n }\n\n // Check modifiers\n const { ctrl, shift, alt, meta } = modifiers;\n\n // For Cmd+K style shortcuts, allow either meta (Mac) or ctrl (Windows/Linux)\n const metaOrCtrl = meta || ctrl;\n if (metaOrCtrl) {\n if (!(event.metaKey || event.ctrlKey)) return;\n } else {\n // If no meta/ctrl modifier specified, ensure neither is pressed\n if (event.metaKey || event.ctrlKey) return;\n }\n\n if (shift && !event.shiftKey) return;\n if (alt && !event.altKey) return;\n\n // Check key match (case-insensitive for letters)\n const eventKey =\n event.key.length === 1 ? event.key.toLowerCase() : event.key;\n const targetKey = key.length === 1 ? key.toLowerCase() : key;\n if (eventKey !== targetKey) return;\n\n if (preventDefault) {\n event.preventDefault();\n }\n if (stopPropagation) {\n event.stopPropagation();\n }\n\n callback(event);\n },\n [key, callback, modifiers, preventDefault, stopPropagation, ignoreInputs]\n );\n\n useEffect(() => {\n if (!enabled) return;\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [handleKeyDown, enabled]);\n}\n\n/**\n * Hook for the common Cmd/Ctrl+K shortcut pattern (command palette, search, etc.)\n *\n * @param callback - Function to call when Cmd/Ctrl+K is pressed\n * @param enabled - Whether the shortcut is active (default: true)\n *\n * @example\n * ```tsx\n * useCommandK(() => setIsOpen(true));\n * ```\n */\nexport function useCommandK(callback: () => void, enabled = true): void {\n useKeyboardShortcut('k', callback, {\n enabled,\n modifiers: { meta: true, ctrl: true },\n ignoreInputs: false, // Cmd+K should work even in inputs\n });\n}\n","import { useState, useEffect } from 'react';\n\n/**\n * Hook that tracks whether a media query matches.\n * Uses the native `matchMedia` API for efficient media query tracking.\n *\n * @param query - CSS media query string (e.g., '(min-width: 768px)')\n * @returns Boolean indicating whether the media query matches\n *\n * @example\n * ```tsx\n * function ResponsiveComponent() {\n * const isMobile = useMediaQuery('(max-width: 767px)');\n * const isTablet = useMediaQuery('(min-width: 768px) and (max-width: 1023px)');\n * const isDesktop = useMediaQuery('(min-width: 1024px)');\n *\n * return (\n * <div>\n * {isMobile && <MobileLayout />}\n * {isTablet && <TabletLayout />}\n * {isDesktop && <DesktopLayout />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useMediaQuery(query: string): boolean {\n // Initialize with null to indicate SSR/initial state\n const [matches, setMatches] = useState<boolean>(() => {\n // Check if we're in a browser environment\n if (typeof window === 'undefined') return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia(query);\n\n // Set initial value\n setMatches(mediaQuery.matches);\n\n // Handler for media query changes\n const handler = (event: MediaQueryListEvent) => {\n setMatches(event.matches);\n };\n\n // Modern browsers use addEventListener\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handler);\n return () => mediaQuery.removeEventListener('change', handler);\n }\n\n // Fallback for older browsers\n mediaQuery.addListener(handler);\n return () => mediaQuery.removeListener(handler);\n }, [query]);\n\n return matches;\n}\n\n/**\n * Preset breakpoint hooks following common responsive design patterns\n */\n\n/** Returns true when viewport is smaller than 640px (mobile) */\nexport function useIsMobile(): boolean {\n return useMediaQuery('(max-width: 639px)');\n}\n\n/** Returns true when viewport is 640px-767px (large mobile / small tablet) */\nexport function useIsSmallTablet(): boolean {\n return useMediaQuery('(min-width: 640px) and (max-width: 767px)');\n}\n\n/** Returns true when viewport is 768px-1023px (tablet) */\nexport function useIsTablet(): boolean {\n return useMediaQuery('(min-width: 768px) and (max-width: 1023px)');\n}\n\n/** Returns true when viewport is 1024px or larger (desktop) */\nexport function useIsDesktop(): boolean {\n return useMediaQuery('(min-width: 1024px)');\n}\n\n/** Returns true when viewport is 1280px or larger (large desktop) */\nexport function useIsLargeDesktop(): boolean {\n return useMediaQuery('(min-width: 1280px)');\n}\n\n/** Returns true when viewport is smaller than 1024px (mobile/tablet) */\nexport function useIsMobileOrTablet(): boolean {\n return useMediaQuery('(max-width: 1023px)');\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useDirection.ts","../src/hooks/useKeyboardShortcut.ts","../src/hooks/useMediaQuery.ts"],"names":["useEffect","useState"],"mappings":"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","file":"chunk-JHULS3EC.js","sourcesContent":["import { useState, useEffect } from 'react';\nimport type { RefObject } from 'react';\n\nexport type Direction = 'ltr' | 'rtl';\n\n/** Locales whose primary script reads right-to-left. */\nexport const RTL_LOCALES = ['ar', 'he', 'fa', 'ur'] as const;\n\n/**\n * Returns true when the given locale (e.g. `ar`, `ar-SA`, `he_IL`) uses a\n * right-to-left script.\n */\nexport function isRtlLocale(locale: string): boolean {\n const lang = locale.toLowerCase().split(/[-_]/)[0];\n return (RTL_LOCALES as readonly string[]).includes(lang);\n}\n\nfunction resolveDirection(element?: HTMLElement | null): Direction {\n if (typeof document === 'undefined') return 'ltr';\n const target = element ?? document.documentElement;\n return getComputedStyle(target).direction === 'rtl' ? 'rtl' : 'ltr';\n}\n\n/**\n * Hook returning the effective text direction (`ltr` | `rtl`) inherited from\n * the nearest `dir` attribute — zero setup for consumers who set\n * `<html dir=\"rtl\">`.\n *\n * Use for JS-level direction logic that CSS logical properties can't cover:\n * inverting ArrowLeft/ArrowRight keyboard handling, popover/toast placement,\n * drag math, etc.\n *\n * @param elementRef - Optional ref; when provided, direction is resolved from\n * that element (respecting any local `dir` override) instead of `<html>`.\n *\n * @example\n * ```tsx\n * const direction = useDirection();\n * const nextKey = direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight';\n * ```\n */\nexport function useDirection(\n elementRef?: RefObject<HTMLElement | null>\n): Direction {\n const [direction, setDirection] = useState<Direction>(() =>\n resolveDirection(elementRef?.current)\n );\n\n useEffect(() => {\n const update = () => setDirection(resolveDirection(elementRef?.current));\n update();\n // dir changes are rare; observing the whole tree for just this attribute is cheap.\n const observer = new MutationObserver(update);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['dir'],\n subtree: true,\n });\n return () => observer.disconnect();\n }, [elementRef]);\n\n // Re-sync when a re-render points elementRef.current at a different node:\n // the MutationObserver only fires on `dir` attribute mutations, so a swapped\n // ref target with a different inherited direction would otherwise go stale.\n const currentElement = elementRef?.current ?? null;\n useEffect(() => {\n setDirection(resolveDirection(currentElement));\n }, [currentElement]);\n\n return direction;\n}\n","import { useEffect, useCallback } from 'react';\n\n/**\n * Options for keyboard shortcut hook\n */\nexport interface KeyboardShortcutOptions {\n /** Whether the shortcut is currently enabled (default: true) */\n enabled?: boolean;\n /** Modifier keys required (default: none) */\n modifiers?: {\n ctrl?: boolean;\n shift?: boolean;\n alt?: boolean;\n meta?: boolean;\n };\n /** Whether to prevent default browser behavior (default: true) */\n preventDefault?: boolean;\n /** Whether to stop event propagation (default: false) */\n stopPropagation?: boolean;\n /** Element types to ignore when the shortcut is pressed (default: ['INPUT', 'TEXTAREA', 'SELECT']) */\n ignoreInputs?: boolean;\n}\n\n/**\n * Hook that triggers a callback when a specific keyboard shortcut is pressed.\n * Supports modifier keys (Ctrl, Shift, Alt, Meta) and ignores input fields by default.\n *\n * @param key - The key to listen for (e.g., 'k', 'Enter', 'Escape', '/')\n * @param callback - Function to call when the shortcut is pressed\n * @param options - Configuration options\n *\n * @example\n * ```tsx\n * // Cmd/Ctrl+K to open search\n * useKeyboardShortcut('k', openSearch, { modifiers: { meta: true, ctrl: true } });\n *\n * // Forward slash to focus search (ignoring when typing)\n * useKeyboardShortcut('/', focusSearch);\n *\n * // Escape to close modal\n * useKeyboardShortcut('Escape', closeModal);\n * ```\n */\nexport function useKeyboardShortcut(\n key: string,\n callback: (event: KeyboardEvent) => void,\n options: KeyboardShortcutOptions = {}\n): void {\n const {\n enabled = true,\n modifiers = {},\n preventDefault = true,\n stopPropagation = false,\n ignoreInputs = true,\n } = options;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n // Check if we should ignore input fields\n if (ignoreInputs) {\n const target = event.target as HTMLElement;\n const tagName = target.tagName.toUpperCase();\n if (\n tagName === 'INPUT' ||\n tagName === 'TEXTAREA' ||\n tagName === 'SELECT' ||\n target.isContentEditable\n ) {\n return;\n }\n }\n\n // Check modifiers\n const { ctrl, shift, alt, meta } = modifiers;\n\n // For Cmd+K style shortcuts, allow either meta (Mac) or ctrl (Windows/Linux)\n const metaOrCtrl = meta || ctrl;\n if (metaOrCtrl) {\n if (!(event.metaKey || event.ctrlKey)) return;\n } else {\n // If no meta/ctrl modifier specified, ensure neither is pressed\n if (event.metaKey || event.ctrlKey) return;\n }\n\n if (shift && !event.shiftKey) return;\n if (alt && !event.altKey) return;\n\n // Check key match (case-insensitive for letters)\n const eventKey =\n event.key.length === 1 ? event.key.toLowerCase() : event.key;\n const targetKey = key.length === 1 ? key.toLowerCase() : key;\n if (eventKey !== targetKey) return;\n\n if (preventDefault) {\n event.preventDefault();\n }\n if (stopPropagation) {\n event.stopPropagation();\n }\n\n callback(event);\n },\n [key, callback, modifiers, preventDefault, stopPropagation, ignoreInputs]\n );\n\n useEffect(() => {\n if (!enabled) return;\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [handleKeyDown, enabled]);\n}\n\n/**\n * Hook for the common Cmd/Ctrl+K shortcut pattern (command palette, search, etc.)\n *\n * @param callback - Function to call when Cmd/Ctrl+K is pressed\n * @param enabled - Whether the shortcut is active (default: true)\n *\n * @example\n * ```tsx\n * useCommandK(() => setIsOpen(true));\n * ```\n */\nexport function useCommandK(callback: () => void, enabled = true): void {\n useKeyboardShortcut('k', callback, {\n enabled,\n modifiers: { meta: true, ctrl: true },\n ignoreInputs: false, // Cmd+K should work even in inputs\n });\n}\n","import { useState, useEffect } from 'react';\n\n/**\n * Hook that tracks whether a media query matches.\n * Uses the native `matchMedia` API for efficient media query tracking.\n *\n * @param query - CSS media query string (e.g., '(min-width: 768px)')\n * @returns Boolean indicating whether the media query matches\n *\n * @example\n * ```tsx\n * function ResponsiveComponent() {\n * const isMobile = useMediaQuery('(max-width: 767px)');\n * const isTablet = useMediaQuery('(min-width: 768px) and (max-width: 1023px)');\n * const isDesktop = useMediaQuery('(min-width: 1024px)');\n *\n * return (\n * <div>\n * {isMobile && <MobileLayout />}\n * {isTablet && <TabletLayout />}\n * {isDesktop && <DesktopLayout />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useMediaQuery(query: string): boolean {\n // Initialize with null to indicate SSR/initial state\n const [matches, setMatches] = useState<boolean>(() => {\n // Check if we're in a browser environment\n if (typeof window === 'undefined') return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia(query);\n\n // Set initial value\n setMatches(mediaQuery.matches);\n\n // Handler for media query changes\n const handler = (event: MediaQueryListEvent) => {\n setMatches(event.matches);\n };\n\n // Modern browsers use addEventListener\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handler);\n return () => mediaQuery.removeEventListener('change', handler);\n }\n\n // Fallback for older browsers\n mediaQuery.addListener(handler);\n return () => mediaQuery.removeListener(handler);\n }, [query]);\n\n return matches;\n}\n\n/**\n * Preset breakpoint hooks following common responsive design patterns\n */\n\n/** Returns true when viewport is smaller than 640px (mobile) */\nexport function useIsMobile(): boolean {\n return useMediaQuery('(max-width: 639px)');\n}\n\n/** Returns true when viewport is 640px-767px (large mobile / small tablet) */\nexport function useIsSmallTablet(): boolean {\n return useMediaQuery('(min-width: 640px) and (max-width: 767px)');\n}\n\n/** Returns true when viewport is 768px-1023px (tablet) */\nexport function useIsTablet(): boolean {\n return useMediaQuery('(min-width: 768px) and (max-width: 1023px)');\n}\n\n/** Returns true when viewport is 1024px or larger (desktop) */\nexport function useIsDesktop(): boolean {\n return useMediaQuery('(min-width: 1024px)');\n}\n\n/** Returns true when viewport is 1280px or larger (large desktop) */\nexport function useIsLargeDesktop(): boolean {\n return useMediaQuery('(min-width: 1280px)');\n}\n\n/** Returns true when viewport is smaller than 1024px (mobile/tablet) */\nexport function useIsMobileOrTablet(): boolean {\n return useMediaQuery('(max-width: 1023px)');\n}\n"]}
|
|
@@ -850,6 +850,11 @@ var miewebUISafelist = [
|
|
|
850
850
|
// makes SVGs block-level, which would stack them above the label text)
|
|
851
851
|
"[&_svg]:inline-block",
|
|
852
852
|
"[&_svg]:align-middle",
|
|
853
|
+
// Button `effect` variants (sheen/orbit) lift the button on hover; the
|
|
854
|
+
// mie-fx-* classes themselves are plain CSS in styles/effects.css.
|
|
855
|
+
"hover:-translate-y-0.5",
|
|
856
|
+
// VideoCard hover-preview progress bar rounds its leading-fill edge.
|
|
857
|
+
"rounded-e-full",
|
|
853
858
|
"hover:text-white",
|
|
854
859
|
"h-0.5",
|
|
855
860
|
"transition-[left,width]",
|
|
@@ -1030,7 +1035,176 @@ var miewebUISafelist = [
|
|
|
1030
1035
|
"md:px-0",
|
|
1031
1036
|
"md:pe-0.5",
|
|
1032
1037
|
"md:ps-0.5",
|
|
1033
|
-
"md:gap-0.5"
|
|
1038
|
+
"md:gap-0.5",
|
|
1039
|
+
// EH frontdoor ports (ui#420) — arbitrary values, opacity modifiers, and
|
|
1040
|
+
// variants emitted by MegaMenu / VideoCard / YearTimeline / SliderCalculator /
|
|
1041
|
+
// OrbitRing / RadialExplorer / Globe that TW3 consumers can't generate.
|
|
1042
|
+
// Shared positioning & typography
|
|
1043
|
+
"-translate-x-1/2",
|
|
1044
|
+
"-translate-y-1/2",
|
|
1045
|
+
"left-1/2",
|
|
1046
|
+
"top-1/2",
|
|
1047
|
+
"tabular-nums",
|
|
1048
|
+
"aspect-square",
|
|
1049
|
+
"aspect-video",
|
|
1050
|
+
"backdrop-blur-md",
|
|
1051
|
+
// SiteHeader mobile drawer — static group labels reuse the link style
|
|
1052
|
+
"hover:bg-transparent",
|
|
1053
|
+
// MegaMenu — panel layout, feature column gradient, link states
|
|
1054
|
+
"[&_svg]:h-4",
|
|
1055
|
+
"[&_svg]:h-5",
|
|
1056
|
+
"[&_svg]:h-7",
|
|
1057
|
+
"[&_svg]:w-4",
|
|
1058
|
+
"[&_svg]:w-5",
|
|
1059
|
+
"[&_svg]:w-7",
|
|
1060
|
+
"[background:linear-gradient(160deg,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-700))_70%,#000)_0%,var(--mieweb-primary-950)_100%)]",
|
|
1061
|
+
"grid-cols-[1fr_280px]",
|
|
1062
|
+
"w-[min(600px,calc(100vw-2rem))]",
|
|
1063
|
+
"w-[min(880px,calc(100vw-2rem))]",
|
|
1064
|
+
"transition-[opacity,transform]",
|
|
1065
|
+
"motion-safe:animate-[mie-fade-in_0.2s_ease-out]",
|
|
1066
|
+
"bg-white/10",
|
|
1067
|
+
"border-white/40",
|
|
1068
|
+
"text-foreground/70",
|
|
1069
|
+
"text-foreground/80",
|
|
1070
|
+
"text-white/80",
|
|
1071
|
+
"text-white/90",
|
|
1072
|
+
"hover:bg-primary-500/10",
|
|
1073
|
+
"hover:bg-primary-900",
|
|
1074
|
+
"hover:border-primary-500",
|
|
1075
|
+
"hover:border-white",
|
|
1076
|
+
"group-hover:bg-primary-800",
|
|
1077
|
+
"group-hover:text-primary-800",
|
|
1078
|
+
"group-hover:text-white",
|
|
1079
|
+
"dark:group-hover:text-primary-200",
|
|
1080
|
+
"focus-visible:bg-primary-500/10",
|
|
1081
|
+
// VideoCard — hover-preview conic progress ring and play button
|
|
1082
|
+
"[-webkit-mask:radial-gradient(farthest-side,transparent_calc(100%-4px),#000_calc(100%-4px))]",
|
|
1083
|
+
"[mask:radial-gradient(farthest-side,transparent_calc(100%-4px),#000_calc(100%-4px))]",
|
|
1084
|
+
"[background:conic-gradient(from_0deg,transparent_0deg,var(--mieweb-primary-500)_90deg,var(--mieweb-primary-300)_240deg,var(--mieweb-primary-200)_320deg,transparent_360deg)]",
|
|
1085
|
+
"drop-shadow-[0_0_5px_color-mix(in_srgb,var(--mieweb-primary-400)_60%,transparent)]",
|
|
1086
|
+
"bg-white/90",
|
|
1087
|
+
"group-hover:opacity-100",
|
|
1088
|
+
"group-hover:scale-110",
|
|
1089
|
+
"group-focus-visible:opacity-100",
|
|
1090
|
+
"motion-safe:animate-[mie-spin_1.4s_linear_infinite]",
|
|
1091
|
+
// YearTimeline — spine gradient, markers, responsive label rail
|
|
1092
|
+
"grid-cols-12",
|
|
1093
|
+
"md:grid",
|
|
1094
|
+
"md:grid-cols-[var(--yt-label)_1fr]",
|
|
1095
|
+
"md:block",
|
|
1096
|
+
"md:inline",
|
|
1097
|
+
"md:pb-4",
|
|
1098
|
+
"md:py-3.5",
|
|
1099
|
+
"md:h-[22px]",
|
|
1100
|
+
"md:border-border/60",
|
|
1101
|
+
"before:absolute",
|
|
1102
|
+
'before:content-[""]',
|
|
1103
|
+
"before:inset-x-0",
|
|
1104
|
+
"before:top-0",
|
|
1105
|
+
"before:left-1/2",
|
|
1106
|
+
"before:-translate-x-1/2",
|
|
1107
|
+
"before:h-1",
|
|
1108
|
+
"before:h-2.5",
|
|
1109
|
+
"before:w-2.5",
|
|
1110
|
+
"before:rounded-full",
|
|
1111
|
+
"before:bg-primary-700",
|
|
1112
|
+
"before:z-[4]",
|
|
1113
|
+
"before:[background:linear-gradient(90deg,var(--mieweb-accent,var(--mieweb-primary-400))_0%,var(--mieweb-primary-500)_50%,var(--mieweb-success)_80%,var(--mieweb-accent,var(--mieweb-primary-400))_100%)]",
|
|
1114
|
+
"[background:linear-gradient(180deg,var(--mieweb-primary-700),color-mix(in_srgb,var(--mieweb-primary-700)_15%,transparent))]",
|
|
1115
|
+
"[&_svg]:h-3.5",
|
|
1116
|
+
"[&_svg]:w-3.5",
|
|
1117
|
+
"[text-shadow:0_1px_1px_rgba(0,0,0,0.3)]",
|
|
1118
|
+
"bg-muted/30",
|
|
1119
|
+
"border-border/60",
|
|
1120
|
+
"hover:bg-muted/40",
|
|
1121
|
+
"text-[9px]",
|
|
1122
|
+
"tracking-[0.08em]",
|
|
1123
|
+
"tracking-[0.09em]",
|
|
1124
|
+
"tracking-[0.11em]",
|
|
1125
|
+
"tracking-[0.12em]",
|
|
1126
|
+
"z-[1]",
|
|
1127
|
+
"z-[3]",
|
|
1128
|
+
"z-[5]",
|
|
1129
|
+
// SliderCalculator — dark panel gradients and glassy rows
|
|
1130
|
+
"[background:linear-gradient(90deg,var(--mieweb-accent,var(--mieweb-primary-300)),var(--mieweb-primary-300))]",
|
|
1131
|
+
"[background:radial-gradient(120%_120%_at_100%_0%,var(--mieweb-primary-800),var(--mieweb-primary-950)_70%)]",
|
|
1132
|
+
"lg:grid-cols-[1.1fr_1fr]",
|
|
1133
|
+
"sm:p-8",
|
|
1134
|
+
"sm:text-3xl",
|
|
1135
|
+
"sm:text-6xl",
|
|
1136
|
+
"bg-white/5",
|
|
1137
|
+
"border-white/10",
|
|
1138
|
+
"border-white/15",
|
|
1139
|
+
"text-white/60",
|
|
1140
|
+
"text-white/75",
|
|
1141
|
+
"last:border-0",
|
|
1142
|
+
// OrbitRing — attract-loop rotation, pause-on-hover, glow ring
|
|
1143
|
+
"group/orbit",
|
|
1144
|
+
"group/sat",
|
|
1145
|
+
"[container-type:size]",
|
|
1146
|
+
"motion-safe:animate-[mie-spin_var(--dur)_linear_infinite]",
|
|
1147
|
+
"group-hover/orbit:[animation-play-state:paused]",
|
|
1148
|
+
"group-focus-within/orbit:[animation-play-state:paused]",
|
|
1149
|
+
"[background:radial-gradient(circle_at_50%_38%,#fff_0%,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-200))_14%,#fff)_52%,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-200))_30%,#fff)_100%)]",
|
|
1150
|
+
"[background:radial-gradient(closest-side,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-300))_30%,transparent)_0%,color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-300))_12%,transparent)_42%,transparent_78%)]",
|
|
1151
|
+
"shadow-[0_0_0_1px_color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-400))_35%,transparent),0_10px_30px_rgba(0,0,0,0.18),0_0_46px_color-mix(in_srgb,var(--mieweb-accent,var(--mieweb-primary-400))_42%,transparent)]",
|
|
1152
|
+
"dark:border-primary-800",
|
|
1153
|
+
// RadialExplorer — dot navigation and reveal animation
|
|
1154
|
+
"motion-safe:animate-[mie-fade-in_0.25s_ease-out]",
|
|
1155
|
+
"text-[15px]",
|
|
1156
|
+
"tracking-[0.14em]",
|
|
1157
|
+
// Globe — HTML overlay chrome (TW3 consumers using the /globe entry)
|
|
1158
|
+
"bg-[var(--mieweb-accent,#ffe7b0)]",
|
|
1159
|
+
"shadow-[0_0_8px_var(--mieweb-accent,#ffe7b0)]",
|
|
1160
|
+
"bg-neutral-950/70",
|
|
1161
|
+
"max-w-[min(90%,360px)]",
|
|
1162
|
+
"motion-safe:animate-[mie-fade-in_0.28s_ease]",
|
|
1163
|
+
// RadialExplorer / VideoCard / SliderCalculator stragglers
|
|
1164
|
+
"tracking-[0.18em]",
|
|
1165
|
+
"tracking-tight",
|
|
1166
|
+
"start-1/2",
|
|
1167
|
+
"w-[calc(var(--re-r)*2+120px)]",
|
|
1168
|
+
"bg-[linear-gradient(90deg,var(--mieweb-primary-500),var(--mieweb-primary-300))]",
|
|
1169
|
+
"bg-black/55",
|
|
1170
|
+
"bg-black/60",
|
|
1171
|
+
"group-hover:text-primary-700",
|
|
1172
|
+
"dark:group-hover:text-primary-300",
|
|
1173
|
+
// SiteHeader — menus/MegaMenuBar row and mobile drawer (touched in ui#420)
|
|
1174
|
+
"bg-black/50",
|
|
1175
|
+
"bg-white/20",
|
|
1176
|
+
"bg-white/80",
|
|
1177
|
+
"border-white/30",
|
|
1178
|
+
"hover:bg-white/90",
|
|
1179
|
+
"hover:bg-gray-100",
|
|
1180
|
+
"hover:bg-red-50",
|
|
1181
|
+
"hover:text-gray-700",
|
|
1182
|
+
"hover:text-gray-900",
|
|
1183
|
+
"max-h-[calc(100dvh-10rem)]",
|
|
1184
|
+
"md:flex",
|
|
1185
|
+
"sm:block",
|
|
1186
|
+
"dark:border-b",
|
|
1187
|
+
"dark:bg-gray-800",
|
|
1188
|
+
"dark:bg-gray-900",
|
|
1189
|
+
"dark:bg-gray-900/80",
|
|
1190
|
+
"dark:bg-primary-900/30",
|
|
1191
|
+
"dark:border-gray-600",
|
|
1192
|
+
"dark:border-gray-700",
|
|
1193
|
+
"dark:border-gray-800",
|
|
1194
|
+
"dark:hover:bg-gray-700",
|
|
1195
|
+
"dark:hover:bg-gray-800",
|
|
1196
|
+
"dark:hover:bg-red-900/20",
|
|
1197
|
+
"dark:hover:text-gray-200",
|
|
1198
|
+
"dark:hover:text-white",
|
|
1199
|
+
"dark:text-gray-300",
|
|
1200
|
+
"dark:text-red-400",
|
|
1201
|
+
"dark:text-white",
|
|
1202
|
+
// Badge usages added in ui#420 (VideoCard duration pill, RadialExplorer tag)
|
|
1203
|
+
"dark:bg-black/60",
|
|
1204
|
+
"bg-primary-100",
|
|
1205
|
+
"text-primary-900",
|
|
1206
|
+
"dark:bg-primary-900",
|
|
1207
|
+
"dark:text-primary-100"
|
|
1034
1208
|
];
|
|
1035
1209
|
var miewebUIPreset = {
|
|
1036
1210
|
darkMode: ["class", '[data-theme="dark"]'],
|
|
@@ -1257,5 +1431,5 @@ var miewebUIPreset = {
|
|
|
1257
1431
|
var tailwind_preset_default = miewebUIPreset;
|
|
1258
1432
|
|
|
1259
1433
|
export { miewebUIPreset, miewebUISafelist, tailwind_preset_default };
|
|
1260
|
-
//# sourceMappingURL=chunk-
|
|
1261
|
-
//# sourceMappingURL=chunk-
|
|
1434
|
+
//# sourceMappingURL=chunk-JI244Y7C.js.map
|
|
1435
|
+
//# sourceMappingURL=chunk-JI244Y7C.js.map
|