@mieweb/ui 0.7.3-dev.3 → 0.7.3-dev.30
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-3IMM2PM4.js +259 -0
- package/dist/chunk-3IMM2PM4.js.map +1 -0
- 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-ZBI52NP2.cjs → chunk-56QJHQ5C.cjs} +156 -39
- package/dist/chunk-56QJHQ5C.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-MJFF4AXH.cjs → chunk-5YNONC7I.cjs} +319 -3
- package/dist/chunk-5YNONC7I.cjs.map +1 -0
- package/dist/chunk-6NZXWKUE.js +3 -0
- package/dist/chunk-6NZXWKUE.js.map +1 -0
- package/dist/{chunk-Z4PECE5S.js → chunk-6XTHO63C.js} +2 -2
- package/dist/{chunk-Z4PECE5S.js.map → chunk-6XTHO63C.js.map} +1 -1
- 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-7L7OPISJ.cjs +291 -0
- package/dist/chunk-7L7OPISJ.cjs.map +1 -0
- package/dist/chunk-7RV6CAP6.cjs +106 -0
- package/dist/chunk-7RV6CAP6.cjs.map +1 -0
- package/dist/{chunk-LC7YHZXM.js → chunk-A5YOIJKL.js} +5 -5
- package/dist/{chunk-LC7YHZXM.js.map → chunk-A5YOIJKL.js.map} +1 -1
- package/dist/{chunk-RBS3GHDZ.cjs → chunk-BOW7ZGI2.cjs} +4 -4
- package/dist/{chunk-RBS3GHDZ.cjs.map → chunk-BOW7ZGI2.cjs.map} +1 -1
- package/dist/{chunk-WUNWHOLA.cjs → chunk-BSDBI6H7.cjs} +116 -26
- package/dist/chunk-BSDBI6H7.cjs.map +1 -0
- package/dist/{chunk-CVZYOMEW.js → chunk-BZEOMAPP.js} +319 -3
- package/dist/chunk-BZEOMAPP.js.map +1 -0
- package/dist/chunk-CG4ZKJLE.js +84 -0
- package/dist/chunk-CG4ZKJLE.js.map +1 -0
- package/dist/chunk-ELYGV32O.cjs +230 -0
- package/dist/chunk-ELYGV32O.cjs.map +1 -0
- package/dist/{chunk-QUUBTNMH.js → chunk-EPSB4WTL.js} +45 -15
- package/dist/chunk-EPSB4WTL.js.map +1 -0
- package/dist/chunk-F57VRLKP.js +708 -0
- package/dist/chunk-F57VRLKP.js.map +1 -0
- 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-EGWWTIWS.js → chunk-IILJGFI5.js} +125 -95
- package/dist/chunk-IILJGFI5.js.map +1 -0
- package/dist/{chunk-KRGKPUJH.js → chunk-IYXCFIMP.js} +8 -8
- package/dist/{chunk-KRGKPUJH.js.map → chunk-IYXCFIMP.js.map} +1 -1
- package/dist/{chunk-6J7UGYT5.cjs → chunk-JHGMZX4I.cjs} +47 -7
- package/dist/chunk-JHGMZX4I.cjs.map +1 -0
- package/dist/chunk-JHZW3Y62.js +142 -0
- package/dist/chunk-JHZW3Y62.js.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-URHXR5SC.cjs → chunk-KVE7PQ5P.cjs} +7 -7
- package/dist/{chunk-URHXR5SC.cjs.map → chunk-KVE7PQ5P.cjs.map} +1 -1
- package/dist/chunk-L6MDULYB.js +87 -0
- package/dist/chunk-L6MDULYB.js.map +1 -0
- package/dist/{chunk-SYIFEJSF.cjs → chunk-LQHI44OZ.cjs} +13 -13
- package/dist/{chunk-SYIFEJSF.cjs.map → chunk-LQHI44OZ.cjs.map} +1 -1
- package/dist/{chunk-HIDV32ZX.js → chunk-LZU7YBXG.js} +3 -3
- package/dist/{chunk-HIDV32ZX.js.map → chunk-LZU7YBXG.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-P6L74SKG.js → chunk-QGZC43L7.js} +47 -7
- package/dist/chunk-QGZC43L7.js.map +1 -0
- package/dist/{chunk-FTRGZOVJ.js → chunk-QHTDWIED.js} +3 -3
- package/dist/{chunk-FTRGZOVJ.js.map → chunk-QHTDWIED.js.map} +1 -1
- package/dist/chunk-RUGHNFQG.js +28 -0
- package/dist/chunk-RUGHNFQG.js.map +1 -0
- package/dist/{chunk-NQ2D2V6O.cjs → chunk-SK7H3Z67.cjs} +37 -37
- package/dist/{chunk-NQ2D2V6O.cjs.map → chunk-SK7H3Z67.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-OAHORW4N.cjs → chunk-U5TTXN45.cjs} +127 -97
- package/dist/chunk-U5TTXN45.cjs.map +1 -0
- package/dist/chunk-WBGUYSWY.js +90 -0
- package/dist/chunk-WBGUYSWY.js.map +1 -0
- package/dist/{chunk-LJBWCUKP.cjs → chunk-WKCNNYHN.cjs} +2 -2
- package/dist/{chunk-LJBWCUKP.cjs.map → chunk-WKCNNYHN.cjs.map} +1 -1
- package/dist/chunk-WKSUL2ZN.js +56 -0
- package/dist/chunk-WKSUL2ZN.js.map +1 -0
- package/dist/chunk-X5ZPYYMS.js +105 -0
- package/dist/chunk-X5ZPYYMS.js.map +1 -0
- package/dist/{chunk-DLBV42JD.js → chunk-XBKOZRDO.js} +156 -39
- package/dist/chunk-XBKOZRDO.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-XMECP2MD.js +208 -0
- package/dist/chunk-XMECP2MD.js.map +1 -0
- package/dist/{chunk-GTHNWP4P.js → chunk-XUVEF2RQ.js} +4 -87
- package/dist/chunk-XUVEF2RQ.js.map +1 -0
- package/dist/chunk-XWYKLEKG.js +269 -0
- package/dist/chunk-XWYKLEKG.js.map +1 -0
- package/dist/chunk-Y6YSJPVC.js +129 -0
- package/dist/chunk-Y6YSJPVC.js.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/{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 +4 -3
- package/dist/components/Autocomplete/index.d.cts +20 -3
- package/dist/components/Autocomplete/index.d.ts +20 -3
- package/dist/components/Autocomplete/index.js +3 -2
- 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/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 +4 -3
- package/dist/components/DateInput/index.d.cts +1 -0
- package/dist/components/DateInput/index.d.ts +1 -0
- package/dist/components/DateInput/index.js +3 -2
- package/dist/components/Dropdown/index.cjs +9 -8
- package/dist/components/Dropdown/index.js +3 -2
- 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 +15 -15
- package/dist/components/Markdown/index.js +3 -3
- package/dist/components/MediaEditor/index.cjs +10 -9
- package/dist/components/MediaEditor/index.js +5 -4
- 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 +7 -6
- package/dist/components/RichTextEditor/index.js +4 -3
- 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 +5 -3
- package/dist/components/Select/index.d.cts +56 -9
- package/dist/components/Select/index.d.ts +56 -9
- package/dist/components/Select/index.js +3 -1
- 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 +8 -7
- package/dist/components/SuperChat/index.cjs.map +1 -1
- package/dist/components/SuperChat/index.js +4 -3
- package/dist/components/SuperChat/index.js.map +1 -1
- package/dist/components/SuperChat/plugins/index.cjs +2 -22
- package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
- package/dist/components/SuperChat/plugins/index.js +1 -21
- 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 +11 -10
- package/dist/esheet.cjs.map +1 -1
- package/dist/esheet.js +8 -7
- package/dist/esheet.js.map +1 -1
- package/dist/hooks/index.cjs +27 -17
- package/dist/hooks/index.d.cts +16 -1
- package/dist/hooks/index.d.ts +16 -1
- package/dist/hooks/index.js +3 -1
- package/dist/index.cjs +875 -505
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +82 -10
- package/dist/index.d.ts +82 -10
- package/dist/index.js +309 -47
- 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/package.json +11 -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-AFGADE3B.js.map +0 -1
- package/dist/chunk-CVZYOMEW.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-KFLDXJEE.js.map +0 -1
- package/dist/chunk-MJFF4AXH.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-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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Input/Input.tsx"],"names":[],"mappings":"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","file":"chunk-3IMM2PM4.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst inputVariants = cva(\n [\n 'w-full px-3 py-2',\n 'border border-input rounded-lg',\n 'bg-background text-foreground',\n 'placeholder:text-muted-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 text-sm',\n md: 'h-10 text-base',\n lg: 'h-12 text-lg',\n },\n hasError: {\n true: 'border-destructive focus:ring-destructive',\n false: '',\n },\n labelVariant: {\n stacked: '',\n floating: 'peer placeholder:text-transparent',\n },\n },\n compoundVariants: [\n // Floating labels need extra height and asymmetric padding so both\n // the floated label and the entered text fit inside the field.\n { labelVariant: 'floating', size: 'sm', className: 'h-11 pt-4 pb-1' },\n { labelVariant: 'floating', size: 'md', className: 'h-14 pt-5 pb-1.5' },\n { labelVariant: 'floating', size: 'lg', className: 'h-16 pt-6 pb-2' },\n ],\n defaultVariants: {\n size: 'md',\n hasError: false,\n labelVariant: 'stacked',\n },\n }\n);\n\n// Bordered field box for group controls (RadioGroup / CheckboxGroup) rendered\n// with labelVariant=\"floating\". Mirrors the floating input's box metrics so\n// mixed forms stay vertically aligned.\nconst floatingGroupVariants = cva(\n ['relative rounded-lg border border-input bg-background px-3'],\n {\n variants: {\n size: {\n sm: 'min-h-11 pt-4 pb-1',\n md: 'min-h-14 pt-5 pb-1.5',\n lg: 'min-h-16 pt-6 pb-2',\n },\n hasError: {\n true: 'border-destructive',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n hasError: false,\n },\n }\n);\n\n// Group label fixed in the floated position (groups have no empty state to\n// float from, so the label never animates). Metrics match the floated state\n// of floatingLabelVariants.\nconst floatingGroupLabelVariants = cva(\n ['absolute start-3 pointer-events-none select-none'],\n {\n variants: {\n size: {\n sm: 'top-0.5 text-[0.65rem]',\n md: 'top-1 text-xs',\n lg: 'top-1.5 text-sm',\n },\n hasError: {\n true: 'text-destructive',\n false: 'text-muted-foreground',\n },\n },\n defaultVariants: {\n size: 'md',\n hasError: false,\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 // Rest state: vertically centered, placeholder-sized (input is empty and unfocused).\n 'top-1/2 -translate-y-1/2',\n // Floated state: focused, has a value, or was autofilled → shrink and move to the top,\n // staying inside the field.\n 'peer-focus:translate-y-0 peer-[:not(:placeholder-shown)]:translate-y-0 peer-autofill:translate-y-0',\n ],\n {\n variants: {\n size: {\n sm: [\n 'text-sm',\n 'peer-focus:top-0.5 peer-[:not(:placeholder-shown)]:top-0.5 peer-autofill:top-0.5',\n 'peer-focus:text-[0.65rem] peer-[:not(:placeholder-shown)]:text-[0.65rem] peer-autofill:text-[0.65rem]',\n ],\n md: [\n 'text-base',\n 'peer-focus:top-1 peer-[:not(:placeholder-shown)]:top-1 peer-autofill:top-1',\n 'peer-focus:text-xs peer-[:not(:placeholder-shown)]:text-xs peer-autofill:text-xs',\n ],\n lg: [\n 'text-lg',\n 'peer-focus:top-1.5 peer-[:not(:placeholder-shown)]:top-1.5 peer-autofill:top-1.5',\n 'peer-focus:text-sm peer-[:not(:placeholder-shown)]:text-sm peer-autofill:text-sm',\n ],\n },\n hasError: {\n true: 'text-destructive',\n false: 'text-muted-foreground',\n },\n },\n defaultVariants: {\n size: 'md',\n hasError: false,\n },\n }\n);\n\nexport interface InputProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n Omit<VariantProps<typeof inputVariants>, 'labelVariant'> {\n /** Error message to display below the input */\n error?: string;\n /** Helper text to display below the input */\n helperText?: string;\n /** Label for the input */\n label?: string;\n /**\n * How the label is rendered.\n * - `stacked` (default): label above the input.\n * - `floating`: label rests inside the input like a placeholder and floats\n * to the top of the field (staying inside it) when focused or filled.\n * Ignores `placeholder`; when `hideLabel` is set, falls back to a\n * visually-hidden stacked label.\n */\n labelVariant?: 'stacked' | 'floating';\n /** Whether the label should be visually hidden (still accessible) */\n hideLabel?: boolean;\n /** Whether the input is required */\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}\n\ntype RequiredMarkVariant = 'default' | 'warning';\n\n/** Asterisk rendered next to a label when the field is required. */\nfunction RequiredMark({\n variant = 'default',\n}: {\n variant?: RequiredMarkVariant;\n}) {\n return (\n <span\n className={cn(\n 'ms-1',\n variant === 'warning' ? 'text-warning' : 'text-destructive'\n )}\n aria-hidden=\"true\"\n >\n *\n </span>\n );\n}\n\n/**\n * A styled input component with support for labels, errors, and helper text.\n *\n * @example\n * ```tsx\n * <Input label=\"Email\" type=\"email\" placeholder=\"you@example.com\" />\n * <Input label=\"Password\" type=\"password\" error=\"Password is required\" hasError />\n * <Input label=\"Account number\" labelVariant=\"floating\" />\n * ```\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n size,\n hasError,\n error,\n helperText,\n label,\n labelVariant = 'stacked',\n hideLabel,\n required,\n requiredVariant,\n disabled,\n id,\n placeholder,\n 'aria-describedby': ariaDescribedBy,\n ...props\n },\n ref\n ) => {\n const generatedId = React.useId();\n const inputId = id || generatedId;\n const errorId = `${inputId}-error`;\n const helperId = `${inputId}-helper`;\n\n const describedByIds = [\n error ? errorId : null,\n helperText && !error ? helperId : null,\n ariaDescribedBy,\n ]\n .filter(Boolean)\n .join(' ');\n\n const isFloating = labelVariant === 'floating' && !!label && !hideLabel;\n\n const requiredMark = required && <RequiredMark variant={requiredVariant} />;\n\n const inputElement = (\n <input\n data-slot=\"input\"\n id={inputId}\n ref={ref}\n className={cn(\n inputVariants({\n size,\n hasError: hasError || !!error,\n labelVariant: isFloating ? 'floating' : 'stacked',\n }),\n className\n )}\n aria-invalid={hasError || !!error}\n aria-describedby={describedByIds || undefined}\n required={required}\n disabled={disabled}\n // A single-space placeholder keeps :placeholder-shown reliable so the\n // label can float via CSS alone; a user placeholder would clash with\n // the resting label.\n placeholder={isFloating ? ' ' : placeholder}\n {...props}\n />\n );\n\n return (\n <div\n data-slot=\"input-wrapper\"\n className={cn('flex flex-col gap-1.5', disabled && 'opacity-50')}\n >\n {label && !isFloating && (\n <label\n data-slot=\"input-label\"\n htmlFor={inputId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n {requiredMark}\n </label>\n )}\n {isFloating ? (\n <div className=\"relative\">\n {inputElement}\n <label\n data-slot=\"input-label\"\n htmlFor={inputId}\n className={floatingLabelVariants({\n size,\n hasError: hasError || !!error,\n })}\n >\n {label}\n {requiredMark}\n </label>\n </div>\n ) : (\n inputElement\n )}\n {error && (\n <p\n id={errorId}\n data-slot=\"input-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n {helperText && !error && (\n <p\n id={helperId}\n data-slot=\"input-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n\nexport {\n Input,\n RequiredMark,\n inputVariants,\n floatingLabelVariants,\n floatingGroupVariants,\n floatingGroupLabelVariants,\n};\nexport type { RequiredMarkVariant };\n"]}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkP2VTQ5AR_cjs = require('./chunk-P2VTQ5AR.cjs');
|
|
4
|
+
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var lucideReact = require('lucide-react');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
function _interopNamespace(e) {
|
|
10
|
+
if (e && e.__esModule) return e;
|
|
11
|
+
var n = Object.create(null);
|
|
12
|
+
if (e) {
|
|
13
|
+
Object.keys(e).forEach(function (k) {
|
|
14
|
+
if (k !== 'default') {
|
|
15
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () { return e[k]; }
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
28
|
+
|
|
29
|
+
var Kbd = React__namespace.forwardRef(function Kbd2({ className, ...props }, ref) {
|
|
30
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
31
|
+
"kbd",
|
|
32
|
+
{
|
|
33
|
+
ref,
|
|
34
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
35
|
+
"border-border bg-muted text-foreground rounded border px-1.5 py-0.5 font-mono text-[11px]",
|
|
36
|
+
className
|
|
37
|
+
),
|
|
38
|
+
...props
|
|
39
|
+
}
|
|
40
|
+
);
|
|
41
|
+
});
|
|
42
|
+
function Keys({
|
|
43
|
+
keys,
|
|
44
|
+
alternativesLabel
|
|
45
|
+
}) {
|
|
46
|
+
const list = Array.isArray(keys) ? keys : keys.split(" / ");
|
|
47
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex shrink-0 items-center gap-1", children: list.map((k, i) => /* @__PURE__ */ jsxRuntime.jsxs(React__namespace.Fragment, { children: [
|
|
48
|
+
/* @__PURE__ */ jsxRuntime.jsx(Kbd, { children: k }),
|
|
49
|
+
i < list.length - 1 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground mx-0.5 text-xs", children: alternativesLabel })
|
|
50
|
+
] }, `${k}-${i}`)) });
|
|
51
|
+
}
|
|
52
|
+
function ShortcutList({
|
|
53
|
+
shortcuts,
|
|
54
|
+
alternativesLabel
|
|
55
|
+
}) {
|
|
56
|
+
return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex list-none flex-col gap-2 p-0", children: shortcuts.map((s) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
57
|
+
"li",
|
|
58
|
+
{
|
|
59
|
+
className: "text-foreground flex items-center justify-between gap-4 text-sm",
|
|
60
|
+
children: [
|
|
61
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0", children: s.description }),
|
|
62
|
+
/* @__PURE__ */ jsxRuntime.jsx(Keys, { keys: s.keys, alternativesLabel })
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
`${s.description}-${String(s.keys)}`
|
|
66
|
+
)) });
|
|
67
|
+
}
|
|
68
|
+
function KeyboardShortcutsOverlay({
|
|
69
|
+
open,
|
|
70
|
+
onClose,
|
|
71
|
+
shortcuts,
|
|
72
|
+
groups,
|
|
73
|
+
title = "Keyboard shortcuts",
|
|
74
|
+
hint,
|
|
75
|
+
alternativesLabel = "or"
|
|
76
|
+
}) {
|
|
77
|
+
const defaultHint = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
78
|
+
"Press ",
|
|
79
|
+
/* @__PURE__ */ jsxRuntime.jsx(Kbd, { children: "?" }),
|
|
80
|
+
" anytime to toggle this help"
|
|
81
|
+
] });
|
|
82
|
+
const footer = hint === null ? null : hint ?? defaultHint;
|
|
83
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
84
|
+
chunkP2VTQ5AR_cjs.Modal,
|
|
85
|
+
{
|
|
86
|
+
open,
|
|
87
|
+
onOpenChange: (o) => {
|
|
88
|
+
if (!o) onClose();
|
|
89
|
+
},
|
|
90
|
+
size: "sm",
|
|
91
|
+
"aria-label": title,
|
|
92
|
+
children: [
|
|
93
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkP2VTQ5AR_cjs.ModalHeader, { children: [
|
|
94
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkP2VTQ5AR_cjs.ModalTitle, { className: "flex items-center gap-2 text-sm", children: [
|
|
95
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Keyboard, { "aria-hidden": "true", className: "text-primary-500 h-4 w-4" }),
|
|
96
|
+
title
|
|
97
|
+
] }),
|
|
98
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkP2VTQ5AR_cjs.ModalClose, {})
|
|
99
|
+
] }),
|
|
100
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkP2VTQ5AR_cjs.ModalBody, { className: "flex flex-col gap-4", children: [
|
|
101
|
+
shortcuts && /* @__PURE__ */ jsxRuntime.jsx(
|
|
102
|
+
ShortcutList,
|
|
103
|
+
{
|
|
104
|
+
shortcuts,
|
|
105
|
+
alternativesLabel
|
|
106
|
+
}
|
|
107
|
+
),
|
|
108
|
+
groups?.map((group) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
109
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-muted-foreground text-xs font-semibold tracking-wide uppercase", children: group.title }),
|
|
110
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
111
|
+
ShortcutList,
|
|
112
|
+
{
|
|
113
|
+
shortcuts: group.shortcuts,
|
|
114
|
+
alternativesLabel
|
|
115
|
+
}
|
|
116
|
+
)
|
|
117
|
+
] }, group.title))
|
|
118
|
+
] }),
|
|
119
|
+
footer && /* @__PURE__ */ jsxRuntime.jsx(chunkP2VTQ5AR_cjs.ModalFooter, { className: "text-muted-foreground justify-center text-[11px]", children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: footer }) })
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
exports.Kbd = Kbd;
|
|
126
|
+
exports.KeyboardShortcutsOverlay = KeyboardShortcutsOverlay;
|
|
127
|
+
//# sourceMappingURL=chunk-3SHLOF4V.cjs.map
|
|
128
|
+
//# sourceMappingURL=chunk-3SHLOF4V.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/KeyboardShortcutsOverlay/KeyboardShortcutsOverlay.tsx"],"names":["React","Kbd","jsx","cn","jsxs","Fragment","Modal","ModalHeader","ModalTitle","Keyboard","ModalClose","ModalBody","ModalFooter"],"mappings":"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","file":"chunk-3SHLOF4V.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Keyboard } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport {\n Modal,\n ModalHeader,\n ModalTitle,\n ModalClose,\n ModalBody,\n ModalFooter,\n} from '../Modal';\n\n// =============================================================================\n// Kbd\n// =============================================================================\n\nexport type KbdProps = React.HTMLAttributes<HTMLElement>;\n\n/** A keyboard-key chip: `<Kbd>⌘K</Kbd>`. */\nexport const Kbd = React.forwardRef<HTMLElement, KbdProps>(function Kbd(\n { className, ...props },\n ref\n) {\n return (\n <kbd\n ref={ref}\n className={cn(\n 'border-border bg-muted text-foreground rounded border px-1.5 py-0.5 font-mono text-[11px]',\n className\n )}\n {...props}\n />\n );\n});\n\n// =============================================================================\n// KeyboardShortcutsOverlay\n// =============================================================================\n\nexport interface ShortcutDef {\n /** Key or alternatives — `\"j\"`, `[\"j\", \"↓\"]`, `\"⌘K\"`. */\n keys: string | string[];\n description: string;\n}\n\nexport interface ShortcutGroup {\n title: string;\n shortcuts: ShortcutDef[];\n}\n\nexport interface KeyboardShortcutsOverlayProps {\n open: boolean;\n onClose: () => void;\n /** Flat list of shortcuts, or use `groups` for sectioned help. */\n shortcuts?: ShortcutDef[];\n /** Sectioned shortcuts with group headings. */\n groups?: ShortcutGroup[];\n title?: string;\n /** Footer hint. Pass `null` to hide it. */\n hint?: React.ReactNode | null;\n /** Joins key alternatives (default \"or\"), overridable for i18n. */\n alternativesLabel?: string;\n}\n\nfunction Keys({\n keys,\n alternativesLabel,\n}: {\n keys: string | string[];\n alternativesLabel: string;\n}) {\n const list = Array.isArray(keys) ? keys : keys.split(' / ');\n return (\n <span className=\"flex shrink-0 items-center gap-1\">\n {list.map((k, i) => (\n <React.Fragment key={`${k}-${i}`}>\n <Kbd>{k}</Kbd>\n {i < list.length - 1 && (\n <span className=\"text-muted-foreground mx-0.5 text-xs\">\n {alternativesLabel}\n </span>\n )}\n </React.Fragment>\n ))}\n </span>\n );\n}\n\nfunction ShortcutList({\n shortcuts,\n alternativesLabel,\n}: {\n shortcuts: ShortcutDef[];\n alternativesLabel: string;\n}) {\n return (\n <ul className=\"flex list-none flex-col gap-2 p-0\">\n {shortcuts.map((s) => (\n <li\n key={`${s.description}-${String(s.keys)}`}\n className=\"text-foreground flex items-center justify-between gap-4 text-sm\"\n >\n <span className=\"min-w-0\">{s.description}</span>\n <Keys keys={s.keys} alternativesLabel={alternativesLabel} />\n </li>\n ))}\n </ul>\n );\n}\n\n/**\n * The `?` keyboard-shortcuts help dialog: a list of shortcut rows\n * (optionally grouped) with `Kbd` chips for each key. Pairs with the\n * `useKeyboardShortcut` hook, which handles the binding — this component\n * only renders the help.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = useState(false);\n * useKeyboardShortcut('?', () => setOpen((v) => !v), {\n * modifiers: { shift: true },\n * });\n *\n * <KeyboardShortcutsOverlay\n * open={open}\n * onClose={() => setOpen(false)}\n * shortcuts={[\n * { keys: ['j', '↓'], description: 'Next record' },\n * { keys: '⌘K', description: 'Command palette' },\n * ]}\n * />\n * ```\n */\nexport function KeyboardShortcutsOverlay({\n open,\n onClose,\n shortcuts,\n groups,\n title = 'Keyboard shortcuts',\n hint,\n alternativesLabel = 'or',\n}: KeyboardShortcutsOverlayProps) {\n const defaultHint = (\n <>\n Press <Kbd>?</Kbd> anytime to toggle this help\n </>\n );\n const footer = hint === null ? null : (hint ?? defaultHint);\n\n return (\n <Modal\n open={open}\n onOpenChange={(o) => {\n if (!o) onClose();\n }}\n size=\"sm\"\n aria-label={title}\n >\n <ModalHeader>\n <ModalTitle className=\"flex items-center gap-2 text-sm\">\n <Keyboard aria-hidden=\"true\" className=\"text-primary-500 h-4 w-4\" />\n {title}\n </ModalTitle>\n <ModalClose />\n </ModalHeader>\n <ModalBody className=\"flex flex-col gap-4\">\n {shortcuts && (\n <ShortcutList\n shortcuts={shortcuts}\n alternativesLabel={alternativesLabel}\n />\n )}\n {groups?.map((group) => (\n <div key={group.title} className=\"flex flex-col gap-2\">\n <h3 className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n {group.title}\n </h3>\n <ShortcutList\n shortcuts={group.shortcuts}\n alternativesLabel={alternativesLabel}\n />\n </div>\n ))}\n </ModalBody>\n {footer && (\n <ModalFooter className=\"text-muted-foreground justify-center text-[11px]\">\n <span>{footer}</span>\n </ModalFooter>\n )}\n </Modal>\n );\n}\n"]}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var luxon = require('luxon');
|
|
6
|
+
var lucideReact = require('lucide-react');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
function _interopNamespace(e) {
|
|
10
|
+
if (e && e.__esModule) return e;
|
|
11
|
+
var n = Object.create(null);
|
|
12
|
+
if (e) {
|
|
13
|
+
Object.keys(e).forEach(function (k) {
|
|
14
|
+
if (k !== 'default') {
|
|
15
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () { return e[k]; }
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
28
|
+
|
|
29
|
+
var DEFAULT_THRESHOLDS = { fresh: 90, aging: 180 };
|
|
30
|
+
function toDateTime(date) {
|
|
31
|
+
return typeof date === "string" ? luxon.DateTime.fromISO(date) : luxon.DateTime.fromJSDate(date);
|
|
32
|
+
}
|
|
33
|
+
function daysSince(date) {
|
|
34
|
+
const dt = toDateTime(date);
|
|
35
|
+
if (!dt.isValid) return null;
|
|
36
|
+
const days = Math.floor(luxon.DateTime.now().diff(dt, "days").days);
|
|
37
|
+
return Math.max(0, days);
|
|
38
|
+
}
|
|
39
|
+
function levelForDays(days, thresholds) {
|
|
40
|
+
if (days === null) return "unknown";
|
|
41
|
+
if (days < thresholds.fresh) return "fresh";
|
|
42
|
+
if (days < thresholds.aging) return "aging";
|
|
43
|
+
return "stale";
|
|
44
|
+
}
|
|
45
|
+
function freshnessLevel(date, thresholds = DEFAULT_THRESHOLDS) {
|
|
46
|
+
return levelForDays(daysSince(date), thresholds);
|
|
47
|
+
}
|
|
48
|
+
function ageText(days) {
|
|
49
|
+
if (days === null) return "date unknown";
|
|
50
|
+
return days === 0 ? "today" : days === 1 ? "yesterday" : `${days}d ago`;
|
|
51
|
+
}
|
|
52
|
+
var META = {
|
|
53
|
+
fresh: {
|
|
54
|
+
Icon: lucideReact.CircleCheck,
|
|
55
|
+
chip: "bg-success/10 text-success-800 dark:bg-success/20 dark:text-success",
|
|
56
|
+
dot: "bg-success",
|
|
57
|
+
label: "Fresh"
|
|
58
|
+
},
|
|
59
|
+
aging: {
|
|
60
|
+
Icon: lucideReact.CircleMinus,
|
|
61
|
+
chip: "bg-warning/15 text-warning-800 dark:bg-warning/20 dark:text-warning",
|
|
62
|
+
dot: "bg-warning",
|
|
63
|
+
label: "Aging"
|
|
64
|
+
},
|
|
65
|
+
stale: {
|
|
66
|
+
Icon: lucideReact.CircleAlert,
|
|
67
|
+
chip: "bg-destructive/10 text-destructive-700 dark:bg-destructive/20 dark:text-destructive",
|
|
68
|
+
dot: "bg-destructive",
|
|
69
|
+
label: "Stale"
|
|
70
|
+
},
|
|
71
|
+
unknown: {
|
|
72
|
+
Icon: lucideReact.CircleHelp,
|
|
73
|
+
chip: "bg-muted text-muted-foreground",
|
|
74
|
+
dot: "bg-muted-foreground/50",
|
|
75
|
+
label: "Unknown"
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
var FreshnessBadge = React__namespace.forwardRef(function FreshnessBadge2({
|
|
79
|
+
date,
|
|
80
|
+
thresholds = DEFAULT_THRESHOLDS,
|
|
81
|
+
label = "Reviewed",
|
|
82
|
+
className,
|
|
83
|
+
...props
|
|
84
|
+
}, ref) {
|
|
85
|
+
const days = daysSince(date);
|
|
86
|
+
const level = levelForDays(days, thresholds);
|
|
87
|
+
const { Icon, chip } = META[level];
|
|
88
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
89
|
+
"span",
|
|
90
|
+
{
|
|
91
|
+
ref,
|
|
92
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
93
|
+
"inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-semibold",
|
|
94
|
+
chip,
|
|
95
|
+
className
|
|
96
|
+
),
|
|
97
|
+
...props,
|
|
98
|
+
children: [
|
|
99
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { "aria-hidden": "true", className: "h-3 w-3 shrink-0" }),
|
|
100
|
+
label,
|
|
101
|
+
" ",
|
|
102
|
+
ageText(days)
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
);
|
|
106
|
+
});
|
|
107
|
+
var FreshnessDot = React__namespace.forwardRef(function FreshnessDot2({
|
|
108
|
+
date,
|
|
109
|
+
thresholds = DEFAULT_THRESHOLDS,
|
|
110
|
+
label = "Reviewed",
|
|
111
|
+
className,
|
|
112
|
+
...props
|
|
113
|
+
}, ref) {
|
|
114
|
+
const days = daysSince(date);
|
|
115
|
+
const level = levelForDays(days, thresholds);
|
|
116
|
+
const description = `${META[level].label} \u2014 ${label} ${ageText(days)}`;
|
|
117
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
118
|
+
"span",
|
|
119
|
+
{
|
|
120
|
+
ref,
|
|
121
|
+
role: "img",
|
|
122
|
+
"aria-label": description,
|
|
123
|
+
title: description,
|
|
124
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
125
|
+
"inline-block h-2 w-2 shrink-0 rounded-full",
|
|
126
|
+
META[level].dot,
|
|
127
|
+
className
|
|
128
|
+
),
|
|
129
|
+
...props
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
exports.FreshnessBadge = FreshnessBadge;
|
|
135
|
+
exports.FreshnessDot = FreshnessDot;
|
|
136
|
+
exports.daysSince = daysSince;
|
|
137
|
+
exports.freshnessLevel = freshnessLevel;
|
|
138
|
+
//# sourceMappingURL=chunk-3TXOFAXP.cjs.map
|
|
139
|
+
//# sourceMappingURL=chunk-3TXOFAXP.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/FreshnessBadge/FreshnessBadge.tsx"],"names":["DateTime","CircleCheck","CircleMinus","CircleAlert","CircleHelp","React","FreshnessBadge","jsxs","cn","jsx","FreshnessDot"],"mappings":"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","file":"chunk-3TXOFAXP.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { DateTime } from 'luxon';\nimport {\n CircleAlert,\n CircleCheck,\n CircleHelp,\n CircleMinus,\n} from 'lucide-react';\nimport { cn } from '../../utils/cn';\n\n// =============================================================================\n// Types & helpers\n// =============================================================================\n\nexport type FreshnessLevel = 'fresh' | 'aging' | 'stale' | 'unknown';\n\nexport interface FreshnessThresholds {\n /** Days within which a date counts as fresh (default 90). */\n fresh: number;\n /** Days within which a date counts as aging; beyond is stale (default 180). */\n aging: number;\n}\n\nconst DEFAULT_THRESHOLDS: FreshnessThresholds = { fresh: 90, aging: 180 };\n\nfunction toDateTime(date: string | Date): DateTime {\n return typeof date === 'string'\n ? DateTime.fromISO(date)\n : DateTime.fromJSDate(date);\n}\n\n/**\n * Whole days elapsed since the given date (0 for today/future), or `null`\n * when the date cannot be parsed.\n */\nexport function daysSince(date: string | Date): number | null {\n const dt = toDateTime(date);\n if (!dt.isValid) return null;\n const days = Math.floor(DateTime.now().diff(dt, 'days').days);\n return Math.max(0, days);\n}\n\nfunction levelForDays(\n days: number | null,\n thresholds: FreshnessThresholds\n): FreshnessLevel {\n if (days === null) return 'unknown';\n if (days < thresholds.fresh) return 'fresh';\n if (days < thresholds.aging) return 'aging';\n return 'stale';\n}\n\n/**\n * Bucket a date into fresh / aging / stale by day thresholds. Unparseable\n * dates return `unknown` rather than masquerading as fresh or stale.\n */\nexport function freshnessLevel(\n date: string | Date,\n thresholds: FreshnessThresholds = DEFAULT_THRESHOLDS\n): FreshnessLevel {\n return levelForDays(daysSince(date), thresholds);\n}\n\nfunction ageText(days: number | null): string {\n if (days === null) return 'date unknown';\n return days === 0 ? 'today' : days === 1 ? 'yesterday' : `${days}d ago`;\n}\n\nconst META: Record<\n FreshnessLevel,\n { Icon: typeof CircleCheck; chip: string; dot: string; label: string }\n> = {\n fresh: {\n Icon: CircleCheck,\n chip: 'bg-success/10 text-success-800 dark:bg-success/20 dark:text-success',\n dot: 'bg-success',\n label: 'Fresh',\n },\n aging: {\n Icon: CircleMinus,\n chip: 'bg-warning/15 text-warning-800 dark:bg-warning/20 dark:text-warning',\n dot: 'bg-warning',\n label: 'Aging',\n },\n stale: {\n Icon: CircleAlert,\n chip: 'bg-destructive/10 text-destructive-700 dark:bg-destructive/20 dark:text-destructive',\n dot: 'bg-destructive',\n label: 'Stale',\n },\n unknown: {\n Icon: CircleHelp,\n chip: 'bg-muted text-muted-foreground',\n dot: 'bg-muted-foreground/50',\n label: 'Unknown',\n },\n};\n\n// =============================================================================\n// Components\n// =============================================================================\n\nexport interface FreshnessBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** The date being aged — last review, last sync, last update. */\n date: string | Date;\n /** Day cutoffs for fresh/aging (default 90/180). */\n thresholds?: FreshnessThresholds;\n /** Verb before the age (default \"Reviewed\"). */\n label?: string;\n}\n\n/**\n * A recency chip that ages from success through warning to destructive:\n * \"Reviewed 12d ago\". Suits source registries, sync statuses, data-quality\n * dashboards — anywhere staleness is a signal.\n *\n * @example\n * ```tsx\n * <FreshnessBadge date=\"2026-07-01\" />\n * <FreshnessBadge date={lastSync} label=\"Synced\" thresholds={{ fresh: 1, aging: 7 }} />\n * ```\n */\nexport const FreshnessBadge = React.forwardRef<\n HTMLSpanElement,\n FreshnessBadgeProps\n>(function FreshnessBadge(\n {\n date,\n thresholds = DEFAULT_THRESHOLDS,\n label = 'Reviewed',\n className,\n ...props\n },\n ref\n) {\n const days = daysSince(date);\n const level = levelForDays(days, thresholds);\n const { Icon, chip } = META[level];\n return (\n <span\n ref={ref}\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-semibold',\n chip,\n className\n )}\n {...props}\n >\n <Icon aria-hidden=\"true\" className=\"h-3 w-3 shrink-0\" />\n {label} {ageText(days)}\n </span>\n );\n});\n\nexport interface FreshnessDotProps extends React.HTMLAttributes<HTMLSpanElement> {\n date: string | Date;\n thresholds?: FreshnessThresholds;\n /** Verb used in the accessible label and tooltip (default \"Reviewed\"). */\n label?: string;\n}\n\n/** Colored dot for tight spots — table cells, tooltip source rows. */\nexport const FreshnessDot = React.forwardRef<\n HTMLSpanElement,\n FreshnessDotProps\n>(function FreshnessDot(\n {\n date,\n thresholds = DEFAULT_THRESHOLDS,\n label = 'Reviewed',\n className,\n ...props\n },\n ref\n) {\n const days = daysSince(date);\n const level = levelForDays(days, thresholds);\n const description = `${META[level].label} — ${label} ${ageText(days)}`;\n return (\n <span\n ref={ref}\n role=\"img\"\n aria-label={description}\n title={description}\n className={cn(\n 'inline-block h-2 w-2 shrink-0 rounded-full',\n META[level].dot,\n className\n )}\n {...props}\n />\n );\n});\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
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
6
|
var chunkMYFZYUPR_cjs = require('./chunk-MYFZYUPR.cjs');
|
|
@@ -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(() => {
|
|
@@ -159,16 +227,29 @@ function Select({
|
|
|
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-56QJHQ5C.cjs.map
|
|
685
|
+
//# sourceMappingURL=chunk-56QJHQ5C.cjs.map
|