@mieweb/ui 0.8.0 → 0.9.0-dev.1
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/README.md +162 -739
- package/agent/mieweb-ui.instructions.md +34 -16
- 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-PUSTBQ5B.js.map → CsvBlock-D7Z6ZCRP.js.map} +1 -1
- package/dist/CsvBlock-QXXZ7ZUM.cjs +15 -0
- package/dist/{CsvBlock-OTFG3PYZ.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-M2ZRTGVJ.cjs.map → SurveyBlock-OYL3VNU5.cjs.map} +1 -1
- package/dist/SurveyBlock-W5PSQ62F.js +6 -0
- package/dist/{SurveyBlock-JLHS3YQD.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-XS35KPBZ.cjs → chunk-2A2FLQJC.cjs} +1140 -14
- package/dist/chunk-2A2FLQJC.cjs.map +1 -0
- package/dist/{chunk-OTQ72WX3.js → chunk-2BPIVWAK.js} +3 -3
- package/dist/{chunk-OTQ72WX3.js.map → chunk-2BPIVWAK.js.map} +1 -1
- package/dist/{chunk-6EWJGRC3.js → chunk-3JWAABYI.js} +6 -6
- package/dist/chunk-3JWAABYI.js.map +1 -0
- 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-BOW7ZGI2.cjs → chunk-4SM3I7WE.cjs} +170 -10
- package/dist/chunk-4SM3I7WE.cjs.map +1 -0
- package/dist/{chunk-QHTDWIED.js → chunk-5H7SAEQO.js} +5 -5
- package/dist/{chunk-QHTDWIED.js.map → chunk-5H7SAEQO.js.map} +1 -1
- package/dist/chunk-5VXRKOPR.cjs +735 -0
- package/dist/chunk-5VXRKOPR.cjs.map +1 -0
- 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-4CUFXCC5.cjs → chunk-5Z6UPVGC.cjs} +6 -6
- package/dist/{chunk-4CUFXCC5.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-SK7H3Z67.cjs → chunk-6XDPJWSC.cjs} +99 -83
- 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-KVE7PQ5P.cjs → chunk-7KN6J7XV.cjs} +20 -20
- package/dist/{chunk-KVE7PQ5P.cjs.map → chunk-7KN6J7XV.cjs.map} +1 -1
- package/dist/{chunk-K4S4FAYX.cjs → chunk-AHINB2TP.cjs} +11 -11
- package/dist/{chunk-K4S4FAYX.cjs.map → chunk-AHINB2TP.cjs.map} +1 -1
- package/dist/{chunk-MYFZYUPR.cjs → chunk-AOHJILLU.cjs} +38 -3
- package/dist/chunk-AOHJILLU.cjs.map +1 -0
- 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-H7QSGFMZ.cjs → chunk-BZAGP5W6.cjs} +17 -10
- package/dist/chunk-BZAGP5W6.cjs.map +1 -0
- 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-L6D4CKLV.cjs → chunk-CXDMZT45.cjs} +135 -4
- 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-DX64KLSN.js → chunk-D25WH7MH.js} +7 -7
- package/dist/{chunk-DX64KLSN.js.map → chunk-D25WH7MH.js.map} +1 -1
- package/dist/{chunk-XBKOZRDO.js → chunk-DFYMIRMW.js} +4 -4
- package/dist/{chunk-XBKOZRDO.js.map → chunk-DFYMIRMW.js.map} +1 -1
- package/dist/{chunk-AESFOMSH.js → chunk-DGRXAIWK.js} +135 -4
- 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-LQHI44OZ.cjs → chunk-FUFBRKOG.cjs} +59 -59
- package/dist/{chunk-LQHI44OZ.cjs.map → chunk-FUFBRKOG.cjs.map} +1 -1
- package/dist/{chunk-DG7KE4YJ.cjs → chunk-FYAKUU2A.cjs} +38 -21
- package/dist/chunk-FYAKUU2A.cjs.map +1 -0
- package/dist/{chunk-7L7OPISJ.cjs → chunk-H4AVMUOC.cjs} +12 -6
- 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-DCBMTFLE.js → chunk-HZ4MBUC3.js} +3 -3
- package/dist/{chunk-DCBMTFLE.js.map → chunk-HZ4MBUC3.js.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-IF3X2WZP.js +705 -0
- package/dist/chunk-IF3X2WZP.js.map +1 -0
- 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-U3JU6BI5.cjs → chunk-JEIW7BSV.cjs} +3 -3
- package/dist/{chunk-U3JU6BI5.cjs.map → chunk-JEIW7BSV.cjs.map} +1 -1
- package/dist/{chunk-RZJXCI53.js → chunk-KATEJG2F.js} +1138 -14
- package/dist/chunk-KATEJG2F.js.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-LZU7YBXG.js → chunk-KU3XRHWA.js} +169 -10
- package/dist/chunk-KU3XRHWA.js.map +1 -0
- package/dist/{chunk-P2VTQ5AR.cjs → chunk-L52N6BEN.cjs} +39 -23
- package/dist/chunk-L52N6BEN.cjs.map +1 -0
- package/dist/{chunk-XWYKLEKG.js → chunk-L5W7TJQ5.js} +11 -5
- 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-SEPYBAML.js → chunk-LAEIVOIY.js} +38 -21
- 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-YMHOF6WA.cjs → chunk-MYAU2ZUC.cjs} +3 -3
- package/dist/{chunk-YMHOF6WA.cjs.map → chunk-MYAU2ZUC.cjs.map} +1 -1
- package/dist/{chunk-5J5PEUUA.js → chunk-NHN6A3ZO.js} +6 -6
- package/dist/{chunk-5J5PEUUA.js.map → chunk-NHN6A3ZO.js.map} +1 -1
- package/dist/{chunk-EPQPUFS6.cjs → chunk-NYJIXR4Y.cjs} +6 -6
- package/dist/chunk-NYJIXR4Y.cjs.map +1 -0
- package/dist/{chunk-RYQ3S3KO.cjs → chunk-O425FKDI.cjs} +581 -70
- package/dist/chunk-O425FKDI.cjs.map +1 -0
- package/dist/{chunk-WIYQI35R.cjs → chunk-O7XHHTTP.cjs} +8 -8
- package/dist/{chunk-WIYQI35R.cjs.map → chunk-O7XHHTTP.cjs.map} +1 -1
- package/dist/{chunk-IILJGFI5.js → chunk-OAZUDUGX.js} +8 -6
- package/dist/chunk-OAZUDUGX.js.map +1 -0
- package/dist/{chunk-JHGMZX4I.cjs → chunk-OCV33S5Q.cjs} +6 -6
- package/dist/{chunk-JHGMZX4I.cjs.map → chunk-OCV33S5Q.cjs.map} +1 -1
- package/dist/{chunk-IYXCFIMP.js → chunk-ODYQYLO2.js} +33 -17
- 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-A5YOIJKL.js → chunk-ONNY7UO4.js} +15 -15
- package/dist/{chunk-A5YOIJKL.js.map → chunk-ONNY7UO4.js.map} +1 -1
- package/dist/{chunk-DWCYEPTT.js → chunk-OSPTA4UR.js} +4 -4
- package/dist/{chunk-DWCYEPTT.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-XMECP2MD.js → chunk-PHK4XBO5.js} +4 -4
- package/dist/{chunk-XMECP2MD.js.map → chunk-PHK4XBO5.js.map} +1 -1
- package/dist/{chunk-ZZJ4ZVYR.cjs → chunk-PJ6CC53R.cjs} +3 -3
- package/dist/{chunk-ZZJ4ZVYR.cjs.map → chunk-PJ6CC53R.cjs.map} +1 -1
- package/dist/{chunk-N3Y43KOB.js → chunk-PYHFVYVZ.js} +12 -5
- package/dist/chunk-PYHFVYVZ.js.map +1 -0
- package/dist/{chunk-XMCIXHGH.js → chunk-Q7G56ZIO.js} +39 -23
- package/dist/chunk-Q7G56ZIO.js.map +1 -0
- package/dist/{chunk-4PIW3Y5M.js → chunk-QAKASRE6.js} +34 -26
- package/dist/chunk-QAKASRE6.js.map +1 -0
- package/dist/{chunk-QGZC43L7.js → chunk-QAQOCS2J.js} +5 -5
- package/dist/{chunk-QGZC43L7.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-FDV7EQWH.js → chunk-RPG2ZP2T.js} +575 -68
- package/dist/chunk-RPG2ZP2T.js.map +1 -0
- 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-U5TTXN45.cjs → chunk-SRA2L3SQ.cjs} +9 -7
- package/dist/chunk-SRA2L3SQ.cjs.map +1 -0
- package/dist/{chunk-5U6GETAW.js → chunk-TQDZLRIE.js} +3 -3
- package/dist/chunk-TQDZLRIE.js.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-XO3WLK65.js → chunk-VVDE4CHU.js} +3 -3
- package/dist/{chunk-XO3WLK65.js.map → chunk-VVDE4CHU.js.map} +1 -1
- package/dist/{chunk-BOOJDRJO.js → chunk-WSNMQQ4P.js} +38 -3
- package/dist/chunk-WSNMQQ4P.js.map +1 -0
- package/dist/chunk-WYMO3IIK.js +136 -0
- package/dist/chunk-WYMO3IIK.js.map +1 -0
- package/dist/{chunk-SPWVKDGC.cjs → chunk-X5QRRMGB.cjs} +35 -27
- 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-56QJHQ5C.cjs → chunk-XEEVDZDK.cjs} +5 -5
- package/dist/{chunk-56QJHQ5C.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-ELYGV32O.cjs → chunk-XTHMC76F.cjs} +5 -5
- package/dist/{chunk-ELYGV32O.cjs.map → chunk-XTHMC76F.cjs.map} +1 -1
- package/dist/{chunk-FF235PKY.cjs → chunk-XWZEECEX.cjs} +3 -3
- package/dist/chunk-XWZEECEX.cjs.map +1 -0
- 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.cjs +5 -5
- package/dist/components/Alert/index.d.cts +1 -1
- package/dist/components/Alert/index.d.ts +1 -1
- package/dist/components/Alert/index.js +1 -1
- package/dist/components/AlertDialog/index.cjs +6 -5
- package/dist/components/AlertDialog/index.js +5 -4
- package/dist/components/AudioPlayer/index.cjs +6 -6
- package/dist/components/AudioPlayer/index.js +1 -1
- package/dist/components/Autocomplete/index.cjs +4 -4
- package/dist/components/Autocomplete/index.js +3 -3
- package/dist/components/Avatar/index.cjs +5 -5
- package/dist/components/Avatar/index.js +1 -1
- 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 +6 -6
- package/dist/components/CountryCodeDropdown/index.d.cts +11 -1
- package/dist/components/CountryCodeDropdown/index.d.ts +11 -1
- 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 +13 -9
- package/dist/components/Dropdown/index.d.cts +38 -2
- package/dist/components/Dropdown/index.d.ts +38 -2
- package/dist/components/Dropdown/index.js +3 -3
- package/dist/components/FloatingWindow/index.cjs +4 -4
- package/dist/components/FloatingWindow/index.js +2 -2
- package/dist/components/GlossaryTooltip/index.cjs +4 -4
- package/dist/components/GlossaryTooltip/index.js +3 -3
- package/dist/components/KeyboardShortcutsOverlay/index.cjs +6 -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 +15 -14
- package/dist/components/MediaEditor/index.js +10 -9
- 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/QuickAction/index.cjs +6 -6
- package/dist/components/QuickAction/index.js +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 +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/Slider/index.cjs +5 -5
- package/dist/components/Slider/index.d.cts +2 -2
- package/dist/components/Slider/index.d.ts +2 -2
- package/dist/components/Slider/index.js +1 -1
- package/dist/components/SourceTip/index.cjs +4 -4
- package/dist/components/SourceTip/index.js +3 -3
- package/dist/components/SuperChat/index.cjs +292 -115
- package/dist/components/SuperChat/index.cjs.map +1 -1
- package/dist/components/SuperChat/index.d.cts +29 -8
- package/dist/components/SuperChat/index.d.ts +29 -8
- package/dist/components/SuperChat/index.js +284 -107
- package/dist/components/SuperChat/index.js.map +1 -1
- package/dist/components/SuperChat/plugins/index.cjs +7 -7
- package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
- package/dist/components/SuperChat/plugins/index.d.cts +2 -2
- package/dist/components/SuperChat/plugins/index.d.ts +2 -2
- package/dist/components/SuperChat/plugins/index.js +6 -6
- package/dist/components/SuperChat/plugins/index.js.map +1 -1
- 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 +15 -14
- package/dist/esheet.cjs.map +1 -1
- package/dist/esheet.js +12 -11
- package/dist/esheet.js.map +1 -1
- package/dist/hooks/index.cjs +3 -3
- package/dist/hooks/index.d.cts +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.js +2 -2
- package/dist/index.cjs +2509 -2860
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +278 -43
- package/dist/index.d.ts +278 -43
- package/dist/index.js +1305 -1700
- 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/init.css +25 -0
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/dist/{types-BoTeTPdH.d.ts → types-9vK_YdEb.d.ts} +12 -1
- package/dist/{types-DyIB9HYT.d.cts → types-DZDroUW8.d.cts} +12 -1
- package/dist/{useAnchoredPosition-C7PNglzD.d.ts → useAnchoredPosition-CKwLSQW8.d.cts} +10 -3
- package/dist/{useAnchoredPosition-C7PNglzD.d.cts → useAnchoredPosition-CKwLSQW8.d.ts} +10 -3
- package/package.json +21 -2
- package/dist/CsvBlock-OTFG3PYZ.cjs +0 -15
- package/dist/CsvBlock-PUSTBQ5B.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-JLHS3YQD.js +0 -6
- package/dist/SurveyBlock-M2ZRTGVJ.cjs +0 -15
- package/dist/chunk-26DPQUSB.cjs +0 -1177
- package/dist/chunk-26DPQUSB.cjs.map +0 -1
- package/dist/chunk-3PXOIAF6.js +0 -3
- package/dist/chunk-4AE2L6AO.cjs.map +0 -1
- package/dist/chunk-4PIW3Y5M.js.map +0 -1
- package/dist/chunk-5JZIDILK.cjs.map +0 -1
- package/dist/chunk-5U6GETAW.js.map +0 -1
- package/dist/chunk-6EWJGRC3.js.map +0 -1
- package/dist/chunk-7L7OPISJ.cjs.map +0 -1
- package/dist/chunk-AESFOMSH.js.map +0 -1
- package/dist/chunk-BOOJDRJO.js.map +0 -1
- package/dist/chunk-BOW7ZGI2.cjs.map +0 -1
- package/dist/chunk-D2GID3YK.js.map +0 -1
- package/dist/chunk-DG7KE4YJ.cjs.map +0 -1
- package/dist/chunk-EKRT7K2K.js +0 -1145
- package/dist/chunk-EKRT7K2K.js.map +0 -1
- package/dist/chunk-EPQPUFS6.cjs.map +0 -1
- package/dist/chunk-FDUA6OGN.js.map +0 -1
- package/dist/chunk-FDV7EQWH.js.map +0 -1
- package/dist/chunk-FF235PKY.cjs.map +0 -1
- package/dist/chunk-H7QSGFMZ.cjs.map +0 -1
- package/dist/chunk-HK3AMH3Q.cjs.map +0 -1
- package/dist/chunk-IILJGFI5.js.map +0 -1
- package/dist/chunk-IYXCFIMP.js.map +0 -1
- package/dist/chunk-JHZW3Y62.js.map +0 -1
- package/dist/chunk-L6D4CKLV.cjs.map +0 -1
- package/dist/chunk-LZU7YBXG.js.map +0 -1
- package/dist/chunk-MYFZYUPR.cjs.map +0 -1
- package/dist/chunk-N3Y43KOB.js.map +0 -1
- package/dist/chunk-P2VTQ5AR.cjs.map +0 -1
- package/dist/chunk-RDGRKYQ5.cjs.map +0 -1
- package/dist/chunk-RYQ3S3KO.cjs.map +0 -1
- package/dist/chunk-RZJXCI53.js.map +0 -1
- package/dist/chunk-SEPYBAML.js.map +0 -1
- package/dist/chunk-SK7H3Z67.cjs.map +0 -1
- package/dist/chunk-SPWVKDGC.cjs.map +0 -1
- package/dist/chunk-U5TTXN45.cjs.map +0 -1
- package/dist/chunk-XMCIXHGH.js.map +0 -1
- package/dist/chunk-XS35KPBZ.cjs.map +0 -1
- package/dist/chunk-XWYKLEKG.js.map +0 -1
- package/dist/chunk-Y6YSJPVC.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Messaging/AttachmentPicker.tsx","../src/components/Messaging/MessageComposer.tsx"],"names":["jsxs","cn","jsx","React","Fragment","cva","React2","useAnchoredPosition","createPortal"],"mappings":"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","file":"chunk-26DPQUSB.cjs","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport type { AttachmentType, AttachmentState } from './types';\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Get file type from MIME type.\n */\nfunction getFileType(mimeType: string): AttachmentType {\n if (mimeType.startsWith('image/')) return 'image';\n if (mimeType.startsWith('video/')) return 'video';\n if (mimeType.startsWith('audio/')) return 'audio';\n if (\n mimeType.includes('pdf') ||\n mimeType.includes('document') ||\n mimeType.includes('text')\n ) {\n return 'document';\n }\n return 'file';\n}\n\n/**\n * Format file size in human-readable format.\n */\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/**\n * Validate file type and size.\n */\nfunction validateFile(\n file: File,\n acceptedTypes?: string[],\n maxSize?: number\n): { valid: boolean; error?: string } {\n if (acceptedTypes && acceptedTypes.length > 0) {\n const isAccepted = acceptedTypes.some((type) => {\n if (type.startsWith('.')) {\n return file.name.toLowerCase().endsWith(type.toLowerCase());\n }\n if (type.endsWith('/*')) {\n return file.type.startsWith(type.replace('/*', '/'));\n }\n return file.type === type;\n });\n if (!isAccepted) {\n return { valid: false, error: 'File type not supported' };\n }\n }\n\n if (maxSize && file.size > maxSize) {\n return {\n valid: false,\n error: `File too large (max ${formatFileSize(maxSize)})`,\n };\n }\n\n return { valid: true };\n}\n\n/**\n * Generate a unique ID for attachments.\n */\nfunction generateAttachmentId(): string {\n return `attachment-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n// ============================================================================\n// Attachment Preview Item Component\n// ============================================================================\n\nexport interface AttachmentPreviewItemProps {\n /** The attachment to preview */\n attachment: {\n id: string;\n file: File;\n previewUrl?: string;\n type: AttachmentType;\n state: AttachmentState;\n progress?: number;\n error?: string;\n };\n /** Called when remove is clicked */\n onRemove: () => void;\n /** Called when retry is clicked */\n onRetry?: () => void;\n className?: string;\n}\n\n/**\n * Preview item for a pending attachment.\n */\nfunction AttachmentPreviewItem({\n attachment,\n onRemove,\n onRetry,\n className,\n}: AttachmentPreviewItemProps) {\n const { file, previewUrl, type, state, progress } = attachment;\n const isImage = type === 'image';\n const isVideo = type === 'video';\n const isUploading = state === 'uploading';\n const isFailed = state === 'failed';\n\n return (\n <div\n className={cn(\n 'group relative overflow-hidden rounded-lg',\n 'bg-neutral-100 dark:bg-neutral-800',\n 'border border-neutral-200 dark:border-neutral-700',\n isFailed && 'border-red-500',\n className\n )}\n >\n {/* Image/Video preview */}\n {(isImage || isVideo) && previewUrl ? (\n <div className=\"relative h-20 w-20\">\n <img\n src={previewUrl}\n alt={file.name}\n className={cn(\n 'h-full w-full object-cover',\n (isUploading || isFailed) && 'opacity-50'\n )}\n />\n {isVideo && (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <svg\n aria-hidden=\"true\"\n className=\"h-6 w-6 text-white drop-shadow\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n </div>\n )}\n </div>\n ) : (\n /* File preview */\n <div className=\"flex h-20 w-20 flex-col items-center justify-center p-2\">\n <svg\n aria-hidden=\"true\"\n className=\"h-8 w-8 text-neutral-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n <span className=\"mt-1 max-w-full truncate px-1 text-xs text-neutral-500\">\n {file.name.split('.').pop()?.toUpperCase()}\n </span>\n </div>\n )}\n\n {/* Upload progress overlay */}\n {isUploading && progress !== undefined && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/50\">\n <div className=\"text-center text-white\">\n <svg\n aria-hidden=\"true\"\n className=\"mx-auto h-6 w-6 animate-spin\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n <span className=\"mt-1 text-xs\">{progress}%</span>\n </div>\n </div>\n )}\n\n {/* Error overlay */}\n {isFailed && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/50\">\n <div className=\"text-center\">\n <svg\n aria-hidden=\"true\"\n className=\"mx-auto h-6 w-6 text-red-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"mt-1 text-xs text-white underline hover:no-underline\"\n >\n Retry\n </button>\n )}\n </div>\n </div>\n )}\n\n {/* Remove button */}\n <button\n type=\"button\"\n onClick={onRemove}\n className={cn(\n 'absolute -top-1 -right-1 z-10',\n 'rounded-full p-1',\n 'bg-neutral-900 text-white',\n 'opacity-0 group-hover:opacity-100',\n 'focus:ring-primary-500 focus:opacity-100 focus:ring-2 focus:outline-none',\n 'transition-opacity'\n )}\n aria-label={`Remove ${file.name}`}\n >\n <svg\n aria-hidden=\"true\"\n className=\"h-3 w-3\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n\n {/* File name tooltip on hover */}\n <div\n className={cn(\n 'absolute right-0 bottom-0 left-0',\n 'bg-black/70 px-1 py-0.5',\n 'opacity-0 group-hover:opacity-100',\n 'transition-opacity'\n )}\n >\n <p className=\"truncate text-xs text-white\">{file.name}</p>\n </div>\n </div>\n );\n}\n\nAttachmentPreviewItem.displayName = 'AttachmentPreviewItem';\n\n// ============================================================================\n// Attachment Picker Component\n// ============================================================================\n\nexport interface AttachmentPickerProps {\n /** Called when files are selected */\n onFilesSelected: (files: File[]) => void;\n /** Accepted file types (MIME types or extensions) */\n acceptedTypes?: string[];\n /** Maximum file size in bytes */\n maxFileSize?: number;\n /** Maximum number of files */\n maxFiles?: number;\n /** Whether multiple files can be selected */\n multiple?: boolean;\n /** Whether the picker is disabled */\n disabled?: boolean;\n /** Called when an error occurs */\n onError?: (error: string) => void;\n className?: string;\n children?: React.ReactNode;\n}\n\n/**\n * A button/trigger component for selecting attachments.\n */\nconst AttachmentPicker = React.forwardRef<\n HTMLInputElement,\n AttachmentPickerProps\n>(\n (\n {\n onFilesSelected,\n acceptedTypes = ['image/*', 'video/*', '.pdf', '.doc', '.docx'],\n maxFileSize = 25 * 1024 * 1024, // 25MB\n maxFiles = 10,\n multiple = true,\n disabled = false,\n onError,\n className,\n children,\n },\n ref\n ) => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Combine refs\n React.useImperativeHandle(ref, () => inputRef.current!);\n\n const handleClick = () => {\n inputRef.current?.click();\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files || []);\n if (files.length === 0) return;\n\n // Validate files\n const validFiles: File[] = [];\n for (const file of files.slice(0, maxFiles)) {\n const validation = validateFile(file, acceptedTypes, maxFileSize);\n if (validation.valid) {\n validFiles.push(file);\n } else if (onError) {\n onError(`${file.name}: ${validation.error}`);\n }\n }\n\n if (files.length > maxFiles && onError) {\n onError(`Maximum ${maxFiles} files allowed`);\n }\n\n if (validFiles.length > 0) {\n onFilesSelected(validFiles);\n }\n\n // Reset input\n event.target.value = '';\n };\n\n return (\n <>\n <input\n ref={inputRef}\n type=\"file\"\n accept={acceptedTypes.join(',')}\n multiple={multiple}\n onChange={handleChange}\n disabled={disabled}\n className=\"sr-only\"\n aria-label=\"Select files to attach\"\n />\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n data-slot=\"attachment-picker-button\"\n className={cn(\n 'inline-flex items-center justify-center',\n 'rounded-full p-2',\n 'text-neutral-500 hover:text-neutral-700',\n 'dark:text-neutral-400 dark:hover:text-neutral-200',\n 'hover:bg-neutral-100 dark:hover:bg-neutral-800',\n 'focus:ring-primary-500 focus:ring-2 focus:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'transition-colors',\n className\n )}\n aria-label=\"Attach files\"\n >\n {children || (\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15.172 7l-6.586 6.586a2 2 0 102.828 2.828l6.414-6.586a4 4 0 00-5.656-5.656l-6.415 6.585a6 6 0 108.486 8.486L20.5 13\"\n />\n </svg>\n )}\n </button>\n </>\n );\n }\n);\n\nAttachmentPicker.displayName = 'AttachmentPicker';\n\n// ============================================================================\n// Drag Drop Zone Component\n// ============================================================================\n\nexport interface DragDropZoneProps {\n /** Called when files are dropped */\n onFilesDropped: (files: File[]) => void;\n /** Accepted file types */\n acceptedTypes?: string[];\n /** Maximum file size */\n maxFileSize?: number;\n /** Maximum number of files */\n maxFiles?: number;\n /** Whether the zone is disabled */\n disabled?: boolean;\n /** Called when an error occurs */\n onError?: (error: string) => void;\n /** Children to render inside the zone */\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * A wrapper component that accepts drag-and-drop files.\n */\nfunction DragDropZone({\n onFilesDropped,\n acceptedTypes,\n maxFileSize,\n maxFiles = 10,\n disabled = false,\n onError,\n children,\n className,\n}: DragDropZoneProps) {\n const [isDragging, setIsDragging] = React.useState(false);\n const dragCounterRef = React.useRef(0);\n\n const handleDragEnter = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n if (disabled) return;\n\n dragCounterRef.current++;\n if (event.dataTransfer.items && event.dataTransfer.items.length > 0) {\n setIsDragging(true);\n }\n };\n\n const handleDragLeave = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n if (disabled) return;\n\n dragCounterRef.current--;\n if (dragCounterRef.current === 0) {\n setIsDragging(false);\n }\n };\n\n const handleDragOver = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const handleDrop = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n if (disabled) return;\n\n setIsDragging(false);\n dragCounterRef.current = 0;\n\n const files = Array.from(event.dataTransfer.files);\n if (files.length === 0) return;\n\n // Validate files\n const validFiles: File[] = [];\n for (const file of files.slice(0, maxFiles)) {\n const validation = validateFile(file, acceptedTypes, maxFileSize);\n if (validation.valid) {\n validFiles.push(file);\n } else if (onError) {\n onError(`${file.name}: ${validation.error}`);\n }\n }\n\n if (files.length > maxFiles && onError) {\n onError(`Maximum ${maxFiles} files allowed`);\n }\n\n if (validFiles.length > 0) {\n onFilesDropped(validFiles);\n }\n };\n\n return (\n <div\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n className={cn('relative', className)}\n >\n {children}\n\n {/* Drag overlay */}\n {isDragging && (\n <div\n className={cn(\n 'absolute inset-0 z-50',\n 'flex items-center justify-center',\n 'bg-primary-50/90 dark:bg-primary-900/90',\n 'border-primary-500 border-2 border-dashed',\n 'rounded-lg'\n )}\n >\n <div className=\"text-center\">\n <svg\n aria-hidden=\"true\"\n className=\"text-primary-800 mx-auto h-12 w-12\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\"\n />\n </svg>\n <p className=\"text-primary-700 dark:text-primary-300 mt-2 text-sm font-medium\">\n Drop files here\n </p>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nDragDropZone.displayName = 'DragDropZone';\n\n// ============================================================================\n// Camera Button Component (Mobile)\n// ============================================================================\n\nexport interface CameraButtonProps {\n /** Called when a photo is captured */\n onCapture: (file: File) => void;\n /** Whether to use front camera */\n useFrontCamera?: boolean;\n /** Whether the button is disabled */\n disabled?: boolean;\n className?: string;\n}\n\n/**\n * Button to capture photos from camera (mobile).\n */\nfunction CameraButton({\n onCapture,\n useFrontCamera = false,\n disabled = false,\n className,\n}: CameraButtonProps) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const handleClick = () => {\n inputRef.current?.click();\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (file) {\n onCapture(file);\n }\n event.target.value = '';\n };\n\n return (\n <>\n <input\n ref={inputRef}\n type=\"file\"\n accept=\"image/*\"\n capture={useFrontCamera ? 'user' : 'environment'}\n onChange={handleChange}\n disabled={disabled}\n className=\"sr-only\"\n aria-label=\"Take a photo\"\n />\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n className={cn(\n 'inline-flex items-center justify-center',\n 'rounded-full p-2',\n 'text-neutral-500 hover:text-neutral-700',\n 'dark:text-neutral-400 dark:hover:text-neutral-200',\n 'hover:bg-neutral-100 dark:hover:bg-neutral-800',\n 'focus:ring-primary-500 focus:ring-2 focus:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'transition-colors',\n className\n )}\n aria-label=\"Take a photo\"\n >\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 13a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n </button>\n </>\n );\n}\n\nCameraButton.displayName = 'CameraButton';\n\nexport {\n AttachmentPicker,\n AttachmentPreviewItem,\n DragDropZone,\n CameraButton,\n getFileType,\n formatFileSize,\n validateFile,\n generateAttachmentId,\n};\n","import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\nimport type { AttachmentType, NewMessage } from './types';\nimport {\n AttachmentPicker,\n AttachmentPreviewItem,\n CameraButton,\n DragDropZone,\n getFileType,\n generateAttachmentId,\n} from './AttachmentPicker';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface PendingAttachment {\n id: string;\n file: File;\n previewUrl?: string;\n type: AttachmentType;\n state: 'pending' | 'uploading' | 'uploaded' | 'failed';\n progress?: number;\n error?: string;\n}\n\n/**\n * A candidate for the composer's `@mention` autocomplete. Generic so any\n * surface (multi-party chat, agent picker, …) can supply its own list.\n */\nexport interface MentionOption {\n /** Stable id (returned to the host so it can map a selection back). */\n id: string;\n /** Display name shown in the suggestion list. */\n label: string;\n /** Text inserted after `@` on selection. Defaults to the first word of `label`. */\n value?: string;\n /** Optional secondary text shown after the label. */\n description?: string;\n /** Optional leading node (e.g. an avatar). */\n icon?: React.ReactNode;\n /** Optional trailing meta text (e.g. a kind tag). */\n meta?: string;\n}\n\n/**\n * Find the active `@query` immediately before the caret, if any. The `@` must\n * start the string or follow whitespace, and the token must contain no spaces\n * or further `@`.\n */\nfunction activeMentionQuery(\n value: string,\n caret: number\n): { query: string; start: number } | null {\n const upToCaret = value.slice(0, caret);\n const match = /(^|\\s)@([^\\s@]*)$/.exec(upToCaret);\n if (!match) return null;\n const query = match[2];\n return { query, start: caret - query.length - 1 };\n}\n\n/**\n * Whether a file satisfies one of the accepted `<input accept>` tokens.\n * Supports `type/*` wildcards, exact `type/subtype` tokens, and `.ext`\n * extension tokens (matched against the file name, mirroring the native\n * `<input accept>` behavior used by the picker and drag-and-drop).\n */\nfunction isFileAccepted(file: File, accepted: string[]): boolean {\n if (!accepted || accepted.length === 0) return true;\n const mime = file.type;\n const name = file.name.toLowerCase();\n return accepted.some((token) => {\n if (token.startsWith('.')) return name.endsWith(token.toLowerCase());\n if (token.endsWith('/*')) return mime.startsWith(token.slice(0, -1));\n if (token.includes('/')) return mime === token;\n return false;\n });\n}\n\n// ============================================================================\n// Character Counter Component\n// ============================================================================\n\nexport interface CharacterCounterProps {\n current: number;\n max: number;\n showWarningAt?: number;\n className?: string;\n}\n\n/**\n * Displays character count with warning colors.\n */\nfunction CharacterCounter({\n current,\n max,\n showWarningAt = 0.9,\n className,\n}: CharacterCounterProps) {\n const percentage = current / max;\n const isWarning = percentage >= showWarningAt && percentage < 1;\n const isOver = current > max;\n\n return (\n <span\n className={cn(\n 'text-xs tabular-nums',\n isOver\n ? 'font-medium text-red-700 dark:text-red-400'\n : isWarning\n ? 'text-amber-700 dark:text-amber-400'\n : 'text-neutral-600 dark:text-neutral-400',\n className\n )}\n aria-live=\"polite\"\n aria-label={`${current} of ${max} characters`}\n >\n {current}/{max}\n </span>\n );\n}\n\nCharacterCounter.displayName = 'CharacterCounter';\n\n// ============================================================================\n// Send Button Component\n// ============================================================================\n\nconst sendButtonVariants = cva(\n [\n 'inline-flex items-center justify-center',\n 'rounded-full p-3 self-start',\n 'transition-all duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n ],\n {\n variants: {\n variant: {\n primary: [\n 'bg-primary-800 text-white',\n 'hover:bg-primary-900',\n 'active:scale-95',\n ],\n subtle: [\n 'bg-transparent text-primary-800',\n 'hover:bg-primary-50 dark:hover:bg-primary-900/20',\n ],\n },\n canSend: {\n true: '',\n false: 'opacity-50 cursor-not-allowed',\n },\n },\n defaultVariants: {\n variant: 'primary',\n canSend: false,\n },\n }\n);\n\nexport interface SendButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof sendButtonVariants> {\n isLoading?: boolean;\n}\n\n/**\n * Send button with loading state.\n */\nconst SendButton = React.forwardRef<HTMLButtonElement, SendButtonProps>(\n ({ className, variant, canSend, isLoading, disabled, ...props }, ref) => {\n return (\n <button\n ref={ref}\n type=\"submit\"\n disabled={disabled || !canSend || isLoading}\n data-slot=\"composer-send-button\"\n className={cn(sendButtonVariants({ variant, canSend }), className)}\n aria-label={isLoading ? 'Sending message' : 'Send message'}\n {...props}\n >\n {isLoading ? (\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5 animate-spin\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n ) : (\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 19l9 2-9-18-9 18 9-2zm0 0v-8\"\n />\n </svg>\n )}\n </button>\n );\n }\n);\n\nSendButton.displayName = 'SendButton';\n\n// ============================================================================\n// Message Composer Component\n// ============================================================================\n\nexport interface MessageComposerProps {\n /** Called when a message is sent */\n onSend: (message: NewMessage) => void | Promise<void>;\n /** Called when the user starts typing */\n onTypingStart?: () => void;\n /** Called when the user stops typing */\n onTypingStop?: () => void;\n /** Controlled value for the textarea */\n value?: string;\n /** Callback when value changes (for controlled mode) */\n onValueChange?: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Maximum message length */\n maxLength?: number;\n /** Show character count */\n showCharacterCount?: boolean;\n /** Whether the composer is disabled */\n disabled?: boolean;\n /** Whether a message is currently being sent */\n isSending?: boolean;\n /** Show attachment picker */\n showAttachmentPicker?: boolean;\n /** Show camera button (mobile) */\n showCameraButton?: boolean;\n /** Accepted file types */\n acceptedFileTypes?: string[];\n /** Maximum file size */\n maxFileSize?: number;\n /** Maximum number of attachments */\n maxAttachments?: number;\n /** Called when an error occurs */\n onError?: (error: string) => void;\n /** Auto-focus the input */\n autoFocus?: boolean;\n /** Reply-to message reference */\n replyTo?: {\n id: string;\n content: string;\n senderName: string;\n } | null;\n /** Called when reply is cancelled */\n onCancelReply?: () => void;\n /** Visual variant - 'default' shows border-t, 'minimal' has no border */\n variant?: 'default' | 'minimal';\n /** Content to render inside the input wrapper (e.g. a mic button) */\n inputTrailing?: React.ReactNode;\n /**\n * Candidates for `@mention` autocomplete. When provided (non-empty), typing\n * `@` opens a picker. Omit to disable mentions entirely (default).\n */\n mentionOptions?: MentionOption[];\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A message input component with attachment support and send button.\n *\n * @example\n * ```tsx\n * <MessageComposer\n * onSend={handleSend}\n * placeholder=\"Type a message...\"\n * showAttachmentPicker\n * maxLength={1600}\n * />\n * ```\n */\nconst MessageComposer = React.forwardRef<\n HTMLTextAreaElement,\n MessageComposerProps\n>(\n (\n {\n onSend,\n onTypingStart,\n onTypingStop,\n value: controlledValue,\n onValueChange,\n placeholder = 'Type a message...',\n maxLength = 1600,\n showCharacterCount = false,\n disabled = false,\n isSending = false,\n showAttachmentPicker = true,\n showCameraButton = false,\n acceptedFileTypes = ['image/*', 'video/*', '.pdf', '.doc', '.docx'],\n maxFileSize = 25 * 1024 * 1024,\n maxAttachments = 10,\n onError,\n autoFocus = false,\n replyTo = null,\n onCancelReply,\n variant = 'default',\n inputTrailing,\n mentionOptions,\n className,\n },\n ref\n ) => {\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n const [internalContent, setInternalContent] = React.useState('');\n const isControlled = controlledValue !== undefined;\n const content = isControlled ? controlledValue : internalContent;\n const setContent = React.useCallback(\n (val: string | ((prev: string) => string)) => {\n if (isControlled) {\n const newVal = typeof val === 'function' ? val(controlledValue) : val;\n onValueChange?.(newVal);\n } else {\n setInternalContent(val);\n }\n },\n [isControlled, controlledValue, onValueChange]\n );\n const [attachments, setAttachments] = React.useState<PendingAttachment[]>(\n []\n );\n const [isTyping, setIsTyping] = React.useState(false);\n const typingTimeoutRef = React.useRef<NodeJS.Timeout | null>(null);\n\n // Combine refs\n React.useImperativeHandle(ref, () => textareaRef.current!);\n\n // Auto-resize textarea\n React.useEffect(() => {\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.height = 'auto';\n textarea.style.height = `${Math.min(textarea.scrollHeight, 150)}px`;\n }\n }, [content]);\n\n // Handle typing indicators\n React.useEffect(() => {\n if (content.length > 0 && !isTyping) {\n setIsTyping(true);\n onTypingStart?.();\n }\n\n // Clear previous timeout\n if (typingTimeoutRef.current) {\n clearTimeout(typingTimeoutRef.current);\n }\n\n // Set timeout to stop typing indicator\n typingTimeoutRef.current = setTimeout(() => {\n if (isTyping) {\n setIsTyping(false);\n onTypingStop?.();\n }\n }, 2000);\n\n return () => {\n if (typingTimeoutRef.current) {\n clearTimeout(typingTimeoutRef.current);\n }\n };\n }, [content, isTyping, onTypingStart, onTypingStop]);\n\n // Focus on mount if autoFocus\n React.useEffect(() => {\n if (autoFocus) {\n textareaRef.current?.focus();\n }\n }, [autoFocus]);\n\n // Focus when reply is set\n React.useEffect(() => {\n if (replyTo) {\n textareaRef.current?.focus();\n }\n }, [replyTo]);\n\n // --- @mention autocomplete (opt-in via `mentionOptions`) ---\n const mentionsEnabled = !!mentionOptions && mentionOptions.length > 0;\n const [mention, setMention] = React.useState<{\n query: string;\n start: number;\n } | null>(null);\n const [mentionHighlight, setMentionHighlight] = React.useState(0);\n const mentionListId = React.useId();\n const mentionOptionId = (i: number) => `${mentionListId}-option-${i}`;\n\n const mentionSuggestions = React.useMemo(() => {\n if (!mention || !mentionOptions) return [];\n const q = mention.query.toLowerCase();\n return mentionOptions.filter((o) => o.label.toLowerCase().includes(q));\n }, [mention, mentionOptions]);\n\n const mentionMenuOpen =\n mentionsEnabled && mention !== null && mentionSuggestions.length > 0;\n\n // Portal + fixed positioning so the mention menu escapes overflow-hidden\n // ancestors.\n const {\n anchorRef: mentionAnchorRef,\n floatingRef: mentionFloatingRef,\n style: mentionStyle,\n } = useAnchoredPosition<HTMLDivElement, HTMLUListElement>({\n open: mentionMenuOpen,\n placement: 'top-start',\n maxHeight: 224,\n });\n // Clamp the highlight to the current suggestion range so the active option\n // never points at a stale/out-of-range index (the list can shrink while the\n // menu is open as the query narrows). The same clamped index drives\n // `aria-activedescendant`, `aria-selected`, and the visual highlight so they\n // can never disagree.\n const clampedMentionHighlight = mentionMenuOpen\n ? Math.min(mentionHighlight, mentionSuggestions.length - 1)\n : -1;\n const activeMentionOptionId = mentionMenuOpen\n ? mentionOptionId(clampedMentionHighlight)\n : undefined;\n\n const syncMention = React.useCallback(\n (value: string, caret: number) => {\n if (!mentionsEnabled) return;\n setMention(activeMentionQuery(value, caret));\n setMentionHighlight(0);\n },\n [mentionsEnabled]\n );\n\n const insertMention = (option: MentionOption) => {\n if (!mention) return;\n const insertValue = option.value ?? option.label.split(' ')[0];\n const before = content.slice(0, mention.start);\n const after = content.slice(mention.start + 1 + mention.query.length);\n const insert = `@${insertValue} `;\n setContent(before + insert + after);\n setMention(null);\n // Restore caret just after the inserted mention.\n const caret = before.length + insert.length;\n requestAnimationFrame(() => {\n const el = textareaRef.current;\n if (el) {\n el.focus();\n el.setSelectionRange(caret, caret);\n }\n });\n };\n\n const canSend =\n (content.trim().length > 0 || attachments.length > 0) &&\n content.length <= maxLength &&\n !disabled &&\n !isSending;\n\n const handleSubmit = async (event: React.FormEvent) => {\n event.preventDefault();\n if (!canSend) return;\n\n const message: NewMessage = {\n content: content.trim(),\n attachments: attachments.map((a) => a.file),\n replyToId: replyTo?.id,\n };\n\n // Clear state before sending for optimistic UI\n setContent('');\n setAttachments([]);\n setIsTyping(false);\n onTypingStop?.();\n\n try {\n await onSend(message);\n } catch {\n // Restore content on failure\n setContent(message.content);\n // Note: attachments would need to be re-added manually\n onError?.('Failed to send message');\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // @mention menu navigation takes priority over send.\n if (mentionMenuOpen) {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n setMentionHighlight((h) => (h + 1) % mentionSuggestions.length);\n return;\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n setMentionHighlight(\n (h) =>\n (h - 1 + mentionSuggestions.length) % mentionSuggestions.length\n );\n return;\n }\n if (event.key === 'Enter' || event.key === 'Tab') {\n event.preventDefault();\n // `mentionHighlight` can fall out of range if the list shrank while\n // the menu was open; fall back to the first suggestion.\n const chosen =\n mentionSuggestions[mentionHighlight] ?? mentionSuggestions[0];\n if (chosen) insertMention(chosen);\n return;\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n setMention(null);\n return;\n }\n }\n // Send on Enter (without Shift)\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n if (canSend) {\n handleSubmit(event);\n }\n }\n };\n\n const handleFilesSelected = (files: File[]) => {\n const remainingSlots = maxAttachments - attachments.length;\n const filesToAdd = files.slice(0, remainingSlots);\n\n if (files.length > remainingSlots) {\n onError?.(`Maximum ${maxAttachments} attachments allowed`);\n }\n\n const newAttachments: PendingAttachment[] = filesToAdd.map((file) => {\n const type = getFileType(file.type);\n let previewUrl: string | undefined;\n\n if (type === 'image' || type === 'video') {\n previewUrl = URL.createObjectURL(file);\n }\n\n return {\n id: generateAttachmentId(),\n file,\n previewUrl,\n type,\n state: 'pending' as const,\n };\n });\n\n setAttachments((prev) => [...prev, ...newAttachments]);\n };\n\n // Paste-to-attach: route pasted files through the same path as the picker.\n const handlePaste = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (!showAttachmentPicker || disabled) return;\n const pasted = Array.from(event.clipboardData.items)\n .filter((item) => item.kind === 'file')\n .map((item) => item.getAsFile())\n .filter((f): f is File => f !== null)\n .filter((f) => isFileAccepted(f, acceptedFileTypes));\n if (pasted.length === 0) return;\n // We're attaching the file ourselves; don't also paste a blob/path.\n event.preventDefault();\n handleFilesSelected(pasted);\n };\n\n const handleRemoveAttachment = (attachmentId: string) => {\n setAttachments((prev) => {\n const attachment = prev.find((a) => a.id === attachmentId);\n if (attachment?.previewUrl) {\n URL.revokeObjectURL(attachment.previewUrl);\n }\n return prev.filter((a) => a.id !== attachmentId);\n });\n };\n\n // Cleanup preview URLs on unmount\n React.useEffect(() => {\n // Capture current attachments for cleanup\n const currentAttachments = attachments;\n return () => {\n currentAttachments.forEach((a) => {\n if (a.previewUrl) {\n URL.revokeObjectURL(a.previewUrl);\n }\n });\n };\n }, [attachments]);\n\n return (\n <DragDropZone\n onFilesDropped={handleFilesSelected}\n acceptedTypes={acceptedFileTypes}\n maxFileSize={maxFileSize}\n maxFiles={maxAttachments - attachments.length}\n disabled={disabled || attachments.length >= maxAttachments}\n onError={onError}\n className={cn('w-full', className)}\n >\n <form\n onSubmit={handleSubmit}\n data-slot=\"message-composer\"\n className=\"w-full\"\n >\n {/* Reply preview */}\n {replyTo && (\n <div\n data-slot=\"composer-reply-preview\"\n className={cn(\n 'flex items-center gap-2 px-4 py-2',\n 'bg-neutral-50 dark:bg-neutral-800/50',\n 'border-primary-500 border-l-4'\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <span className=\"text-primary-800 dark:text-primary-400 text-xs font-medium\">\n Replying to {replyTo.senderName}\n </span>\n <p className=\"truncate text-sm text-neutral-600 dark:text-neutral-300\">\n {replyTo.content}\n </p>\n </div>\n <button\n type=\"button\"\n onClick={onCancelReply}\n className={cn(\n 'shrink-0 rounded p-1',\n 'text-neutral-500 hover:text-neutral-700',\n 'dark:text-neutral-400 dark:hover:text-neutral-200',\n 'focus:ring-primary-500 focus:ring-2 focus:outline-none'\n )}\n aria-label=\"Cancel reply\"\n >\n <svg\n aria-hidden=\"true\"\n className=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n )}\n\n {/* Attachment previews */}\n {attachments.length > 0 && (\n <div\n data-slot=\"composer-attachments\"\n className={cn(\n 'flex flex-wrap gap-2 p-3',\n 'border-t border-neutral-200 dark:border-neutral-700'\n )}\n >\n {attachments.map((attachment) => (\n <AttachmentPreviewItem\n key={attachment.id}\n attachment={attachment}\n onRemove={() => handleRemoveAttachment(attachment.id)}\n />\n ))}\n </div>\n )}\n\n {/* Input area */}\n <div\n data-slot=\"composer-input-area\"\n className={cn(\n 'flex items-center gap-2 p-3',\n 'bg-white dark:bg-neutral-900',\n variant === 'default' &&\n 'border-t border-neutral-200 dark:border-neutral-700'\n )}\n >\n {/* Attachment buttons */}\n {showAttachmentPicker && (\n <AttachmentPicker\n onFilesSelected={handleFilesSelected}\n acceptedTypes={acceptedFileTypes}\n maxFileSize={maxFileSize}\n maxFiles={maxAttachments - attachments.length}\n disabled={disabled || attachments.length >= maxAttachments}\n onError={onError}\n />\n )}\n\n {showCameraButton && (\n <CameraButton\n onCapture={(file) => handleFilesSelected([file])}\n disabled={disabled || attachments.length >= maxAttachments}\n />\n )}\n\n {/* Text input */}\n <div\n data-slot=\"composer-input-wrapper\"\n className=\"relative flex-1\"\n ref={mentionAnchorRef}\n >\n {mentionMenuOpen &&\n createPortal(\n <ul\n ref={mentionFloatingRef}\n style={mentionStyle}\n id={mentionListId}\n role=\"listbox\"\n aria-label=\"Mention\"\n data-slot=\"composer-mention-list\"\n 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\"\n >\n {mentionSuggestions.map((option, i) => (\n <li key={option.id}>\n <button\n type=\"button\"\n id={mentionOptionId(i)}\n role=\"option\"\n aria-selected={i === clampedMentionHighlight}\n // onMouseDown (not onClick) so the textarea keeps focus.\n onMouseDown={(e) => {\n e.preventDefault();\n insertMention(option);\n }}\n onMouseEnter={() => setMentionHighlight(i)}\n className={cn(\n 'flex w-full items-center gap-2 px-3 py-1.5 text-left text-sm',\n i === clampedMentionHighlight\n ? 'bg-primary-100 text-primary-900 dark:bg-primary-900/40 dark:text-primary-100'\n : 'text-neutral-700 dark:text-neutral-200'\n )}\n >\n {option.icon}\n <span className=\"min-w-0 flex-1 truncate\">\n <span className=\"font-medium\">{option.label}</span>\n {option.description && (\n <span className=\"ml-1 text-xs text-neutral-400\">\n {option.description}\n </span>\n )}\n </span>\n {option.meta && (\n <span className=\"text-[10px] text-neutral-400\">\n {option.meta}\n </span>\n )}\n </button>\n </li>\n ))}\n </ul>,\n document.body\n )}\n <textarea\n ref={textareaRef}\n data-slot=\"composer-input\"\n value={content}\n onChange={(e) => {\n setContent(e.target.value);\n syncMention(\n e.target.value,\n e.target.selectionStart ?? e.target.value.length\n );\n }}\n onClick={(e) => {\n const el = e.currentTarget;\n syncMention(el.value, el.selectionStart ?? el.value.length);\n }}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n placeholder={placeholder}\n disabled={disabled || isSending}\n rows={1}\n className={cn(\n 'w-full resize-none rounded-2xl py-2.5',\n inputTrailing ? 'pr-10 pl-4' : 'px-4',\n 'bg-neutral-100 dark:bg-neutral-800',\n 'text-neutral-900 dark:text-neutral-100',\n 'placeholder:text-neutral-400 dark:placeholder:text-neutral-500',\n 'focus:ring-primary-500 focus:ring-2 focus:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'transition-colors',\n 'max-h-[150px]'\n )}\n aria-label=\"Message\"\n aria-describedby={showCharacterCount ? 'char-count' : undefined}\n {...(mentionsEnabled\n ? {\n 'aria-controls': mentionMenuOpen\n ? mentionListId\n : undefined,\n 'aria-activedescendant': activeMentionOptionId,\n 'aria-autocomplete': 'list' as const,\n }\n : {})}\n />\n\n {/* Trailing content (e.g. record button) */}\n {inputTrailing && (\n <div\n data-slot=\"composer-input-trailing\"\n className=\"pointer-events-none absolute top-0 right-1 flex h-[44px] items-center [&>*]:pointer-events-auto\"\n >\n {inputTrailing}\n </div>\n )}\n\n {/* Character count */}\n {showCharacterCount && (\n <div\n data-slot=\"composer-char-count\"\n id=\"char-count\"\n className=\"absolute right-3 bottom-1.5\"\n >\n <CharacterCounter current={content.length} max={maxLength} />\n </div>\n )}\n </div>\n\n {/* Send button */}\n <SendButton\n canSend={canSend}\n isLoading={isSending}\n disabled={disabled}\n />\n </div>\n </form>\n </DragDropZone>\n );\n }\n);\n\nMessageComposer.displayName = 'MessageComposer';\n\nexport { MessageComposer, CharacterCounter, SendButton, sendButtonVariants };\n"]}
|
package/dist/chunk-3PXOIAF6.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export { Accessibility, Activity, AlertCircle, AlertTriangle, Ambulance, ArrowLeft, ArrowRight, ArrowUpDown, AtSign, Baby, BadgeAlert, BadgeCheck, BadgeMinus, BadgePlus, BadgeX, Ban, Bandage, BarChart3, Bed, BedDouble, BedSingle, Bell, BellOff, Biohazard, Bone, BookOpen, BookOpenCheck, Bookmark, Brain, Briefcase, BriefcaseMedical, Building, Calendar, CalendarCheck, Camera, Cannabis, Check, CheckCircle, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Cigarette, CigaretteOff, CircleDot, CircleDotDashed, CircleUser, CircleUserRound, Clipboard, ClipboardCheck, ClipboardList, ClipboardPlus, Clock, Cog, Columns, Copy, CreditCard, Cross, Dna, DollarSign, Download, Droplet, Droplets, Ear, ExternalLink, Eye, EyeOff, File, FileCheck, FileCheck2, FileHeart, FilePlus, FilePlus2, FileText, Filter, Fingerprint, Flag, FlaskConical, FlaskRound, Folder, FolderOpen, Footprints, Glasses, Globe, GripVertical, Hand, HandMetal, Hash, Heart, HeartOff, HeartPulse, HelpCircle, History, Home, Hospital, Image, Info, Key, LayoutGrid, Link, List, Loader2, Lock, LogIn, LogOut, Mail, MapPin, Maximize, Menu, MessageSquare, Microscope, Minimize, Minus, Monitor, Moon, MoreHorizontal, MoreVertical, NotebookPen, Palette, Paperclip, Pencil, Phone, PieChart, Pill, Plus, Printer, Radiation, RefreshCw, Ruler, Save, Scale, Scaling, Scan, ScanEye, ScanLine, Search, Send, Settings, Share, Shield, ShieldCheck, ShieldPlus, Sliders, Sparkle, Star, Stethoscope, StickyNote, Sun, Syringe, Table, Tablets, Tag, TestTube2, TestTubes, Thermometer, ThermometerSun, ThumbsDown, ThumbsUp, Timer, Trash2, TrendingDown, TrendingUp, Truck, Unlock, Upload, User, UserCheck, UserMinus, UserPlus, UserRound, UserRoundCheck, UserRoundMinus, UserRoundPlus, UserRoundX, Users, Weight, Wheat, WheatOff, Wrench, X, X as X2, XCircle, Zap } from 'lucide-react';
|
|
2
|
-
//# sourceMappingURL=chunk-3PXOIAF6.js.map
|
|
3
|
-
//# sourceMappingURL=chunk-3PXOIAF6.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Pagination/Pagination.tsx"],"names":["cva","React","jsxs","cn","jsx"],"mappings":"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","file":"chunk-4AE2L6AO.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Pagination Button Variants\n// ============================================================================\n\nconst paginationButtonVariants = cva(\n [\n 'inline-flex items-center justify-center',\n 'font-medium transition-colors duration-200',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'disabled:pointer-events-none disabled:opacity-50',\n ],\n {\n variants: {\n variant: {\n default: [\n 'text-muted-foreground hover:text-foreground hover:bg-muted',\n 'data-[active=true]:bg-primary-800 data-[active=true]:text-white',\n ],\n outline: [\n 'border border-border text-muted-foreground',\n 'hover:bg-muted hover:text-foreground',\n 'data-[active=true]:border-primary-500 data-[active=true]:bg-primary-50 data-[active=true]:text-primary-800',\n 'dark:data-[active=true]:bg-primary-950',\n ],\n ghost: [\n 'text-muted-foreground hover:text-foreground hover:bg-muted',\n 'data-[active=true]:text-primary-800 data-[active=true]:font-semibold',\n ],\n },\n size: {\n sm: 'h-8 min-w-8 px-2.5 text-xs rounded-md gap-1',\n md: 'h-10 min-w-10 px-3 text-sm rounded-lg gap-1.5',\n lg: 'h-12 min-w-12 px-4 text-base rounded-xl gap-2',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n }\n);\n\n// ============================================================================\n// Pagination Component\n// ============================================================================\n\nexport interface PaginationProps extends VariantProps<\n typeof paginationButtonVariants\n> {\n /** Current page (1-indexed) */\n page: number;\n /** Total number of pages */\n totalPages: number;\n /** Callback when page changes */\n onPageChange: (page: number) => void;\n /** Number of sibling pages to show on each side of current page */\n siblingCount?: number;\n /** Show first/last page buttons */\n showFirstLast?: boolean;\n /** Show prev/next buttons */\n showPrevNext?: boolean;\n /** Labels for navigation buttons */\n labels?: {\n first?: string;\n previous?: string;\n next?: string;\n last?: string;\n };\n /** Accessible label for the navigation landmark */\n label?: string;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A pagination component for navigating through pages.\n *\n * @example\n * ```tsx\n * <Pagination\n * page={currentPage}\n * totalPages={10}\n * onPageChange={setCurrentPage}\n * />\n * ```\n */\nfunction Pagination({\n page,\n totalPages,\n onPageChange,\n siblingCount = 1,\n showFirstLast = true,\n showPrevNext = true,\n variant,\n size,\n labels,\n label,\n className,\n}: PaginationProps) {\n // Calculate page range to display\n const pageRange = React.useMemo(() => {\n const range: (number | 'ellipsis')[] = [];\n\n // Always show first page\n range.push(1);\n\n // Calculate start and end of sibling range\n const leftSiblingIndex = Math.max(page - siblingCount, 2);\n const rightSiblingIndex = Math.min(page + siblingCount, totalPages - 1);\n\n // Show left ellipsis if needed\n const showLeftEllipsis = leftSiblingIndex > 2;\n // Show right ellipsis if needed\n const showRightEllipsis = rightSiblingIndex < totalPages - 1;\n\n if (showLeftEllipsis) {\n range.push('ellipsis');\n }\n\n // Add sibling pages\n for (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) {\n if (i !== 1 && i !== totalPages) {\n range.push(i);\n }\n }\n\n if (showRightEllipsis) {\n range.push('ellipsis');\n }\n\n // Always show last page if more than 1 page\n if (totalPages > 1) {\n range.push(totalPages);\n }\n\n return range;\n }, [page, totalPages, siblingCount]);\n\n const canGoPrev = page > 1;\n const canGoNext = page < totalPages;\n\n return (\n <nav\n data-slot=\"pagination\"\n role=\"navigation\"\n aria-label={label || 'Pagination'}\n className={cn('flex items-center gap-1', className)}\n >\n {/* First Page Button */}\n {showFirstLast && (\n <button\n data-slot=\"pagination-first\"\n type=\"button\"\n onClick={() => onPageChange(1)}\n disabled={!canGoPrev}\n aria-label={labels?.first || 'Go to first page'}\n className={cn(paginationButtonVariants({ variant, size }))}\n >\n <ChevronsLeftIcon className=\"h-4 w-4\" />\n <span className=\"sr-only\">{labels?.first || 'First'}</span>\n </button>\n )}\n\n {/* Previous Button */}\n {showPrevNext && (\n <button\n data-slot=\"pagination-prev\"\n type=\"button\"\n onClick={() => onPageChange(page - 1)}\n disabled={!canGoPrev}\n aria-label={labels?.previous || 'Go to previous page'}\n className={cn(paginationButtonVariants({ variant, size }))}\n >\n <ChevronLeftIcon className=\"h-4 w-4\" />\n <span className=\"sr-only sm:not-sr-only\">\n {labels?.previous || 'Previous'}\n </span>\n </button>\n )}\n\n {/* Page Numbers */}\n <div data-slot=\"pagination-pages\" className=\"flex items-center gap-1\">\n {pageRange.map((item, index) => {\n if (item === 'ellipsis') {\n return (\n <span\n key={`ellipsis-${index}`}\n data-slot=\"pagination-ellipsis\"\n className={cn(\n paginationButtonVariants({ variant, size }),\n 'cursor-default hover:bg-transparent'\n )}\n aria-hidden=\"true\"\n >\n ...\n </span>\n );\n }\n\n return (\n <button\n key={item}\n data-slot=\"pagination-page\"\n type=\"button\"\n onClick={() => onPageChange(item)}\n aria-label={`Go to page ${item}`}\n aria-current={item === page ? 'page' : undefined}\n data-active={item === page}\n className={cn(paginationButtonVariants({ variant, size }))}\n >\n {item}\n </button>\n );\n })}\n </div>\n\n {/* Next Button */}\n {showPrevNext && (\n <button\n data-slot=\"pagination-next\"\n type=\"button\"\n onClick={() => onPageChange(page + 1)}\n disabled={!canGoNext}\n aria-label={labels?.next || 'Go to next page'}\n className={cn(paginationButtonVariants({ variant, size }))}\n >\n <span className=\"sr-only sm:not-sr-only\">\n {labels?.next || 'Next'}\n </span>\n <ChevronRightIcon className=\"h-4 w-4\" />\n </button>\n )}\n\n {/* Last Page Button */}\n {showFirstLast && (\n <button\n data-slot=\"pagination-last\"\n type=\"button\"\n onClick={() => onPageChange(totalPages)}\n disabled={!canGoNext}\n aria-label={labels?.last || 'Go to last page'}\n className={cn(paginationButtonVariants({ variant, size }))}\n >\n <span className=\"sr-only\">{labels?.last || 'Last'}</span>\n <ChevronsRightIcon className=\"h-4 w-4\" />\n </button>\n )}\n </nav>\n );\n}\n\nPagination.displayName = 'Pagination';\n\n// ============================================================================\n// Simple Pagination Component\n// ============================================================================\n\nexport interface SimplePaginationProps extends VariantProps<\n typeof paginationButtonVariants\n> {\n /** Current page */\n page: number;\n /** Total number of pages */\n totalPages: number;\n /** Callback when page changes */\n onPageChange: (page: number) => void;\n /** Show page info */\n showPageInfo?: boolean;\n /** Accessible label for the navigation landmark */\n label?: string;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A simple pagination with just prev/next buttons.\n *\n * @example\n * ```tsx\n * <SimplePagination\n * page={1}\n * totalPages={10}\n * onPageChange={setPage}\n * showPageInfo\n * />\n * ```\n */\nfunction SimplePagination({\n page,\n totalPages,\n onPageChange,\n showPageInfo = true,\n variant,\n size,\n label,\n className,\n}: SimplePaginationProps) {\n const canGoPrev = page > 1;\n const canGoNext = page < totalPages;\n\n return (\n <nav\n data-slot=\"simple-pagination\"\n role=\"navigation\"\n aria-label={label || 'Pagination'}\n className={cn('flex items-center gap-2', className)}\n >\n <button\n data-slot=\"pagination-prev\"\n type=\"button\"\n onClick={() => onPageChange(page - 1)}\n disabled={!canGoPrev}\n aria-label=\"Go to previous page\"\n className={cn(paginationButtonVariants({ variant, size }))}\n >\n <ChevronLeftIcon className=\"h-4 w-4\" />\n <span>Previous</span>\n </button>\n\n {showPageInfo && (\n <span\n data-slot=\"pagination-info\"\n className=\"text-muted-foreground px-2 text-sm\"\n >\n Page {page} of {totalPages}\n </span>\n )}\n\n <button\n data-slot=\"pagination-next\"\n type=\"button\"\n onClick={() => onPageChange(page + 1)}\n disabled={!canGoNext}\n aria-label=\"Go to next page\"\n className={cn(paginationButtonVariants({ variant, size }))}\n >\n <span>Next</span>\n <ChevronRightIcon className=\"h-4 w-4\" />\n </button>\n </nav>\n );\n}\n\nSimplePagination.displayName = 'SimplePagination';\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nfunction ChevronLeftIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\nfunction ChevronsLeftIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"m11 17-5-5 5-5\" />\n <path d=\"m18 17-5-5 5-5\" />\n </svg>\n );\n}\n\nfunction ChevronsRightIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"m6 17 5-5-5-5\" />\n <path d=\"m13 17 5-5-5-5\" />\n </svg>\n );\n}\n\nexport { Pagination, SimplePagination, paginationButtonVariants };\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/CountryCodeDropdown/CountryCodeDropdown.tsx"],"names":["PhoneNumberUtil","PhoneNumberFormat"],"mappings":"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","file":"chunk-4PIW3Y5M.js","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport * as libphonenumber from 'google-libphonenumber';\nimport { cn } from '../../utils/cn';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\n\nconst PhoneNumberUtil =\n (libphonenumber as unknown as { default?: typeof libphonenumber }).default\n ?.PhoneNumberUtil ?? libphonenumber.PhoneNumberUtil;\nconst PhoneNumberFormat =\n (libphonenumber as unknown as { default?: typeof libphonenumber }).default\n ?.PhoneNumberFormat ?? libphonenumber.PhoneNumberFormat;\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface CountryData {\n /** ISO 3166-1 alpha-2 country code (e.g. \"US\") */\n code: string;\n /** Country name (e.g. \"United States\") */\n name: string;\n /** Dial code (e.g. \"+1\") */\n dialCode: string;\n /** Emoji flag (e.g. \"🇺🇸\") */\n flag: string;\n}\n\nexport interface CountryCodeDropdownProps {\n /** The currently selected country code (ISO alpha-2, e.g. \"US\") */\n value?: string;\n /** Called when a country is selected */\n onChange?: (country: CountryData) => void;\n /** Whether the dropdown is disabled */\n disabled?: boolean;\n /** Additional class name for the trigger button */\n className?: string;\n /** Placement of the dropdown panel */\n placement?: 'bottom-start' | 'bottom-end';\n /** Placeholder text for the search field */\n searchPlaceholder?: string;\n /** id for the trigger button, enabling `<label htmlFor>` association */\n id?: string;\n /** Label for accessibility — visually hidden */\n 'aria-label'?: string;\n}\n\n// =============================================================================\n// Country Data (generated from libphonenumber)\n// =============================================================================\n\n/** Convert an ISO alpha-2 code to an emoji flag. */\nfunction isoToEmoji(code: string): string {\n return [...code.toUpperCase()]\n .map((c) => String.fromCodePoint(0x1f1e6 - 65 + c.charCodeAt(0)))\n .join('');\n}\n\n/** Build the full sorted list of countries from libphonenumber. */\nfunction buildCountryList(): CountryData[] {\n const phoneUtil = PhoneNumberUtil.getInstance();\n const regions = phoneUtil.getSupportedRegions() as string[];\n const list: CountryData[] = regions.map((code: string) => {\n const callingCode = phoneUtil.getCountryCodeForRegion(code);\n return {\n code,\n name: regionDisplayName(code),\n dialCode: `+${callingCode}`,\n flag: isoToEmoji(code),\n };\n });\n list.sort((a, b) => a.name.localeCompare(b.name));\n return list;\n}\n\n/** Lazy singleton so we only build the list once. */\nlet _countries: CountryData[] | null = null;\nfunction getCountries(): CountryData[] {\n if (!_countries) _countries = buildCountryList();\n return _countries;\n}\n\n// =============================================================================\n// Region display name mapping\n// =============================================================================\n\n/** Lazy singleton for Intl.DisplayNames so we only construct it once. */\nlet _regionDisplayNames: Intl.DisplayNames | null = null;\n\nfunction getRegionDisplayNames(): Intl.DisplayNames | null {\n if (_regionDisplayNames === null) {\n try {\n const locales =\n typeof navigator !== 'undefined' && navigator.languages?.length\n ? [...navigator.languages]\n : ['en'];\n _regionDisplayNames = new Intl.DisplayNames(locales, { type: 'region' });\n } catch {\n return null;\n }\n }\n return _regionDisplayNames;\n}\n\n/**\n * Use the browser Intl API for display names where available,\n * falling back to the raw ISO code.\n */\nfunction regionDisplayName(code: string): string {\n const dn = getRegionDisplayNames();\n if (!dn) return code;\n return dn.of(code) ?? code;\n}\n\n// =============================================================================\n// Validation helper (exported for consumers)\n// =============================================================================\n\n/**\n * Validate a phone number string for a given country code using libphonenumber.\n *\n * @param phoneNumber - The phone number (digits, may include formatting)\n * @param countryCode - ISO alpha-2 code (e.g. \"US\")\n * @returns Whether the number is valid for the given region.\n */\nexport function validatePhoneNumber(\n phoneNumber: string,\n countryCode: string\n): boolean {\n try {\n const phoneUtil = PhoneNumberUtil.getInstance();\n const parsed = phoneUtil.parse(phoneNumber, countryCode);\n return phoneUtil.isValidNumberForRegion(parsed, countryCode);\n } catch {\n return false;\n }\n}\n\n/**\n * Format a phone number into E.164 international format.\n *\n * @param phoneNumber - The phone number (digits, may include formatting)\n * @param countryCode - ISO alpha-2 code (e.g. \"US\")\n * @returns The formatted number (e.g. \"+15551234567\") or the original string if parsing fails.\n */\nexport function formatE164(phoneNumber: string, countryCode: string): string {\n try {\n const phoneUtil = PhoneNumberUtil.getInstance();\n const parsed = phoneUtil.parse(phoneNumber, countryCode);\n return phoneUtil.format(parsed, PhoneNumberFormat.E164);\n } catch {\n return phoneNumber;\n }\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/** Internal base props — `showDialCode` is not part of the public API. */\ninterface CountryDropdownBaseProps extends CountryCodeDropdownProps {\n /** Show dial codes on the trigger and in the list (default: true) */\n showDialCode?: boolean;\n}\n\n/**\n * Shared implementation behind {@link CountryCodeDropdown} (dial-code mode)\n * and `CountryDropdown` (country-only mode). Not exported from the package.\n */\nfunction CountryDropdownBase({\n value,\n onChange,\n disabled = false,\n className,\n placement = 'bottom-start',\n searchPlaceholder = 'Search countries…',\n id,\n showDialCode = true,\n 'aria-label': ariaLabel = 'Select country code',\n}: CountryDropdownBaseProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [search, setSearch] = React.useState('');\n const [internalValue, setInternalValue] = React.useState(value ?? 'US');\n const containerRef = React.useRef<HTMLDivElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLDivElement>(null);\n const menuId = React.useId();\n\n const isControlled = value !== undefined;\n const activeValue = isControlled ? value : internalValue;\n\n // Defer building the full country list until the dropdown is first opened\n const [countriesLoaded, setCountriesLoaded] = React.useState(false);\n const countries = React.useMemo(\n () => (countriesLoaded ? getCountries() : []),\n [countriesLoaded]\n );\n\n React.useEffect(() => {\n if (isOpen && !countriesLoaded) setCountriesLoaded(true);\n }, [isOpen, countriesLoaded]);\n\n const selected = React.useMemo(() => {\n if (countries.length) {\n return (\n countries.find((c) => c.code === activeValue) ??\n countries.find((c) => c.code === 'US')!\n );\n }\n // Lightweight fallback while list hasn't loaded yet\n return {\n code: activeValue ?? 'US',\n name: regionDisplayName(activeValue ?? 'US'),\n dialCode: `+${PhoneNumberUtil.getInstance().getCountryCodeForRegion(activeValue ?? 'US')}`,\n flag: isoToEmoji(activeValue ?? 'US'),\n };\n }, [activeValue, countries]);\n\n const filtered = React.useMemo(() => {\n if (!search) return countries;\n const q = search.toLowerCase();\n return countries.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n (showDialCode && c.dialCode.includes(q)) ||\n c.code.toLowerCase().includes(q)\n );\n }, [search, countries, showDialCode]);\n\n // Close helpers\n const close = React.useCallback(() => {\n setIsOpen(false);\n setSearch('');\n }, []);\n\n // Portal + fixed positioning so the panel escapes overflow-hidden ancestors.\n const { anchorRef, floatingRef, style } = useAnchoredPosition<\n HTMLDivElement,\n HTMLDivElement\n >({ open: isOpen, placement });\n\n const outsideRefs = React.useMemo(\n () => [containerRef, floatingRef],\n [containerRef, floatingRef]\n );\n useClickOutside(outsideRefs, close, isOpen);\n useEscapeKey(close, isOpen);\n\n // Focus search input when opening\n React.useEffect(() => {\n if (isOpen) {\n // Defer to let the DOM render\n requestAnimationFrame(() => searchInputRef.current?.focus());\n }\n }, [isOpen]);\n\n const handleToggle = React.useCallback(() => {\n if (!disabled) setIsOpen((prev) => !prev);\n }, [disabled]);\n\n const handleSelect = React.useCallback(\n (country: CountryData) => {\n if (!isControlled) {\n setInternalValue(country.code);\n }\n onChange?.(country);\n close();\n },\n [isControlled, onChange, close]\n );\n\n // Keyboard navigation inside the list\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (!isOpen) return;\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const items =\n listRef.current?.querySelectorAll<HTMLButtonElement>(\n '[role=\"option\"]'\n );\n if (!items?.length) return;\n\n const current = document.activeElement as HTMLElement;\n const idx = Array.from(items).indexOf(current as HTMLButtonElement);\n let next: number;\n if (e.key === 'ArrowDown') {\n next = idx < items.length - 1 ? idx + 1 : 0;\n } else {\n next = idx > 0 ? idx - 1 : items.length - 1;\n }\n items[next].focus();\n }\n },\n [isOpen]\n );\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node;\n anchorRef.current = node;\n }}\n data-slot=\"country-dropdown\"\n className=\"relative inline-flex\"\n >\n {/* Trigger button */}\n <button\n type=\"button\"\n id={id}\n data-slot=\"country-dropdown-trigger\"\n onClick={handleToggle}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? menuId : undefined}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm',\n 'border-input bg-background text-foreground',\n 'transition-colors duration-200',\n 'hover:bg-neutral-50 dark:hover:bg-neutral-700',\n 'focus:ring-ring focus:ring-2 focus:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n >\n <span\n data-slot=\"country-dropdown-flag\"\n className=\"text-base leading-none\"\n aria-hidden=\"true\"\n >\n {selected.flag}\n </span>\n {showDialCode ? (\n <span data-slot=\"country-dropdown-dialcode\">{selected.dialCode}</span>\n ) : (\n <span data-slot=\"country-dropdown-name\" className=\"min-w-0 truncate\">\n {selected.name}\n </span>\n )}\n <svg\n data-slot=\"country-dropdown-chevron\"\n className={cn(\n 'h-4 w-4 shrink-0 text-neutral-500 transition-transform duration-200',\n isOpen && 'rotate-180'\n )}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n\n {/* Dropdown panel */}\n {isOpen &&\n createPortal(\n <div\n ref={floatingRef}\n style={style}\n id={menuId}\n role=\"listbox\"\n data-slot=\"country-dropdown-panel\"\n aria-label={ariaLabel}\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n className={cn(\n 'flex w-72 flex-col overflow-hidden',\n 'rounded-xl border border-neutral-200 bg-white shadow-lg',\n 'dark:border-neutral-700 dark:bg-neutral-800',\n 'animate-in fade-in zoom-in-95 duration-100'\n )}\n >\n {/* Search input */}\n <div\n data-slot=\"country-dropdown-search\"\n className=\"shrink-0 border-b border-neutral-200 p-2 dark:border-neutral-700\"\n >\n <input\n ref={searchInputRef}\n type=\"text\"\n data-slot=\"country-dropdown-search-input\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n aria-label=\"Search countries\"\n className={cn(\n 'w-full rounded-lg border border-neutral-200 px-3 py-1.5 text-sm',\n 'text-foreground placeholder:text-muted-foreground bg-white',\n 'focus:ring-ring focus:border-transparent focus:ring-2 focus:outline-none',\n 'dark:border-neutral-600 dark:bg-neutral-700 dark:text-neutral-100'\n )}\n />\n </div>\n\n {/* Country list */}\n <div\n ref={listRef}\n data-slot=\"country-dropdown-list\"\n className=\"max-h-60 min-h-0 overflow-y-auto p-1\"\n >\n {filtered.length === 0 ? (\n <div className=\"text-muted-foreground px-3 py-4 text-center text-sm\">\n No countries found\n </div>\n ) : (\n filtered.map((country) => (\n <button\n key={country.code}\n type=\"button\"\n role=\"option\"\n data-slot=\"country-dropdown-option\"\n aria-selected={country.code === selected.code}\n onClick={() => handleSelect(country)}\n className={cn(\n 'flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm',\n 'transition-colors duration-150',\n 'focus:outline-none',\n country.code === selected.code\n ? 'bg-neutral-100 font-medium text-neutral-900 dark:bg-neutral-700 dark:text-white'\n : 'text-neutral-700 hover:bg-neutral-50 dark:text-neutral-300 dark:hover:bg-neutral-700/50',\n 'focus:bg-neutral-100 dark:focus:bg-neutral-700'\n )}\n >\n <span\n data-slot=\"country-dropdown-option-flag\"\n className=\"text-base leading-none\"\n aria-hidden=\"true\"\n >\n {country.flag}\n </span>\n <span\n data-slot=\"country-dropdown-option-name\"\n className=\"flex-1 truncate\"\n >\n {country.name}\n </span>\n {showDialCode && (\n <span\n data-slot=\"country-dropdown-option-dialcode\"\n className=\"text-muted-foreground shrink-0 text-xs\"\n >\n {country.dialCode}\n </span>\n )}\n </button>\n ))\n )}\n </div>\n </div>,\n document.body\n )}\n </div>\n );\n}\n\nCountryDropdownBase.displayName = 'CountryDropdownBase';\n\n/**\n * A country-code selector dropdown designed to sit beside a phone number input.\n *\n * Defaults to United States (+1) with the 🇺🇸 flag. Clicking the trigger opens\n * a searchable list of all supported countries with their dial codes and flags.\n *\n * Uses Google's libphonenumber for the canonical country/code list and provides\n * a `validatePhoneNumber` helper for phone validation.\n *\n * For a country selector without dial codes, use `CountryDropdown`.\n *\n * @example\n * ```tsx\n * const [country, setCountry] = useState<CountryData>();\n *\n * <div className=\"flex gap-2\">\n * <CountryCodeDropdown value={country?.code} onChange={setCountry} />\n * <Input placeholder=\"Phone number\" />\n * </div>\n * ```\n */\nfunction CountryCodeDropdown(props: CountryCodeDropdownProps) {\n return <CountryDropdownBase {...props} />;\n}\n\nCountryCodeDropdown.displayName = 'CountryCodeDropdown';\n\nexport { CountryCodeDropdown, CountryDropdownBase };\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/SectionSpyNav/SectionSpyNav.tsx"],"names":["ArrowDown","ArrowRight","ArrowUpRight","jsx","React","useScrollSpy","cn","jsxs","buttonVariants"],"mappings":"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","file":"chunk-5JZIDILK.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { ArrowDown, ArrowRight, ArrowUpRight } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { useScrollSpy } from '../../hooks/useScrollSpy';\nimport { buttonVariants } from '../Button';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** One section the nav links to. The id must match a `section[id]` on the page. */\nexport interface SectionSpyItem {\n id: string;\n label: string;\n}\n\n/**\n * Funnel intent for the bar's single contextual CTA — drives its visual\n * weight so the in-page strip never out-shouts a page's primary CTA:\n * `explore` (quiet next step) → `evaluate` (sales-ready ask) → `commit`\n * (high-intent action).\n */\nexport type SectionSpyCtaTier = 'explore' | 'evaluate' | 'commit';\n\nexport interface SectionSpyCta {\n label: string;\n href: string;\n tier?: SectionSpyCtaTier;\n}\n\nexport interface SectionSpyNavProps {\n /** Sections to link to, in page order. */\n items: SectionSpyItem[];\n /** Optional single page-specific next-step CTA at the end of the bar. */\n cta?: SectionSpyCta;\n /** Eyebrow before the links (default \"On this page\"). */\n label?: string;\n /**\n * Visual tone: `surface` sits on the page background; `brand` renders the\n * inverted primary band.\n */\n tone?: 'surface' | 'brand';\n /** IntersectionObserver root margin tuning for the scroll spy. */\n rootMargin?: string;\n /** Called with the section id when a nav link is clicked. */\n onItemClick?: (id: string) => void;\n /** Called when the CTA is clicked (e.g. for analytics). */\n onCtaClick?: (cta: SectionSpyCta) => void;\n className?: string;\n}\n\n// =============================================================================\n// Internals\n// =============================================================================\n\n/** Directional glyph inferred from the destination. */\nfunction CtaArrow({ href }: { href: string }) {\n const Icon = href.startsWith('#')\n ? ArrowDown\n : href.startsWith('/')\n ? ArrowRight\n : ArrowUpRight;\n return <Icon aria-hidden=\"true\" className=\"h-3.5 w-3.5\" />;\n}\n\nconst CTA_TIER_VARIANT = {\n explore: 'ghost',\n evaluate: 'outline',\n commit: 'primary',\n} as const;\n\n// =============================================================================\n// SectionSpyNav\n// =============================================================================\n\n/**\n * Sticky horizontal in-page wayfinding: jumps between a page's major\n * sections, highlights the one in view with a sliding underline, and can\n * carry a single page-specific next-step CTA. Pure anchor links, so it\n * still works if the scroll spy never runs.\n *\n * The horizontal complement to `TableOfContents` — use that for a sidebar\n * outline, this for a band under the page header. Section elements need\n * matching `id`s.\n *\n * @example\n * ```tsx\n * <SectionSpyNav\n * items={[\n * { id: 'overview', label: 'Overview' },\n * { id: 'pricing', label: 'Pricing' },\n * ]}\n * cta={{ label: 'Book a demo', href: '/demo', tier: 'evaluate' }}\n * />\n * ```\n */\nexport function SectionSpyNav({\n items,\n cta,\n label = 'On this page',\n tone = 'surface',\n rootMargin = '-22% 0px -68% 0px',\n onItemClick,\n onCtaClick,\n className,\n}: SectionSpyNavProps) {\n const ids = React.useMemo(() => items.map((it) => it.id), [items]);\n const { activeId } = useScrollSpy({ ids, rootMargin });\n const active = activeId ?? items[0]?.id ?? '';\n\n const railRef = React.useRef<HTMLDivElement>(null);\n const markRef = React.useRef<HTMLSpanElement>(null);\n\n // Find the active link by dataset rather than a CSS selector, so ids\n // never need escaping and CSS.escape availability doesn't matter.\n const findActiveLink = React.useCallback((): HTMLAnchorElement | null => {\n const links = railRef.current?.querySelectorAll<HTMLAnchorElement>('a');\n if (!links) return null;\n for (const link of links) {\n if (link.dataset.id === active) return link;\n }\n return null;\n }, [active]);\n\n // Slide the underline beneath the active link. offsetLeft/offsetWidth are\n // physical and measured against the rail, so the marker tracks the link\n // in both directions and while the rail is scrolled horizontally.\n const syncMarker = React.useCallback(() => {\n const link = findActiveLink();\n const mark = markRef.current;\n if (!link || !mark) return;\n mark.style.left = `${link.offsetLeft}px`;\n mark.style.width = `${link.offsetWidth}px`;\n }, [findActiveLink]);\n\n React.useEffect(() => {\n const link = findActiveLink();\n link?.scrollIntoView?.({ inline: 'center', block: 'nearest' });\n syncMarker();\n }, [findActiveLink, syncMarker]);\n\n React.useEffect(() => {\n window.addEventListener('resize', syncMarker);\n return () => window.removeEventListener('resize', syncMarker);\n }, [syncMarker]);\n\n const brand = tone === 'brand';\n\n return (\n <nav\n className={cn(\n 'sticky top-0 z-30 w-full',\n brand\n ? 'bg-primary-900 text-white'\n : 'border-border bg-card/95 border-b backdrop-blur',\n className\n )}\n aria-label={label}\n >\n <div className=\"flex items-center gap-4 px-4 py-0.5\">\n <span\n className={cn(\n 'shrink-0 text-[11px] font-semibold tracking-wide uppercase max-md:hidden',\n brand ? 'text-white/85' : 'text-muted-foreground'\n )}\n aria-hidden=\"true\"\n >\n {label}\n </span>\n <div\n ref={railRef}\n className=\"relative flex min-w-0 flex-1 gap-1 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n >\n {items.map((it) => {\n const isActive = active === it.id;\n return (\n <a\n key={it.id}\n href={`#${it.id}`}\n data-id={it.id}\n onClick={() => onItemClick?.(it.id)}\n className={cn(\n 'shrink-0 rounded px-2.5 py-2 text-sm whitespace-nowrap transition-colors',\n brand\n ? isActive\n ? 'font-semibold text-white'\n : 'text-white/85 hover:text-white'\n : isActive\n ? 'text-foreground font-semibold'\n : 'text-muted-foreground hover:text-foreground'\n )}\n aria-current={isActive ? 'location' : undefined}\n >\n {it.label}\n </a>\n );\n })}\n <span\n ref={markRef}\n className={cn(\n 'absolute bottom-0 h-0.5 rounded-full transition-[left,width] duration-300',\n brand ? 'bg-primary-400' : 'bg-primary-500'\n )}\n aria-hidden=\"true\"\n />\n </div>\n {cta && (\n <a\n href={cta.href}\n onClick={() => onCtaClick?.(cta)}\n className={cn(\n buttonVariants({\n variant: CTA_TIER_VARIANT[cta.tier ?? 'explore'],\n size: 'sm',\n }),\n 'shrink-0',\n brand &&\n (cta.tier ?? 'explore') !== 'commit' &&\n 'text-white hover:bg-white/10 hover:text-white'\n )}\n >\n {cta.label}\n <CtaArrow href={cta.href} />\n </a>\n )}\n </div>\n </nav>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/QuickAction/QuickAction.tsx"],"names":[],"mappings":"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","file":"chunk-5U6GETAW.js","sourcesContent":["import * as React from 'react';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst quickActionIconVariants = cva(\n ['flex items-center justify-center rounded-xl', 'h-10 w-10'],\n {\n variants: {\n color: {\n primary:\n 'bg-primary-100 text-primary-800 dark:bg-primary-900/50 dark:text-primary-400',\n green:\n 'bg-emerald-100 text-emerald-600 dark:bg-emerald-900/50 dark:text-emerald-400',\n purple:\n 'bg-violet-100 text-violet-600 dark:bg-violet-900/50 dark:text-violet-400',\n orange:\n 'bg-orange-100 text-orange-600 dark:bg-orange-900/50 dark:text-orange-400',\n blue: 'bg-sky-100 text-sky-600 dark:bg-sky-900/50 dark:text-sky-400',\n red: 'bg-rose-100 text-rose-600 dark:bg-rose-900/50 dark:text-rose-400',\n amber:\n 'bg-amber-100 text-amber-600 dark:bg-amber-900/50 dark:text-amber-400',\n neutral:\n 'bg-neutral-100 text-neutral-600 dark:bg-neutral-800 dark:text-neutral-400',\n },\n },\n defaultVariants: {\n color: 'primary',\n },\n }\n);\n\nconst quickActionVariants = cva(\n [\n 'flex items-center gap-3 rounded-xl border p-4 text-left',\n 'transition-colors duration-200',\n 'border-neutral-200 bg-white',\n 'hover:border-primary-300 hover:bg-primary-50',\n 'dark:border-neutral-700 dark:bg-neutral-800',\n 'dark:hover:border-primary-700 dark:hover:bg-primary-900/20',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2',\n 'dark:focus-visible:ring-offset-neutral-900',\n ],\n {\n variants: {\n disabled: {\n true: [\n 'opacity-50 cursor-not-allowed',\n 'hover:border-neutral-200 hover:bg-white',\n 'dark:hover:border-neutral-700 dark:hover:bg-neutral-800',\n ],\n false: 'cursor-pointer',\n },\n },\n defaultVariants: {\n disabled: false,\n },\n }\n);\n\nexport type QuickActionColor =\n | 'primary'\n | 'green'\n | 'purple'\n | 'orange'\n | 'blue'\n | 'red'\n | 'amber'\n | 'neutral';\n\nexport interface QuickActionProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'color' | 'disabled'\n> {\n /** The main title text */\n title: string;\n /** The subtitle/description text */\n subtitle: string;\n /** Icon to display in the colored background */\n icon: React.ReactNode;\n /** Color theme for the icon background */\n color?: QuickActionColor;\n /** Render as a different element (e.g., 'a' for links) */\n as?: 'button' | 'a';\n /** URL when rendered as a link */\n href?: string;\n /** Whether the action is disabled */\n disabled?: boolean;\n}\n\n/**\n * A quick action card component for dashboard navigation.\n * Displays an icon, title, and subtitle in a compact, clickable card.\n *\n * @example\n * ```tsx\n * <QuickAction\n * title=\"Schedule Exam\"\n * subtitle=\"Find providers nearby\"\n * color=\"primary\"\n * icon={<CalendarIcon className=\"h-5 w-5\" />}\n * onClick={() => navigate('/schedule')}\n * />\n * ```\n */\nconst QuickAction = React.forwardRef<HTMLButtonElement, QuickActionProps>(\n (\n {\n className,\n title,\n subtitle,\n icon,\n color = 'primary',\n disabled,\n as = 'button',\n href,\n ...props\n },\n ref\n ) => {\n const content = (\n <>\n <div\n data-slot=\"quick-action-icon\"\n className={cn(quickActionIconVariants({ color }))}\n >\n {icon}\n </div>\n <div data-slot=\"quick-action-content\">\n <div\n data-slot=\"quick-action-title\"\n className=\"font-medium text-neutral-900 dark:text-white\"\n >\n {title}\n </div>\n <div\n data-slot=\"quick-action-subtitle\"\n className=\"text-muted-foreground text-xs\"\n >\n {subtitle}\n </div>\n </div>\n </>\n );\n\n if (as === 'a' && href) {\n return (\n <a\n data-slot=\"quick-action\"\n href={href}\n className={cn(quickActionVariants({ disabled }), className)}\n aria-disabled={disabled}\n {...(props as React.AnchorHTMLAttributes<globalThis.HTMLAnchorElement>)}\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n data-slot=\"quick-action\"\n ref={ref}\n type=\"button\"\n disabled={disabled ?? undefined}\n className={cn(quickActionVariants({ disabled }), className)}\n {...props}\n >\n {content}\n </button>\n );\n }\n);\n\nQuickAction.displayName = 'QuickAction';\n\n// Predefined icons for common quick actions\nexport const QuickActionIcons = {\n Calendar: (props: React.SVGProps<globalThis.SVGSVGElement>) => (\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n ),\n Clipboard: (props: React.SVGProps<globalThis.SVGSVGElement>) => (\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"\n />\n </svg>\n ),\n User: (props: React.SVGProps<globalThis.SVGSVGElement>) => (\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\"\n />\n </svg>\n ),\n Document: (props: React.SVGProps<globalThis.SVGSVGElement>) => (\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n ),\n Settings: (props: React.SVGProps<globalThis.SVGSVGElement>) => (\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n ),\n Help: (props: React.SVGProps<globalThis.SVGSVGElement>) => (\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n ),\n Search: (props: React.SVGProps<globalThis.SVGSVGElement>) => (\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n ),\n Bell: (props: React.SVGProps<globalThis.SVGSVGElement>) => (\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n />\n </svg>\n ),\n};\n\n/**\n * A group/container component for displaying multiple QuickAction cards in a grid.\n *\n * @example\n * ```tsx\n * <QuickActionGroup title=\"Quick Actions\">\n * <QuickAction title=\"Action 1\" ... />\n * <QuickAction title=\"Action 2\" ... />\n * </QuickActionGroup>\n * ```\n */\nexport interface QuickActionGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Optional title to display above the quick actions */\n title?: string;\n /** Number of columns on different screen sizes */\n columns?: {\n base?: 1 | 2;\n sm?: 1 | 2;\n md?: 2 | 3 | 4;\n lg?: 2 | 3 | 4;\n };\n}\n\nconst QuickActionGroup = React.forwardRef<\n HTMLDivElement,\n QuickActionGroupProps\n>(\n (\n {\n className,\n title,\n columns = { base: 1, sm: 2, md: 2, lg: 4 },\n children,\n ...props\n },\n ref\n ) => {\n const gridCols = cn(\n 'grid gap-4',\n // Base (mobile)\n columns.base === 1 ? 'grid-cols-1' : 'grid-cols-2',\n // Small screens\n columns.sm === 1 ? 'sm:grid-cols-1' : 'sm:grid-cols-2',\n // Medium screens\n columns.md === 2\n ? 'md:grid-cols-2'\n : columns.md === 3\n ? 'md:grid-cols-3'\n : columns.md === 4\n ? 'md:grid-cols-4'\n : '',\n // Large screens\n columns.lg === 2\n ? 'lg:grid-cols-2'\n : columns.lg === 3\n ? 'lg:grid-cols-3'\n : 'lg:grid-cols-4'\n );\n\n return (\n <div\n data-slot=\"quick-action-group\"\n ref={ref}\n className={className}\n {...props}\n >\n {title && (\n <h2\n data-slot=\"quick-action-group-title\"\n className=\"mb-4 text-lg font-semibold text-neutral-900 dark:text-white\"\n >\n {title}\n </h2>\n )}\n <div data-slot=\"quick-action-group-grid\" className={gridCols}>\n {children}\n </div>\n </div>\n );\n }\n);\n\nQuickActionGroup.displayName = 'QuickActionGroup';\n\nexport {\n QuickAction,\n QuickActionGroup,\n quickActionVariants,\n quickActionIconVariants,\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Alert/Alert.tsx"],"names":[],"mappings":";;;;;;AAKA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB;AAAA,IACE,uCAAA;AAAA,IACA,oEAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,6CAAA;AAAA,QACT,IAAA,EAAM,qHAAA;AAAA,QACN,OAAA,EACE,yGAAA;AAAA,QACF,OAAA,EACE,+GAAA;AAAA,QACF,MAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AA2BA,IAAM,KAAA,GAAc,KAAA,CAAA,UAAA;AAAA,EAClB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA,GAAe,eAAA;AAAA,IACf,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,OAAA;AAAA,QACL,WAAA,EAAU,OAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,aAAA,CAAc,EAAE,OAAA,EAAS,CAAA;AAAA,UACnB,KAAA,CAAA,cAAA,CAAe,IAAI,CAAA,IAAK,OAAA;AAAA,UAC9B,WAAA,IAAe,OAAA;AAAA,UACf;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAM,KAAA,CAAA,cAAA,CAAe,IAAI,CAAA,IAAK,IAAA;AAAA,0BAC/B,GAAA,CAAC,SAAK,QAAA,EAAS,CAAA;AAAA,UACd,WAAA,oBACC,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,WAAA,EAAU,eAAA;AAAA,cACV,OAAA,EAAS,SAAA;AAAA,cACT,SAAA,EAAW,EAAA;AAAA,gBACT,uCAAA;AAAA,gBACA,8BAAA;AAAA,gBACA,qGAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,YAAA,EAAY,YAAA;AAAA,cAEZ,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI,eAAY,MAAA,EAAO;AAAA;AAAA;AAClC;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA;AAKpB,IAAM,UAAA,GAAmB,iBAGvB,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpC,GAAA;AAAA,EAAC,IAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,aAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,gDAAA,EAAkD,SAAS,CAAA;AAAA,IACxE,GAAG,KAAA;AAAA,IAEH;AAAA;AACH,CACD;AAED,UAAA,CAAW,WAAA,GAAc,YAAA;AAKzB,IAAM,gBAAA,GAAyB,iBAG7B,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAC,GAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,mBAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AAED,gBAAA,CAAiB,WAAA,GAAc,kBAAA","file":"chunk-6EWJGRC3.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\nconst alertVariants = cva(\n [\n 'relative w-full rounded-lg border p-4',\n '[&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-current',\n '[&>svg+div]:translate-y-[-3px]',\n ],\n {\n variants: {\n variant: {\n default: 'bg-background text-foreground border-border',\n info: 'bg-primary-50 text-primary-900 border-primary-200 dark:bg-primary-950 dark:text-primary-100 dark:border-primary-800',\n success:\n 'bg-green-50 text-green-900 border-green-200 dark:bg-green-950 dark:text-green-100 dark:border-green-800',\n warning:\n 'bg-yellow-50 text-yellow-900 border-yellow-200 dark:bg-yellow-950 dark:text-yellow-100 dark:border-yellow-800',\n danger:\n 'bg-red-50 text-red-900 border-red-200 dark:bg-red-950 dark:text-red-100 dark:border-red-800',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nexport interface AlertProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof alertVariants> {\n /** Icon to display in the alert */\n icon?: React.ReactElement | null;\n /** Whether the alert can be dismissed */\n dismissible?: boolean;\n /** Callback when the alert is dismissed */\n onDismiss?: () => void;\n /** Accessible label for the dismiss button */\n dismissLabel?: string;\n}\n\n/**\n * An alert component for displaying important messages.\n *\n * @example\n * ```tsx\n * <Alert variant=\"success\">\n * <AlertTitle>Success!</AlertTitle>\n * <AlertDescription>Your changes have been saved.</AlertDescription>\n * </Alert>\n * ```\n */\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n (\n {\n className,\n variant,\n icon,\n dismissible,\n onDismiss,\n dismissLabel = 'Dismiss alert',\n children,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n role=\"alert\"\n data-slot=\"alert\"\n className={cn(\n alertVariants({ variant }),\n React.isValidElement(icon) && 'pl-11',\n dismissible && 'pr-10',\n className\n )}\n {...props}\n >\n {React.isValidElement(icon) && icon}\n <div>{children}</div>\n {dismissible && (\n <button\n type=\"button\"\n data-slot=\"alert-dismiss\"\n onClick={onDismiss}\n className={cn(\n 'absolute top-2 right-2 rounded-md p-1',\n 'opacity-70 hover:opacity-100',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',\n 'transition-opacity'\n )}\n aria-label={dismissLabel}\n >\n <X size={16} aria-hidden=\"true\" />\n </button>\n )}\n </div>\n );\n }\n);\n\nAlert.displayName = 'Alert';\n\n/**\n * Title for an Alert component.\n */\nconst AlertTitle = React.forwardRef<\n globalThis.HTMLHeadingElement,\n React.HTMLAttributes<globalThis.HTMLHeadingElement>\n>(({ className, children, ...props }, ref) => (\n <h5\n ref={ref}\n data-slot=\"alert-title\"\n className={cn('mb-1 leading-none font-semibold tracking-tight', className)}\n {...props}\n >\n {children}\n </h5>\n));\n\nAlertTitle.displayName = 'AlertTitle';\n\n/**\n * Description text for an Alert component.\n */\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"alert-description\"\n className={cn('text-sm [&_p]:leading-relaxed', className)}\n {...props}\n />\n));\n\nAlertDescription.displayName = 'AlertDescription';\n\nexport { Alert, AlertTitle, AlertDescription, alertVariants };\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/GlossaryTooltip/GlossaryTooltip.tsx"],"names":["React","useAnchoredPosition","useEscapeKey","cn","jsxs","jsx","createPortal","X","Diamond","ArrowRight"],"mappings":"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","file":"chunk-7L7OPISJ.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { ArrowRight, Diamond, X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Authoritative source link shown in the card footer. */\nexport interface GlossarySource {\n label: string;\n url: string;\n}\n\n/** Sibling term shown as a lateral \"hop\" chip. */\nexport interface GlossaryRelatedTerm {\n term: string;\n href?: string;\n}\n\nexport interface GlossaryTooltipProps {\n /** Visible, in-flow trigger text (may be a plural or abbreviation match). */\n children: React.ReactNode;\n /** Canonical term name, shown as the card heading. */\n term: string;\n definition: string;\n /** Human-readable category label, shown as a badge in the header. */\n category?: string;\n /** Optional single key fact, shown with a diamond marker. */\n keyFact?: string;\n /** Optional authoritative source link, shown in the footer. */\n source?: GlossarySource;\n /** Optional sibling terms, shown as chips. */\n related?: GlossaryRelatedTerm[];\n /**\n * Full glossary page for the term. When set, the trigger is a real link —\n * desktop clicks navigate while hover previews; touch taps pin the card.\n */\n href?: string;\n /** Truncation limit for the in-card definition (default 190 chars). */\n maxDefinitionLength?: number;\n /** Dashed underline marking the term as hoverable (default true). */\n underline?: boolean;\n className?: string;\n}\n\nconst HIDE_GRACE_MS = 180;\n\n// =============================================================================\n// GlossaryTooltip\n// =============================================================================\n\n/**\n * A rich \"what does this term mean?\" hover card: category badge, canonical\n * term, truncated definition, optional key fact, source link, and related\n * term chips. The provenance sibling is `SourceTip` (\"what backs this\n * claim?\") — the two share the same interaction grammar.\n *\n * Trigger and card are phrasing content (`span`/`a`/`button` only), so it is\n * valid inside `<p>` prose. The card portals to `body` with fixed\n * positioning, flipping and clamping to stay in the viewport. On touch, a\n * tap pins the card instead of navigating; Escape or an outside tap closes.\n *\n * @example\n * ```tsx\n * <GlossaryTooltip\n * term=\"OSHA recordable\"\n * definition=\"A work-related injury or illness that meets OSHA reporting criteria…\"\n * category=\"Compliance\"\n * href=\"/glossary/osha-recordable\"\n * >\n * OSHA recordables\n * </GlossaryTooltip>\n * ```\n */\nexport function GlossaryTooltip({\n children,\n term,\n definition,\n category,\n keyFact,\n source,\n related,\n href,\n maxDefinitionLength = 190,\n underline = true,\n className,\n}: GlossaryTooltipProps) {\n const [open, setOpen] = React.useState(false);\n const [pinned, setPinned] = React.useState(false);\n const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n // True while close() restores focus to the trigger, so the trigger's\n // focus-show doesn't immediately reopen a card the user just dismissed.\n const suppressFocusShow = React.useRef(false);\n\n const { anchorRef, floatingRef, style } = useAnchoredPosition<\n HTMLSpanElement,\n HTMLSpanElement\n >({\n open,\n placement: 'top',\n offset: 10,\n viewportPadding: 8,\n allowFlip: true,\n });\n\n const clearHideTimer = () => {\n if (timer.current) {\n clearTimeout(timer.current);\n timer.current = null;\n }\n };\n\n const show = React.useCallback(() => {\n clearHideTimer();\n setOpen(true);\n }, []);\n\n const scheduleHide = React.useCallback(() => {\n if (pinned) return;\n clearHideTimer();\n timer.current = setTimeout(() => setOpen(false), HIDE_GRACE_MS);\n }, [pinned]);\n\n const close = React.useCallback(() => {\n clearHideTimer();\n setPinned(false);\n setOpen(false);\n // Return focus to the trigger if it was inside the card.\n if (floatingRef.current?.contains(document.activeElement)) {\n suppressFocusShow.current = true;\n (anchorRef.current?.querySelector('a,button') as HTMLElement)?.focus();\n }\n }, [anchorRef, floatingRef]);\n\n React.useEffect(() => () => clearHideTimer(), []);\n\n // A pinned card is a non-modal dialog: move focus into it so its links\n // and close button are reachable by keyboard.\n React.useEffect(() => {\n if (pinned) floatingRef.current?.focus();\n }, [pinned, floatingRef]);\n\n useEscapeKey(close, open);\n\n // Pinned cards close on an outside tap; hover cards close on their own.\n React.useEffect(() => {\n if (!open || !pinned) return;\n const onPointer = (e: Event) => {\n const t = e.target as Node;\n if (anchorRef.current?.contains(t) || floatingRef.current?.contains(t))\n return;\n close();\n };\n document.addEventListener('mousedown', onPointer);\n document.addEventListener('touchstart', onPointer);\n return () => {\n document.removeEventListener('mousedown', onPointer);\n document.removeEventListener('touchstart', onPointer);\n };\n }, [open, pinned, close, anchorRef, floatingRef]);\n\n const togglePin = React.useCallback(() => {\n if (pinned) close();\n else {\n setPinned(true);\n show();\n }\n }, [pinned, close, show]);\n\n // Linked terms: desktop clicks navigate, coarse pointers pin instead.\n // Unlinked (button) terms: any click toggles the pin — hover previews,\n // click holds the card open.\n const onTriggerClick = (e: React.MouseEvent) => {\n const coarse =\n typeof window !== 'undefined' &&\n window.matchMedia('(hover: none)').matches;\n if (href) {\n if (!coarse) return;\n e.preventDefault();\n }\n togglePin();\n };\n\n const onTriggerKeyDown = (e: React.KeyboardEvent) => {\n if (href) return; // links keep native Enter navigation\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n togglePin();\n }\n };\n\n // Focus lives on the dialog container once pinned, so Enter/Space there\n // (not on a link or the close button inside) must also unpin.\n const onDialogKeyDown = (e: React.KeyboardEvent<HTMLSpanElement>) => {\n if (e.target !== e.currentTarget) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n close();\n }\n };\n\n const onTriggerFocus = () => {\n if (suppressFocusShow.current) {\n suppressFocusShow.current = false;\n return;\n }\n show();\n };\n\n const onBlurCapture = (e: React.FocusEvent<HTMLSpanElement>) => {\n const next = e.relatedTarget as Node | null;\n if (\n next &&\n (anchorRef.current?.contains(next) || floatingRef.current?.contains(next))\n )\n return;\n scheduleHide();\n };\n\n const limit = Math.max(1, maxDefinitionLength);\n const short =\n definition.length > limit\n ? `${definition.slice(0, limit - 1).trimEnd()}…`\n : definition;\n\n const triggerClasses = cn(\n 'cursor-help',\n underline &&\n 'decoration-primary-400/70 underline decoration-dashed underline-offset-4',\n className\n );\n\n const triggerProps = {\n onClick: onTriggerClick,\n className: cn(\n triggerClasses,\n href && 'text-primary-800 dark:text-primary-400 font-medium'\n ),\n };\n\n return (\n <span\n ref={anchorRef}\n className=\"relative inline\"\n onMouseEnter={show}\n onMouseLeave={scheduleHide}\n onFocus={onTriggerFocus}\n onBlur={onBlurCapture}\n >\n {href ? (\n <a\n href={href}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n {...triggerProps}\n >\n {children}\n </a>\n ) : (\n <button\n type=\"button\"\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n aria-label={`${term} — show definition`}\n onKeyDown={onTriggerKeyDown}\n {...triggerProps}\n className={cn(\n 'inline appearance-none border-0 bg-transparent p-0 text-inherit [font:inherit]',\n triggerProps.className\n )}\n >\n {children}\n </button>\n )}\n {open &&\n createPortal(\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- keyboard dismissal on a focused non-modal dialog container is the WAI-ARIA pattern; links inside keep their own semantics */\n <span\n ref={floatingRef}\n role=\"dialog\"\n aria-label={term}\n tabIndex={-1}\n onMouseEnter={show}\n onMouseLeave={scheduleHide}\n onBlurCapture={onBlurCapture}\n onKeyDown={onDialogKeyDown}\n className=\"focus-visible:ring-ring z-50 block w-80 rounded-lg outline-none focus-visible:ring-2\"\n style={style}\n >\n <span className=\"border-border bg-card block overflow-hidden rounded-lg border text-start font-normal tracking-normal normal-case shadow-xl ring-1 ring-black/5 dark:ring-white/10\">\n <span className=\"from-primary-700 to-primary-600 block bg-gradient-to-br px-3.5 py-2.5\">\n <span className=\"flex items-start justify-between gap-2\">\n <span className=\"block min-w-0\">\n {category && (\n <span className=\"mb-1 inline-flex rounded-full bg-white/15 px-2 py-0.5 text-[10px] font-bold tracking-wide text-white uppercase\">\n {category}\n </span>\n )}\n <span className=\"block text-sm leading-snug font-semibold text-white\">\n {term}\n </span>\n </span>\n {pinned && (\n <button\n type=\"button\"\n onClick={close}\n aria-label=\"Close definition\"\n className=\"shrink-0 rounded p-0.5 text-white/70 hover:bg-white/10 hover:text-white\"\n >\n <X aria-hidden=\"true\" className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </span>\n </span>\n\n <span className=\"block px-3.5 py-2.5\">\n <span className=\"text-muted-foreground block text-[13px] leading-relaxed\">\n {short}\n </span>\n {keyFact && (\n <span className=\"mt-2 flex items-start gap-1.5\">\n <Diamond\n aria-hidden=\"true\"\n className=\"text-primary-500 mt-0.5 h-3 w-3 shrink-0\"\n />\n <span className=\"text-foreground min-w-0 text-xs leading-relaxed font-medium\">\n {keyFact}\n </span>\n </span>\n )}\n </span>\n\n {(source || (related && related.length > 0) || href) && (\n <span className=\"border-border bg-muted/50 block border-t px-3.5 py-2\">\n {related && related.length > 0 && (\n <span className=\"mb-1.5 flex flex-wrap gap-1\">\n {related.map((r) =>\n r.href ? (\n <a\n key={r.term}\n href={r.href}\n className=\"border-border bg-card text-foreground hover:border-primary-400 hover:text-primary-800 dark:hover:text-primary-400 rounded-full border px-2 py-0.5 text-[11px] font-medium\"\n >\n {r.term}\n </a>\n ) : (\n <span\n key={r.term}\n className=\"border-border bg-card text-muted-foreground rounded-full border px-2 py-0.5 text-[11px] font-medium\"\n >\n {r.term}\n </span>\n )\n )}\n </span>\n )}\n <span className=\"flex items-center justify-between gap-2\">\n {source ? (\n <a\n href={source.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary-800 hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-300 min-w-0 truncate text-[11px] font-semibold\"\n >\n {source.label}\n </a>\n ) : (\n <span />\n )}\n {href && (\n <a\n href={href}\n className=\"text-muted-foreground hover:text-foreground inline-flex shrink-0 items-center gap-0.5 text-[11px] font-medium\"\n >\n Full definition\n <ArrowRight aria-hidden=\"true\" className=\"h-3 w-3\" />\n </a>\n )}\n </span>\n </span>\n )}\n </span>\n </span>,\n document.body\n )}\n </span>\n );\n}\n"]}
|