@mieweb/ui 0.7.3 → 0.8.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 +45 -24
- package/agent/README.md +20 -0
- package/agent/init-agent.mjs +61 -0
- package/agent/mieweb-ui.instructions.md +169 -0
- package/dist/ag-grid.cjs +11 -0
- package/dist/ag-grid.cjs.map +1 -1
- package/dist/ag-grid.d.cts +4 -0
- package/dist/ag-grid.d.ts +4 -0
- package/dist/ag-grid.js +11 -0
- package/dist/ag-grid.js.map +1 -1
- package/dist/brands/index.cjs +12 -12
- package/dist/brands/index.js +3 -3
- package/dist/{chunk-EGWWTIWS.js → chunk-2AB4PQYL.js} +126 -96
- package/dist/chunk-2AB4PQYL.js.map +1 -0
- package/dist/{chunk-NQ2D2V6O.cjs → chunk-2PEVRI26.cjs} +37 -37
- package/dist/{chunk-NQ2D2V6O.cjs.map → chunk-2PEVRI26.cjs.map} +1 -1
- package/dist/{chunk-6J7UGYT5.cjs → chunk-2SSAAE3I.cjs} +49 -9
- package/dist/chunk-2SSAAE3I.cjs.map +1 -0
- package/dist/chunk-3IMM2PM4.js +259 -0
- package/dist/chunk-3IMM2PM4.js.map +1 -0
- package/dist/{chunk-SYIFEJSF.cjs → chunk-3RADKLLD.cjs} +13 -13
- package/dist/{chunk-SYIFEJSF.cjs.map → chunk-3RADKLLD.cjs.map} +1 -1
- package/dist/chunk-3SHLOF4V.cjs +128 -0
- package/dist/chunk-3SHLOF4V.cjs.map +1 -0
- package/dist/chunk-3TXOFAXP.cjs +139 -0
- package/dist/chunk-3TXOFAXP.cjs.map +1 -0
- package/dist/{chunk-LJDBD2DD.cjs → chunk-5BPUZK2B.cjs} +386 -4
- package/dist/chunk-5BPUZK2B.cjs.map +1 -0
- package/dist/chunk-5JZIDILK.cjs +164 -0
- package/dist/chunk-5JZIDILK.cjs.map +1 -0
- package/dist/chunk-5MXO6PEV.cjs +78 -0
- package/dist/chunk-5MXO6PEV.cjs.map +1 -0
- package/dist/chunk-5QZ73PZC.js +62 -0
- package/dist/chunk-5QZ73PZC.js.map +1 -0
- package/dist/chunk-6GKX36JX.js +269 -0
- package/dist/chunk-6GKX36JX.js.map +1 -0
- package/dist/chunk-6NZXWKUE.js +3 -0
- package/dist/chunk-6NZXWKUE.js.map +1 -0
- package/dist/chunk-6SCQ7FKT.js +115 -0
- package/dist/chunk-6SCQ7FKT.js.map +1 -0
- package/dist/{chunk-KFLDXJEE.js → chunk-753Z3NXL.js} +46 -15
- package/dist/chunk-753Z3NXL.js.map +1 -0
- package/dist/{chunk-S3MKIDYG.cjs → chunk-7AECNMYV.cjs} +46 -15
- package/dist/chunk-7AECNMYV.cjs.map +1 -0
- package/dist/chunk-7IKLGH3Z.cjs +92 -0
- package/dist/chunk-7IKLGH3Z.cjs.map +1 -0
- package/dist/chunk-7RV6CAP6.cjs +106 -0
- package/dist/chunk-7RV6CAP6.cjs.map +1 -0
- package/dist/chunk-AHHFFXJR.cjs +230 -0
- package/dist/chunk-AHHFFXJR.cjs.map +1 -0
- package/dist/{chunk-HIDV32ZX.js → chunk-AHUYW673.js} +168 -9
- package/dist/chunk-AHUYW673.js.map +1 -0
- package/dist/{chunk-MYFZYUPR.cjs → chunk-AOHJILLU.cjs} +38 -3
- package/dist/chunk-AOHJILLU.cjs.map +1 -0
- package/dist/{chunk-DLBV42JD.js → chunk-ATOWMVZH.js} +157 -40
- package/dist/chunk-ATOWMVZH.js.map +1 -0
- package/dist/{chunk-WUNWHOLA.cjs → chunk-BSDBI6H7.cjs} +116 -26
- package/dist/chunk-BSDBI6H7.cjs.map +1 -0
- package/dist/chunk-CG4ZKJLE.js +84 -0
- package/dist/chunk-CG4ZKJLE.js.map +1 -0
- package/dist/{chunk-4PIW3Y5M.js → chunk-DJ4JPFWI.js} +3 -3
- package/dist/{chunk-4PIW3Y5M.js.map → chunk-DJ4JPFWI.js.map} +1 -1
- package/dist/{chunk-Z4PECE5S.js → chunk-DX64KLSN.js} +2 -2
- package/dist/{chunk-Z4PECE5S.js.map → chunk-DX64KLSN.js.map} +1 -1
- package/dist/{chunk-FDV7EQWH.js → chunk-EK6DYGFG.js} +3 -3
- package/dist/{chunk-FDV7EQWH.js.map → chunk-EK6DYGFG.js.map} +1 -1
- package/dist/{chunk-QUUBTNMH.js → chunk-EPSB4WTL.js} +45 -15
- package/dist/chunk-EPSB4WTL.js.map +1 -0
- package/dist/{chunk-KRGKPUJH.js → chunk-F2S6NV5N.js} +8 -8
- package/dist/{chunk-KRGKPUJH.js.map → chunk-F2S6NV5N.js.map} +1 -1
- package/dist/chunk-F57VRLKP.js +708 -0
- package/dist/chunk-F57VRLKP.js.map +1 -0
- package/dist/{chunk-26DPQUSB.cjs → chunk-G52YRAJC.cjs} +4 -4
- package/dist/{chunk-26DPQUSB.cjs.map → chunk-G52YRAJC.cjs.map} +1 -1
- package/dist/{chunk-5IDYOJHO.cjs → chunk-G7EQ3JPX.cjs} +45 -15
- package/dist/chunk-G7EQ3JPX.cjs.map +1 -0
- package/dist/{chunk-FKLUSYFP.cjs → chunk-GQVL2JKQ.cjs} +4 -4
- package/dist/{chunk-FKLUSYFP.cjs.map → chunk-GQVL2JKQ.cjs.map} +1 -1
- package/dist/{chunk-3D4ITDLO.js → chunk-GXODR6V4.js} +3 -3
- package/dist/{chunk-3D4ITDLO.js.map → chunk-GXODR6V4.js.map} +1 -1
- package/dist/{chunk-AFGADE3B.js → chunk-H3YO5GBM.js} +117 -27
- package/dist/chunk-H3YO5GBM.js.map +1 -0
- package/dist/chunk-HK3AMH3Q.cjs +151 -0
- package/dist/chunk-HK3AMH3Q.cjs.map +1 -0
- package/dist/chunk-HQ3XPCHG.js +114 -0
- package/dist/chunk-HQ3XPCHG.js.map +1 -0
- package/dist/chunk-I44YNYI6.cjs +4 -0
- package/dist/chunk-I44YNYI6.cjs.map +1 -0
- package/dist/chunk-JHZW3Y62.js +142 -0
- package/dist/chunk-JHZW3Y62.js.map +1 -0
- package/dist/{chunk-FTRGZOVJ.js → chunk-JQQABHDN.js} +3 -3
- package/dist/{chunk-FTRGZOVJ.js.map → chunk-JQQABHDN.js.map} +1 -1
- package/dist/chunk-JR4QIU54.cjs +291 -0
- package/dist/chunk-JR4QIU54.cjs.map +1 -0
- package/dist/{chunk-JDHIBJ5K.cjs → chunk-JWTCEWQ4.cjs} +2 -2
- package/dist/{chunk-JDHIBJ5K.cjs.map → chunk-JWTCEWQ4.cjs.map} +1 -1
- package/dist/{chunk-ZBI52NP2.cjs → chunk-K5GQPTTA.cjs} +158 -41
- package/dist/chunk-K5GQPTTA.cjs.map +1 -0
- package/dist/chunk-KFEN2SRZ.js +208 -0
- package/dist/chunk-KFEN2SRZ.js.map +1 -0
- package/dist/chunk-L6MDULYB.js +87 -0
- package/dist/chunk-L6MDULYB.js.map +1 -0
- package/dist/{chunk-RYQ3S3KO.cjs → chunk-LDCFNWJC.cjs} +5 -5
- package/dist/{chunk-RYQ3S3KO.cjs.map → chunk-LDCFNWJC.cjs.map} +1 -1
- package/dist/{chunk-LC7YHZXM.js → chunk-LDQ2T27A.js} +5 -5
- package/dist/{chunk-LC7YHZXM.js.map → chunk-LDQ2T27A.js.map} +1 -1
- package/dist/chunk-N5O47VGS.cjs +109 -0
- package/dist/chunk-N5O47VGS.cjs.map +1 -0
- package/dist/chunk-NGSDBWKA.cjs +84 -0
- package/dist/chunk-NGSDBWKA.cjs.map +1 -0
- package/dist/chunk-NMBYU7D7.cjs +31 -0
- package/dist/chunk-NMBYU7D7.cjs.map +1 -0
- package/dist/{chunk-SPWVKDGC.cjs → chunk-QMKYJ4AT.cjs} +4 -4
- package/dist/{chunk-SPWVKDGC.cjs.map → chunk-QMKYJ4AT.cjs.map} +1 -1
- package/dist/{chunk-RBS3GHDZ.cjs → chunk-QOJ4V7YX.cjs} +170 -10
- package/dist/chunk-QOJ4V7YX.cjs.map +1 -0
- package/dist/chunk-RUGHNFQG.js +28 -0
- package/dist/chunk-RUGHNFQG.js.map +1 -0
- package/dist/{chunk-P6L74SKG.js → chunk-SVZ4MQVQ.js} +48 -8
- package/dist/chunk-SVZ4MQVQ.js.map +1 -0
- package/dist/{chunk-URHXR5SC.cjs → chunk-TQZPYDUL.cjs} +7 -7
- package/dist/{chunk-URHXR5SC.cjs.map → chunk-TQZPYDUL.cjs.map} +1 -1
- package/dist/{chunk-MO65V64I.js → chunk-TXRQQMG5.js} +2 -2
- package/dist/{chunk-MO65V64I.js.map → chunk-TXRQQMG5.js.map} +1 -1
- package/dist/{chunk-EKRT7K2K.js → chunk-UJS3JTVT.js} +3 -3
- package/dist/{chunk-EKRT7K2K.js.map → chunk-UJS3JTVT.js.map} +1 -1
- package/dist/{chunk-6MMIWE7H.js → chunk-VQ5HJCTP.js} +386 -4
- package/dist/chunk-VQ5HJCTP.js.map +1 -0
- package/dist/chunk-WBGUYSWY.js +90 -0
- package/dist/chunk-WBGUYSWY.js.map +1 -0
- package/dist/{chunk-LJBWCUKP.cjs → chunk-WIYQI35R.cjs} +2 -2
- package/dist/{chunk-LJBWCUKP.cjs.map → chunk-WIYQI35R.cjs.map} +1 -1
- package/dist/chunk-WKSUL2ZN.js +56 -0
- package/dist/chunk-WKSUL2ZN.js.map +1 -0
- package/dist/{chunk-BOOJDRJO.js → chunk-WSNMQQ4P.js} +38 -3
- package/dist/chunk-WSNMQQ4P.js.map +1 -0
- package/dist/chunk-X5ZPYYMS.js +105 -0
- package/dist/chunk-X5ZPYYMS.js.map +1 -0
- package/dist/{chunk-XB54G7WS.cjs → chunk-XJTFZLWH.cjs} +2 -86
- package/dist/chunk-XJTFZLWH.cjs.map +1 -0
- package/dist/{chunk-GTHNWP4P.js → chunk-XUVEF2RQ.js} +4 -87
- package/dist/chunk-XUVEF2RQ.js.map +1 -0
- package/dist/chunk-Y6YSJPVC.js +129 -0
- package/dist/chunk-Y6YSJPVC.js.map +1 -0
- package/dist/{chunk-OAHORW4N.cjs → chunk-YRLCR76L.cjs} +129 -99
- package/dist/chunk-YRLCR76L.cjs.map +1 -0
- package/dist/chunk-YVIH26FG.cjs +736 -0
- package/dist/chunk-YVIH26FG.cjs.map +1 -0
- package/dist/chunk-Z5S5JEJD.cjs +286 -0
- package/dist/chunk-Z5S5JEJD.cjs.map +1 -0
- package/dist/chunk-ZO4L6C2Y.cjs +137 -0
- package/dist/chunk-ZO4L6C2Y.cjs.map +1 -0
- package/dist/{collabKit-QZL4P5T5.js → collabKit-A643VH2I.js} +7 -3
- package/dist/collabKit-A643VH2I.js.map +1 -0
- package/dist/{collabKit-UF7E6V3N.cjs → collabKit-Q4A36LDA.cjs} +7 -3
- package/dist/collabKit-Q4A36LDA.cjs.map +1 -0
- package/dist/components/Accordion/index.cjs +13 -0
- package/dist/components/Accordion/index.cjs.map +1 -0
- package/dist/components/Accordion/index.d.cts +50 -0
- package/dist/components/Accordion/index.d.ts +50 -0
- package/dist/components/Accordion/index.js +4 -0
- package/dist/components/Accordion/index.js.map +1 -0
- package/dist/components/Alert/index.d.cts +1 -1
- package/dist/components/Alert/index.d.ts +1 -1
- package/dist/components/Autocomplete/index.cjs +5 -4
- package/dist/components/Autocomplete/index.d.cts +20 -3
- package/dist/components/Autocomplete/index.d.ts +20 -3
- package/dist/components/Autocomplete/index.js +4 -3
- package/dist/components/Badge/index.d.cts +1 -1
- package/dist/components/Badge/index.d.ts +1 -1
- package/dist/components/Card/index.d.cts +1 -1
- package/dist/components/Card/index.d.ts +1 -1
- package/dist/components/Checkbox/index.cjs +5 -4
- package/dist/components/Checkbox/index.d.cts +9 -1
- package/dist/components/Checkbox/index.d.ts +9 -1
- package/dist/components/Checkbox/index.js +2 -1
- package/dist/components/ClampedText/index.cjs +13 -0
- package/dist/components/ClampedText/index.cjs.map +1 -0
- package/dist/components/ClampedText/index.d.cts +33 -0
- package/dist/components/ClampedText/index.d.ts +33 -0
- package/dist/components/ClampedText/index.js +4 -0
- package/dist/components/ClampedText/index.js.map +1 -0
- package/dist/components/CopyButton/index.cjs +13 -0
- package/dist/components/CopyButton/index.cjs.map +1 -0
- package/dist/components/CopyButton/index.d.cts +29 -0
- package/dist/components/CopyButton/index.d.ts +29 -0
- package/dist/components/CopyButton/index.js +4 -0
- package/dist/components/CopyButton/index.js.map +1 -0
- package/dist/components/CountryCodeDropdown/index.cjs +5 -5
- package/dist/components/CountryCodeDropdown/index.js +2 -2
- package/dist/components/CustomizableDashboard/index.cjs +43 -0
- package/dist/components/CustomizableDashboard/index.cjs.map +1 -0
- package/dist/components/CustomizableDashboard/index.d.cts +195 -0
- package/dist/components/CustomizableDashboard/index.d.ts +195 -0
- package/dist/components/CustomizableDashboard/index.js +10 -0
- package/dist/components/CustomizableDashboard/index.js.map +1 -0
- package/dist/components/DateInput/index.cjs +5 -4
- package/dist/components/DateInput/index.d.cts +1 -0
- package/dist/components/DateInput/index.d.ts +1 -0
- package/dist/components/DateInput/index.js +4 -3
- package/dist/components/Dropdown/index.cjs +14 -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 +4 -3
- package/dist/components/FilterSummaryBar/index.cjs +13 -0
- package/dist/components/FilterSummaryBar/index.cjs.map +1 -0
- package/dist/components/FilterSummaryBar/index.d.cts +53 -0
- package/dist/components/FilterSummaryBar/index.d.ts +53 -0
- package/dist/components/FilterSummaryBar/index.js +4 -0
- package/dist/components/FilterSummaryBar/index.js.map +1 -0
- package/dist/components/FreshnessBadge/index.cjs +25 -0
- package/dist/components/FreshnessBadge/index.cjs.map +1 -0
- package/dist/components/FreshnessBadge/index.d.cts +49 -0
- package/dist/components/FreshnessBadge/index.d.ts +49 -0
- package/dist/components/FreshnessBadge/index.js +4 -0
- package/dist/components/FreshnessBadge/index.js.map +1 -0
- package/dist/components/GlossaryTooltip/index.cjs +15 -0
- package/dist/components/GlossaryTooltip/index.cjs.map +1 -0
- package/dist/components/GlossaryTooltip/index.d.cts +64 -0
- package/dist/components/GlossaryTooltip/index.d.ts +64 -0
- package/dist/components/GlossaryTooltip/index.js +6 -0
- package/dist/components/GlossaryTooltip/index.js.map +1 -0
- package/dist/components/Input/index.cjs +20 -3
- package/dist/components/Input/index.d.cts +37 -2
- package/dist/components/Input/index.d.ts +37 -2
- package/dist/components/Input/index.js +2 -1
- package/dist/components/KeyboardShortcutsOverlay/index.cjs +21 -0
- package/dist/components/KeyboardShortcutsOverlay/index.cjs.map +1 -0
- package/dist/components/KeyboardShortcutsOverlay/index.d.cts +54 -0
- package/dist/components/KeyboardShortcutsOverlay/index.d.ts +54 -0
- package/dist/components/KeyboardShortcutsOverlay/index.js +8 -0
- package/dist/components/KeyboardShortcutsOverlay/index.js.map +1 -0
- package/dist/components/Markdown/index.cjs +10 -10
- package/dist/components/Markdown/index.js +2 -2
- package/dist/components/MediaEditor/index.cjs +11 -10
- package/dist/components/MediaEditor/index.js +6 -5
- package/dist/components/PhoneInput/index.cjs +5 -4
- package/dist/components/PhoneInput/index.js +3 -2
- package/dist/components/Progress/index.d.cts +1 -1
- package/dist/components/Progress/index.d.ts +1 -1
- package/dist/components/Radio/index.cjs +5 -4
- package/dist/components/Radio/index.d.cts +9 -1
- package/dist/components/Radio/index.d.ts +9 -1
- package/dist/components/Radio/index.js +2 -1
- package/dist/components/ReadingProgressBar/index.cjs +13 -0
- package/dist/components/ReadingProgressBar/index.cjs.map +1 -0
- package/dist/components/ReadingProgressBar/index.d.cts +20 -0
- package/dist/components/ReadingProgressBar/index.d.ts +20 -0
- package/dist/components/ReadingProgressBar/index.js +4 -0
- package/dist/components/ReadingProgressBar/index.js.map +1 -0
- package/dist/components/RichTextEditor/index.cjs +8 -7
- package/dist/components/RichTextEditor/index.js +5 -4
- package/dist/components/SectionSpyNav/index.cjs +15 -0
- package/dist/components/SectionSpyNav/index.cjs.map +1 -0
- package/dist/components/SectionSpyNav/index.d.cts +63 -0
- package/dist/components/SectionSpyNav/index.d.ts +63 -0
- package/dist/components/SectionSpyNav/index.js +6 -0
- package/dist/components/SectionSpyNav/index.js.map +1 -0
- package/dist/components/Select/index.cjs +6 -4
- package/dist/components/Select/index.d.cts +56 -9
- package/dist/components/Select/index.d.ts +56 -9
- package/dist/components/Select/index.js +4 -2
- package/dist/components/Slider/index.d.cts +2 -2
- package/dist/components/Slider/index.d.ts +2 -2
- package/dist/components/SourceTip/index.cjs +15 -0
- package/dist/components/SourceTip/index.cjs.map +1 -0
- package/dist/components/SourceTip/index.d.cts +58 -0
- package/dist/components/SourceTip/index.d.ts +58 -0
- package/dist/components/SourceTip/index.js +6 -0
- package/dist/components/SourceTip/index.js.map +1 -0
- package/dist/components/Sparkline/index.cjs +13 -0
- package/dist/components/Sparkline/index.cjs.map +1 -0
- package/dist/components/Sparkline/index.d.cts +53 -0
- package/dist/components/Sparkline/index.d.ts +53 -0
- package/dist/components/Sparkline/index.js +4 -0
- package/dist/components/Sparkline/index.js.map +1 -0
- package/dist/components/Spinner/index.d.cts +1 -1
- package/dist/components/Spinner/index.d.ts +1 -1
- package/dist/components/SuperChat/index.cjs +252 -93
- package/dist/components/SuperChat/index.cjs.map +1 -1
- package/dist/components/SuperChat/index.d.cts +13 -5
- package/dist/components/SuperChat/index.d.ts +13 -5
- package/dist/components/SuperChat/index.js +249 -90
- package/dist/components/SuperChat/index.js.map +1 -1
- package/dist/components/SuperChat/plugins/index.cjs +6 -26
- 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 +4 -24
- 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/Textarea/index.cjs +5 -3
- package/dist/components/Textarea/index.d.cts +19 -1
- package/dist/components/Textarea/index.d.ts +19 -1
- package/dist/components/Textarea/index.js +3 -1
- package/dist/datavis.cjs +1 -1
- package/dist/datavis.js +1 -1
- package/dist/esheet.cjs +12 -11
- package/dist/esheet.cjs.map +1 -1
- package/dist/esheet.js +9 -8
- package/dist/esheet.js.map +1 -1
- package/dist/hooks/index.cjs +29 -19
- package/dist/hooks/index.d.cts +17 -2
- package/dist/hooks/index.d.ts +17 -2
- package/dist/hooks/index.js +4 -2
- package/dist/index.cjs +2965 -2043
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +193 -48
- package/dist/index.d.ts +193 -48
- package/dist/index.js +2135 -1330
- package/dist/index.js.map +1 -1
- package/dist/kerebron.cjs +200 -68
- package/dist/kerebron.cjs.map +1 -1
- package/dist/kerebron.css +129 -0
- package/dist/kerebron.d.cts +52 -3
- package/dist/kerebron.d.ts +52 -3
- package/dist/kerebron.js +201 -69
- package/dist/kerebron.js.map +1 -1
- 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.cts → useAnchoredPosition-CKwLSQW8.d.cts} +10 -3
- package/dist/{useAnchoredPosition-C7PNglzD.d.ts → useAnchoredPosition-CKwLSQW8.d.ts} +10 -3
- package/dist/utils/index.cjs +9 -9
- package/dist/utils/index.js +1 -1
- package/package.json +13 -4
- package/dist/chunk-5IDYOJHO.cjs.map +0 -1
- package/dist/chunk-6ECKH4DJ.cjs +0 -147
- package/dist/chunk-6ECKH4DJ.cjs.map +0 -1
- package/dist/chunk-6J7UGYT5.cjs.map +0 -1
- package/dist/chunk-6MMIWE7H.js.map +0 -1
- package/dist/chunk-AFGADE3B.js.map +0 -1
- package/dist/chunk-BOOJDRJO.js.map +0 -1
- package/dist/chunk-DLBV42JD.js.map +0 -1
- package/dist/chunk-EGWWTIWS.js.map +0 -1
- package/dist/chunk-GTHNWP4P.js.map +0 -1
- package/dist/chunk-HIDV32ZX.js.map +0 -1
- package/dist/chunk-KFLDXJEE.js.map +0 -1
- package/dist/chunk-LJDBD2DD.cjs.map +0 -1
- package/dist/chunk-MYFZYUPR.cjs.map +0 -1
- package/dist/chunk-OAHORW4N.cjs.map +0 -1
- package/dist/chunk-P6L74SKG.js.map +0 -1
- package/dist/chunk-QUUBTNMH.js.map +0 -1
- package/dist/chunk-RBS3GHDZ.cjs.map +0 -1
- package/dist/chunk-S3MKIDYG.cjs.map +0 -1
- package/dist/chunk-WUNWHOLA.cjs.map +0 -1
- package/dist/chunk-XB54G7WS.cjs.map +0 -1
- package/dist/chunk-YXCE2HSK.js +0 -124
- package/dist/chunk-YXCE2HSK.js.map +0 -1
- package/dist/chunk-ZBI52NP2.cjs.map +0 -1
- package/dist/collabKit-QZL4P5T5.js.map +0 -1
- package/dist/collabKit-UF7E6V3N.cjs.map +0 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var chunkZ5S5JEJD_cjs = require('./chunk-Z5S5JEJD.cjs');
|
|
3
4
|
var chunkFHY3K6PL_cjs = require('./chunk-FHY3K6PL.cjs');
|
|
4
5
|
var chunkFSGEDDF2_cjs = require('./chunk-FSGEDDF2.cjs');
|
|
5
|
-
var
|
|
6
|
+
var chunkAOHJILLU_cjs = require('./chunk-AOHJILLU.cjs');
|
|
6
7
|
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
7
8
|
var React = require('react');
|
|
8
9
|
var reactDom = require('react-dom');
|
|
@@ -48,37 +49,97 @@ var selectTriggerVariants = classVarianceAuthority.cva(
|
|
|
48
49
|
hasError: {
|
|
49
50
|
true: "border-destructive focus:ring-destructive",
|
|
50
51
|
false: ""
|
|
52
|
+
},
|
|
53
|
+
labelVariant: {
|
|
54
|
+
stacked: "",
|
|
55
|
+
floating: "peer"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
compoundVariants: [
|
|
59
|
+
{ labelVariant: "floating", size: "sm", className: "h-11" },
|
|
60
|
+
{ labelVariant: "floating", size: "md", className: "h-14" },
|
|
61
|
+
{ labelVariant: "floating", size: "lg", className: "h-16" }
|
|
62
|
+
],
|
|
63
|
+
defaultVariants: {
|
|
64
|
+
size: "md",
|
|
65
|
+
hasError: false,
|
|
66
|
+
labelVariant: "stacked"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
var floatingLabelVariants = classVarianceAuthority.cva(
|
|
71
|
+
[
|
|
72
|
+
"absolute start-3 pointer-events-none select-none",
|
|
73
|
+
"transition-all duration-200 ease-out"
|
|
74
|
+
],
|
|
75
|
+
{
|
|
76
|
+
variants: {
|
|
77
|
+
size: {
|
|
78
|
+
sm: [
|
|
79
|
+
"peer-focus:top-0.5 peer-focus:translate-y-0 peer-focus:text-[0.65rem]"
|
|
80
|
+
],
|
|
81
|
+
md: ["peer-focus:top-1 peer-focus:translate-y-0 peer-focus:text-xs"],
|
|
82
|
+
lg: ["peer-focus:top-1.5 peer-focus:translate-y-0 peer-focus:text-sm"]
|
|
83
|
+
},
|
|
84
|
+
floated: {
|
|
85
|
+
true: "",
|
|
86
|
+
false: "top-1/2 -translate-y-1/2"
|
|
87
|
+
},
|
|
88
|
+
hasError: {
|
|
89
|
+
true: "text-destructive",
|
|
90
|
+
false: "text-muted-foreground"
|
|
51
91
|
}
|
|
52
92
|
},
|
|
93
|
+
compoundVariants: [
|
|
94
|
+
{ size: "sm", floated: false, className: "text-sm" },
|
|
95
|
+
{ size: "md", floated: false, className: "text-base" },
|
|
96
|
+
{ size: "lg", floated: false, className: "text-lg" },
|
|
97
|
+
{
|
|
98
|
+
size: "sm",
|
|
99
|
+
floated: true,
|
|
100
|
+
className: "top-0.5 translate-y-0 text-[0.65rem]"
|
|
101
|
+
},
|
|
102
|
+
{ size: "md", floated: true, className: "top-1 translate-y-0 text-xs" },
|
|
103
|
+
{ size: "lg", floated: true, className: "top-1.5 translate-y-0 text-sm" }
|
|
104
|
+
],
|
|
53
105
|
defaultVariants: {
|
|
54
106
|
size: "md",
|
|
107
|
+
floated: false,
|
|
55
108
|
hasError: false
|
|
56
109
|
}
|
|
57
110
|
}
|
|
58
111
|
);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
112
|
+
var floatingValuePadding = {
|
|
113
|
+
sm: "pt-4 pb-1",
|
|
114
|
+
md: "pt-5 pb-1.5",
|
|
115
|
+
lg: "pt-6 pb-2"
|
|
116
|
+
};
|
|
117
|
+
function Select(props) {
|
|
118
|
+
const {
|
|
119
|
+
options,
|
|
120
|
+
placeholder = "Select an option",
|
|
121
|
+
disabled = false,
|
|
122
|
+
label,
|
|
123
|
+
hideLabel = false,
|
|
124
|
+
labelVariant = "stacked",
|
|
125
|
+
error,
|
|
126
|
+
helperText,
|
|
127
|
+
required = false,
|
|
128
|
+
requiredVariant,
|
|
129
|
+
size,
|
|
130
|
+
hasError,
|
|
131
|
+
"aria-label": ariaLabel,
|
|
132
|
+
searchable = false,
|
|
133
|
+
searchPlaceholder = "Search...",
|
|
134
|
+
noResultsText = "No results found",
|
|
135
|
+
className,
|
|
136
|
+
id
|
|
137
|
+
} = props;
|
|
138
|
+
const multiple = props.multiple === true;
|
|
139
|
+
const onValueChange = props.onValueChange;
|
|
79
140
|
const [isOpen, setIsOpen] = React__namespace.useState(false);
|
|
80
|
-
const [
|
|
81
|
-
|
|
141
|
+
const [uncontrolledValues, setUncontrolledValues] = React__namespace.useState(
|
|
142
|
+
() => toValueArray(props.defaultValue)
|
|
82
143
|
);
|
|
83
144
|
const [searchQuery, setSearchQuery] = React__namespace.useState("");
|
|
84
145
|
const [highlightedIndex, setHighlightedIndex] = React__namespace.useState(-1);
|
|
@@ -96,8 +157,13 @@ function Select({
|
|
|
96
157
|
const listboxId = `${selectId}-listbox`;
|
|
97
158
|
const errorId = `${selectId}-error`;
|
|
98
159
|
const helperId = `${selectId}-helper`;
|
|
99
|
-
const isControlled =
|
|
100
|
-
const
|
|
160
|
+
const isControlled = props.value !== void 0;
|
|
161
|
+
const controlledValue = props.value;
|
|
162
|
+
const controlledValues = React__namespace.useMemo(
|
|
163
|
+
() => toValueArray(controlledValue),
|
|
164
|
+
[controlledValue]
|
|
165
|
+
);
|
|
166
|
+
const selectedValues = isControlled ? controlledValues : uncontrolledValues;
|
|
101
167
|
const flatOptions = React__namespace.useMemo(() => {
|
|
102
168
|
const result = [];
|
|
103
169
|
for (const item of options) {
|
|
@@ -140,7 +206,9 @@ function Select({
|
|
|
140
206
|
}
|
|
141
207
|
return result;
|
|
142
208
|
}, [filteredOptions]);
|
|
143
|
-
const
|
|
209
|
+
const selectedOptions = selectedValues.map((v) => flatOptions.find((opt) => opt.value === v)).filter((opt) => opt !== void 0);
|
|
210
|
+
const hasSelection = selectedOptions.length > 0;
|
|
211
|
+
const displayLabel = selectedOptions.map((opt) => opt.label).join(", ");
|
|
144
212
|
const outsideRefs = React__namespace.useMemo(() => [containerRef, dropdownRef], []);
|
|
145
213
|
chunkFSGEDDF2_cjs.useClickOutside(outsideRefs, () => setIsOpen(false), isOpen);
|
|
146
214
|
chunkFHY3K6PL_cjs.useEscapeKey(() => {
|
|
@@ -153,22 +221,35 @@ function Select({
|
|
|
153
221
|
anchorRef,
|
|
154
222
|
floatingRef,
|
|
155
223
|
style: dropdownStyle
|
|
156
|
-
} =
|
|
224
|
+
} = chunkAOHJILLU_cjs.useAnchoredPosition({
|
|
157
225
|
open: isOpen,
|
|
158
226
|
matchWidth: true,
|
|
159
227
|
maxHeight: 300
|
|
160
228
|
});
|
|
161
229
|
const handleValueChange = React__namespace.useCallback(
|
|
162
|
-
(
|
|
230
|
+
(optionValue) => {
|
|
231
|
+
if (multiple) {
|
|
232
|
+
const next = selectedValues.includes(optionValue) ? selectedValues.filter((v) => v !== optionValue) : [...selectedValues, optionValue];
|
|
233
|
+
if (!isControlled) {
|
|
234
|
+
setUncontrolledValues(next);
|
|
235
|
+
}
|
|
236
|
+
onValueChange?.(next);
|
|
237
|
+
if (searchable) {
|
|
238
|
+
searchInputRef.current?.focus();
|
|
239
|
+
} else {
|
|
240
|
+
triggerRef.current?.focus();
|
|
241
|
+
}
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
163
244
|
if (!isControlled) {
|
|
164
|
-
|
|
245
|
+
setUncontrolledValues([optionValue]);
|
|
165
246
|
}
|
|
166
|
-
onValueChange?.(
|
|
247
|
+
onValueChange?.(optionValue);
|
|
167
248
|
setIsOpen(false);
|
|
168
249
|
setSearchQuery("");
|
|
169
250
|
triggerRef.current?.focus();
|
|
170
251
|
},
|
|
171
|
-
[isControlled, onValueChange]
|
|
252
|
+
[isControlled, multiple, onValueChange, searchable, selectedValues]
|
|
172
253
|
);
|
|
173
254
|
const handleKeyDown = React__namespace.useCallback(
|
|
174
255
|
(e) => {
|
|
@@ -289,13 +370,17 @@ function Select({
|
|
|
289
370
|
error ? errorId : null,
|
|
290
371
|
helperText && !error ? helperId : null
|
|
291
372
|
].filter(Boolean).join(" ");
|
|
373
|
+
const isFloating = labelVariant === "floating" && !!label && !hideLabel;
|
|
374
|
+
const isFloated = isOpen || hasSelection;
|
|
375
|
+
const resolvedSize = size ?? "md";
|
|
376
|
+
const requiredMark = required && /* @__PURE__ */ jsxRuntime.jsx(chunkZ5S5JEJD_cjs.RequiredMark, { variant: requiredVariant });
|
|
292
377
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
293
378
|
"div",
|
|
294
379
|
{
|
|
295
380
|
"data-slot": "select-wrapper",
|
|
296
381
|
className: chunkS5RVSXDV_cjs.cn("flex flex-col gap-1.5", className),
|
|
297
382
|
children: [
|
|
298
|
-
label && /* @__PURE__ */ jsxRuntime.
|
|
383
|
+
label && !isFloating && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
299
384
|
"label",
|
|
300
385
|
{
|
|
301
386
|
"data-slot": "select-label",
|
|
@@ -304,7 +389,10 @@ function Select({
|
|
|
304
389
|
"text-foreground text-sm font-medium",
|
|
305
390
|
hideLabel && "sr-only"
|
|
306
391
|
),
|
|
307
|
-
children:
|
|
392
|
+
children: [
|
|
393
|
+
label,
|
|
394
|
+
requiredMark
|
|
395
|
+
]
|
|
308
396
|
}
|
|
309
397
|
),
|
|
310
398
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: "relative", children: [
|
|
@@ -321,15 +409,20 @@ function Select({
|
|
|
321
409
|
role: "combobox",
|
|
322
410
|
"aria-haspopup": "listbox",
|
|
323
411
|
"aria-expanded": isOpen,
|
|
324
|
-
"aria-controls": listboxId,
|
|
412
|
+
"aria-controls": isOpen ? listboxId : void 0,
|
|
325
413
|
"aria-invalid": hasError || !!error,
|
|
414
|
+
"aria-required": required || void 0,
|
|
326
415
|
"aria-label": !label ? ariaLabel : void 0,
|
|
327
416
|
"aria-describedby": describedByIds || void 0,
|
|
328
417
|
disabled,
|
|
329
418
|
onClick: () => setIsOpen(!isOpen),
|
|
330
419
|
onKeyDown: handleKeyDown,
|
|
331
420
|
className: chunkS5RVSXDV_cjs.cn(
|
|
332
|
-
selectTriggerVariants({
|
|
421
|
+
selectTriggerVariants({
|
|
422
|
+
size,
|
|
423
|
+
hasError: hasError || !!error,
|
|
424
|
+
labelVariant: isFloating ? "floating" : "stacked"
|
|
425
|
+
})
|
|
333
426
|
),
|
|
334
427
|
children: [
|
|
335
428
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -337,9 +430,10 @@ function Select({
|
|
|
337
430
|
{
|
|
338
431
|
className: chunkS5RVSXDV_cjs.cn(
|
|
339
432
|
"truncate",
|
|
340
|
-
!
|
|
433
|
+
!hasSelection && "text-muted-foreground",
|
|
434
|
+
isFloating && floatingValuePadding[resolvedSize]
|
|
341
435
|
),
|
|
342
|
-
children:
|
|
436
|
+
children: isFloating ? hasSelection ? displayLabel : "\xA0" : hasSelection ? displayLabel : placeholder
|
|
343
437
|
}
|
|
344
438
|
),
|
|
345
439
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -354,6 +448,22 @@ function Select({
|
|
|
354
448
|
]
|
|
355
449
|
}
|
|
356
450
|
),
|
|
451
|
+
isFloating && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
452
|
+
"label",
|
|
453
|
+
{
|
|
454
|
+
"data-slot": "select-label",
|
|
455
|
+
htmlFor: selectId,
|
|
456
|
+
className: floatingLabelVariants({
|
|
457
|
+
size: resolvedSize,
|
|
458
|
+
floated: isFloated,
|
|
459
|
+
hasError: hasError || !!error
|
|
460
|
+
}),
|
|
461
|
+
children: [
|
|
462
|
+
label,
|
|
463
|
+
requiredMark
|
|
464
|
+
]
|
|
465
|
+
}
|
|
466
|
+
),
|
|
357
467
|
isOpen && reactDom.createPortal(
|
|
358
468
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
359
469
|
"div",
|
|
@@ -401,6 +511,7 @@ function Select({
|
|
|
401
511
|
id: listboxId,
|
|
402
512
|
role: "listbox",
|
|
403
513
|
"aria-label": label || "Options",
|
|
514
|
+
"aria-multiselectable": multiple || void 0,
|
|
404
515
|
"data-slot": "select-listbox",
|
|
405
516
|
className: "flex-1 overflow-auto p-1",
|
|
406
517
|
children: filteredFlatOptions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("li", { className: "text-muted-foreground px-3 py-2 text-center text-sm", children: noResultsText }) : filteredOptions.map((item) => {
|
|
@@ -418,7 +529,9 @@ function Select({
|
|
|
418
529
|
SelectOptionItem,
|
|
419
530
|
{
|
|
420
531
|
option,
|
|
421
|
-
isSelected:
|
|
532
|
+
isSelected: selectedValues.includes(
|
|
533
|
+
option.value
|
|
534
|
+
),
|
|
422
535
|
isHighlighted: filteredFlatOptions[highlightedIndex]?.value === option.value,
|
|
423
536
|
onSelect: () => handleValueChange(option.value),
|
|
424
537
|
onMouseEnter: () => {
|
|
@@ -436,7 +549,7 @@ function Select({
|
|
|
436
549
|
SelectOptionItem,
|
|
437
550
|
{
|
|
438
551
|
option: item,
|
|
439
|
-
isSelected: item.value
|
|
552
|
+
isSelected: selectedValues.includes(item.value),
|
|
440
553
|
isHighlighted: filteredFlatOptions[highlightedIndex]?.value === item.value,
|
|
441
554
|
onSelect: () => handleValueChange(item.value),
|
|
442
555
|
onMouseEnter: () => {
|
|
@@ -481,6 +594,10 @@ function Select({
|
|
|
481
594
|
);
|
|
482
595
|
}
|
|
483
596
|
Select.displayName = "Select";
|
|
597
|
+
function toValueArray(value) {
|
|
598
|
+
if (value === void 0 || value === "") return [];
|
|
599
|
+
return Array.isArray(value) ? value : [value];
|
|
600
|
+
}
|
|
484
601
|
function SelectOptionItem({
|
|
485
602
|
option,
|
|
486
603
|
isSelected,
|
|
@@ -564,5 +681,5 @@ function CheckIcon({ className }) {
|
|
|
564
681
|
|
|
565
682
|
exports.Select = Select;
|
|
566
683
|
exports.selectTriggerVariants = selectTriggerVariants;
|
|
567
|
-
//# sourceMappingURL=chunk-
|
|
568
|
-
//# sourceMappingURL=chunk-
|
|
684
|
+
//# sourceMappingURL=chunk-K5GQPTTA.cjs.map
|
|
685
|
+
//# sourceMappingURL=chunk-K5GQPTTA.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Select/Select.tsx"],"names":["cva","React","useClickOutside","useEscapeKey","useAnchoredPosition","jsx","RequiredMark","jsxs","cn","createPortal"],"mappings":"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","file":"chunk-K5GQPTTA.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\nimport { RequiredMark, type RequiredMarkVariant } from '../Input';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SelectOption {\n /** Unique value for the option */\n value: string;\n /** Display label for the option */\n label: string;\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Optional group this option belongs to */\n group?: string;\n}\n\nexport interface SelectGroup {\n /** Group label */\n label: string;\n /** Options in this group */\n options: SelectOption[];\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst selectTriggerVariants = cva(\n [\n 'flex w-full items-center justify-between gap-2',\n 'border border-input rounded-lg',\n 'bg-background text-foreground',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-3 text-base',\n lg: 'h-12 px-4 text-lg',\n },\n hasError: {\n true: 'border-destructive focus:ring-destructive',\n false: '',\n },\n labelVariant: {\n stacked: '',\n floating: 'peer',\n },\n },\n compoundVariants: [\n { labelVariant: 'floating', size: 'sm', className: 'h-11' },\n { labelVariant: 'floating', size: 'md', className: 'h-14' },\n { labelVariant: 'floating', size: 'lg', className: 'h-16' },\n ],\n defaultVariants: {\n size: 'md',\n hasError: false,\n labelVariant: 'stacked',\n },\n }\n);\n\nconst floatingLabelVariants = cva(\n [\n 'absolute start-3 pointer-events-none select-none',\n 'transition-all duration-200 ease-out',\n ],\n {\n variants: {\n size: {\n sm: [\n 'peer-focus:top-0.5 peer-focus:translate-y-0 peer-focus:text-[0.65rem]',\n ],\n md: ['peer-focus:top-1 peer-focus:translate-y-0 peer-focus:text-xs'],\n lg: ['peer-focus:top-1.5 peer-focus:translate-y-0 peer-focus:text-sm'],\n },\n floated: {\n true: '',\n false: 'top-1/2 -translate-y-1/2',\n },\n hasError: {\n true: 'text-destructive',\n false: 'text-muted-foreground',\n },\n },\n compoundVariants: [\n { size: 'sm', floated: false, className: 'text-sm' },\n { size: 'md', floated: false, className: 'text-base' },\n { size: 'lg', floated: false, className: 'text-lg' },\n {\n size: 'sm',\n floated: true,\n className: 'top-0.5 translate-y-0 text-[0.65rem]',\n },\n { size: 'md', floated: true, className: 'top-1 translate-y-0 text-xs' },\n { size: 'lg', floated: true, className: 'top-1.5 translate-y-0 text-sm' },\n ],\n defaultVariants: {\n size: 'md',\n floated: false,\n hasError: false,\n },\n }\n);\n\nconst floatingValuePadding = {\n sm: 'pt-4 pb-1',\n md: 'pt-5 pb-1.5',\n lg: 'pt-6 pb-2',\n} as const;\n\n// ============================================================================\n// Select Component\n// ============================================================================\n\n/**\n * Props shared by both single- and multiple-selection modes. Exported so\n * wrapper components can extend the common shape (`SelectProps` itself is a\n * discriminated union, which interfaces cannot extend).\n */\nexport interface SelectBaseProps extends Omit<\n VariantProps<typeof selectTriggerVariants>,\n 'labelVariant'\n> {\n /** Array of options or groups */\n options: (SelectOption | SelectGroup)[];\n /** Placeholder text */\n placeholder?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Label for the select */\n label?: string;\n /** Hide the label visually */\n hideLabel?: boolean;\n /**\n * Visual style of the label.\n * - `stacked` (default): label sits above the trigger.\n * - `floating`: label rests inside the trigger like a placeholder and\n * floats up (staying inside the trigger) when open or a value is\n * selected. The `placeholder` prop is ignored in this mode.\n */\n labelVariant?: 'stacked' | 'floating';\n /** Error message */\n error?: string;\n /** Helper text */\n helperText?: string;\n /** Whether a selection is required (shows an asterisk next to the label) */\n required?: boolean;\n /**\n * Color of the required asterisk.\n * - `default`: destructive (hard requirement).\n * - `warning`: warning color (soft requirement / recommended).\n */\n requiredVariant?: RequiredMarkVariant;\n /** Enable search/filter */\n searchable?: boolean;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** No results text */\n noResultsText?: string;\n /** Accessible label for the trigger (used when no `label` prop is provided) */\n 'aria-label'?: string;\n /** Additional class name */\n className?: string;\n /** ID for the select */\n id?: string;\n}\n\nexport interface SelectSingleProps extends SelectBaseProps {\n /** Single-selection mode (default). */\n multiple?: false;\n /** Controlled value */\n value?: string;\n /** Default value (uncontrolled) */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n}\n\nexport interface SelectMultipleProps extends SelectBaseProps {\n /** Multiple-selection mode: selecting an option toggles it and keeps the dropdown open. */\n multiple: true;\n /** Controlled values */\n value?: string[];\n /** Default values (uncontrolled) */\n defaultValue?: string[];\n /** Callback when values change */\n onValueChange?: (value: string[]) => void;\n}\n\nexport type SelectProps = SelectSingleProps | SelectMultipleProps;\n\n/**\n * An accessible select/dropdown component with search support.\n *\n * @example\n * ```tsx\n * <Select\n * label=\"Country\"\n * placeholder=\"Select a country\"\n * options={[\n * { value: 'us', label: 'United States' },\n * { value: 'ca', label: 'Canada' },\n * { value: 'uk', label: 'United Kingdom' },\n * ]}\n * onValueChange={(value) => console.log(value)}\n * />\n *\n * // Multiple selection — value/onValueChange use string[]\n * <Select\n * multiple\n * label=\"Symptoms\"\n * options={options}\n * onValueChange={(values) => console.log(values)}\n * />\n * ```\n */\nfunction Select(props: SelectProps) {\n const {\n options,\n placeholder = 'Select an option',\n disabled = false,\n label,\n hideLabel = false,\n labelVariant = 'stacked',\n error,\n helperText,\n required = false,\n requiredVariant,\n size,\n hasError,\n 'aria-label': ariaLabel,\n searchable = false,\n searchPlaceholder = 'Search...',\n noResultsText = 'No results found',\n className,\n id,\n } = props;\n const multiple = props.multiple === true;\n // The discriminated union types onValueChange as either a string or string[]\n // callback; widen it once here so handlers can use it without referencing\n // the whole `props` object. Runtime calls stay consistent with `multiple`.\n const onValueChange = props.onValueChange as\n | ((value: string | string[]) => void)\n | undefined;\n const [isOpen, setIsOpen] = React.useState(false);\n const [uncontrolledValues, setUncontrolledValues] = React.useState<string[]>(\n () => toValueArray(props.defaultValue)\n );\n const [searchQuery, setSearchQuery] = React.useState('');\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n const typeaheadRef = React.useRef<{ query: string; timer: number | null }>({\n query: '',\n timer: null,\n });\n\n const generatedId = React.useId();\n const selectId = id || generatedId;\n const listboxId = `${selectId}-listbox`;\n const errorId = `${selectId}-error`;\n const helperId = `${selectId}-helper`;\n\n const isControlled = props.value !== undefined;\n const controlledValue = props.value;\n // Memoize the controlled normalization: toValueArray allocates a fresh\n // array when value is a string, which would otherwise churn callback\n // identities (handleValueChange depends on selectedValues) every render.\n const controlledValues = React.useMemo(\n () => toValueArray(controlledValue),\n [controlledValue]\n );\n const selectedValues = isControlled ? controlledValues : uncontrolledValues;\n\n // Flatten options for easy access\n const flatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of options) {\n if ('options' in item) {\n result.push(...item.options);\n } else {\n result.push(item);\n }\n }\n return result;\n }, [options]);\n\n // Filter options based on search query\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery) return options;\n\n const query = searchQuery.toLowerCase();\n const result: (SelectOption | SelectGroup)[] = [];\n\n for (const item of options) {\n if ('options' in item) {\n const filteredGroupOptions = item.options.filter((opt) =>\n opt.label.toLowerCase().includes(query)\n );\n if (filteredGroupOptions.length > 0) {\n result.push({ ...item, options: filteredGroupOptions });\n }\n } else {\n if (item.label.toLowerCase().includes(query)) {\n result.push(item);\n }\n }\n }\n\n return result;\n }, [options, searchQuery]);\n\n // Get filtered flat options for keyboard navigation\n const filteredFlatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of filteredOptions) {\n if ('options' in item) {\n result.push(...item.options.filter((opt) => !opt.disabled));\n } else if (!item.disabled) {\n result.push(item);\n }\n }\n return result;\n }, [filteredOptions]);\n\n // Get selected options (in selection order)\n const selectedOptions = selectedValues\n .map((v) => flatOptions.find((opt) => opt.value === v))\n .filter((opt): opt is SelectOption => opt !== undefined);\n const hasSelection = selectedOptions.length > 0;\n const displayLabel = selectedOptions.map((opt) => opt.label).join(', ');\n\n // Close dropdown on click outside (handles both container and portaled dropdown)\n const outsideRefs = React.useMemo(() => [containerRef, dropdownRef], []);\n useClickOutside(outsideRefs, () => setIsOpen(false), isOpen);\n\n useEscapeKey(() => {\n if (isOpen) {\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n }, isOpen);\n\n // Track trigger position for portal dropdown\n const {\n anchorRef,\n floatingRef,\n style: dropdownStyle,\n } = useAnchoredPosition<HTMLButtonElement, HTMLDivElement>({\n open: isOpen,\n matchWidth: true,\n maxHeight: 300,\n });\n\n // Handle option selection: single mode replaces and closes; multiple mode\n // toggles the option and keeps the dropdown open.\n const handleValueChange = React.useCallback(\n (optionValue: string) => {\n if (multiple) {\n const next = selectedValues.includes(optionValue)\n ? selectedValues.filter((v) => v !== optionValue)\n : [...selectedValues, optionValue];\n if (!isControlled) {\n setUncontrolledValues(next);\n }\n onValueChange?.(next);\n // The dropdown stays open; a mouse click focuses the option <li>,\n // which only handles Enter/Space. Restore focus so arrow-key\n // navigation and typeahead keep working.\n if (searchable) {\n searchInputRef.current?.focus();\n } else {\n triggerRef.current?.focus();\n }\n return;\n }\n if (!isControlled) {\n setUncontrolledValues([optionValue]);\n }\n onValueChange?.(optionValue);\n setIsOpen(false);\n setSearchQuery('');\n triggerRef.current?.focus();\n },\n [isControlled, multiple, onValueChange, searchable, selectedValues]\n );\n\n // Handle keyboard navigation\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n // Typeahead (native-select style): when not using the dedicated search\n // input, typing printable characters jumps to the first option whose\n // label starts with the typed string. Repeating the same key cycles\n // through matches. The buffer clears after a short pause.\n if (\n !searchable &&\n e.key.length === 1 &&\n e.key !== ' ' &&\n !e.metaKey &&\n !e.ctrlKey &&\n !e.altKey\n ) {\n e.preventDefault();\n if (!isOpen) setIsOpen(true);\n\n const hadPendingQuery = typeaheadRef.current.query !== '';\n if (typeaheadRef.current.timer !== null) {\n window.clearTimeout(typeaheadRef.current.timer);\n }\n const query = (typeaheadRef.current.query + e.key).toLowerCase();\n typeaheadRef.current.query = query;\n typeaheadRef.current.timer = window.setTimeout(() => {\n typeaheadRef.current.query = '';\n typeaheadRef.current.timer = null;\n }, 600);\n\n const len = filteredFlatOptions.length;\n if (len > 0) {\n const allSameChar = query.split('').every((c) => c === query[0]);\n const needle = allSameChar ? query[0] : query;\n const matches = (opt: SelectOption) =>\n opt.label.toLowerCase().startsWith(needle);\n\n // A fresh keystroke (or refining a multi-char query) searches from\n // the current option inclusive so typing \"car\" stays on \"Cardiology\";\n // repeating the same key cycles to the next match.\n const startInclusive = !hadPendingQuery || !allSameChar;\n const base = startInclusive\n ? Math.max(highlightedIndex, 0)\n : highlightedIndex + 1;\n\n for (let i = 0; i < len; i++) {\n const idx = (base + i) % len;\n if (matches(filteredFlatOptions[idx])) {\n setHighlightedIndex(idx);\n break;\n }\n }\n }\n return;\n }\n\n // Let Space type normally in the search input (e.g. \"new york\")\n // instead of being captured by the open/select handler below.\n if (e.key === ' ' && e.target === searchInputRef.current) {\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev < filteredFlatOptions.length - 1 ? prev + 1 : 0\n );\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredFlatOptions.length - 1\n );\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0) {\n handleValueChange(filteredFlatOptions[highlightedIndex].value);\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n case 'Home':\n e.preventDefault();\n setHighlightedIndex(0);\n break;\n case 'End':\n e.preventDefault();\n setHighlightedIndex(filteredFlatOptions.length - 1);\n break;\n }\n },\n [\n isOpen,\n highlightedIndex,\n filteredFlatOptions,\n handleValueChange,\n searchable,\n ]\n );\n\n // Focus search input when dropdown opens\n React.useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen, searchable]);\n\n // Reset highlighted index when search changes\n React.useEffect(() => {\n setHighlightedIndex(filteredFlatOptions.length > 0 ? 0 : -1);\n }, [searchQuery, filteredFlatOptions.length]);\n\n // Keep the highlighted option visible within the listbox during keyboard\n // navigation. We adjust only the list's own scrollTop instead of calling the\n // native scrollIntoView: the dropdown is portaled to <body> with\n // position: fixed, and scrollIntoView would also scroll ancestor/window,\n // yanking the whole page.\n React.useEffect(() => {\n if (!isOpen || highlightedIndex < 0) return;\n const list = listRef.current;\n const el = list?.querySelector<HTMLElement>('[data-highlighted=\"true\"]');\n if (!list || !el) return;\n const listRect = list.getBoundingClientRect();\n const elRect = el.getBoundingClientRect();\n if (elRect.top < listRect.top) {\n list.scrollTop -= listRect.top - elRect.top;\n } else if (elRect.bottom > listRect.bottom) {\n list.scrollTop += elRect.bottom - listRect.bottom;\n }\n }, [highlightedIndex, isOpen]);\n\n // Reset the typeahead buffer whenever the dropdown closes (Escape, click\n // outside, selection) so a stale query doesn't carry over on a quick reopen,\n // and clear any pending timer on unmount.\n const resetTypeahead = React.useCallback(() => {\n if (typeaheadRef.current.timer !== null) {\n window.clearTimeout(typeaheadRef.current.timer);\n typeaheadRef.current.timer = null;\n }\n typeaheadRef.current.query = '';\n }, []);\n\n React.useEffect(() => {\n if (!isOpen) resetTypeahead();\n }, [isOpen, resetTypeahead]);\n\n React.useEffect(() => resetTypeahead, [resetTypeahead]);\n\n // Build aria-describedby\n const describedByIds = [\n error ? errorId : null,\n helperText && !error ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ');\n\n const isFloating = labelVariant === 'floating' && !!label && !hideLabel;\n const isFloated = isOpen || hasSelection;\n const resolvedSize = size ?? 'md';\n\n const requiredMark = required && <RequiredMark variant={requiredVariant} />;\n\n return (\n <div\n data-slot=\"select-wrapper\"\n className={cn('flex flex-col gap-1.5', className)}\n >\n {label && !isFloating && (\n <label\n data-slot=\"select-label\"\n htmlFor={selectId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n {requiredMark}\n </label>\n )}\n\n <div ref={containerRef} className=\"relative\">\n {/* Trigger Button */}\n <button\n data-slot=\"select-trigger\"\n ref={(node) => {\n triggerRef.current = node;\n anchorRef.current = node;\n }}\n id={selectId}\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n // Only reference the listbox while it exists in the DOM (it is\n // portaled and unmounted when closed) so the ID is always valid.\n aria-controls={isOpen ? listboxId : undefined}\n aria-invalid={hasError || !!error}\n aria-required={required || undefined}\n aria-label={!label ? ariaLabel : undefined}\n aria-describedby={describedByIds || undefined}\n disabled={disabled}\n onClick={() => setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n className={cn(\n selectTriggerVariants({\n size,\n hasError: hasError || !!error,\n labelVariant: isFloating ? 'floating' : 'stacked',\n })\n )}\n >\n <span\n className={cn(\n 'truncate',\n !hasSelection && 'text-muted-foreground',\n isFloating && floatingValuePadding[resolvedSize]\n )}\n >\n {isFloating\n ? hasSelection\n ? displayLabel\n : '\\u00A0'\n : hasSelection\n ? displayLabel\n : placeholder}\n </span>\n <ChevronDownIcon\n className={cn(\n 'text-muted-foreground h-4 w-4 shrink-0 transition-transform',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n\n {/* Floating label (rendered after the trigger so `peer-focus` applies) */}\n {isFloating && (\n <label\n data-slot=\"select-label\"\n htmlFor={selectId}\n className={floatingLabelVariants({\n size: resolvedSize,\n floated: isFloated,\n hasError: hasError || !!error,\n })}\n >\n {label}\n {requiredMark}\n </label>\n )}\n\n {/* Dropdown (portaled to body to avoid overflow clipping) */}\n {isOpen &&\n createPortal(\n <div\n data-slot=\"select-dropdown\"\n ref={(node) => {\n dropdownRef.current = node;\n floatingRef.current = node;\n }}\n style={dropdownStyle}\n className={cn(\n 'border-border bg-card rounded-lg border shadow-lg',\n 'flex flex-col overflow-hidden',\n 'animate-in fade-in zoom-in-95 duration-100'\n )}\n >\n {/* Search Input */}\n {searchable && (\n <div\n data-slot=\"select-search\"\n className=\"border-border border-b p-2\"\n >\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={searchPlaceholder}\n className={cn(\n 'border-input bg-background w-full rounded-md border px-3 py-2 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus:ring-ring focus:ring-2 focus:outline-none'\n )}\n aria-label=\"Search options\"\n />\n </div>\n )}\n\n {/* Options List */}\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n aria-label={label || 'Options'}\n aria-multiselectable={multiple || undefined}\n data-slot=\"select-listbox\"\n className=\"flex-1 overflow-auto p-1\"\n >\n {filteredFlatOptions.length === 0 ? (\n <li className=\"text-muted-foreground px-3 py-2 text-center text-sm\">\n {noResultsText}\n </li>\n ) : (\n filteredOptions.map((item) => {\n if ('options' in item) {\n // Render group\n return (\n <li key={`group-${item.label}`} role=\"presentation\">\n <div\n data-slot=\"select-group-label\"\n className=\"text-muted-foreground px-3 py-1.5 text-xs font-semibold tracking-wider uppercase\"\n >\n {item.label}\n </div>\n <ul role=\"group\" aria-label={item.label}>\n {item.options.map((option) => (\n <SelectOptionItem\n key={option.value}\n option={option}\n isSelected={selectedValues.includes(\n option.value\n )}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]\n ?.value === option.value\n }\n onSelect={() => handleValueChange(option.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === option.value\n );\n setHighlightedIndex(idx);\n }}\n />\n ))}\n </ul>\n </li>\n );\n }\n\n // Render single option\n return (\n <SelectOptionItem\n key={item.value}\n option={item}\n isSelected={selectedValues.includes(item.value)}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]?.value ===\n item.value\n }\n onSelect={() => handleValueChange(item.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === item.value\n );\n setHighlightedIndex(idx);\n }}\n />\n );\n })\n )}\n </ul>\n </div>,\n document.body\n )}\n </div>\n\n {/* Error Message */}\n {error && (\n <p\n id={errorId}\n data-slot=\"select-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n\n {/* Helper Text */}\n {helperText && !error && (\n <p\n id={helperId}\n data-slot=\"select-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n}\n\nSelect.displayName = 'Select';\n\n/** Normalize a single/multiple value prop into an array of selected values. */\nfunction toValueArray(value: string | string[] | undefined): string[] {\n if (value === undefined || value === '') return [];\n return Array.isArray(value) ? value : [value];\n}\n\n// ============================================================================\n// Select Option Item (Internal)\n// ============================================================================\n\ninterface SelectOptionItemProps {\n option: SelectOption;\n isSelected: boolean;\n isHighlighted: boolean;\n onSelect: () => void;\n onMouseEnter: () => void;\n}\n\nfunction SelectOptionItem({\n option,\n isSelected,\n isHighlighted,\n onSelect,\n onMouseEnter,\n}: SelectOptionItemProps) {\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!option.disabled) {\n onSelect();\n }\n }\n };\n\n return (\n <li\n data-slot=\"select-option\"\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-highlighted={isHighlighted}\n data-disabled={option.disabled}\n tabIndex={isHighlighted ? 0 : -1}\n onClick={option.disabled ? undefined : onSelect}\n onKeyDown={handleKeyDown}\n onMouseEnter={option.disabled ? undefined : onMouseEnter}\n className={cn(\n 'flex cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-sm',\n 'transition-colors outline-none',\n isHighlighted && 'bg-muted',\n isSelected &&\n 'bg-primary-50 text-primary-900 dark:bg-primary-950 dark:text-primary-100',\n option.disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n <span className=\"flex-1 truncate\">{option.label}</span>\n {isSelected && (\n <CheckIcon className=\"text-primary-800 h-4 w-4 shrink-0\" />\n )}\n </li>\n );\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nfunction ChevronDownIcon({ 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 9 6 6 6-6\" />\n </svg>\n );\n}\n\nfunction CheckIcon({ 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=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nexport { Select, selectTriggerVariants };\n"]}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { useEscapeKey } from './chunk-T4ME7QCT.js';
|
|
2
|
+
import { useAnchoredPosition } from './chunk-WSNMQQ4P.js';
|
|
3
|
+
import { cn } from './chunk-TQONQSJO.js';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { createPortal } from 'react-dom';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var HIDE_GRACE_MS = 180;
|
|
9
|
+
function SourceTip({
|
|
10
|
+
heading,
|
|
11
|
+
note,
|
|
12
|
+
sources,
|
|
13
|
+
eyebrow = "Source",
|
|
14
|
+
children,
|
|
15
|
+
className,
|
|
16
|
+
underline = false
|
|
17
|
+
}) {
|
|
18
|
+
const [open, setOpen] = React.useState(false);
|
|
19
|
+
const [pinned, setPinned] = React.useState(false);
|
|
20
|
+
const timer = React.useRef(null);
|
|
21
|
+
const suppressFocusShow = React.useRef(false);
|
|
22
|
+
const { anchorRef, floatingRef, style } = useAnchoredPosition({
|
|
23
|
+
open,
|
|
24
|
+
placement: "top",
|
|
25
|
+
offset: 10,
|
|
26
|
+
viewportPadding: 8,
|
|
27
|
+
allowFlip: true
|
|
28
|
+
});
|
|
29
|
+
const clearHideTimer = () => {
|
|
30
|
+
if (timer.current) {
|
|
31
|
+
clearTimeout(timer.current);
|
|
32
|
+
timer.current = null;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const show = React.useCallback(() => {
|
|
36
|
+
clearHideTimer();
|
|
37
|
+
setOpen(true);
|
|
38
|
+
}, []);
|
|
39
|
+
const scheduleHide = React.useCallback(() => {
|
|
40
|
+
if (pinned) return;
|
|
41
|
+
clearHideTimer();
|
|
42
|
+
timer.current = setTimeout(() => setOpen(false), HIDE_GRACE_MS);
|
|
43
|
+
}, [pinned]);
|
|
44
|
+
const close = React.useCallback(() => {
|
|
45
|
+
clearHideTimer();
|
|
46
|
+
setPinned(false);
|
|
47
|
+
setOpen(false);
|
|
48
|
+
if (floatingRef.current?.contains(document.activeElement)) {
|
|
49
|
+
suppressFocusShow.current = true;
|
|
50
|
+
anchorRef.current?.focus();
|
|
51
|
+
}
|
|
52
|
+
}, [anchorRef, floatingRef]);
|
|
53
|
+
React.useEffect(() => () => clearHideTimer(), []);
|
|
54
|
+
React.useEffect(() => {
|
|
55
|
+
if (pinned) floatingRef.current?.focus();
|
|
56
|
+
}, [pinned, floatingRef]);
|
|
57
|
+
useEscapeKey(close, open);
|
|
58
|
+
React.useEffect(() => {
|
|
59
|
+
if (!open || !pinned) return;
|
|
60
|
+
const onPointer = (e) => {
|
|
61
|
+
const t = e.target;
|
|
62
|
+
if (anchorRef.current?.contains(t) || floatingRef.current?.contains(t))
|
|
63
|
+
return;
|
|
64
|
+
close();
|
|
65
|
+
};
|
|
66
|
+
document.addEventListener("mousedown", onPointer);
|
|
67
|
+
document.addEventListener("touchstart", onPointer);
|
|
68
|
+
return () => {
|
|
69
|
+
document.removeEventListener("mousedown", onPointer);
|
|
70
|
+
document.removeEventListener("touchstart", onPointer);
|
|
71
|
+
};
|
|
72
|
+
}, [open, pinned, close, anchorRef, floatingRef]);
|
|
73
|
+
const onTriggerClick = () => {
|
|
74
|
+
const coarse = typeof window !== "undefined" && window.matchMedia("(hover: none)").matches;
|
|
75
|
+
if (!coarse) return;
|
|
76
|
+
togglePin();
|
|
77
|
+
};
|
|
78
|
+
const togglePin = () => {
|
|
79
|
+
if (pinned) close();
|
|
80
|
+
else {
|
|
81
|
+
setPinned(true);
|
|
82
|
+
show();
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
const onTriggerKeyDown = (e) => {
|
|
86
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
87
|
+
e.preventDefault();
|
|
88
|
+
togglePin();
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const onDialogKeyDown = (e) => {
|
|
92
|
+
if (e.target !== e.currentTarget) return;
|
|
93
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
94
|
+
e.preventDefault();
|
|
95
|
+
close();
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const onTriggerFocus = () => {
|
|
99
|
+
if (suppressFocusShow.current) {
|
|
100
|
+
suppressFocusShow.current = false;
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
show();
|
|
104
|
+
};
|
|
105
|
+
const onBlurCapture = (e) => {
|
|
106
|
+
const next = e.relatedTarget;
|
|
107
|
+
if (next && (anchorRef.current?.contains(next) || floatingRef.current?.contains(next)))
|
|
108
|
+
return;
|
|
109
|
+
scheduleHide();
|
|
110
|
+
};
|
|
111
|
+
const hasSources = Boolean(sources && sources.length > 0);
|
|
112
|
+
return /* @__PURE__ */ jsxs(
|
|
113
|
+
"span",
|
|
114
|
+
{
|
|
115
|
+
ref: anchorRef,
|
|
116
|
+
className: cn(
|
|
117
|
+
"cursor-help",
|
|
118
|
+
underline && "decoration-primary-400/70 underline decoration-dashed underline-offset-4",
|
|
119
|
+
className
|
|
120
|
+
),
|
|
121
|
+
onMouseEnter: show,
|
|
122
|
+
onMouseLeave: scheduleHide,
|
|
123
|
+
onFocus: onTriggerFocus,
|
|
124
|
+
onBlur: onBlurCapture,
|
|
125
|
+
onClick: onTriggerClick,
|
|
126
|
+
onKeyDown: onTriggerKeyDown,
|
|
127
|
+
tabIndex: 0,
|
|
128
|
+
role: "button",
|
|
129
|
+
"aria-haspopup": "dialog",
|
|
130
|
+
"aria-expanded": open,
|
|
131
|
+
"aria-label": `${heading} \u2014 show source`,
|
|
132
|
+
children: [
|
|
133
|
+
children,
|
|
134
|
+
open && createPortal(
|
|
135
|
+
/* 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 */
|
|
136
|
+
/* @__PURE__ */ jsx(
|
|
137
|
+
"span",
|
|
138
|
+
{
|
|
139
|
+
ref: floatingRef,
|
|
140
|
+
role: "dialog",
|
|
141
|
+
"aria-label": heading,
|
|
142
|
+
tabIndex: -1,
|
|
143
|
+
onMouseEnter: show,
|
|
144
|
+
onMouseLeave: scheduleHide,
|
|
145
|
+
onBlurCapture,
|
|
146
|
+
onKeyDown: onDialogKeyDown,
|
|
147
|
+
className: "focus-visible:ring-ring z-50 block w-80 rounded-lg outline-none focus-visible:ring-2",
|
|
148
|
+
style,
|
|
149
|
+
children: /* @__PURE__ */ jsxs("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", children: [
|
|
150
|
+
/* @__PURE__ */ jsxs("span", { className: "from-primary-700 to-primary-600 block bg-gradient-to-br px-3.5 py-2.5", children: [
|
|
151
|
+
/* @__PURE__ */ jsx("span", { className: "text-primary-100/90 block text-[10px] font-bold tracking-wide uppercase", children: eyebrow }),
|
|
152
|
+
/* @__PURE__ */ jsx("span", { className: "mt-0.5 block text-sm leading-snug font-semibold text-white", children: heading })
|
|
153
|
+
] }),
|
|
154
|
+
(note || hasSources) && /* @__PURE__ */ jsxs("span", { className: "block px-3.5 py-2.5", children: [
|
|
155
|
+
note && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground block text-[13px] leading-relaxed", children: note }),
|
|
156
|
+
hasSources && /* @__PURE__ */ jsxs(
|
|
157
|
+
"span",
|
|
158
|
+
{
|
|
159
|
+
className: cn(
|
|
160
|
+
"block",
|
|
161
|
+
note && "border-border mt-2.5 border-t border-dashed pt-2.5"
|
|
162
|
+
),
|
|
163
|
+
children: [
|
|
164
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground block text-[10px] font-bold tracking-wide uppercase", children: sources.length === 1 ? "Source" : `${sources.length} sources` }),
|
|
165
|
+
/* @__PURE__ */ jsx("span", { className: "block max-h-52 overflow-y-auto", children: sources.map((s, i) => /* @__PURE__ */ jsxs(
|
|
166
|
+
"span",
|
|
167
|
+
{
|
|
168
|
+
className: "mt-1.5 flex items-center gap-2",
|
|
169
|
+
children: [
|
|
170
|
+
/* @__PURE__ */ jsx(
|
|
171
|
+
"span",
|
|
172
|
+
{
|
|
173
|
+
"aria-hidden": "true",
|
|
174
|
+
className: "bg-primary-400 h-1.5 w-1.5 shrink-0 rounded-full"
|
|
175
|
+
}
|
|
176
|
+
),
|
|
177
|
+
s.url ? /* @__PURE__ */ jsx(
|
|
178
|
+
"a",
|
|
179
|
+
{
|
|
180
|
+
href: s.url,
|
|
181
|
+
target: "_blank",
|
|
182
|
+
rel: "noopener noreferrer",
|
|
183
|
+
className: "text-primary-600 hover:text-primary-500 dark:text-primary-400 dark:hover:text-primary-300 min-w-0 flex-1 truncate text-xs font-semibold",
|
|
184
|
+
children: s.label
|
|
185
|
+
}
|
|
186
|
+
) : /* @__PURE__ */ jsx("span", { className: "text-muted-foreground min-w-0 flex-1 truncate text-xs", children: s.label }),
|
|
187
|
+
s.sub && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground/70 shrink-0 text-[11px]", children: s.sub })
|
|
188
|
+
]
|
|
189
|
+
},
|
|
190
|
+
`${s.label}-${i}`
|
|
191
|
+
)) })
|
|
192
|
+
]
|
|
193
|
+
}
|
|
194
|
+
)
|
|
195
|
+
] })
|
|
196
|
+
] })
|
|
197
|
+
}
|
|
198
|
+
),
|
|
199
|
+
document.body
|
|
200
|
+
)
|
|
201
|
+
]
|
|
202
|
+
}
|
|
203
|
+
);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export { SourceTip };
|
|
207
|
+
//# sourceMappingURL=chunk-KFEN2SRZ.js.map
|
|
208
|
+
//# sourceMappingURL=chunk-KFEN2SRZ.js.map
|