@mieweb/ui 0.8.0-dev.9 → 0.9.0-dev.0
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/Animated-Cs-naa2g.d.cts +175 -0
- package/dist/Animated-Cs-naa2g.d.ts +175 -0
- package/dist/CsvBlock-D7Z6ZCRP.js +6 -0
- package/dist/{CsvBlock-RPGHFTVD.js.map → CsvBlock-D7Z6ZCRP.js.map} +1 -1
- package/dist/CsvBlock-QXXZ7ZUM.cjs +15 -0
- package/dist/{CsvBlock-HMAZ7YK5.cjs.map → CsvBlock-QXXZ7ZUM.cjs.map} +1 -1
- package/dist/HtmlPreviewBlock-AADG7MVB.cjs +15 -0
- package/dist/{HtmlPreviewBlock-QHLSIMWJ.cjs.map → HtmlPreviewBlock-AADG7MVB.cjs.map} +1 -1
- package/dist/HtmlPreviewBlock-F5VDM2EN.js +6 -0
- package/dist/{HtmlPreviewBlock-YF2YVKKX.js.map → HtmlPreviewBlock-F5VDM2EN.js.map} +1 -1
- package/dist/MermaidBlock-6PLITRBZ.js +6 -0
- package/dist/{MermaidBlock-H3TWNC4D.js.map → MermaidBlock-6PLITRBZ.js.map} +1 -1
- package/dist/MermaidBlock-TQ2O5CLV.cjs +15 -0
- package/dist/{MermaidBlock-ZLLBO3VY.cjs.map → MermaidBlock-TQ2O5CLV.cjs.map} +1 -1
- package/dist/SurveyBlock-OYL3VNU5.cjs +15 -0
- package/dist/{SurveyBlock-K6HKI7AD.cjs.map → SurveyBlock-OYL3VNU5.cjs.map} +1 -1
- package/dist/SurveyBlock-W5PSQ62F.js +6 -0
- package/dist/{SurveyBlock-ID55AT3R.js.map → SurveyBlock-W5PSQ62F.js.map} +1 -1
- package/dist/ag-grid.cjs +5 -5
- package/dist/ag-grid.js +1 -1
- package/dist/brands/index.cjs +7 -7
- package/dist/brands/index.js +2 -2
- package/dist/{chunk-5JZIDILK.cjs → chunk-3LHICE4I.cjs} +6 -6
- package/dist/chunk-3LHICE4I.cjs.map +1 -0
- package/dist/{chunk-JHZW3Y62.js → chunk-3RB35GYK.js} +5 -5
- package/dist/chunk-3RB35GYK.js.map +1 -0
- package/dist/{chunk-JMZF7ZHF.cjs → chunk-4SM3I7WE.cjs} +4 -4
- package/dist/{chunk-JMZF7ZHF.cjs.map → chunk-4SM3I7WE.cjs.map} +1 -1
- package/dist/{chunk-ZONEAWPR.cjs → chunk-5BVFVXHN.cjs} +218 -151
- package/dist/chunk-5BVFVXHN.cjs.map +1 -0
- package/dist/{chunk-CAN3A3DC.js → chunk-5H7SAEQO.js} +4 -4
- package/dist/{chunk-CAN3A3DC.js.map → chunk-5H7SAEQO.js.map} +1 -1
- package/dist/{chunk-EMMYFHOT.js → chunk-5WOB4UBD.js} +3 -3
- package/dist/{chunk-EMMYFHOT.js.map → chunk-5WOB4UBD.js.map} +1 -1
- package/dist/{chunk-JIU6CVPF.cjs → chunk-5Z6UPVGC.cjs} +5 -5
- package/dist/{chunk-JIU6CVPF.cjs.map → chunk-5Z6UPVGC.cjs.map} +1 -1
- package/dist/{chunk-YIXTGWT4.cjs → chunk-6QKMMKRY.cjs} +5 -5
- package/dist/{chunk-YIXTGWT4.cjs.map → chunk-6QKMMKRY.cjs.map} +1 -1
- package/dist/{chunk-F57VRLKP.js → chunk-6SAYPXHX.js} +4 -4
- package/dist/{chunk-F57VRLKP.js.map → chunk-6SAYPXHX.js.map} +1 -1
- package/dist/{chunk-5EKRH4KE.cjs → chunk-6XDPJWSC.cjs} +93 -77
- package/dist/chunk-6XDPJWSC.cjs.map +1 -0
- package/dist/{chunk-4AE2L6AO.cjs → chunk-7FTBPLA6.cjs} +8 -8
- package/dist/chunk-7FTBPLA6.cjs.map +1 -0
- package/dist/{chunk-AGYNCPJ2.cjs → chunk-7KN6J7XV.cjs} +19 -19
- package/dist/{chunk-AGYNCPJ2.cjs.map → chunk-7KN6J7XV.cjs.map} +1 -1
- package/dist/{chunk-SNSA6NWD.cjs → chunk-AHINB2TP.cjs} +9 -9
- package/dist/{chunk-SNSA6NWD.cjs.map → chunk-AHINB2TP.cjs.map} +1 -1
- package/dist/chunk-BKSPDTX4.js +3 -0
- package/dist/{chunk-3PXOIAF6.js.map → chunk-BKSPDTX4.js.map} +1 -1
- package/dist/chunk-BN75TLUN.cjs +163 -0
- package/dist/chunk-BN75TLUN.cjs.map +1 -0
- package/dist/{chunk-WWJIW2IH.cjs → chunk-BVMABVC4.cjs} +3 -3
- package/dist/{chunk-WWJIW2IH.cjs.map → chunk-BVMABVC4.cjs.map} +1 -1
- package/dist/{chunk-VKNCQIVN.cjs → chunk-BZAGP5W6.cjs} +8 -8
- package/dist/{chunk-VKNCQIVN.cjs.map → chunk-BZAGP5W6.cjs.map} +1 -1
- package/dist/{chunk-RS5VA6QU.cjs → chunk-C3DUS2VE.cjs} +3 -3
- package/dist/{chunk-RS5VA6QU.cjs.map → chunk-C3DUS2VE.cjs.map} +1 -1
- package/dist/{chunk-NLBT5O2X.js → chunk-CK3KLRNF.js} +3 -3
- package/dist/{chunk-NLBT5O2X.js.map → chunk-CK3KLRNF.js.map} +1 -1
- package/dist/{chunk-4J4FDVPS.cjs → chunk-CXDMZT45.cjs} +36 -3
- package/dist/chunk-CXDMZT45.cjs.map +1 -0
- package/dist/{chunk-TXRQQMG5.js → chunk-CYMZ2QS5.js} +2 -2
- package/dist/{chunk-TXRQQMG5.js.map → chunk-CYMZ2QS5.js.map} +1 -1
- package/dist/{chunk-CLQUCPV6.js → chunk-D25WH7MH.js} +7 -7
- package/dist/{chunk-CLQUCPV6.js.map → chunk-D25WH7MH.js.map} +1 -1
- package/dist/{chunk-ATOWMVZH.js → chunk-DFYMIRMW.js} +3 -3
- package/dist/{chunk-ATOWMVZH.js.map → chunk-DFYMIRMW.js.map} +1 -1
- package/dist/{chunk-ZJ5KAZLW.js → chunk-DGRXAIWK.js} +36 -3
- package/dist/chunk-DGRXAIWK.js.map +1 -0
- package/dist/{chunk-UZ5NGGMI.js → chunk-EG7XFZ3W.js} +4 -4
- package/dist/{chunk-UZ5NGGMI.js.map → chunk-EG7XFZ3W.js.map} +1 -1
- package/dist/{chunk-D6UXVOPS.cjs → chunk-FQBTGS3E.cjs} +5 -5
- package/dist/{chunk-D6UXVOPS.cjs.map → chunk-FQBTGS3E.cjs.map} +1 -1
- package/dist/{chunk-7SFGEE4M.cjs → chunk-FUFBRKOG.cjs} +48 -48
- package/dist/{chunk-7SFGEE4M.cjs.map → chunk-FUFBRKOG.cjs.map} +1 -1
- package/dist/{chunk-VA3WQ5KJ.cjs → chunk-FYAKUU2A.cjs} +37 -20
- package/dist/chunk-FYAKUU2A.cjs.map +1 -0
- package/dist/{chunk-JR4QIU54.cjs → chunk-H4AVMUOC.cjs} +10 -4
- package/dist/chunk-H4AVMUOC.cjs.map +1 -0
- package/dist/{chunk-I2ECTLON.cjs → chunk-HXSA6QC5.cjs} +3 -3
- package/dist/{chunk-I2ECTLON.cjs.map → chunk-HXSA6QC5.cjs.map} +1 -1
- package/dist/{chunk-X5ZPYYMS.js → chunk-I3DQXUSC.js} +3 -3
- package/dist/{chunk-X5ZPYYMS.js.map → chunk-I3DQXUSC.js.map} +1 -1
- package/dist/{chunk-FN6VHMLM.cjs → chunk-IB54SKWB.cjs} +8 -8
- package/dist/{chunk-FN6VHMLM.cjs.map → chunk-IB54SKWB.cjs.map} +1 -1
- package/dist/{chunk-JP5SGIXA.cjs → chunk-IFDC4TXM.cjs} +4 -4
- package/dist/{chunk-JP5SGIXA.cjs.map → chunk-IFDC4TXM.cjs.map} +1 -1
- package/dist/{chunk-RDGRKYQ5.cjs → chunk-IINZWUGK.cjs} +58 -6
- package/dist/chunk-IINZWUGK.cjs.map +1 -0
- package/dist/{chunk-D2GID3YK.js → chunk-KREUYVMZ.js} +58 -6
- package/dist/chunk-KREUYVMZ.js.map +1 -0
- package/dist/{chunk-Y6YSJPVC.js → chunk-KRU6IGV7.js} +11 -3
- package/dist/chunk-KRU6IGV7.js.map +1 -0
- package/dist/{chunk-K52C5UBS.js → chunk-KU3XRHWA.js} +4 -4
- package/dist/{chunk-K52C5UBS.js.map → chunk-KU3XRHWA.js.map} +1 -1
- package/dist/{chunk-P2VTQ5AR.cjs → chunk-L52N6BEN.cjs} +39 -23
- package/dist/chunk-L52N6BEN.cjs.map +1 -0
- package/dist/{chunk-6GKX36JX.js → chunk-L5W7TJQ5.js} +10 -4
- package/dist/chunk-L5W7TJQ5.js.map +1 -0
- package/dist/{chunk-PAM5UUBL.cjs → chunk-L7L5S2HO.cjs} +18 -2
- package/dist/{chunk-PAM5UUBL.cjs.map → chunk-L7L5S2HO.cjs.map} +1 -1
- package/dist/{chunk-RVGTI4F6.js → chunk-LAEIVOIY.js} +37 -20
- package/dist/chunk-LAEIVOIY.js.map +1 -0
- package/dist/{chunk-Z5KFXHDP.cjs → chunk-MM7QKUE3.cjs} +5 -5
- package/dist/{chunk-Z5KFXHDP.cjs.map → chunk-MM7QKUE3.cjs.map} +1 -1
- package/dist/{chunk-FJ7YPVKV.js → chunk-MUIDWFYJ.js} +3 -3
- package/dist/{chunk-FJ7YPVKV.js.map → chunk-MUIDWFYJ.js.map} +1 -1
- package/dist/{chunk-GPZDP2IA.js → chunk-MXQ7J4BB.js} +3 -3
- package/dist/{chunk-GPZDP2IA.js.map → chunk-MXQ7J4BB.js.map} +1 -1
- package/dist/{chunk-4KFVGIY6.js → chunk-NHN6A3ZO.js} +4 -4
- package/dist/{chunk-4KFVGIY6.js.map → chunk-NHN6A3ZO.js.map} +1 -1
- package/dist/{chunk-KLLRTTC5.js → chunk-O6GJ4IYS.js} +216 -151
- package/dist/chunk-O6GJ4IYS.js.map +1 -0
- package/dist/{chunk-4SIGL6QC.cjs → chunk-O7XHHTTP.cjs} +8 -8
- package/dist/{chunk-4SIGL6QC.cjs.map → chunk-O7XHHTTP.cjs.map} +1 -1
- package/dist/{chunk-7L4SY5YY.js → chunk-OAZUDUGX.js} +6 -4
- package/dist/chunk-OAZUDUGX.js.map +1 -0
- package/dist/{chunk-NFKX6QJP.cjs → chunk-OCV33S5Q.cjs} +3 -3
- package/dist/{chunk-NFKX6QJP.cjs.map → chunk-OCV33S5Q.cjs.map} +1 -1
- package/dist/{chunk-MUUB35XB.js → chunk-ODYQYLO2.js} +27 -11
- package/dist/chunk-ODYQYLO2.js.map +1 -0
- package/dist/{chunk-FPVRQCCL.js → chunk-OHDIJOGG.js} +4 -4
- package/dist/{chunk-FPVRQCCL.js.map → chunk-OHDIJOGG.js.map} +1 -1
- package/dist/{chunk-GQVL2JKQ.cjs → chunk-OHKO5THF.cjs} +3 -3
- package/dist/{chunk-GQVL2JKQ.cjs.map → chunk-OHKO5THF.cjs.map} +1 -1
- package/dist/{chunk-LMBXJZLG.js → chunk-ON4JULCA.js} +3 -3
- package/dist/{chunk-LMBXJZLG.js.map → chunk-ON4JULCA.js.map} +1 -1
- package/dist/{chunk-4KZIXV2J.js → chunk-ONNY7UO4.js} +6 -6
- package/dist/{chunk-4KZIXV2J.js.map → chunk-ONNY7UO4.js.map} +1 -1
- package/dist/{chunk-XNU4NTVE.js → chunk-OSPTA4UR.js} +3 -3
- package/dist/{chunk-XNU4NTVE.js.map → chunk-OSPTA4UR.js.map} +1 -1
- package/dist/{chunk-FDUA6OGN.js → chunk-PFKRHNYV.js} +8 -8
- package/dist/chunk-PFKRHNYV.js.map +1 -0
- package/dist/{chunk-KFEN2SRZ.js → chunk-PHK4XBO5.js} +3 -3
- package/dist/{chunk-KFEN2SRZ.js.map → chunk-PHK4XBO5.js.map} +1 -1
- package/dist/{chunk-Q4NRKKIW.js → chunk-PYHFVYVZ.js} +3 -3
- package/dist/{chunk-Q4NRKKIW.js.map → chunk-PYHFVYVZ.js.map} +1 -1
- package/dist/{chunk-XMCIXHGH.js → chunk-Q7G56ZIO.js} +39 -23
- package/dist/chunk-Q7G56ZIO.js.map +1 -0
- package/dist/{chunk-CLRWVJOD.js → chunk-QAKASRE6.js} +32 -24
- package/dist/chunk-QAKASRE6.js.map +1 -0
- package/dist/{chunk-UBOVDAD7.js → chunk-QAQOCS2J.js} +3 -3
- package/dist/{chunk-UBOVDAD7.js.map → chunk-QAQOCS2J.js.map} +1 -1
- package/dist/{chunk-YVIH26FG.cjs → chunk-QKAYRHWP.cjs} +12 -12
- package/dist/{chunk-YVIH26FG.cjs.map → chunk-QKAYRHWP.cjs.map} +1 -1
- package/dist/{chunk-P3JEMF6E.cjs → chunk-RSCA5AZW.cjs} +4 -4
- package/dist/{chunk-P3JEMF6E.cjs.map → chunk-RSCA5AZW.cjs.map} +1 -1
- package/dist/{chunk-5Y5FSR4N.js → chunk-SCXELRRZ.js} +3 -3
- package/dist/{chunk-5Y5FSR4N.js.map → chunk-SCXELRRZ.js.map} +1 -1
- package/dist/{chunk-JWTCEWQ4.cjs → chunk-SNEQXSC5.cjs} +2 -2
- package/dist/{chunk-JWTCEWQ4.cjs.map → chunk-SNEQXSC5.cjs.map} +1 -1
- package/dist/{chunk-ZPZAZQW4.cjs → chunk-SRA2L3SQ.cjs} +6 -4
- package/dist/chunk-SRA2L3SQ.cjs.map +1 -0
- package/dist/{chunk-HK3AMH3Q.cjs → chunk-VROIMIHB.cjs} +11 -3
- package/dist/chunk-VROIMIHB.cjs.map +1 -0
- package/dist/{chunk-3SHLOF4V.cjs → chunk-VTR2KGLY.cjs} +9 -9
- package/dist/{chunk-3SHLOF4V.cjs.map → chunk-VTR2KGLY.cjs.map} +1 -1
- package/dist/chunk-WYMO3IIK.js +136 -0
- package/dist/chunk-WYMO3IIK.js.map +1 -0
- package/dist/{chunk-ABTO4RD6.cjs → chunk-X5QRRMGB.cjs} +32 -24
- package/dist/chunk-X5QRRMGB.cjs.map +1 -0
- package/dist/{chunk-SH6B4MG5.js → chunk-XBXDUAIM.js} +4 -4
- package/dist/{chunk-SH6B4MG5.js.map → chunk-XBXDUAIM.js.map} +1 -1
- package/dist/{chunk-K5GQPTTA.cjs → chunk-XEEVDZDK.cjs} +3 -3
- package/dist/{chunk-K5GQPTTA.cjs.map → chunk-XEEVDZDK.cjs.map} +1 -1
- package/dist/{chunk-GXODR6V4.js → chunk-XOIIUO6O.js} +3 -3
- package/dist/{chunk-GXODR6V4.js.map → chunk-XOIIUO6O.js.map} +1 -1
- package/dist/{chunk-AHHFFXJR.cjs → chunk-XTHMC76F.cjs} +3 -3
- package/dist/{chunk-AHHFFXJR.cjs.map → chunk-XTHMC76F.cjs.map} +1 -1
- package/dist/{chunk-TVLZZI5Q.cjs → chunk-YJP6DUFO.cjs} +9 -9
- package/dist/{chunk-TVLZZI5Q.cjs.map → chunk-YJP6DUFO.cjs.map} +1 -1
- package/dist/{chunk-EHQ77LL5.js → chunk-ZB54MTMQ.js} +3 -3
- package/dist/{chunk-EHQ77LL5.js.map → chunk-ZB54MTMQ.js.map} +1 -1
- package/dist/components/Accordion/index.cjs +2 -2
- package/dist/components/Accordion/index.js +1 -1
- package/dist/components/Alert/index.d.cts +1 -1
- package/dist/components/Alert/index.d.ts +1 -1
- package/dist/components/AlertDialog/index.cjs +6 -5
- package/dist/components/AlertDialog/index.js +5 -4
- package/dist/components/Autocomplete/index.cjs +3 -3
- package/dist/components/Autocomplete/index.js +2 -2
- package/dist/components/Badge/index.d.cts +1 -1
- package/dist/components/Badge/index.d.ts +1 -1
- package/dist/components/Breadcrumb/index.cjs +3 -3
- package/dist/components/Breadcrumb/index.js +1 -1
- package/dist/components/Button/index.cjs +3 -3
- package/dist/components/Button/index.js +1 -1
- package/dist/components/Card/index.d.cts +2 -2
- package/dist/components/Card/index.d.ts +2 -2
- package/dist/components/CountryCodeDropdown/index.cjs +5 -5
- package/dist/components/CountryCodeDropdown/index.d.cts +11 -1
- package/dist/components/CountryCodeDropdown/index.d.ts +11 -1
- package/dist/components/CountryCodeDropdown/index.js +2 -2
- 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 +9 -9
- package/dist/components/Dropdown/index.js +2 -2
- package/dist/components/FloatingWindow/index.cjs +4 -4
- package/dist/components/FloatingWindow/index.js +2 -2
- package/dist/components/GlossaryTooltip/index.cjs +3 -3
- package/dist/components/GlossaryTooltip/index.js +2 -2
- package/dist/components/KeyboardShortcutsOverlay/index.cjs +6 -5
- package/dist/components/KeyboardShortcutsOverlay/index.js +4 -3
- package/dist/components/Markdown/index.cjs +19 -19
- package/dist/components/Markdown/index.js +7 -7
- package/dist/components/MediaEditor/index.cjs +13 -12
- package/dist/components/MediaEditor/index.js +8 -7
- package/dist/components/MediaPlayer/index.cjs +6 -6
- package/dist/components/MediaPlayer/index.js +3 -3
- package/dist/components/Modal/index.cjs +11 -10
- package/dist/components/Modal/index.d.cts +1 -1
- package/dist/components/Modal/index.d.ts +1 -1
- package/dist/components/Modal/index.js +3 -2
- package/dist/components/Pagination/index.cjs +4 -4
- package/dist/components/Pagination/index.d.cts +1 -1
- package/dist/components/Pagination/index.d.ts +1 -1
- package/dist/components/Pagination/index.js +1 -1
- package/dist/components/PhoneInput/index.cjs +4 -4
- package/dist/components/PhoneInput/index.js +2 -2
- package/dist/components/Progress/index.d.cts +1 -1
- package/dist/components/Progress/index.d.ts +1 -1
- package/dist/components/RecordButton/index.d.cts +1 -1
- package/dist/components/RecordButton/index.d.ts +1 -1
- package/dist/components/RichTextEditor/index.cjs +8 -8
- package/dist/components/RichTextEditor/index.js +5 -5
- package/dist/components/SectionSpyNav/index.cjs +4 -4
- package/dist/components/SectionSpyNav/index.js +3 -3
- package/dist/components/Select/index.cjs +4 -4
- package/dist/components/Select/index.js +2 -2
- package/dist/components/Sheet/index.cjs +11 -11
- package/dist/components/Sheet/index.js +2 -2
- package/dist/components/Slider/index.d.cts +2 -2
- package/dist/components/Slider/index.d.ts +2 -2
- package/dist/components/SourceTip/index.cjs +3 -3
- package/dist/components/SourceTip/index.js +2 -2
- package/dist/components/SuperChat/index.cjs +10 -10
- package/dist/components/SuperChat/index.js +4 -4
- package/dist/components/SuperChat/plugins/index.cjs +4 -4
- package/dist/components/SuperChat/plugins/index.js +3 -3
- package/dist/components/Text/index.d.cts +1 -1
- package/dist/components/Text/index.d.ts +1 -1
- package/dist/components/ThemeProvider/index.cjs +9 -9
- package/dist/components/ThemeProvider/index.d.cts +1 -1
- package/dist/components/ThemeProvider/index.d.ts +1 -1
- package/dist/components/ThemeProvider/index.js +3 -3
- package/dist/components/Toggle/index.d.cts +1 -1
- package/dist/components/Toggle/index.d.ts +1 -1
- package/dist/components/Tooltip/index.cjs +3 -3
- package/dist/components/Tooltip/index.js +2 -2
- package/dist/components/TranscriptView/index.cjs +3 -3
- package/dist/components/TranscriptView/index.js +1 -1
- package/dist/datavis.cjs +2 -2
- package/dist/datavis.js +1 -1
- package/dist/esheet.cjs +14 -13
- package/dist/esheet.cjs.map +1 -1
- package/dist/esheet.js +11 -10
- package/dist/esheet.js.map +1 -1
- package/dist/hooks/index.cjs +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/index.cjs +1850 -1123
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +227 -29
- package/dist/index.d.ts +227 -29
- package/dist/index.js +826 -131
- package/dist/index.js.map +1 -1
- package/dist/motion.cjs +87 -0
- package/dist/motion.cjs.map +1 -0
- package/dist/motion.d.cts +52 -0
- package/dist/motion.d.ts +52 -0
- package/dist/motion.js +50 -0
- package/dist/motion.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/package.json +17 -1
- package/dist/CsvBlock-HMAZ7YK5.cjs +0 -15
- package/dist/CsvBlock-RPGHFTVD.js +0 -6
- package/dist/HtmlPreviewBlock-QHLSIMWJ.cjs +0 -15
- package/dist/HtmlPreviewBlock-YF2YVKKX.js +0 -6
- package/dist/MermaidBlock-H3TWNC4D.js +0 -6
- package/dist/MermaidBlock-ZLLBO3VY.cjs +0 -15
- package/dist/SurveyBlock-ID55AT3R.js +0 -6
- package/dist/SurveyBlock-K6HKI7AD.cjs +0 -15
- package/dist/chunk-3PXOIAF6.js +0 -3
- package/dist/chunk-4AE2L6AO.cjs.map +0 -1
- package/dist/chunk-4J4FDVPS.cjs.map +0 -1
- package/dist/chunk-5EKRH4KE.cjs.map +0 -1
- package/dist/chunk-5JZIDILK.cjs.map +0 -1
- package/dist/chunk-6GKX36JX.js.map +0 -1
- package/dist/chunk-7L4SY5YY.js.map +0 -1
- package/dist/chunk-ABTO4RD6.cjs.map +0 -1
- package/dist/chunk-CLRWVJOD.js.map +0 -1
- package/dist/chunk-D2GID3YK.js.map +0 -1
- package/dist/chunk-FDUA6OGN.js.map +0 -1
- package/dist/chunk-HK3AMH3Q.cjs.map +0 -1
- package/dist/chunk-JHZW3Y62.js.map +0 -1
- package/dist/chunk-JR4QIU54.cjs.map +0 -1
- package/dist/chunk-KLLRTTC5.js.map +0 -1
- package/dist/chunk-MUUB35XB.js.map +0 -1
- package/dist/chunk-P2VTQ5AR.cjs.map +0 -1
- package/dist/chunk-RDGRKYQ5.cjs.map +0 -1
- package/dist/chunk-RVGTI4F6.js.map +0 -1
- package/dist/chunk-VA3WQ5KJ.cjs.map +0 -1
- package/dist/chunk-XMCIXHGH.js.map +0 -1
- package/dist/chunk-Y6YSJPVC.js.map +0 -1
- package/dist/chunk-ZJ5KAZLW.js.map +0 -1
- package/dist/chunk-ZONEAWPR.cjs.map +0 -1
- package/dist/chunk-ZPZAZQW4.cjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FenceBlock } from './chunk-
|
|
2
|
-
import { Button } from './chunk-
|
|
1
|
+
import { FenceBlock } from './chunk-CK3KLRNF.js';
|
|
2
|
+
import { Button } from './chunk-KREUYVMZ.js';
|
|
3
3
|
import { Download } from 'lucide-react';
|
|
4
4
|
import { useState, useEffect, useMemo, useCallback } from 'react';
|
|
5
5
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -178,5 +178,5 @@ var CsvBlock = ({ code, id }) => {
|
|
|
178
178
|
};
|
|
179
179
|
|
|
180
180
|
export { CsvBlock };
|
|
181
|
-
//# sourceMappingURL=chunk-
|
|
182
|
-
//# sourceMappingURL=chunk-
|
|
181
|
+
//# sourceMappingURL=chunk-NHN6A3ZO.js.map
|
|
182
|
+
//# sourceMappingURL=chunk-NHN6A3ZO.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Markdown/CsvBlock.tsx"],"names":[],"mappings":"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","file":"chunk-4KFVGIY6.js","sourcesContent":["/** CSV data rendered as a sortable table. Requires `papaparse`. */\nimport { Download } from 'lucide-react';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '../Button';\nimport { FenceBlock } from './FenceBlock';\n\ninterface CsvBlockProps {\n code: string;\n id: string;\n}\n\ninterface SortConfig {\n column: string;\n direction: 'asc' | 'desc';\n}\n\ntype CsvRow = Record<string, unknown>;\n// Minimal surface of papaparse we actually use, avoiding overload conflicts.\ninterface PapaApi {\n parse(\n input: string,\n config?: Record<string, unknown>\n ): {\n meta: { fields?: string[] };\n data: CsvRow[];\n errors: Array<{ message: string }>;\n };\n unparse(data: unknown): string;\n}\n\nlet papaPromise: Promise<PapaApi> | null = null;\nfunction loadPapa() {\n if (!papaPromise) {\n papaPromise = import(/* @vite-ignore */ 'papaparse')\n .then((mod: { default?: PapaApi } & Partial<PapaApi>) => {\n const api: PapaApi = (mod.default ?? mod) as PapaApi;\n if (!api?.parse) throw new Error('papaparse export not found');\n return api;\n })\n .catch((err) => {\n papaPromise = null;\n throw err as Error;\n });\n }\n return papaPromise;\n}\n\ninterface ParsedCsv {\n headers: string[];\n rows: CsvRow[];\n error: string | null;\n}\n\nexport const CsvBlock: React.FC<CsvBlockProps> = ({ code, id }) => {\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(null);\n const [papa, setPapa] = useState<PapaApi | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n loadPapa()\n .then((api) => {\n if (!cancelled) setPapa(api);\n })\n .catch(() => {\n if (!cancelled)\n setLoadError(\n 'CSV preview requires the `papaparse` package. Install it with `npm install papaparse`.'\n );\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n const parsed = useMemo<ParsedCsv>(() => {\n if (!papa) return { headers: [], rows: [], error: null };\n try {\n const result = papa.parse(code, {\n header: true,\n dynamicTyping: true,\n skipEmptyLines: 'greedy',\n });\n if (result.errors?.length) {\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: result.errors.map((e) => e.message).join('; '),\n };\n }\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: null,\n };\n } catch (err) {\n return { headers: [], rows: [], error: (err as Error).message };\n }\n }, [code, papa]);\n\n const sortedRows = useMemo(() => {\n if (!sortConfig || parsed.error) return parsed.rows;\n return [...parsed.rows].sort((a, b) => {\n const aVal = a[sortConfig.column];\n const bVal = b[sortConfig.column];\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n const cmp =\n typeof aVal === 'number' && typeof bVal === 'number'\n ? aVal - bVal\n : String(aVal).localeCompare(String(bVal));\n return sortConfig.direction === 'asc' ? cmp : -cmp;\n });\n }, [parsed.rows, sortConfig, parsed.error]);\n\n const handleSort = useCallback((column: string) => {\n setSortConfig((prev) => {\n if (prev?.column === column) {\n return prev.direction === 'asc' ? { column, direction: 'desc' } : null;\n }\n return { column, direction: 'asc' };\n });\n }, []);\n\n const handleExportCsv = useCallback(() => {\n if (!papa) return;\n const csvContent = papa.unparse(sortedRows);\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `data-${id}.csv`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }, [sortedRows, id, papa]);\n\n if (loadError) {\n return (\n <FenceBlock code={code} language=\"csv\" error={loadError}>\n <div />\n </FenceBlock>\n );\n }\n\n if (!papa) {\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"flex items-center justify-center p-6 text-sm text-neutral-500\">\n Loading CSV parser…\n </div>\n </FenceBlock>\n );\n }\n\n if (parsed.error) {\n return (\n <FenceBlock code={code} language=\"csv\" error={parsed.error}>\n <div />\n </FenceBlock>\n );\n }\n\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"relative\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-neutral-700\">\n <span className=\"text-xs text-neutral-500 dark:text-neutral-400\">\n {sortedRows.length} row{sortedRows.length !== 1 ? 's' : ''} ×{' '}\n {parsed.headers.length} column\n {parsed.headers.length !== 1 ? 's' : ''}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleExportCsv}\n aria-label=\"Export CSV\"\n className=\"h-7 gap-1 px-2 text-xs\"\n >\n <Download className=\"h-3 w-3\" />\n Export\n </Button>\n </div>\n\n <div className=\"max-h-96 overflow-auto\">\n <table className=\"min-w-full text-sm\">\n <thead className=\"sticky top-0 bg-neutral-100 dark:bg-neutral-800\">\n <tr>\n {parsed.headers.map((header) => {\n const isSorted = sortConfig?.column === header;\n const ariaSort = isSorted\n ? sortConfig.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n return (\n <th\n key={header}\n scope=\"col\"\n aria-sort={ariaSort}\n className=\"px-3 py-2 text-start text-xs font-medium whitespace-nowrap text-neutral-600 dark:text-neutral-400\"\n >\n <button\n type=\"button\"\n onClick={() => handleSort(header)}\n className=\"flex w-full cursor-pointer items-center gap-1 text-start font-medium select-none hover:text-neutral-900 dark:hover:text-neutral-200\"\n >\n {header}\n {isSorted && (\n <span aria-hidden=\"true\">\n {sortConfig.direction === 'asc' ? '↑' : '↓'}\n </span>\n )}\n </button>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-neutral-200 dark:divide-neutral-700\">\n {sortedRows.map((row, i) => (\n <tr\n key={i}\n className=\"hover:bg-neutral-50 dark:hover:bg-neutral-800/50\"\n >\n {parsed.headers.map((header) => (\n <td\n key={header}\n className=\"px-3 py-1.5 whitespace-nowrap text-neutral-700 dark:text-neutral-300\"\n >\n {row[header] != null ? String(row[header]) : ''}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </FenceBlock>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Markdown/CsvBlock.tsx"],"names":[],"mappings":"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","file":"chunk-NHN6A3ZO.js","sourcesContent":["/** CSV data rendered as a sortable table. Requires `papaparse`. */\nimport { Download } from 'lucide-react';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '../Button';\nimport { FenceBlock } from './FenceBlock';\n\ninterface CsvBlockProps {\n code: string;\n id: string;\n}\n\ninterface SortConfig {\n column: string;\n direction: 'asc' | 'desc';\n}\n\ntype CsvRow = Record<string, unknown>;\n// Minimal surface of papaparse we actually use, avoiding overload conflicts.\ninterface PapaApi {\n parse(\n input: string,\n config?: Record<string, unknown>\n ): {\n meta: { fields?: string[] };\n data: CsvRow[];\n errors: Array<{ message: string }>;\n };\n unparse(data: unknown): string;\n}\n\nlet papaPromise: Promise<PapaApi> | null = null;\nfunction loadPapa() {\n if (!papaPromise) {\n papaPromise = import(/* @vite-ignore */ 'papaparse')\n .then((mod: { default?: PapaApi } & Partial<PapaApi>) => {\n const api: PapaApi = (mod.default ?? mod) as PapaApi;\n if (!api?.parse) throw new Error('papaparse export not found');\n return api;\n })\n .catch((err) => {\n papaPromise = null;\n throw err as Error;\n });\n }\n return papaPromise;\n}\n\ninterface ParsedCsv {\n headers: string[];\n rows: CsvRow[];\n error: string | null;\n}\n\nexport const CsvBlock: React.FC<CsvBlockProps> = ({ code, id }) => {\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(null);\n const [papa, setPapa] = useState<PapaApi | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n loadPapa()\n .then((api) => {\n if (!cancelled) setPapa(api);\n })\n .catch(() => {\n if (!cancelled)\n setLoadError(\n 'CSV preview requires the `papaparse` package. Install it with `npm install papaparse`.'\n );\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n const parsed = useMemo<ParsedCsv>(() => {\n if (!papa) return { headers: [], rows: [], error: null };\n try {\n const result = papa.parse(code, {\n header: true,\n dynamicTyping: true,\n skipEmptyLines: 'greedy',\n });\n if (result.errors?.length) {\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: result.errors.map((e) => e.message).join('; '),\n };\n }\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: null,\n };\n } catch (err) {\n return { headers: [], rows: [], error: (err as Error).message };\n }\n }, [code, papa]);\n\n const sortedRows = useMemo(() => {\n if (!sortConfig || parsed.error) return parsed.rows;\n return [...parsed.rows].sort((a, b) => {\n const aVal = a[sortConfig.column];\n const bVal = b[sortConfig.column];\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n const cmp =\n typeof aVal === 'number' && typeof bVal === 'number'\n ? aVal - bVal\n : String(aVal).localeCompare(String(bVal));\n return sortConfig.direction === 'asc' ? cmp : -cmp;\n });\n }, [parsed.rows, sortConfig, parsed.error]);\n\n const handleSort = useCallback((column: string) => {\n setSortConfig((prev) => {\n if (prev?.column === column) {\n return prev.direction === 'asc' ? { column, direction: 'desc' } : null;\n }\n return { column, direction: 'asc' };\n });\n }, []);\n\n const handleExportCsv = useCallback(() => {\n if (!papa) return;\n const csvContent = papa.unparse(sortedRows);\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `data-${id}.csv`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }, [sortedRows, id, papa]);\n\n if (loadError) {\n return (\n <FenceBlock code={code} language=\"csv\" error={loadError}>\n <div />\n </FenceBlock>\n );\n }\n\n if (!papa) {\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"flex items-center justify-center p-6 text-sm text-neutral-500\">\n Loading CSV parser…\n </div>\n </FenceBlock>\n );\n }\n\n if (parsed.error) {\n return (\n <FenceBlock code={code} language=\"csv\" error={parsed.error}>\n <div />\n </FenceBlock>\n );\n }\n\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"relative\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-neutral-700\">\n <span className=\"text-xs text-neutral-500 dark:text-neutral-400\">\n {sortedRows.length} row{sortedRows.length !== 1 ? 's' : ''} ×{' '}\n {parsed.headers.length} column\n {parsed.headers.length !== 1 ? 's' : ''}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleExportCsv}\n aria-label=\"Export CSV\"\n className=\"h-7 gap-1 px-2 text-xs\"\n >\n <Download className=\"h-3 w-3\" />\n Export\n </Button>\n </div>\n\n <div className=\"max-h-96 overflow-auto\">\n <table className=\"min-w-full text-sm\">\n <thead className=\"sticky top-0 bg-neutral-100 dark:bg-neutral-800\">\n <tr>\n {parsed.headers.map((header) => {\n const isSorted = sortConfig?.column === header;\n const ariaSort = isSorted\n ? sortConfig.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n return (\n <th\n key={header}\n scope=\"col\"\n aria-sort={ariaSort}\n className=\"px-3 py-2 text-start text-xs font-medium whitespace-nowrap text-neutral-600 dark:text-neutral-400\"\n >\n <button\n type=\"button\"\n onClick={() => handleSort(header)}\n className=\"flex w-full cursor-pointer items-center gap-1 text-start font-medium select-none hover:text-neutral-900 dark:hover:text-neutral-200\"\n >\n {header}\n {isSorted && (\n <span aria-hidden=\"true\">\n {sortConfig.direction === 'asc' ? '↑' : '↓'}\n </span>\n )}\n </button>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-neutral-200 dark:divide-neutral-700\">\n {sortedRows.map((row, i) => (\n <tr\n key={i}\n className=\"hover:bg-neutral-50 dark:hover:bg-neutral-800/50\"\n >\n {parsed.headers.map((header) => (\n <td\n key={header}\n className=\"px-3 py-1.5 whitespace-nowrap text-neutral-700 dark:text-neutral-300\"\n >\n {row[header] != null ? String(row[header]) : ''}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </FenceBlock>\n );\n};\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { useAnchoredPosition } from './chunk-WSNMQQ4P.js';
|
|
2
1
|
import { cn } from './chunk-TQONQSJO.js';
|
|
3
|
-
import
|
|
2
|
+
import { useAnchoredPosition } from './chunk-WSNMQQ4P.js';
|
|
3
|
+
import * as React3 from 'react';
|
|
4
4
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
5
|
-
import { createPortal } from 'react-dom';
|
|
6
5
|
import { cva } from 'class-variance-authority';
|
|
6
|
+
import { createPortal } from 'react-dom';
|
|
7
7
|
|
|
8
8
|
function getFileType(mimeType) {
|
|
9
9
|
if (mimeType.startsWith("image/")) return "image";
|
|
@@ -49,6 +49,7 @@ function AttachmentPreviewItem({
|
|
|
49
49
|
attachment,
|
|
50
50
|
onRemove,
|
|
51
51
|
onRetry,
|
|
52
|
+
disabled = false,
|
|
52
53
|
className
|
|
53
54
|
}) {
|
|
54
55
|
const { file, previewUrl, type, state, progress } = attachment;
|
|
@@ -68,7 +69,20 @@ function AttachmentPreviewItem({
|
|
|
68
69
|
),
|
|
69
70
|
children: [
|
|
70
71
|
(isImage || isVideo) && previewUrl ? /* @__PURE__ */ jsxs("div", { className: "relative h-20 w-20", children: [
|
|
71
|
-
/* @__PURE__ */ jsx(
|
|
72
|
+
isVideo ? /* @__PURE__ */ jsx(
|
|
73
|
+
"video",
|
|
74
|
+
{
|
|
75
|
+
src: previewUrl,
|
|
76
|
+
"aria-label": file.name,
|
|
77
|
+
muted: true,
|
|
78
|
+
playsInline: true,
|
|
79
|
+
preload: "metadata",
|
|
80
|
+
className: cn(
|
|
81
|
+
"h-full w-full object-cover",
|
|
82
|
+
(isUploading || isFailed) && "opacity-50"
|
|
83
|
+
)
|
|
84
|
+
}
|
|
85
|
+
) : /* @__PURE__ */ jsx(
|
|
72
86
|
"img",
|
|
73
87
|
{
|
|
74
88
|
src: previewUrl,
|
|
@@ -111,7 +125,7 @@ function AttachmentPreviewItem({
|
|
|
111
125
|
)
|
|
112
126
|
}
|
|
113
127
|
),
|
|
114
|
-
/* @__PURE__ */ jsx("span", { className: "mt-1 max-w-full truncate px-1 text-xs text-neutral-
|
|
128
|
+
/* @__PURE__ */ jsx("span", { className: "mt-1 max-w-full truncate px-1 text-xs text-neutral-600 dark:text-neutral-400", children: file.name.split(".").pop()?.toUpperCase() })
|
|
115
129
|
] })
|
|
116
130
|
),
|
|
117
131
|
isUploading && progress !== void 0 && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-black/50", children: /* @__PURE__ */ jsxs("div", { className: "text-center text-white", children: [
|
|
@@ -175,7 +189,8 @@ function AttachmentPreviewItem({
|
|
|
175
189
|
{
|
|
176
190
|
type: "button",
|
|
177
191
|
onClick: onRetry,
|
|
178
|
-
|
|
192
|
+
disabled,
|
|
193
|
+
className: "mt-1 text-xs text-white underline hover:no-underline disabled:no-underline disabled:opacity-50",
|
|
179
194
|
children: "Retry"
|
|
180
195
|
}
|
|
181
196
|
)
|
|
@@ -185,13 +200,15 @@ function AttachmentPreviewItem({
|
|
|
185
200
|
{
|
|
186
201
|
type: "button",
|
|
187
202
|
onClick: onRemove,
|
|
203
|
+
disabled,
|
|
188
204
|
className: cn(
|
|
189
205
|
"absolute -end-1 -top-1 z-10",
|
|
190
206
|
"rounded-full p-1",
|
|
191
207
|
"bg-neutral-900 text-white",
|
|
192
208
|
"opacity-0 group-hover:opacity-100",
|
|
193
209
|
"focus:ring-primary-500 focus:opacity-100 focus:ring-2 focus:outline-none",
|
|
194
|
-
"transition-opacity"
|
|
210
|
+
"transition-opacity",
|
|
211
|
+
"disabled:cursor-not-allowed disabled:group-hover:opacity-0"
|
|
195
212
|
),
|
|
196
213
|
"aria-label": `Remove ${file.name}`,
|
|
197
214
|
children: /* @__PURE__ */ jsx(
|
|
@@ -232,7 +249,7 @@ function AttachmentPreviewItem({
|
|
|
232
249
|
);
|
|
233
250
|
}
|
|
234
251
|
AttachmentPreviewItem.displayName = "AttachmentPreviewItem";
|
|
235
|
-
var AttachmentPicker =
|
|
252
|
+
var AttachmentPicker = React3.forwardRef(
|
|
236
253
|
({
|
|
237
254
|
onFilesSelected,
|
|
238
255
|
acceptedTypes = ["image/*", "video/*", ".pdf", ".doc", ".docx"],
|
|
@@ -245,8 +262,8 @@ var AttachmentPicker = React2.forwardRef(
|
|
|
245
262
|
className,
|
|
246
263
|
children
|
|
247
264
|
}, ref) => {
|
|
248
|
-
const inputRef =
|
|
249
|
-
|
|
265
|
+
const inputRef = React3.useRef(null);
|
|
266
|
+
React3.useImperativeHandle(ref, () => inputRef.current);
|
|
250
267
|
const handleClick = () => {
|
|
251
268
|
inputRef.current?.click();
|
|
252
269
|
};
|
|
@@ -335,11 +352,12 @@ function DragDropZone({
|
|
|
335
352
|
maxFiles = 10,
|
|
336
353
|
disabled = false,
|
|
337
354
|
onError,
|
|
355
|
+
overlayLabel = "Drop files here",
|
|
338
356
|
children,
|
|
339
357
|
className
|
|
340
358
|
}) {
|
|
341
|
-
const [isDragging, setIsDragging] =
|
|
342
|
-
const dragCounterRef =
|
|
359
|
+
const [isDragging, setIsDragging] = React3.useState(false);
|
|
360
|
+
const dragCounterRef = React3.useRef(0);
|
|
343
361
|
const handleDragEnter = (event) => {
|
|
344
362
|
event.preventDefault();
|
|
345
363
|
event.stopPropagation();
|
|
@@ -426,7 +444,7 @@ function DragDropZone({
|
|
|
426
444
|
)
|
|
427
445
|
}
|
|
428
446
|
),
|
|
429
|
-
/* @__PURE__ */ jsx("p", { className: "text-primary-700 dark:text-primary-300 mt-2 text-sm font-medium", children:
|
|
447
|
+
/* @__PURE__ */ jsx("p", { className: "text-primary-700 dark:text-primary-300 mt-2 text-sm font-medium", children: overlayLabel })
|
|
430
448
|
] })
|
|
431
449
|
}
|
|
432
450
|
)
|
|
@@ -441,7 +459,7 @@ function CameraButton({
|
|
|
441
459
|
disabled = false,
|
|
442
460
|
className
|
|
443
461
|
}) {
|
|
444
|
-
const inputRef =
|
|
462
|
+
const inputRef = React3.useRef(null);
|
|
445
463
|
const handleClick = () => {
|
|
446
464
|
inputRef.current?.click();
|
|
447
465
|
};
|
|
@@ -526,6 +544,162 @@ function activeMentionQuery(value, caret) {
|
|
|
526
544
|
const query = match[2];
|
|
527
545
|
return { query, start: caret - query.length - 1 };
|
|
528
546
|
}
|
|
547
|
+
function useMentionAutocomplete({
|
|
548
|
+
options,
|
|
549
|
+
value,
|
|
550
|
+
setValue,
|
|
551
|
+
textareaRef
|
|
552
|
+
}) {
|
|
553
|
+
const enabled = !!options && options.length > 0;
|
|
554
|
+
const [mention, setMention] = React3.useState(null);
|
|
555
|
+
const [highlight, setHighlight] = React3.useState(0);
|
|
556
|
+
const listId = React3.useId();
|
|
557
|
+
const optionId = React3.useCallback(
|
|
558
|
+
(index) => `${listId}-option-${index}`,
|
|
559
|
+
[listId]
|
|
560
|
+
);
|
|
561
|
+
const suggestions = React3.useMemo(() => {
|
|
562
|
+
if (!mention || !options) return [];
|
|
563
|
+
const q = mention.query.toLowerCase();
|
|
564
|
+
return options.filter((o) => o.label.toLowerCase().includes(q));
|
|
565
|
+
}, [mention, options]);
|
|
566
|
+
const menuOpen = enabled && mention !== null && suggestions.length > 0;
|
|
567
|
+
const {
|
|
568
|
+
anchorRef,
|
|
569
|
+
floatingRef,
|
|
570
|
+
style: menuStyle
|
|
571
|
+
} = useAnchoredPosition({
|
|
572
|
+
open: menuOpen,
|
|
573
|
+
placement: "top-start",
|
|
574
|
+
maxHeight: 224
|
|
575
|
+
});
|
|
576
|
+
const clampedHighlight = menuOpen ? Math.min(highlight, suggestions.length - 1) : -1;
|
|
577
|
+
const activeOptionId = menuOpen ? optionId(clampedHighlight) : void 0;
|
|
578
|
+
const sync = React3.useCallback(
|
|
579
|
+
(nextValue, caret) => {
|
|
580
|
+
if (!enabled) return;
|
|
581
|
+
setMention(activeMentionQuery(nextValue, caret));
|
|
582
|
+
setHighlight(0);
|
|
583
|
+
},
|
|
584
|
+
[enabled]
|
|
585
|
+
);
|
|
586
|
+
const insert = (option) => {
|
|
587
|
+
if (!mention) return;
|
|
588
|
+
const insertValue = option.value ?? option.label.split(" ")[0];
|
|
589
|
+
const before = value.slice(0, mention.start);
|
|
590
|
+
const after = value.slice(mention.start + 1 + mention.query.length);
|
|
591
|
+
const insertText = `@${insertValue} `;
|
|
592
|
+
setValue(before + insertText + after);
|
|
593
|
+
setMention(null);
|
|
594
|
+
const caret = before.length + insertText.length;
|
|
595
|
+
requestAnimationFrame(() => {
|
|
596
|
+
const el = textareaRef.current;
|
|
597
|
+
if (el) {
|
|
598
|
+
el.focus();
|
|
599
|
+
el.setSelectionRange(caret, caret);
|
|
600
|
+
}
|
|
601
|
+
});
|
|
602
|
+
};
|
|
603
|
+
const handleKeyDown = (event) => {
|
|
604
|
+
if (!menuOpen) return false;
|
|
605
|
+
if (event.key === "ArrowDown") {
|
|
606
|
+
event.preventDefault();
|
|
607
|
+
setHighlight(
|
|
608
|
+
(h) => (Math.min(h, suggestions.length - 1) + 1) % suggestions.length
|
|
609
|
+
);
|
|
610
|
+
return true;
|
|
611
|
+
}
|
|
612
|
+
if (event.key === "ArrowUp") {
|
|
613
|
+
event.preventDefault();
|
|
614
|
+
setHighlight(
|
|
615
|
+
(h) => (Math.min(h, suggestions.length - 1) - 1 + suggestions.length) % suggestions.length
|
|
616
|
+
);
|
|
617
|
+
return true;
|
|
618
|
+
}
|
|
619
|
+
if (event.key === "Enter" || event.key === "Tab") {
|
|
620
|
+
event.preventDefault();
|
|
621
|
+
const chosen = suggestions[clampedHighlight];
|
|
622
|
+
if (chosen) insert(chosen);
|
|
623
|
+
return true;
|
|
624
|
+
}
|
|
625
|
+
if (event.key === "Escape") {
|
|
626
|
+
event.preventDefault();
|
|
627
|
+
setMention(null);
|
|
628
|
+
return true;
|
|
629
|
+
}
|
|
630
|
+
return false;
|
|
631
|
+
};
|
|
632
|
+
const inputProps = enabled ? {
|
|
633
|
+
"aria-controls": menuOpen ? listId : void 0,
|
|
634
|
+
"aria-activedescendant": activeOptionId,
|
|
635
|
+
"aria-autocomplete": "list"
|
|
636
|
+
} : {};
|
|
637
|
+
return {
|
|
638
|
+
enabled,
|
|
639
|
+
menuOpen,
|
|
640
|
+
suggestions,
|
|
641
|
+
highlight: clampedHighlight,
|
|
642
|
+
listId,
|
|
643
|
+
optionId,
|
|
644
|
+
anchorRef,
|
|
645
|
+
floatingRef,
|
|
646
|
+
menuStyle,
|
|
647
|
+
sync,
|
|
648
|
+
insert,
|
|
649
|
+
setHighlight,
|
|
650
|
+
handleKeyDown,
|
|
651
|
+
inputProps
|
|
652
|
+
};
|
|
653
|
+
}
|
|
654
|
+
function MentionMenu({
|
|
655
|
+
mention,
|
|
656
|
+
label = "Mention",
|
|
657
|
+
dataSlot = "composer-mention-list"
|
|
658
|
+
}) {
|
|
659
|
+
if (!mention.menuOpen) return null;
|
|
660
|
+
return createPortal(
|
|
661
|
+
/* @__PURE__ */ jsx(
|
|
662
|
+
"ul",
|
|
663
|
+
{
|
|
664
|
+
ref: mention.floatingRef,
|
|
665
|
+
style: mention.menuStyle,
|
|
666
|
+
id: mention.listId,
|
|
667
|
+
role: "listbox",
|
|
668
|
+
"aria-label": label,
|
|
669
|
+
"data-slot": dataSlot,
|
|
670
|
+
className: "w-64 overflow-y-auto rounded-lg border border-neutral-200 bg-white py-1 shadow-lg dark:border-neutral-700 dark:bg-neutral-800",
|
|
671
|
+
children: mention.suggestions.map((option, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
672
|
+
"button",
|
|
673
|
+
{
|
|
674
|
+
type: "button",
|
|
675
|
+
id: mention.optionId(i),
|
|
676
|
+
role: "option",
|
|
677
|
+
"aria-selected": i === mention.highlight,
|
|
678
|
+
onMouseDown: (e) => {
|
|
679
|
+
e.preventDefault();
|
|
680
|
+
mention.insert(option);
|
|
681
|
+
},
|
|
682
|
+
onMouseEnter: () => mention.setHighlight(i),
|
|
683
|
+
className: cn(
|
|
684
|
+
"flex w-full items-center gap-2 px-3 py-1.5 text-start text-sm",
|
|
685
|
+
i === mention.highlight ? "bg-primary-100 text-primary-900 dark:bg-primary-900/40 dark:text-primary-100" : "text-neutral-700 dark:text-neutral-200"
|
|
686
|
+
),
|
|
687
|
+
children: [
|
|
688
|
+
option.icon,
|
|
689
|
+
/* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1 truncate", children: [
|
|
690
|
+
/* @__PURE__ */ jsx("span", { className: "font-medium", children: option.label }),
|
|
691
|
+
option.description && /* @__PURE__ */ jsx("span", { className: "ms-1 text-xs text-neutral-400", children: option.description })
|
|
692
|
+
] }),
|
|
693
|
+
option.meta && /* @__PURE__ */ jsx("span", { className: "text-[10px] text-neutral-400", children: option.meta })
|
|
694
|
+
]
|
|
695
|
+
}
|
|
696
|
+
) }, option.id))
|
|
697
|
+
}
|
|
698
|
+
),
|
|
699
|
+
document.body
|
|
700
|
+
);
|
|
701
|
+
}
|
|
702
|
+
MentionMenu.displayName = "MentionMenu";
|
|
529
703
|
function isFileAccepted(file, accepted) {
|
|
530
704
|
if (!accepted || accepted.length === 0) return true;
|
|
531
705
|
const mime = file.type;
|
|
@@ -597,7 +771,7 @@ var sendButtonVariants = cva(
|
|
|
597
771
|
}
|
|
598
772
|
}
|
|
599
773
|
);
|
|
600
|
-
var SendButton =
|
|
774
|
+
var SendButton = React3.forwardRef(
|
|
601
775
|
({ className, variant, canSend, isLoading, disabled, ...props }, ref) => {
|
|
602
776
|
return /* @__PURE__ */ jsx(
|
|
603
777
|
"button",
|
|
@@ -662,7 +836,7 @@ var SendButton = React2.forwardRef(
|
|
|
662
836
|
}
|
|
663
837
|
);
|
|
664
838
|
SendButton.displayName = "SendButton";
|
|
665
|
-
var MessageComposer =
|
|
839
|
+
var MessageComposer = React3.forwardRef(
|
|
666
840
|
({
|
|
667
841
|
onSend,
|
|
668
842
|
onTypingStart,
|
|
@@ -688,11 +862,11 @@ var MessageComposer = React2.forwardRef(
|
|
|
688
862
|
mentionOptions,
|
|
689
863
|
className
|
|
690
864
|
}, ref) => {
|
|
691
|
-
const textareaRef =
|
|
692
|
-
const [internalContent, setInternalContent] =
|
|
865
|
+
const textareaRef = React3.useRef(null);
|
|
866
|
+
const [internalContent, setInternalContent] = React3.useState("");
|
|
693
867
|
const isControlled = controlledValue !== void 0;
|
|
694
868
|
const content = isControlled ? controlledValue : internalContent;
|
|
695
|
-
const setContent =
|
|
869
|
+
const setContent = React3.useCallback(
|
|
696
870
|
(val) => {
|
|
697
871
|
if (isControlled) {
|
|
698
872
|
const newVal = typeof val === "function" ? val(controlledValue) : val;
|
|
@@ -703,20 +877,20 @@ var MessageComposer = React2.forwardRef(
|
|
|
703
877
|
},
|
|
704
878
|
[isControlled, controlledValue, onValueChange]
|
|
705
879
|
);
|
|
706
|
-
const [attachments, setAttachments] =
|
|
880
|
+
const [attachments, setAttachments] = React3.useState(
|
|
707
881
|
[]
|
|
708
882
|
);
|
|
709
|
-
const [isTyping, setIsTyping] =
|
|
710
|
-
const typingTimeoutRef =
|
|
711
|
-
|
|
712
|
-
|
|
883
|
+
const [isTyping, setIsTyping] = React3.useState(false);
|
|
884
|
+
const typingTimeoutRef = React3.useRef(null);
|
|
885
|
+
React3.useImperativeHandle(ref, () => textareaRef.current);
|
|
886
|
+
React3.useEffect(() => {
|
|
713
887
|
const textarea = textareaRef.current;
|
|
714
888
|
if (textarea) {
|
|
715
889
|
textarea.style.height = "auto";
|
|
716
890
|
textarea.style.height = `${Math.min(textarea.scrollHeight, 150)}px`;
|
|
717
891
|
}
|
|
718
892
|
}, [content]);
|
|
719
|
-
|
|
893
|
+
React3.useEffect(() => {
|
|
720
894
|
if (content.length > 0 && !isTyping) {
|
|
721
895
|
setIsTyping(true);
|
|
722
896
|
onTypingStart?.();
|
|
@@ -736,63 +910,22 @@ var MessageComposer = React2.forwardRef(
|
|
|
736
910
|
}
|
|
737
911
|
};
|
|
738
912
|
}, [content, isTyping, onTypingStart, onTypingStop]);
|
|
739
|
-
|
|
913
|
+
React3.useEffect(() => {
|
|
740
914
|
if (autoFocus) {
|
|
741
915
|
textareaRef.current?.focus();
|
|
742
916
|
}
|
|
743
917
|
}, [autoFocus]);
|
|
744
|
-
|
|
918
|
+
React3.useEffect(() => {
|
|
745
919
|
if (replyTo) {
|
|
746
920
|
textareaRef.current?.focus();
|
|
747
921
|
}
|
|
748
922
|
}, [replyTo]);
|
|
749
|
-
const
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
const mentionSuggestions = React2.useMemo(() => {
|
|
755
|
-
if (!mention || !mentionOptions) return [];
|
|
756
|
-
const q = mention.query.toLowerCase();
|
|
757
|
-
return mentionOptions.filter((o) => o.label.toLowerCase().includes(q));
|
|
758
|
-
}, [mention, mentionOptions]);
|
|
759
|
-
const mentionMenuOpen = mentionsEnabled && mention !== null && mentionSuggestions.length > 0;
|
|
760
|
-
const {
|
|
761
|
-
anchorRef: mentionAnchorRef,
|
|
762
|
-
floatingRef: mentionFloatingRef,
|
|
763
|
-
style: mentionStyle
|
|
764
|
-
} = useAnchoredPosition({
|
|
765
|
-
open: mentionMenuOpen,
|
|
766
|
-
placement: "top-start",
|
|
767
|
-
maxHeight: 224
|
|
923
|
+
const mention = useMentionAutocomplete({
|
|
924
|
+
options: mentionOptions,
|
|
925
|
+
value: content,
|
|
926
|
+
setValue: setContent,
|
|
927
|
+
textareaRef
|
|
768
928
|
});
|
|
769
|
-
const clampedMentionHighlight = mentionMenuOpen ? Math.min(mentionHighlight, mentionSuggestions.length - 1) : -1;
|
|
770
|
-
const activeMentionOptionId = mentionMenuOpen ? mentionOptionId(clampedMentionHighlight) : void 0;
|
|
771
|
-
const syncMention = React2.useCallback(
|
|
772
|
-
(value, caret) => {
|
|
773
|
-
if (!mentionsEnabled) return;
|
|
774
|
-
setMention(activeMentionQuery(value, caret));
|
|
775
|
-
setMentionHighlight(0);
|
|
776
|
-
},
|
|
777
|
-
[mentionsEnabled]
|
|
778
|
-
);
|
|
779
|
-
const insertMention = (option) => {
|
|
780
|
-
if (!mention) return;
|
|
781
|
-
const insertValue = option.value ?? option.label.split(" ")[0];
|
|
782
|
-
const before = content.slice(0, mention.start);
|
|
783
|
-
const after = content.slice(mention.start + 1 + mention.query.length);
|
|
784
|
-
const insert = `@${insertValue} `;
|
|
785
|
-
setContent(before + insert + after);
|
|
786
|
-
setMention(null);
|
|
787
|
-
const caret = before.length + insert.length;
|
|
788
|
-
requestAnimationFrame(() => {
|
|
789
|
-
const el = textareaRef.current;
|
|
790
|
-
if (el) {
|
|
791
|
-
el.focus();
|
|
792
|
-
el.setSelectionRange(caret, caret);
|
|
793
|
-
}
|
|
794
|
-
});
|
|
795
|
-
};
|
|
796
929
|
const canSend = (content.trim().length > 0 || attachments.length > 0) && content.length <= maxLength && !disabled && !isSending;
|
|
797
930
|
const handleSubmit = async (event) => {
|
|
798
931
|
event.preventDefault();
|
|
@@ -814,31 +947,7 @@ var MessageComposer = React2.forwardRef(
|
|
|
814
947
|
}
|
|
815
948
|
};
|
|
816
949
|
const handleKeyDown = (event) => {
|
|
817
|
-
if (
|
|
818
|
-
if (event.key === "ArrowDown") {
|
|
819
|
-
event.preventDefault();
|
|
820
|
-
setMentionHighlight((h) => (h + 1) % mentionSuggestions.length);
|
|
821
|
-
return;
|
|
822
|
-
}
|
|
823
|
-
if (event.key === "ArrowUp") {
|
|
824
|
-
event.preventDefault();
|
|
825
|
-
setMentionHighlight(
|
|
826
|
-
(h) => (h - 1 + mentionSuggestions.length) % mentionSuggestions.length
|
|
827
|
-
);
|
|
828
|
-
return;
|
|
829
|
-
}
|
|
830
|
-
if (event.key === "Enter" || event.key === "Tab") {
|
|
831
|
-
event.preventDefault();
|
|
832
|
-
const chosen = mentionSuggestions[mentionHighlight] ?? mentionSuggestions[0];
|
|
833
|
-
if (chosen) insertMention(chosen);
|
|
834
|
-
return;
|
|
835
|
-
}
|
|
836
|
-
if (event.key === "Escape") {
|
|
837
|
-
event.preventDefault();
|
|
838
|
-
setMention(null);
|
|
839
|
-
return;
|
|
840
|
-
}
|
|
841
|
-
}
|
|
950
|
+
if (mention.handleKeyDown(event)) return;
|
|
842
951
|
if (event.key === "Enter" && !event.shiftKey) {
|
|
843
952
|
event.preventDefault();
|
|
844
953
|
if (canSend) {
|
|
@@ -884,7 +993,7 @@ var MessageComposer = React2.forwardRef(
|
|
|
884
993
|
return prev.filter((a) => a.id !== attachmentId);
|
|
885
994
|
});
|
|
886
995
|
};
|
|
887
|
-
|
|
996
|
+
React3.useEffect(() => {
|
|
888
997
|
const currentAttachments = attachments;
|
|
889
998
|
return () => {
|
|
890
999
|
currentAttachments.forEach((a) => {
|
|
@@ -1015,49 +1124,9 @@ var MessageComposer = React2.forwardRef(
|
|
|
1015
1124
|
{
|
|
1016
1125
|
"data-slot": "composer-input-wrapper",
|
|
1017
1126
|
className: "relative flex-1",
|
|
1018
|
-
ref:
|
|
1127
|
+
ref: mention.anchorRef,
|
|
1019
1128
|
children: [
|
|
1020
|
-
|
|
1021
|
-
/* @__PURE__ */ jsx(
|
|
1022
|
-
"ul",
|
|
1023
|
-
{
|
|
1024
|
-
ref: mentionFloatingRef,
|
|
1025
|
-
style: mentionStyle,
|
|
1026
|
-
id: mentionListId,
|
|
1027
|
-
role: "listbox",
|
|
1028
|
-
"aria-label": "Mention",
|
|
1029
|
-
"data-slot": "composer-mention-list",
|
|
1030
|
-
className: "w-64 overflow-y-auto rounded-lg border border-neutral-200 bg-white py-1 shadow-lg dark:border-neutral-700 dark:bg-neutral-800",
|
|
1031
|
-
children: mentionSuggestions.map((option, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
1032
|
-
"button",
|
|
1033
|
-
{
|
|
1034
|
-
type: "button",
|
|
1035
|
-
id: mentionOptionId(i),
|
|
1036
|
-
role: "option",
|
|
1037
|
-
"aria-selected": i === clampedMentionHighlight,
|
|
1038
|
-
onMouseDown: (e) => {
|
|
1039
|
-
e.preventDefault();
|
|
1040
|
-
insertMention(option);
|
|
1041
|
-
},
|
|
1042
|
-
onMouseEnter: () => setMentionHighlight(i),
|
|
1043
|
-
className: cn(
|
|
1044
|
-
"flex w-full items-center gap-2 px-3 py-1.5 text-start text-sm",
|
|
1045
|
-
i === clampedMentionHighlight ? "bg-primary-100 text-primary-900 dark:bg-primary-900/40 dark:text-primary-100" : "text-neutral-700 dark:text-neutral-200"
|
|
1046
|
-
),
|
|
1047
|
-
children: [
|
|
1048
|
-
option.icon,
|
|
1049
|
-
/* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1 truncate", children: [
|
|
1050
|
-
/* @__PURE__ */ jsx("span", { className: "font-medium", children: option.label }),
|
|
1051
|
-
option.description && /* @__PURE__ */ jsx("span", { className: "ms-1 text-xs text-neutral-400", children: option.description })
|
|
1052
|
-
] }),
|
|
1053
|
-
option.meta && /* @__PURE__ */ jsx("span", { className: "text-[10px] text-neutral-400", children: option.meta })
|
|
1054
|
-
]
|
|
1055
|
-
}
|
|
1056
|
-
) }, option.id))
|
|
1057
|
-
}
|
|
1058
|
-
),
|
|
1059
|
-
document.body
|
|
1060
|
-
),
|
|
1129
|
+
/* @__PURE__ */ jsx(MentionMenu, { mention }),
|
|
1061
1130
|
/* @__PURE__ */ jsx(
|
|
1062
1131
|
"textarea",
|
|
1063
1132
|
{
|
|
@@ -1066,14 +1135,14 @@ var MessageComposer = React2.forwardRef(
|
|
|
1066
1135
|
value: content,
|
|
1067
1136
|
onChange: (e) => {
|
|
1068
1137
|
setContent(e.target.value);
|
|
1069
|
-
|
|
1138
|
+
mention.sync(
|
|
1070
1139
|
e.target.value,
|
|
1071
1140
|
e.target.selectionStart ?? e.target.value.length
|
|
1072
1141
|
);
|
|
1073
1142
|
},
|
|
1074
1143
|
onClick: (e) => {
|
|
1075
1144
|
const el = e.currentTarget;
|
|
1076
|
-
|
|
1145
|
+
mention.sync(el.value, el.selectionStart ?? el.value.length);
|
|
1077
1146
|
},
|
|
1078
1147
|
onKeyDown: handleKeyDown,
|
|
1079
1148
|
onPaste: handlePaste,
|
|
@@ -1093,11 +1162,7 @@ var MessageComposer = React2.forwardRef(
|
|
|
1093
1162
|
),
|
|
1094
1163
|
"aria-label": "Message",
|
|
1095
1164
|
"aria-describedby": showCharacterCount ? "char-count" : void 0,
|
|
1096
|
-
...
|
|
1097
|
-
"aria-controls": mentionMenuOpen ? mentionListId : void 0,
|
|
1098
|
-
"aria-activedescendant": activeMentionOptionId,
|
|
1099
|
-
"aria-autocomplete": "list"
|
|
1100
|
-
} : {}
|
|
1165
|
+
...mention.inputProps
|
|
1101
1166
|
}
|
|
1102
1167
|
),
|
|
1103
1168
|
inputTrailing && /* @__PURE__ */ jsx(
|
|
@@ -1140,6 +1205,6 @@ var MessageComposer = React2.forwardRef(
|
|
|
1140
1205
|
);
|
|
1141
1206
|
MessageComposer.displayName = "MessageComposer";
|
|
1142
1207
|
|
|
1143
|
-
export { AttachmentPicker, AttachmentPreviewItem, CameraButton, CharacterCounter, DragDropZone, MessageComposer, SendButton, generateAttachmentId, getFileType, sendButtonVariants, validateFile };
|
|
1144
|
-
//# sourceMappingURL=chunk-
|
|
1145
|
-
//# sourceMappingURL=chunk-
|
|
1208
|
+
export { AttachmentPicker, AttachmentPreviewItem, CameraButton, CharacterCounter, DragDropZone, MentionMenu, MessageComposer, SendButton, generateAttachmentId, getFileType, sendButtonVariants, useMentionAutocomplete, validateFile };
|
|
1209
|
+
//# sourceMappingURL=chunk-O6GJ4IYS.js.map
|
|
1210
|
+
//# sourceMappingURL=chunk-O6GJ4IYS.js.map
|