@mieweb/ui 0.10.0-dev.1 → 0.10.0-dev.10
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/agent/mieweb-ui.instructions.md +13 -1
- 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 +20 -20
- 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-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-3YBS4WUQ.js +52 -0
- package/dist/chunk-3YBS4WUQ.js.map +1 -0
- package/dist/chunk-462XSCP3.cjs +199 -0
- package/dist/chunk-462XSCP3.cjs.map +1 -0
- package/dist/{chunk-X5YM3KXY.js → chunk-4A3W4TQF.js} +201 -4
- package/dist/chunk-4A3W4TQF.js.map +1 -0
- package/dist/chunk-4IS3QCOQ.cjs +453 -0
- package/dist/chunk-4IS3QCOQ.cjs.map +1 -0
- package/dist/chunk-4NCDU5IG.cjs +56 -0
- package/dist/chunk-4NCDU5IG.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-76TBQDED.js +166 -0
- package/dist/chunk-76TBQDED.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-QO6PRHDX.cjs → chunk-AR7AKDM2.cjs} +2 -2
- package/dist/{chunk-QO6PRHDX.cjs.map → chunk-AR7AKDM2.cjs.map} +1 -1
- package/dist/{chunk-PY7XAG4D.cjs → chunk-ASSDGS4F.cjs} +201 -4
- package/dist/chunk-ASSDGS4F.cjs.map +1 -0
- package/dist/{chunk-24SEAAOH.js → chunk-AWJBOND5.js} +2 -2
- package/dist/{chunk-24SEAAOH.js.map → chunk-AWJBOND5.js.map} +1 -1
- package/dist/chunk-BM35CACB.js +148 -0
- package/dist/chunk-BM35CACB.js.map +1 -0
- 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-DZ5HFLRC.js +258 -0
- package/dist/chunk-DZ5HFLRC.js.map +1 -0
- 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-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-G4D6CLBT.js +333 -0
- package/dist/chunk-G4D6CLBT.js.map +1 -0
- 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-IT775BYG.js +179 -0
- package/dist/chunk-IT775BYG.js.map +1 -0
- 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-MM7QKUE3.cjs → chunk-JID7AZTO.cjs} +5 -5
- package/dist/{chunk-MM7QKUE3.cjs.map → chunk-JID7AZTO.cjs.map} +1 -1
- package/dist/{chunk-E3KC2XLN.cjs → chunk-KQUI4BGS.cjs} +51 -51
- package/dist/{chunk-E3KC2XLN.cjs.map → chunk-KQUI4BGS.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-ZX2XRFE5.js → chunk-MNILXWVY.js} +7 -7
- package/dist/{chunk-ZX2XRFE5.js.map → chunk-MNILXWVY.js.map} +1 -1
- package/dist/chunk-MWVW4APN.cjs +260 -0
- package/dist/chunk-MWVW4APN.cjs.map +1 -0
- package/dist/{chunk-WIAQQNFU.cjs → chunk-MYHV2ND3.cjs} +37 -3
- package/dist/chunk-MYHV2ND3.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-OCSCBB52.cjs +188 -0
- package/dist/chunk-OCSCBB52.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-7KWNY3HG.js → chunk-TVTIGV7Q.js} +9 -9
- package/dist/{chunk-7KWNY3HG.js.map → chunk-TVTIGV7Q.js.map} +1 -1
- package/dist/{chunk-22CYDCXA.js → chunk-TZJQB4P2.js} +37 -4
- package/dist/chunk-TZJQB4P2.js.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-URAQIF67.cjs +356 -0
- package/dist/chunk-URAQIF67.cjs.map +1 -0
- 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-VINZZQBD.cjs +323 -0
- package/dist/chunk-VINZZQBD.cjs.map +1 -0
- 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-VPTASZ2O.cjs +171 -0
- package/dist/chunk-VPTASZ2O.cjs.map +1 -0
- 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-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-XDIMTPZU.cjs +202 -0
- package/dist/chunk-XDIMTPZU.cjs.map +1 -0
- 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-XVW5DPPP.js +429 -0
- package/dist/chunk-XVW5DPPP.js.map +1 -0
- package/dist/chunk-XZNN3S3S.cjs +281 -0
- package/dist/chunk-XZNN3S3S.cjs.map +1 -0
- package/dist/chunk-Y4QNLW7W.js +300 -0
- package/dist/chunk-Y4QNLW7W.js.map +1 -0
- 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-AZP3DDBT.cjs → chunk-ZPSJ2UV6.cjs} +8 -8
- package/dist/{chunk-AZP3DDBT.cjs.map → chunk-ZPSJ2UV6.cjs.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/BoardView/index.cjs +24 -0
- package/dist/components/BoardView/index.cjs.map +1 -0
- package/dist/components/BoardView/index.d.cts +42 -0
- package/dist/components/BoardView/index.d.ts +42 -0
- package/dist/components/BoardView/index.js +7 -0
- package/dist/components/BoardView/index.js.map +1 -0
- 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/CalendarView/index.cjs +22 -0
- package/dist/components/CalendarView/index.cjs.map +1 -0
- package/dist/components/CalendarView/index.d.cts +40 -0
- package/dist/components/CalendarView/index.d.ts +40 -0
- package/dist/components/CalendarView/index.js +9 -0
- package/dist/components/CalendarView/index.js.map +1 -0
- 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/GanttView/index.cjs +20 -0
- package/dist/components/GanttView/index.cjs.map +1 -0
- package/dist/components/GanttView/index.d.cts +37 -0
- package/dist/components/GanttView/index.d.ts +37 -0
- package/dist/components/GanttView/index.js +7 -0
- package/dist/components/GanttView/index.js.map +1 -0
- 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/ListView/index.cjs +22 -0
- package/dist/components/ListView/index.cjs.map +1 -0
- package/dist/components/ListView/index.d.cts +37 -0
- package/dist/components/ListView/index.d.ts +37 -0
- package/dist/components/ListView/index.js +9 -0
- package/dist/components/ListView/index.js.map +1 -0
- 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/QuickAction/index.d.cts +1 -1
- package/dist/components/QuickAction/index.d.ts +1 -1
- 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 +454 -279
- package/dist/components/SuperChat/index.cjs.map +1 -1
- package/dist/components/SuperChat/index.js +444 -269
- package/dist/components/SuperChat/index.js.map +1 -1
- 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/ViewSet/index.cjs +23 -0
- package/dist/components/ViewSet/index.cjs.map +1 -0
- package/dist/components/ViewSet/index.d.cts +89 -0
- package/dist/components/ViewSet/index.d.ts +89 -0
- package/dist/components/ViewSet/index.js +14 -0
- package/dist/components/ViewSet/index.js.map +1 -0
- package/dist/components/ViewSwitcher/index.cjs +20 -0
- package/dist/components/ViewSwitcher/index.cjs.map +1 -0
- package/dist/components/ViewSwitcher/index.d.cts +40 -0
- package/dist/components/ViewSwitcher/index.d.ts +40 -0
- package/dist/components/ViewSwitcher/index.js +7 -0
- package/dist/components/ViewSwitcher/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 +38 -24
- package/dist/hooks/index.d.cts +141 -1
- package/dist/hooks/index.d.ts +141 -1
- package/dist/hooks/index.js +6 -4
- package/dist/index.cjs +1510 -1205
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +97 -25
- package/dist/index.d.ts +97 -25
- package/dist/index.js +546 -379
- package/dist/index.js.map +1 -1
- package/dist/kerebron.cjs +58 -19
- package/dist/kerebron.cjs.map +1 -1
- package/dist/kerebron.d.cts +37 -0
- package/dist/kerebron.d.ts +37 -0
- package/dist/kerebron.js +58 -19
- package/dist/kerebron.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/types-CbWXIKbe.d.cts +119 -0
- package/dist/types-CbWXIKbe.d.ts +119 -0
- package/dist/utils/index.cjs +5 -5
- package/dist/utils/index.js +1 -1
- package/package.json +28 -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-22CYDCXA.js.map +0 -1
- 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-WIAQQNFU.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
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
// src/hooks/useStickToBottom.ts
|
|
4
|
+
function pinToBottom(el) {
|
|
5
|
+
el.scrollTop = el.scrollHeight;
|
|
6
|
+
}
|
|
7
|
+
function useStickToBottom({
|
|
8
|
+
threshold = 100,
|
|
9
|
+
disabled = false
|
|
10
|
+
} = {}) {
|
|
11
|
+
const containerRef = React.useRef(null);
|
|
12
|
+
const contentRef = React.useRef(null);
|
|
13
|
+
const [isAtBottom, setIsAtBottom] = React.useState(true);
|
|
14
|
+
const pinnedRef = React.useRef(true);
|
|
15
|
+
const readingRef = React.useRef(false);
|
|
16
|
+
const anchorTargetRef = React.useRef(null);
|
|
17
|
+
const anchorDistanceRef = React.useRef(Infinity);
|
|
18
|
+
const [containerEl, setContainerEl] = React.useState(
|
|
19
|
+
null
|
|
20
|
+
);
|
|
21
|
+
const [contentEl, setContentEl] = React.useState(null);
|
|
22
|
+
React.useEffect(() => {
|
|
23
|
+
if (containerRef.current !== containerEl)
|
|
24
|
+
setContainerEl(containerRef.current);
|
|
25
|
+
if (contentRef.current !== contentEl) setContentEl(contentRef.current);
|
|
26
|
+
});
|
|
27
|
+
React.useEffect(() => {
|
|
28
|
+
if (disabled) return;
|
|
29
|
+
const el = containerEl;
|
|
30
|
+
if (!el) return;
|
|
31
|
+
const handleScroll = () => {
|
|
32
|
+
const anchorTarget = anchorTargetRef.current;
|
|
33
|
+
if (anchorTarget != null) {
|
|
34
|
+
const distance = Math.abs(el.scrollTop - anchorTarget);
|
|
35
|
+
if (distance < 2) {
|
|
36
|
+
anchorTargetRef.current = null;
|
|
37
|
+
} else if (distance > anchorDistanceRef.current + 1) {
|
|
38
|
+
anchorTargetRef.current = null;
|
|
39
|
+
} else {
|
|
40
|
+
anchorDistanceRef.current = distance;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight <= threshold;
|
|
45
|
+
if (!atBottom) readingRef.current = false;
|
|
46
|
+
pinnedRef.current = atBottom && !readingRef.current;
|
|
47
|
+
setIsAtBottom(atBottom);
|
|
48
|
+
};
|
|
49
|
+
if (pinnedRef.current) pinToBottom(el);
|
|
50
|
+
handleScroll();
|
|
51
|
+
el.addEventListener("scroll", handleScroll, { passive: true });
|
|
52
|
+
return () => el.removeEventListener("scroll", handleScroll);
|
|
53
|
+
}, [containerEl, threshold, disabled]);
|
|
54
|
+
React.useEffect(() => {
|
|
55
|
+
if (disabled) return;
|
|
56
|
+
const el = containerEl;
|
|
57
|
+
if (!el || typeof globalThis.ResizeObserver === "undefined") return;
|
|
58
|
+
const observer = new globalThis.ResizeObserver(() => {
|
|
59
|
+
if (pinnedRef.current) {
|
|
60
|
+
pinToBottom(el);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (anchorTargetRef.current != null) return;
|
|
64
|
+
const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight <= threshold;
|
|
65
|
+
if (!atBottom) readingRef.current = false;
|
|
66
|
+
setIsAtBottom(atBottom);
|
|
67
|
+
});
|
|
68
|
+
observer.observe(el);
|
|
69
|
+
if (contentEl) observer.observe(contentEl);
|
|
70
|
+
return () => observer.disconnect();
|
|
71
|
+
}, [containerEl, contentEl, threshold, disabled]);
|
|
72
|
+
const scrollToBottom = React.useCallback(
|
|
73
|
+
(behavior = "auto") => {
|
|
74
|
+
const el = containerRef.current;
|
|
75
|
+
if (!el) return;
|
|
76
|
+
readingRef.current = false;
|
|
77
|
+
anchorTargetRef.current = null;
|
|
78
|
+
pinnedRef.current = true;
|
|
79
|
+
setIsAtBottom(true);
|
|
80
|
+
if (typeof el.scrollTo === "function") {
|
|
81
|
+
el.scrollTo({ top: el.scrollHeight, behavior });
|
|
82
|
+
} else {
|
|
83
|
+
pinToBottom(el);
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
[]
|
|
87
|
+
);
|
|
88
|
+
const anchorToTurnStart = React.useCallback(
|
|
89
|
+
(target, behavior = "auto") => {
|
|
90
|
+
const el = containerRef.current;
|
|
91
|
+
if (!el) return;
|
|
92
|
+
readingRef.current = true;
|
|
93
|
+
pinnedRef.current = false;
|
|
94
|
+
const top = Math.min(
|
|
95
|
+
target.getBoundingClientRect().top - el.getBoundingClientRect().top + el.scrollTop,
|
|
96
|
+
el.scrollHeight - el.clientHeight
|
|
97
|
+
);
|
|
98
|
+
if (Math.abs(el.scrollTop - top) < 2) return;
|
|
99
|
+
anchorTargetRef.current = top;
|
|
100
|
+
anchorDistanceRef.current = Infinity;
|
|
101
|
+
if (typeof el.scrollTo === "function") {
|
|
102
|
+
el.scrollTo({ top, behavior });
|
|
103
|
+
} else {
|
|
104
|
+
el.scrollTop = top;
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
[]
|
|
108
|
+
);
|
|
109
|
+
const followIfPinned = React.useCallback(
|
|
110
|
+
(behavior = "auto") => {
|
|
111
|
+
if (!pinnedRef.current) return false;
|
|
112
|
+
scrollToBottom(behavior);
|
|
113
|
+
return true;
|
|
114
|
+
},
|
|
115
|
+
[scrollToBottom]
|
|
116
|
+
);
|
|
117
|
+
const stopFollowing = React.useCallback(() => {
|
|
118
|
+
readingRef.current = true;
|
|
119
|
+
pinnedRef.current = false;
|
|
120
|
+
}, []);
|
|
121
|
+
return {
|
|
122
|
+
containerRef,
|
|
123
|
+
contentRef,
|
|
124
|
+
isAtBottom,
|
|
125
|
+
scrollToBottom,
|
|
126
|
+
anchorToTurnStart,
|
|
127
|
+
followIfPinned,
|
|
128
|
+
stopFollowing
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
function useStreamEndedBelowFold(newest, isAtBottom, onEnded, onEndedAtBottom) {
|
|
132
|
+
const streamingIdRef = React.useRef(null);
|
|
133
|
+
React.useEffect(() => {
|
|
134
|
+
if (newest?.status === "streaming") {
|
|
135
|
+
streamingIdRef.current = newest.id;
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (streamingIdRef.current && newest?.id === streamingIdRef.current) {
|
|
139
|
+
streamingIdRef.current = null;
|
|
140
|
+
if (!isAtBottom) onEnded();
|
|
141
|
+
else onEndedAtBottom?.();
|
|
142
|
+
}
|
|
143
|
+
}, [newest, isAtBottom, onEnded, onEndedAtBottom]);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export { useStickToBottom, useStreamEndedBelowFold };
|
|
147
|
+
//# sourceMappingURL=chunk-BM35CACB.js.map
|
|
148
|
+
//# sourceMappingURL=chunk-BM35CACB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useStickToBottom.ts"],"names":[],"mappings":"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","file":"chunk-BM35CACB.js","sourcesContent":["import * as React from 'react';\n\n/**\n * Options for {@link useStickToBottom}.\n */\nexport interface UseStickToBottomOptions {\n /**\n * Distance from the bottom (px) within which the user still counts as \"at\n * the bottom\" — small offsets from rounding or momentum scrolling shouldn't\n * break pinning.\n */\n threshold?: number;\n /**\n * Disable all behavior (listeners and observers detach). Useful when the\n * scroll container anchors somewhere other than the bottom (e.g. a\n * newest-first feed).\n */\n disabled?: boolean;\n}\n\nexport interface UseStickToBottomReturn {\n /** Attach to the scrollable container. */\n containerRef: React.RefObject<HTMLDivElement | null>;\n /**\n * Attach to the element wrapping the container's content. Its growth (e.g.\n * a streaming message) re-pins the scroll while the user is at the bottom.\n */\n contentRef: React.RefObject<HTMLDivElement | null>;\n /** Whether the user is currently at (or within `threshold` of) the bottom. */\n isAtBottom: boolean;\n /** Scroll to the bottom and resume pinning. */\n scrollToBottom: (behavior?: ScrollBehavior) => void;\n /**\n * Scroll so `target`'s top aligns with the viewport top and enter “reading”\n * mode: content growing past the fold no longer auto-follows, so the reader\n * consumes the response at their own pace (the ChatGPT/Claude send UX).\n * Following resumes when they explicitly return to the bottom — a\n * jump-to-bottom click (`scrollToBottom`) or scrolling there by hand.\n */\n anchorToTurnStart: (target: HTMLElement, behavior?: ScrollBehavior) => void;\n /**\n * Scroll to the bottom only while actually following (at the bottom and not\n * in reading mode). Returns whether it scrolled — hosts use this to decide\n * between following an appended message and raising a “new messages” hint.\n */\n followIfPinned: (behavior?: ScrollBehavior) => boolean;\n /**\n * Hold the current position: enter reading mode without scrolling, so an\n * incoming stream fills below the fold instead of pushing the view up.\n * Call right after a streaming message appends (optionally after revealing\n * its first line with `followIfPinned`). Following resumes exactly as after\n * `anchorToTurnStart`: an explicit `scrollToBottom` or the reader returning\n * to the bottom by hand.\n */\n stopFollowing: () => void;\n}\n\nfunction pinToBottom(el: HTMLElement) {\n el.scrollTop = el.scrollHeight;\n}\n\n/**\n * Keeps a scroll container pinned to its bottom edge while the user is there,\n * and — crucially — leaves the scroll position alone once they scroll up.\n *\n * Designed for chat threads with streaming responses:\n * - While the user is at the bottom, content growth (new tokens, new\n * messages) and container resizes (on-screen keyboard, growing composer)\n * keep the newest content in view via a `ResizeObserver` on both the\n * content and the container.\n * - Once the user scrolls up, nothing moves until they return to the bottom\n * themselves or the host calls `scrollToBottom` (e.g. a jump-to-bottom\n * button, or an outgoing message from the local user).\n *\n * The hook only pins; *when* to force a scroll (own message sent, thread\n * switched) stays a host decision through `scrollToBottom`,\n * `anchorToTurnStart` (ChatGPT-style: scroll a fresh turn to the viewport top\n * and pause following while the reader digests the reply), and\n * `followIfPinned` (follow an append only while actually at the bottom).\n *\n * @example\n * ```tsx\n * const { containerRef, contentRef, isAtBottom, scrollToBottom } =\n * useStickToBottom();\n * return (\n * <div className=\"relative min-h-0 flex-1\">\n * <div ref={containerRef} className=\"h-full overflow-y-auto\">\n * <div ref={contentRef}>{rows}</div>\n * </div>\n * {!isAtBottom && <JumpToBottom onClick={() => scrollToBottom('smooth')} />}\n * </div>\n * );\n * ```\n */\nexport function useStickToBottom({\n threshold = 100,\n disabled = false,\n}: UseStickToBottomOptions = {}): UseStickToBottomReturn {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const contentRef = React.useRef<HTMLDivElement>(null);\n const [isAtBottom, setIsAtBottom] = React.useState(true);\n // Mirror of `isAtBottom` readable synchronously from observer callbacks\n // without re-subscribing them on every scroll.\n const pinnedRef = React.useRef(true);\n // “Reading” mode (entered via `anchorToTurnStart`): the viewport sits at the\n // reserved space below a fresh turn — geometrically the bottom — but growth\n // must NOT follow. Cleared once the position genuinely leaves the bottom\n // (content outgrew the reserve or the user scrolled up), after which the\n // normal pin-at-bottom rules apply again.\n const readingRef = React.useRef(false);\n // In-flight anchor animation: a smooth `anchorToTurnStart` fires scroll\n // events that are neither the user's nor at the bottom — they must not end\n // reading mode or re-pin. Cleared on arrival at the target, or when the\n // distance to it grows (the user grabbed the scroll mid-animation).\n const anchorTargetRef = React.useRef<number | null>(null);\n const anchorDistanceRef = React.useRef(Infinity);\n\n // Hosts can re-attach the refs to new DOM nodes without remounting (e.g.\n // SuperChat swapping its plain thread for the virtualized one when the\n // conversation grows). Mirror the current nodes into state so the listener\n // and observer effects below re-bind whenever the target changes.\n const [containerEl, setContainerEl] = React.useState<HTMLDivElement | null>(\n null\n );\n const [contentEl, setContentEl] = React.useState<HTMLDivElement | null>(null);\n // Intentionally dep-less: ref mutations don't trigger renders, so this must\n // check after every render. The inequality guards make it settle immediately.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n React.useEffect(() => {\n if (containerRef.current !== containerEl)\n setContainerEl(containerRef.current);\n if (contentRef.current !== contentEl) setContentEl(contentRef.current);\n });\n\n // Track the user's position: at (or near) the bottom means \"pinned\".\n React.useEffect(() => {\n if (disabled) return;\n const el = containerEl;\n if (!el) return;\n\n const handleScroll = () => {\n const anchorTarget = anchorTargetRef.current;\n if (anchorTarget != null) {\n const distance = Math.abs(el.scrollTop - anchorTarget);\n if (distance < 2) {\n anchorTargetRef.current = null; // arrived — handle normally\n } else if (distance > anchorDistanceRef.current + 1) {\n anchorTargetRef.current = null; // user took over mid-animation\n } else {\n anchorDistanceRef.current = distance;\n return; // the animation's own events don't change pinning\n }\n }\n const atBottom =\n el.scrollHeight - el.scrollTop - el.clientHeight <= threshold;\n if (!atBottom) readingRef.current = false;\n pinnedRef.current = atBottom && !readingRef.current;\n setIsAtBottom(atBottom);\n };\n\n // A freshly attached node starts at `scrollTop` 0 — re-assert carried-over\n // pinning (e.g. across SuperChat's plain ⇄ virtualized swap) instead of\n // letting the initial read demote a pinned reader to \"scrolled up\".\n if (pinnedRef.current) pinToBottom(el);\n handleScroll(); // initial position\n el.addEventListener('scroll', handleScroll, { passive: true });\n return () => el.removeEventListener('scroll', handleScroll);\n }, [containerEl, threshold, disabled]);\n\n // While pinned, follow growth of the content (streaming tokens, appended\n // rows) and shrinking of the container (on-screen keyboard, composer\n // growing) so the newest content stays in view. While unpinned this\n // observer never touches the scroll position.\n React.useEffect(() => {\n if (disabled) return;\n const el = containerEl;\n if (!el || typeof globalThis.ResizeObserver === 'undefined') return;\n\n const observer = new globalThis.ResizeObserver(() => {\n if (pinnedRef.current) {\n pinToBottom(el);\n return;\n }\n // Mid-anchor-animation the position is transient — judge nothing yet.\n if (anchorTargetRef.current != null) return;\n // Not following: growth can still silently carry the position away from\n // the bottom (no scroll event fires), so recompute the state here — it\n // drives the jump-to-bottom affordance and ends reading mode once the\n // response outgrows its reserved space.\n const atBottom =\n el.scrollHeight - el.scrollTop - el.clientHeight <= threshold;\n if (!atBottom) readingRef.current = false;\n setIsAtBottom(atBottom);\n });\n observer.observe(el);\n if (contentEl) observer.observe(contentEl);\n return () => observer.disconnect();\n }, [containerEl, contentEl, threshold, disabled]);\n\n const scrollToBottom = React.useCallback(\n (behavior: ScrollBehavior = 'auto') => {\n const el = containerRef.current;\n if (!el) return;\n // Pin immediately so a concurrent stream keeps following while a\n // smooth scroll animates down.\n readingRef.current = false;\n anchorTargetRef.current = null;\n pinnedRef.current = true;\n setIsAtBottom(true);\n if (typeof el.scrollTo === 'function') {\n el.scrollTo({ top: el.scrollHeight, behavior });\n } else {\n pinToBottom(el); // jsdom fallback\n }\n },\n []\n );\n\n const anchorToTurnStart = React.useCallback(\n (target: HTMLElement, behavior: ScrollBehavior = 'auto') => {\n const el = containerRef.current;\n if (!el) return;\n readingRef.current = true;\n pinnedRef.current = false;\n // Clamp to the reachable range so the “arrived” check always resolves.\n const top = Math.min(\n target.getBoundingClientRect().top -\n el.getBoundingClientRect().top +\n el.scrollTop,\n el.scrollHeight - el.clientHeight\n );\n // Already there: `scrollTo` emits no scroll event, so tracking an\n // in-flight animation would swallow observer updates forever.\n if (Math.abs(el.scrollTop - top) < 2) return;\n anchorTargetRef.current = top;\n anchorDistanceRef.current = Infinity;\n if (typeof el.scrollTo === 'function') {\n el.scrollTo({ top, behavior });\n } else {\n el.scrollTop = top; // jsdom fallback\n }\n },\n []\n );\n\n const followIfPinned = React.useCallback(\n (behavior: ScrollBehavior = 'auto') => {\n if (!pinnedRef.current) return false;\n scrollToBottom(behavior);\n return true;\n },\n [scrollToBottom]\n );\n\n const stopFollowing = React.useCallback(() => {\n readingRef.current = true;\n pinnedRef.current = false;\n }, []);\n\n return {\n containerRef,\n contentRef,\n isAtBottom,\n scrollToBottom,\n anchorToTurnStart,\n followIfPinned,\n stopFollowing,\n };\n}\n\n/**\n * Companion to {@link useStickToBottom}: fires `onEnded` when the newest\n * message finishes streaming while the reader is away from the bottom — the\n * end of the reply landed below the fold, so the jump-to-bottom button should\n * upgrade to its “new messages” hint. When the whole reply fit above the fold\n * (the reader is still at the bottom), `onEndedAtBottom` fires instead so the\n * host can exit the stream's hold and resume following (`scrollToBottom`).\n */\nexport function useStreamEndedBelowFold(\n newest: { id: string; status?: string } | undefined,\n isAtBottom: boolean,\n onEnded: () => void,\n onEndedAtBottom?: () => void\n) {\n const streamingIdRef = React.useRef<string | null>(null);\n React.useEffect(() => {\n if (newest?.status === 'streaming') {\n streamingIdRef.current = newest.id;\n return;\n }\n if (streamingIdRef.current && newest?.id === streamingIdRef.current) {\n streamingIdRef.current = null;\n if (!isAtBottom) onEnded();\n else onEndedAtBottom?.();\n }\n }, [newest, isAtBottom, onEnded, onEndedAtBottom]);\n}\n"]}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
|
|
7
|
+
function _interopNamespace(e) {
|
|
8
|
+
if (e && e.__esModule) return e;
|
|
9
|
+
var n = Object.create(null);
|
|
10
|
+
if (e) {
|
|
11
|
+
Object.keys(e).forEach(function (k) {
|
|
12
|
+
if (k !== 'default') {
|
|
13
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
14
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function () { return e[k]; }
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
n.default = e;
|
|
22
|
+
return Object.freeze(n);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
26
|
+
|
|
27
|
+
var MONTH_LETTERS = [
|
|
28
|
+
"J",
|
|
29
|
+
"F",
|
|
30
|
+
"M",
|
|
31
|
+
"A",
|
|
32
|
+
"M",
|
|
33
|
+
"J",
|
|
34
|
+
"J",
|
|
35
|
+
"A",
|
|
36
|
+
"S",
|
|
37
|
+
"O",
|
|
38
|
+
"N",
|
|
39
|
+
"D"
|
|
40
|
+
];
|
|
41
|
+
var MONTH_NAMES = [
|
|
42
|
+
"Jan",
|
|
43
|
+
"Feb",
|
|
44
|
+
"Mar",
|
|
45
|
+
"Apr",
|
|
46
|
+
"May",
|
|
47
|
+
"Jun",
|
|
48
|
+
"Jul",
|
|
49
|
+
"Aug",
|
|
50
|
+
"Sep",
|
|
51
|
+
"Oct",
|
|
52
|
+
"Nov",
|
|
53
|
+
"Dec"
|
|
54
|
+
];
|
|
55
|
+
var TONES = [
|
|
56
|
+
"primary",
|
|
57
|
+
"accent",
|
|
58
|
+
"info",
|
|
59
|
+
"success",
|
|
60
|
+
"warning",
|
|
61
|
+
"neutral"
|
|
62
|
+
];
|
|
63
|
+
var TONE_COLORS = {
|
|
64
|
+
primary: ["var(--mieweb-primary-600)", "var(--mieweb-primary-400)"],
|
|
65
|
+
accent: [
|
|
66
|
+
"var(--mieweb-accent, var(--mieweb-primary-500))",
|
|
67
|
+
"var(--mieweb-accent-light, var(--mieweb-primary-300))"
|
|
68
|
+
],
|
|
69
|
+
success: [
|
|
70
|
+
"var(--mieweb-success)",
|
|
71
|
+
"color-mix(in srgb, var(--mieweb-success) 60%, #fff)"
|
|
72
|
+
],
|
|
73
|
+
warning: [
|
|
74
|
+
"var(--mieweb-warning)",
|
|
75
|
+
"color-mix(in srgb, var(--mieweb-warning) 60%, #fff)"
|
|
76
|
+
],
|
|
77
|
+
info: [
|
|
78
|
+
"var(--mieweb-info, var(--mieweb-primary-400))",
|
|
79
|
+
"color-mix(in srgb, var(--mieweb-info, var(--mieweb-primary-400)) 60%, #fff)"
|
|
80
|
+
],
|
|
81
|
+
neutral: ["var(--mieweb-neutral-500)", "var(--mieweb-neutral-400)"]
|
|
82
|
+
};
|
|
83
|
+
var GROUP_TEXT = {
|
|
84
|
+
scheduled: "text-primary-800 dark:text-primary-300",
|
|
85
|
+
continuous: "text-success-800 dark:text-success",
|
|
86
|
+
event: "text-muted-foreground"
|
|
87
|
+
};
|
|
88
|
+
function cadenceOf(item) {
|
|
89
|
+
return item.cadence ?? (item.months?.length ? "scheduled" : "continuous");
|
|
90
|
+
}
|
|
91
|
+
function windowOf(item) {
|
|
92
|
+
if (!item.months?.length) return null;
|
|
93
|
+
return { start: Math.min(...item.months), end: Math.max(...item.months) };
|
|
94
|
+
}
|
|
95
|
+
function formatWindow(item, names) {
|
|
96
|
+
const w = windowOf(item);
|
|
97
|
+
if (!w) return null;
|
|
98
|
+
return w.start === w.end ? names[w.start - 1] : `${names[w.start - 1]}\u2013${names[w.end - 1]}`;
|
|
99
|
+
}
|
|
100
|
+
function resolveCurrent(items, month) {
|
|
101
|
+
const live = items.find((it) => it.months?.includes(month));
|
|
102
|
+
if (live) return { id: live.id, live: true };
|
|
103
|
+
let best = null;
|
|
104
|
+
let bestDelta = 99;
|
|
105
|
+
for (const it of items) {
|
|
106
|
+
if (!it.months?.length) continue;
|
|
107
|
+
const delta = (Math.min(...it.months) - month + 12) % 12;
|
|
108
|
+
if (delta > 0 && delta < bestDelta) {
|
|
109
|
+
bestDelta = delta;
|
|
110
|
+
best = it;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return best ? { id: best.id, live: false } : null;
|
|
114
|
+
}
|
|
115
|
+
function toMonth(today) {
|
|
116
|
+
return typeof today === "number" ? today : today.getMonth() + 1;
|
|
117
|
+
}
|
|
118
|
+
function YearTimeline({
|
|
119
|
+
items,
|
|
120
|
+
today,
|
|
121
|
+
labelHeading = "Obligation",
|
|
122
|
+
monthLabels = MONTH_LETTERS,
|
|
123
|
+
monthNames = MONTH_NAMES,
|
|
124
|
+
groupLabels,
|
|
125
|
+
labels,
|
|
126
|
+
highlightCurrent = true,
|
|
127
|
+
labelWidth = "300px",
|
|
128
|
+
className
|
|
129
|
+
}) {
|
|
130
|
+
const [mountedMonth, setMountedMonth] = React__namespace.useState(null);
|
|
131
|
+
React__namespace.useEffect(() => {
|
|
132
|
+
if (today === void 0) setMountedMonth((/* @__PURE__ */ new Date()).getMonth() + 1);
|
|
133
|
+
}, [today]);
|
|
134
|
+
const month = today === null ? null : today === void 0 ? mountedMonth : toMonth(today);
|
|
135
|
+
const current = month != null && highlightCurrent ? resolveCurrent(items, month) : null;
|
|
136
|
+
const nowFraction = month != null ? (month - 0.5) / 12 : null;
|
|
137
|
+
const groupTitle = {
|
|
138
|
+
scheduled: groupLabels?.scheduled ?? "On the calendar",
|
|
139
|
+
continuous: groupLabels?.continuous ?? "Runs all year",
|
|
140
|
+
event: groupLabels?.event ?? "As it happens"
|
|
141
|
+
};
|
|
142
|
+
const text = { today: "Today", now: "Now", upNext: "Up next", ...labels };
|
|
143
|
+
const groups = ["scheduled", "continuous", "event"].map((key) => ({
|
|
144
|
+
key,
|
|
145
|
+
items: items.filter((it) => cadenceOf(it) === key).sort(
|
|
146
|
+
(a, b) => (windowOf(a)?.start ?? 13) - (windowOf(b)?.start ?? 13)
|
|
147
|
+
)
|
|
148
|
+
})).filter((g) => g.items.length > 0);
|
|
149
|
+
let toneIndex = 0;
|
|
150
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
151
|
+
"div",
|
|
152
|
+
{
|
|
153
|
+
"data-slot": "year-timeline",
|
|
154
|
+
style: {
|
|
155
|
+
"--yt-label": labelWidth,
|
|
156
|
+
"--yt-now": nowFraction ?? void 0
|
|
157
|
+
},
|
|
158
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
159
|
+
"border-border bg-card text-card-foreground relative overflow-hidden rounded-xl border shadow-md",
|
|
160
|
+
// year ribbon
|
|
161
|
+
'before:absolute before:inset-x-0 before:top-0 before:z-[4] before:h-1 before:content-[""]',
|
|
162
|
+
"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%)]",
|
|
163
|
+
className
|
|
164
|
+
),
|
|
165
|
+
children: [
|
|
166
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-border bg-muted/50 hidden border-b md:grid md:grid-cols-[var(--yt-label)_1fr]", children: [
|
|
167
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-border flex items-end border-e px-5 pt-3 pb-2.5", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-[10px] font-bold tracking-[0.11em] uppercase", children: labelHeading }) }),
|
|
168
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative grid grid-cols-12", children: [
|
|
169
|
+
monthLabels.map((m, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
170
|
+
"span",
|
|
171
|
+
{
|
|
172
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
173
|
+
"text-muted-foreground pt-3 pb-2.5 text-center text-[11px] font-bold tracking-wide",
|
|
174
|
+
i > 0 && "border-border/60 border-s"
|
|
175
|
+
),
|
|
176
|
+
children: m
|
|
177
|
+
},
|
|
178
|
+
i
|
|
179
|
+
)),
|
|
180
|
+
nowFraction != null && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
181
|
+
"span",
|
|
182
|
+
{
|
|
183
|
+
"data-slot": "year-timeline-today",
|
|
184
|
+
style: { left: `calc(var(--yt-now) * 100%)` },
|
|
185
|
+
className: "bg-primary-800 absolute top-1.5 z-[5] inline-flex -translate-x-1/2 items-center gap-1.5 rounded-full px-2 py-0.5 text-[9px] font-bold tracking-[0.09em] whitespace-nowrap text-white uppercase",
|
|
186
|
+
children: [
|
|
187
|
+
/* @__PURE__ */ jsxRuntime.jsx("i", { "aria-hidden": true, className: "h-1.5 w-1.5 rounded-full bg-white" }),
|
|
188
|
+
text.today
|
|
189
|
+
]
|
|
190
|
+
}
|
|
191
|
+
)
|
|
192
|
+
] })
|
|
193
|
+
] }),
|
|
194
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
195
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
196
|
+
"div",
|
|
197
|
+
{
|
|
198
|
+
"aria-hidden": true,
|
|
199
|
+
className: "pointer-events-none absolute inset-y-0 end-0 z-0 hidden md:block",
|
|
200
|
+
style: {
|
|
201
|
+
left: "var(--yt-label)",
|
|
202
|
+
backgroundImage: "repeating-linear-gradient(90deg, var(--mieweb-border) 0, var(--mieweb-border) 1px, transparent 1px, transparent calc(100% / 12))",
|
|
203
|
+
opacity: 0.5
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
),
|
|
207
|
+
nowFraction != null && /* @__PURE__ */ jsxRuntime.jsx(
|
|
208
|
+
"span",
|
|
209
|
+
{
|
|
210
|
+
"aria-hidden": true,
|
|
211
|
+
"data-slot": "year-timeline-playhead",
|
|
212
|
+
style: {
|
|
213
|
+
left: "calc(var(--yt-label) + (100% - var(--yt-label)) * var(--yt-now))"
|
|
214
|
+
},
|
|
215
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
216
|
+
"pointer-events-none absolute inset-y-0 z-[3] hidden w-0.5 -translate-x-px md:block",
|
|
217
|
+
"[background:linear-gradient(180deg,var(--mieweb-primary-700),color-mix(in_srgb,var(--mieweb-primary-700)_15%,transparent))]",
|
|
218
|
+
'before:bg-primary-700 before:absolute before:top-0 before:left-1/2 before:h-2.5 before:w-2.5 before:-translate-x-1/2 before:rounded-full before:content-[""]'
|
|
219
|
+
)
|
|
220
|
+
}
|
|
221
|
+
),
|
|
222
|
+
groups.map((g, gi) => /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-cadence": g.key, children: [
|
|
223
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
224
|
+
"div",
|
|
225
|
+
{
|
|
226
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
227
|
+
"bg-muted/30 relative z-[1] flex items-center gap-2 px-5 py-2.5 text-[10px] font-bold tracking-[0.12em] uppercase",
|
|
228
|
+
gi > 0 && "border-border border-t",
|
|
229
|
+
GROUP_TEXT[g.key]
|
|
230
|
+
),
|
|
231
|
+
children: groupTitle[g.key]
|
|
232
|
+
}
|
|
233
|
+
),
|
|
234
|
+
g.items.map((it) => {
|
|
235
|
+
const cadence = cadenceOf(it);
|
|
236
|
+
const w = windowOf(it);
|
|
237
|
+
const isCurrent = current?.id === it.id;
|
|
238
|
+
const [c1, c2] = it.colors ?? TONE_COLORS[it.tone ?? TONES[toneIndex++ % TONES.length]];
|
|
239
|
+
const caption = cadence === "scheduled" ? formatWindow(it, monthNames) : null;
|
|
240
|
+
const period = it.period ?? caption ?? groupTitle[cadence];
|
|
241
|
+
const Title = it.href ? "a" : "span";
|
|
242
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
243
|
+
"div",
|
|
244
|
+
{
|
|
245
|
+
"data-slot": "year-timeline-row",
|
|
246
|
+
"data-current": isCurrent ? current?.live ? "now" : "next" : void 0,
|
|
247
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
248
|
+
"border-border/60 relative z-[1] grid border-t transition-colors md:grid-cols-[var(--yt-label)_1fr]",
|
|
249
|
+
"hover:bg-muted/40",
|
|
250
|
+
isCurrent && "bg-primary-500/10 hover:bg-primary-500/10"
|
|
251
|
+
),
|
|
252
|
+
children: [
|
|
253
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "md:border-border/60 px-5 pt-4 pb-2 md:border-e md:pb-4", children: [
|
|
254
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
255
|
+
"div",
|
|
256
|
+
{
|
|
257
|
+
className: "mb-1.5 flex items-center gap-1.5 text-[10px] font-bold tracking-[0.09em] uppercase [&_svg]:h-3.5 [&_svg]:w-3.5",
|
|
258
|
+
style: { color: c1 },
|
|
259
|
+
children: [
|
|
260
|
+
it.icon,
|
|
261
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: period }),
|
|
262
|
+
isCurrent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bg-primary-800 ms-auto rounded-full px-1.5 py-0.5 text-[9px] tracking-[0.08em] text-white", children: current?.live ? text.now : text.upNext })
|
|
263
|
+
]
|
|
264
|
+
}
|
|
265
|
+
),
|
|
266
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
267
|
+
Title,
|
|
268
|
+
{
|
|
269
|
+
href: it.href,
|
|
270
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
271
|
+
"text-foreground block text-base font-semibold",
|
|
272
|
+
it.href && "hover:underline"
|
|
273
|
+
),
|
|
274
|
+
children: it.label
|
|
275
|
+
}
|
|
276
|
+
),
|
|
277
|
+
it.detail && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground mt-1 text-sm leading-relaxed", children: it.detail })
|
|
278
|
+
] }),
|
|
279
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-12 items-center px-5 pb-4 md:px-0 md:py-3.5", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
280
|
+
"span",
|
|
281
|
+
{
|
|
282
|
+
"data-slot": "year-timeline-bar",
|
|
283
|
+
"data-cadence": cadence,
|
|
284
|
+
style: {
|
|
285
|
+
gridColumn: cadence === "scheduled" && w ? `${w.start} / ${w.end + 1}` : "1 / 13",
|
|
286
|
+
...cadence === "scheduled" ? {
|
|
287
|
+
background: `linear-gradient(90deg, ${c1}, ${c2})`
|
|
288
|
+
} : cadence === "continuous" ? {
|
|
289
|
+
background: `linear-gradient(90deg, color-mix(in srgb, ${c1} 22%, transparent), color-mix(in srgb, ${c2} 22%, transparent))`,
|
|
290
|
+
borderColor: `color-mix(in srgb, ${c1} 45%, transparent)`
|
|
291
|
+
} : {
|
|
292
|
+
background: `repeating-linear-gradient(45deg, color-mix(in srgb, ${c1} 30%, transparent) 0 6px, transparent 6px 12px)`,
|
|
293
|
+
borderColor: `color-mix(in srgb, ${c1} 60%, transparent)`
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
297
|
+
"row-start-1 flex h-3.5 min-w-2.5 items-center justify-end rounded-full px-2 md:h-[22px]",
|
|
298
|
+
cadence === "scheduled" && "shadow-sm",
|
|
299
|
+
cadence === "continuous" && "border",
|
|
300
|
+
cadence === "event" && "border border-dashed"
|
|
301
|
+
),
|
|
302
|
+
children: caption && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "hidden text-[10px] font-bold tracking-wide text-white [text-shadow:0_1px_1px_rgba(0,0,0,0.3)] md:inline", children: caption })
|
|
303
|
+
}
|
|
304
|
+
) })
|
|
305
|
+
]
|
|
306
|
+
},
|
|
307
|
+
it.id
|
|
308
|
+
);
|
|
309
|
+
})
|
|
310
|
+
] }, g.key))
|
|
311
|
+
] })
|
|
312
|
+
]
|
|
313
|
+
}
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
exports.MONTH_LETTERS = MONTH_LETTERS;
|
|
318
|
+
exports.MONTH_NAMES = MONTH_NAMES;
|
|
319
|
+
exports.YearTimeline = YearTimeline;
|
|
320
|
+
exports.resolveCurrent = resolveCurrent;
|
|
321
|
+
//# sourceMappingURL=chunk-CR2SDI23.cjs.map
|
|
322
|
+
//# sourceMappingURL=chunk-CR2SDI23.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/YearTimeline/YearTimeline.tsx"],"names":["React","jsxs","cn","jsx"],"mappings":"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","file":"chunk-CR2SDI23.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../utils/cn';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** How an item lives in the year. */\nexport type YearTimelineCadence = 'scheduled' | 'continuous' | 'event';\n\nexport type YearTimelineTone =\n | 'primary'\n | 'accent'\n | 'success'\n | 'warning'\n | 'info'\n | 'neutral';\n\nexport interface YearTimelineItem {\n id: string;\n /** Row title. */\n label: string;\n /** Supporting copy under the title. */\n detail?: string;\n /**\n * Eyebrow above the title, e.g. \"Jan–Feb\" or \"Year-round\". Defaults to the\n * formatted month window for scheduled items.\n */\n period?: string;\n /** Months (1–12) the item occupies. Drives the bar span and the live marker. */\n months?: number[];\n /**\n * `scheduled` bars span `months`; `continuous` and `event` run full-width in\n * their own lanes. Defaults to `scheduled` when `months` is set, else\n * `continuous`.\n */\n cadence?: YearTimelineCadence;\n /** Bar colour family. Default cycles through the tones. */\n tone?: YearTimelineTone;\n /** Any two CSS colours for a custom bar gradient — overrides `tone`. */\n colors?: [string, string];\n /** Small icon before the eyebrow (Lucide, 13px). */\n icon?: React.ReactNode;\n /** Makes the row title a link. */\n href?: string;\n}\n\nexport interface YearTimelineProps {\n items: YearTimelineItem[];\n /**\n * Which month (1–12) or date the playhead marks. Default: the viewer's\n * current month, resolved after mount. Pass `null` to hide the marker.\n */\n today?: Date | number | null;\n /** Column heading over the row labels. Default \"Obligation\". */\n labelHeading?: string;\n /** Twelve month tick labels. Default single letters. */\n monthLabels?: readonly string[];\n /** Twelve short month names used in period fallbacks and bar captions. */\n monthNames?: readonly string[];\n /** Lane headings by cadence. */\n groupLabels?: Partial<Record<YearTimelineCadence, string>>;\n /** Copy for the live marker and row badges. */\n labels?: { today?: string; now?: string; upNext?: string };\n /** Highlight the item happening now (or coming up next). Default true. */\n highlightCurrent?: boolean;\n /** Width of the label column. Default `300px`. */\n labelWidth?: string;\n className?: string;\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nexport const MONTH_LETTERS = [\n 'J',\n 'F',\n 'M',\n 'A',\n 'M',\n 'J',\n 'J',\n 'A',\n 'S',\n 'O',\n 'N',\n 'D',\n] as const;\nexport const MONTH_NAMES = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n] as const;\n\nconst TONES: YearTimelineTone[] = [\n 'primary',\n 'accent',\n 'info',\n 'success',\n 'warning',\n 'neutral',\n];\n\nconst TONE_COLORS: Record<YearTimelineTone, [string, string]> = {\n primary: ['var(--mieweb-primary-600)', 'var(--mieweb-primary-400)'],\n accent: [\n 'var(--mieweb-accent, var(--mieweb-primary-500))',\n 'var(--mieweb-accent-light, var(--mieweb-primary-300))',\n ],\n success: [\n 'var(--mieweb-success)',\n 'color-mix(in srgb, var(--mieweb-success) 60%, #fff)',\n ],\n warning: [\n 'var(--mieweb-warning)',\n 'color-mix(in srgb, var(--mieweb-warning) 60%, #fff)',\n ],\n info: [\n 'var(--mieweb-info, var(--mieweb-primary-400))',\n 'color-mix(in srgb, var(--mieweb-info, var(--mieweb-primary-400)) 60%, #fff)',\n ],\n neutral: ['var(--mieweb-neutral-500)', 'var(--mieweb-neutral-400)'],\n};\n\nconst GROUP_TEXT: Record<YearTimelineCadence, string> = {\n scheduled: 'text-primary-800 dark:text-primary-300',\n continuous: 'text-success-800 dark:text-success',\n event: 'text-muted-foreground',\n};\n\nfunction cadenceOf(item: YearTimelineItem): YearTimelineCadence {\n return item.cadence ?? (item.months?.length ? 'scheduled' : 'continuous');\n}\n\nfunction windowOf(\n item: YearTimelineItem\n): { start: number; end: number } | null {\n if (!item.months?.length) return null;\n return { start: Math.min(...item.months), end: Math.max(...item.months) };\n}\n\nfunction formatWindow(\n item: YearTimelineItem,\n names: readonly string[]\n): string | null {\n const w = windowOf(item);\n if (!w) return null;\n return w.start === w.end\n ? names[w.start - 1]\n : `${names[w.start - 1]}–${names[w.end - 1]}`;\n}\n\n/** Item in `month`, else the next one coming up (wrapping the year). */\nexport function resolveCurrent(\n items: YearTimelineItem[],\n month: number\n): { id: string; live: boolean } | null {\n const live = items.find((it) => it.months?.includes(month));\n if (live) return { id: live.id, live: true };\n let best: YearTimelineItem | null = null;\n let bestDelta = 99;\n for (const it of items) {\n if (!it.months?.length) continue;\n const delta = (Math.min(...it.months) - month + 12) % 12;\n if (delta > 0 && delta < bestDelta) {\n bestDelta = delta;\n best = it;\n }\n }\n return best ? { id: best.id, live: false } : null;\n}\n\nfunction toMonth(today: Date | number): number {\n return typeof today === 'number' ? today : today.getMonth() + 1;\n}\n\n// =============================================================================\n// YearTimeline\n// =============================================================================\n\n/**\n * A year on one Gantt-style timeline: twelve month columns, rows grouped by\n * cadence (scheduled windows as gradient pill bars; continuous and\n * event-driven items in full-width lanes), month gridlines, and a live\n * playhead + \"Today\" pill marking the current month. The item happening now\n * (or up next) is highlighted. Ported from the Enterprise Health compliance\n * calendar; fits any recurring annual schedule — audits, filings, campaigns,\n * maintenance.\n *\n * Collapses to stacked rows without the month scale below `md`.\n */\nexport function YearTimeline({\n items,\n today,\n labelHeading = 'Obligation',\n monthLabels = MONTH_LETTERS,\n monthNames = MONTH_NAMES,\n groupLabels,\n labels,\n highlightCurrent = true,\n labelWidth = '300px',\n className,\n}: YearTimelineProps) {\n // The viewer's clock is only known after mount (SSR-safe).\n const [mountedMonth, setMountedMonth] = React.useState<number | null>(null);\n React.useEffect(() => {\n if (today === undefined) setMountedMonth(new Date().getMonth() + 1);\n }, [today]);\n\n const month =\n today === null ? null : today === undefined ? mountedMonth : toMonth(today);\n const current =\n month != null && highlightCurrent ? resolveCurrent(items, month) : null;\n const nowFraction = month != null ? (month - 0.5) / 12 : null;\n\n const groupTitle: Record<YearTimelineCadence, string> = {\n scheduled: groupLabels?.scheduled ?? 'On the calendar',\n continuous: groupLabels?.continuous ?? 'Runs all year',\n event: groupLabels?.event ?? 'As it happens',\n };\n const text = { today: 'Today', now: 'Now', upNext: 'Up next', ...labels };\n\n const groups = (['scheduled', 'continuous', 'event'] as const)\n .map((key) => ({\n key,\n items: items\n .filter((it) => cadenceOf(it) === key)\n .sort(\n (a, b) => (windowOf(a)?.start ?? 13) - (windowOf(b)?.start ?? 13)\n ),\n }))\n .filter((g) => g.items.length > 0);\n\n let toneIndex = 0;\n\n return (\n <div\n data-slot=\"year-timeline\"\n style={\n {\n '--yt-label': labelWidth,\n '--yt-now': nowFraction ?? undefined,\n } as React.CSSProperties\n }\n className={cn(\n 'border-border bg-card text-card-foreground relative overflow-hidden rounded-xl border shadow-md',\n // year ribbon\n 'before:absolute before:inset-x-0 before:top-0 before:z-[4] before:h-1 before:content-[\"\"]',\n '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%)]',\n className\n )}\n >\n {/* Head: label heading + month scale */}\n <div className=\"border-border bg-muted/50 hidden border-b md:grid md:grid-cols-[var(--yt-label)_1fr]\">\n <div className=\"border-border flex items-end border-e px-5 pt-3 pb-2.5\">\n <span className=\"text-muted-foreground text-[10px] font-bold tracking-[0.11em] uppercase\">\n {labelHeading}\n </span>\n </div>\n <div className=\"relative grid grid-cols-12\">\n {monthLabels.map((m, i) => (\n <span\n key={i}\n className={cn(\n 'text-muted-foreground pt-3 pb-2.5 text-center text-[11px] font-bold tracking-wide',\n i > 0 && 'border-border/60 border-s'\n )}\n >\n {m}\n </span>\n ))}\n {nowFraction != null && (\n <span\n data-slot=\"year-timeline-today\"\n style={{ left: `calc(var(--yt-now) * 100%)` }}\n className=\"bg-primary-800 absolute top-1.5 z-[5] inline-flex -translate-x-1/2 items-center gap-1.5 rounded-full px-2 py-0.5 text-[9px] font-bold tracking-[0.09em] whitespace-nowrap text-white uppercase\"\n >\n <i aria-hidden className=\"h-1.5 w-1.5 rounded-full bg-white\" />\n {text.today}\n </span>\n )}\n </div>\n </div>\n\n {/* Body */}\n <div className=\"relative\">\n {/* month gridlines */}\n <div\n aria-hidden\n className=\"pointer-events-none absolute inset-y-0 end-0 z-0 hidden md:block\"\n style={{\n left: 'var(--yt-label)',\n backgroundImage:\n 'repeating-linear-gradient(90deg, var(--mieweb-border) 0, var(--mieweb-border) 1px, transparent 1px, transparent calc(100% / 12))',\n opacity: 0.5,\n }}\n />\n {nowFraction != null && (\n <span\n aria-hidden\n data-slot=\"year-timeline-playhead\"\n style={{\n left: 'calc(var(--yt-label) + (100% - var(--yt-label)) * var(--yt-now))',\n }}\n className={cn(\n 'pointer-events-none absolute inset-y-0 z-[3] hidden w-0.5 -translate-x-px md:block',\n '[background:linear-gradient(180deg,var(--mieweb-primary-700),color-mix(in_srgb,var(--mieweb-primary-700)_15%,transparent))]',\n 'before:bg-primary-700 before:absolute before:top-0 before:left-1/2 before:h-2.5 before:w-2.5 before:-translate-x-1/2 before:rounded-full before:content-[\"\"]'\n )}\n />\n )}\n\n {groups.map((g, gi) => (\n <div key={g.key} data-cadence={g.key}>\n <div\n className={cn(\n 'bg-muted/30 relative z-[1] flex items-center gap-2 px-5 py-2.5 text-[10px] font-bold tracking-[0.12em] uppercase',\n gi > 0 && 'border-border border-t',\n GROUP_TEXT[g.key]\n )}\n >\n {groupTitle[g.key]}\n </div>\n\n {g.items.map((it) => {\n const cadence = cadenceOf(it);\n const w = windowOf(it);\n const isCurrent = current?.id === it.id;\n const [c1, c2] =\n it.colors ??\n TONE_COLORS[it.tone ?? TONES[toneIndex++ % TONES.length]];\n const caption =\n cadence === 'scheduled' ? formatWindow(it, monthNames) : null;\n const period = it.period ?? caption ?? groupTitle[cadence];\n const Title = it.href ? 'a' : 'span';\n\n return (\n <div\n key={it.id}\n data-slot=\"year-timeline-row\"\n data-current={\n isCurrent ? (current?.live ? 'now' : 'next') : undefined\n }\n className={cn(\n 'border-border/60 relative z-[1] grid border-t transition-colors md:grid-cols-[var(--yt-label)_1fr]',\n 'hover:bg-muted/40',\n isCurrent && 'bg-primary-500/10 hover:bg-primary-500/10'\n )}\n >\n <div className=\"md:border-border/60 px-5 pt-4 pb-2 md:border-e md:pb-4\">\n <div\n className=\"mb-1.5 flex items-center gap-1.5 text-[10px] font-bold tracking-[0.09em] uppercase [&_svg]:h-3.5 [&_svg]:w-3.5\"\n style={{ color: c1 }}\n >\n {it.icon}\n <span>{period}</span>\n {isCurrent && (\n <span className=\"bg-primary-800 ms-auto rounded-full px-1.5 py-0.5 text-[9px] tracking-[0.08em] text-white\">\n {current?.live ? text.now : text.upNext}\n </span>\n )}\n </div>\n <Title\n href={it.href}\n className={cn(\n 'text-foreground block text-base font-semibold',\n it.href && 'hover:underline'\n )}\n >\n {it.label}\n </Title>\n {it.detail && (\n <p className=\"text-muted-foreground mt-1 text-sm leading-relaxed\">\n {it.detail}\n </p>\n )}\n </div>\n\n <div className=\"grid grid-cols-12 items-center px-5 pb-4 md:px-0 md:py-3.5\">\n <span\n data-slot=\"year-timeline-bar\"\n data-cadence={cadence}\n style={{\n gridColumn:\n cadence === 'scheduled' && w\n ? `${w.start} / ${w.end + 1}`\n : '1 / 13',\n ...(cadence === 'scheduled'\n ? {\n background: `linear-gradient(90deg, ${c1}, ${c2})`,\n }\n : cadence === 'continuous'\n ? {\n background: `linear-gradient(90deg, color-mix(in srgb, ${c1} 22%, transparent), color-mix(in srgb, ${c2} 22%, transparent))`,\n borderColor: `color-mix(in srgb, ${c1} 45%, transparent)`,\n }\n : {\n background: `repeating-linear-gradient(45deg, color-mix(in srgb, ${c1} 30%, transparent) 0 6px, transparent 6px 12px)`,\n borderColor: `color-mix(in srgb, ${c1} 60%, transparent)`,\n }),\n }}\n className={cn(\n 'row-start-1 flex h-3.5 min-w-2.5 items-center justify-end rounded-full px-2 md:h-[22px]',\n cadence === 'scheduled' && 'shadow-sm',\n cadence === 'continuous' && 'border',\n cadence === 'event' && 'border border-dashed'\n )}\n >\n {caption && (\n <span className=\"hidden text-[10px] font-bold tracking-wide text-white [text-shadow:0_1px_1px_rgba(0,0,0,0.3)] md:inline\">\n {caption}\n </span>\n )}\n </span>\n </div>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FenceBlock } from './chunk-
|
|
1
|
+
import { FenceBlock } from './chunk-H4ZXMQQW.js';
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
3
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
4
|
|
|
@@ -192,5 +192,5 @@ var SurveyBlock = ({ code, id }) => {
|
|
|
192
192
|
};
|
|
193
193
|
|
|
194
194
|
export { SurveyBlock };
|
|
195
|
-
//# sourceMappingURL=chunk-
|
|
196
|
-
//# sourceMappingURL=chunk-
|
|
195
|
+
//# sourceMappingURL=chunk-DEDN5HAG.js.map
|
|
196
|
+
//# sourceMappingURL=chunk-DEDN5HAG.js.map
|