@mieweb/ui 0.7.3 → 0.8.0-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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-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-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-6MMIWE7H.js → chunk-AESFOMSH.js} +373 -4
- package/dist/chunk-AESFOMSH.js.map +1 -0
- 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-CG4ZKJLE.js +84 -0
- package/dist/chunk-CG4ZKJLE.js.map +1 -0
- 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-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-LJDBD2DD.cjs → chunk-L6D4CKLV.cjs} +373 -4
- package/dist/chunk-L6D4CKLV.cjs.map +1 -0
- 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-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-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/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 +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/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 +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 +2907 -1989
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +191 -46
- package/dist/index.d.ts +191 -46
- package/dist/index.js +2130 -1325
- 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/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-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-LJDBD2DD.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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/brands/index.ts"],"names":[],"mappings":";AAkCO,IAAM,MAAA,GAAS;AAAA,EACpB,QAAA,EAAU,MAAM,OAAO,sBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAAA,EAChE,IAAA,EAAM,MAAM,OAAO,kBAAQ,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA;AAAA,EACpD,OAAA,EAAS,MAAM,OAAO,uBAAW,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,CAAA;AAAA,EAC7D,mBAAA,EAAqB,MACnB,OAAO,iCAAqB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,qBAAqB,CAAA;AAAA,EACnE,MAAA,EAAQ,MAAM,OAAO,sBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,MAAA,EAAQ,MAAM,OAAO,oBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,UAAA,EAAY,MAAM,OAAO,0BAAc,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAAA,EACtE,QAAA,EAAU,MAAM,OAAO,wBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa;AAClE","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/brands/index.ts"],"names":[],"mappings":";AAkCO,IAAM,MAAA,GAAS;AAAA,EACpB,QAAA,EAAU,MAAM,OAAO,sBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAAA,EAChE,IAAA,EAAM,MAAM,OAAO,kBAAQ,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA;AAAA,EACpD,OAAA,EAAS,MAAM,OAAO,uBAAW,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,CAAA;AAAA,EAC7D,mBAAA,EAAqB,MACnB,OAAO,iCAAqB,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,qBAAqB,CAAA;AAAA,EACnE,MAAA,EAAQ,MAAM,OAAO,sBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,MAAA,EAAQ,MAAM,OAAO,oBAAU,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AAAA,EAC1D,UAAA,EAAY,MAAM,OAAO,0BAAc,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAAA,EACtE,QAAA,EAAU,MAAM,OAAO,wBAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa;AAClE","file":"chunk-TXRQQMG5.js","sourcesContent":["/**\n * @mieweb/ui Brand System\n *\n * Export all brand-related types, utilities, and configurations.\n */\n\n// Types and utilities\nexport type {\n BrandConfig,\n BrandColors,\n BrandTypography,\n BrandBorderRadius,\n BrandBoxShadow,\n ColorScale,\n SemanticColors,\n} from './types';\n\nexport {\n generateBrandCSS,\n generateTailwindTheme,\n createBrandPreset,\n} from './types';\n\n// Brand configurations\nexport { bluehiveBrand } from './bluehive';\nexport { ccmeBrand } from './ccme';\nexport { defaultBrand } from './default';\nexport { enterpriseHealthBrand } from './enterprise-health';\nexport { miewebBrand } from './mieweb';\nexport { ozwellBrand } from './ozwell';\nexport { wagglelineBrand } from './waggleline';\nexport { webchartBrand } from './webchart';\n\n// All brands for iteration\nexport const brands = {\n bluehive: () => import('./bluehive').then((m) => m.bluehiveBrand),\n ccme: () => import('./ccme').then((m) => m.ccmeBrand),\n default: () => import('./default').then((m) => m.defaultBrand),\n 'enterprise-health': () =>\n import('./enterprise-health').then((m) => m.enterpriseHealthBrand),\n mieweb: () => import('./mieweb').then((m) => m.miewebBrand),\n ozwell: () => import('./ozwell').then((m) => m.ozwellBrand),\n waggleline: () => import('./waggleline').then((m) => m.wagglelineBrand),\n webchart: () => import('./webchart').then((m) => m.webchartBrand),\n} as const;\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkZ5S5JEJD_cjs = require('./chunk-Z5S5JEJD.cjs');
|
|
4
4
|
var chunkMYFZYUPR_cjs = require('./chunk-MYFZYUPR.cjs');
|
|
5
5
|
var chunkCW75IKA6_cjs = require('./chunk-CW75IKA6.cjs');
|
|
6
6
|
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
@@ -35,11 +35,6 @@ var widthClasses = {
|
|
|
35
35
|
fixed: "w-44"
|
|
36
36
|
// ~176px - enough for MM/DD/YYYY + calendar icon
|
|
37
37
|
};
|
|
38
|
-
var sizeClasses = {
|
|
39
|
-
sm: "h-8 text-sm",
|
|
40
|
-
md: "h-10 text-base",
|
|
41
|
-
lg: "h-12 text-lg"
|
|
42
|
-
};
|
|
43
38
|
var MONTH_NAMES = [
|
|
44
39
|
"January",
|
|
45
40
|
"February",
|
|
@@ -655,7 +650,7 @@ var DateInput = React__namespace.forwardRef(
|
|
|
655
650
|
};
|
|
656
651
|
if (inputType === "year") {
|
|
657
652
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
658
|
-
|
|
653
|
+
chunkZ5S5JEJD_cjs.Input,
|
|
659
654
|
{
|
|
660
655
|
ref,
|
|
661
656
|
type: inputType === "year" ? "text" : inputType,
|
|
@@ -675,107 +670,142 @@ var DateInput = React__namespace.forwardRef(
|
|
|
675
670
|
);
|
|
676
671
|
}
|
|
677
672
|
if (showCalendar || inputType !== "date") {
|
|
678
|
-
const {
|
|
673
|
+
const {
|
|
674
|
+
label,
|
|
675
|
+
labelVariant,
|
|
676
|
+
helperText,
|
|
677
|
+
hideLabel,
|
|
678
|
+
required,
|
|
679
|
+
requiredVariant,
|
|
680
|
+
size,
|
|
681
|
+
placeholder: placeholderProp,
|
|
682
|
+
...inputProps
|
|
683
|
+
} = props;
|
|
679
684
|
const resolvedSize = size ?? "md";
|
|
680
685
|
const inputId = inputProps.id || generatedId;
|
|
681
686
|
const errorId = `${inputId}-error`;
|
|
682
687
|
const helperId = `${inputId}-helper`;
|
|
683
688
|
const showError = hasError || !!localError;
|
|
684
689
|
const errorMessage = error || localError;
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
690
|
+
const isFloating = labelVariant === "floating" && !!label && !hideLabel;
|
|
691
|
+
const requiredMark = required && /* @__PURE__ */ jsxRuntime.jsx(chunkZ5S5JEJD_cjs.RequiredMark, { variant: requiredVariant });
|
|
692
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
693
|
+
"div",
|
|
694
|
+
{
|
|
695
|
+
"data-slot": "input-wrapper",
|
|
696
|
+
className: chunkS5RVSXDV_cjs.cn("flex flex-col gap-1.5", widthClasses[width]),
|
|
697
|
+
children: [
|
|
698
|
+
label && !isFloating && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
699
|
+
"label",
|
|
700
|
+
{
|
|
701
|
+
"data-slot": "input-label",
|
|
702
|
+
htmlFor: inputId,
|
|
703
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
704
|
+
"text-foreground text-sm font-medium",
|
|
705
|
+
hideLabel && "sr-only"
|
|
706
|
+
),
|
|
707
|
+
children: [
|
|
708
|
+
label,
|
|
709
|
+
requiredMark
|
|
710
|
+
]
|
|
711
|
+
}
|
|
693
712
|
),
|
|
694
|
-
children: [
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
"span",
|
|
713
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
714
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
715
|
+
"input",
|
|
698
716
|
{
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
717
|
+
"data-slot": "input",
|
|
718
|
+
ref,
|
|
719
|
+
id: inputId,
|
|
720
|
+
type: "text",
|
|
721
|
+
inputMode: inputType === "date" ? "numeric" : void 0,
|
|
722
|
+
autoComplete,
|
|
723
|
+
placeholder: isFloating ? " " : placeholderProp ?? (inputType === "month" ? "Select month" : inputType === "time" ? "Select time" : inputType === "datetime-local" ? "Select date and time" : placeholder),
|
|
724
|
+
value: formatPickerValue(displayValue, inputType, timeFormat),
|
|
725
|
+
onChange: handleChange,
|
|
726
|
+
onBlur: inputType === "date" ? handleBlur : onBlur,
|
|
727
|
+
onClick: (event) => {
|
|
728
|
+
onClick?.(event);
|
|
729
|
+
setIsCalendarOpen(true);
|
|
730
|
+
},
|
|
731
|
+
readOnly: !isFormattedDate,
|
|
732
|
+
required,
|
|
733
|
+
"aria-invalid": showError,
|
|
734
|
+
"aria-describedby": [errorMessage ? errorId : null, helperText ? helperId : null].filter(Boolean).join(" ") || void 0,
|
|
735
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
736
|
+
chunkZ5S5JEJD_cjs.inputVariants({
|
|
737
|
+
size: resolvedSize,
|
|
738
|
+
hasError: showError,
|
|
739
|
+
labelVariant: isFloating ? "floating" : "stacked"
|
|
740
|
+
}),
|
|
741
|
+
"pr-10",
|
|
742
|
+
className
|
|
743
|
+
),
|
|
744
|
+
...inputProps
|
|
703
745
|
}
|
|
704
|
-
)
|
|
705
|
-
]
|
|
706
|
-
}
|
|
707
|
-
),
|
|
708
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
709
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
710
|
-
"input",
|
|
711
|
-
{
|
|
712
|
-
ref,
|
|
713
|
-
id: inputId,
|
|
714
|
-
type: "text",
|
|
715
|
-
inputMode: inputType === "date" ? "numeric" : void 0,
|
|
716
|
-
autoComplete,
|
|
717
|
-
placeholder: inputType === "month" ? "Select month" : inputType === "time" ? "Select time" : inputType === "datetime-local" ? "Select date and time" : placeholder,
|
|
718
|
-
value: formatPickerValue(displayValue, inputType, timeFormat),
|
|
719
|
-
onChange: handleChange,
|
|
720
|
-
onBlur: inputType === "date" ? handleBlur : onBlur,
|
|
721
|
-
onClick: (event) => {
|
|
722
|
-
onClick?.(event);
|
|
723
|
-
setIsCalendarOpen(true);
|
|
724
|
-
},
|
|
725
|
-
readOnly: !isFormattedDate,
|
|
726
|
-
"aria-invalid": showError,
|
|
727
|
-
"aria-describedby": [errorMessage ? errorId : null, helperText ? helperId : null].filter(Boolean).join(" ") || void 0,
|
|
728
|
-
className: chunkS5RVSXDV_cjs.cn(
|
|
729
|
-
"w-full px-3 py-2",
|
|
730
|
-
"rounded-lg border",
|
|
731
|
-
"bg-background text-foreground",
|
|
732
|
-
"placeholder:text-muted-foreground",
|
|
733
|
-
"transition-colors duration-200",
|
|
734
|
-
"focus:ring-ring focus:border-transparent focus:ring-2 focus:outline-none",
|
|
735
|
-
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
736
|
-
sizeClasses[resolvedSize],
|
|
737
|
-
showError ? "border-destructive focus:ring-destructive" : "border-input",
|
|
738
|
-
"pr-10",
|
|
739
|
-
className
|
|
740
746
|
),
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
747
|
+
isFloating && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
748
|
+
"label",
|
|
749
|
+
{
|
|
750
|
+
"data-slot": "input-label",
|
|
751
|
+
htmlFor: inputId,
|
|
752
|
+
className: chunkZ5S5JEJD_cjs.floatingLabelVariants({
|
|
753
|
+
size: resolvedSize,
|
|
754
|
+
hasError: showError
|
|
755
|
+
}),
|
|
756
|
+
children: [
|
|
757
|
+
label,
|
|
758
|
+
requiredMark
|
|
759
|
+
]
|
|
760
|
+
}
|
|
755
761
|
),
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
762
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
763
|
+
"button",
|
|
764
|
+
{
|
|
765
|
+
"data-slot": "date-input-trigger",
|
|
766
|
+
ref: buttonRef,
|
|
767
|
+
type: "button",
|
|
768
|
+
onClick: () => setIsCalendarOpen(!isCalendarOpen),
|
|
769
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
770
|
+
"absolute top-1/2 right-3 -translate-y-1/2",
|
|
771
|
+
"text-muted-foreground hover:text-foreground",
|
|
772
|
+
"focus:text-foreground focus:outline-none",
|
|
773
|
+
"transition-colors"
|
|
774
|
+
),
|
|
775
|
+
"aria-label": inputType === "time" ? "Open time picker" : "Open calendar",
|
|
776
|
+
"aria-expanded": isCalendarOpen,
|
|
777
|
+
"aria-haspopup": "dialog",
|
|
778
|
+
children: inputType === "time" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { size: 18 }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Calendar, { size: 18 })
|
|
779
|
+
}
|
|
780
|
+
)
|
|
781
|
+
] }),
|
|
782
|
+
isCalendarOpen && reactDom.createPortal(renderCalendar(), document.body),
|
|
783
|
+
errorMessage && /* @__PURE__ */ jsxRuntime.jsx(
|
|
784
|
+
"p",
|
|
785
|
+
{
|
|
786
|
+
id: errorId,
|
|
787
|
+
"data-slot": "input-error",
|
|
788
|
+
className: "text-sm",
|
|
789
|
+
style: { color: "#ef4444" },
|
|
790
|
+
role: "alert",
|
|
791
|
+
children: errorMessage
|
|
792
|
+
}
|
|
793
|
+
),
|
|
794
|
+
helperText && !errorMessage && /* @__PURE__ */ jsxRuntime.jsx(
|
|
795
|
+
"p",
|
|
796
|
+
{
|
|
797
|
+
id: helperId,
|
|
798
|
+
"data-slot": "input-helper",
|
|
799
|
+
className: "text-muted-foreground text-sm",
|
|
800
|
+
children: helperText
|
|
801
|
+
}
|
|
802
|
+
)
|
|
803
|
+
]
|
|
804
|
+
}
|
|
805
|
+
);
|
|
776
806
|
}
|
|
777
807
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
778
|
-
|
|
808
|
+
chunkZ5S5JEJD_cjs.Input,
|
|
779
809
|
{
|
|
780
810
|
ref,
|
|
781
811
|
type: "text",
|
|
@@ -830,5 +860,5 @@ function ChevronRightIcon() {
|
|
|
830
860
|
}
|
|
831
861
|
|
|
832
862
|
exports.DateInput = DateInput;
|
|
833
|
-
//# sourceMappingURL=chunk-
|
|
834
|
-
//# sourceMappingURL=chunk-
|
|
863
|
+
//# sourceMappingURL=chunk-U5TTXN45.cjs.map
|
|
864
|
+
//# sourceMappingURL=chunk-U5TTXN45.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/DateInput/DateInput.tsx"],"names":["year","month","day","isValidDate","parseDateValue","formatDateValue","isDateInPast","calculateAge","isDateInFuture","React","useAnchoredPosition","jsxs","cn","jsx","Fragment","Input","RequiredMark","inputVariants","floatingLabelVariants","Clock","Calendar","createPortal"],"mappings":"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","file":"chunk-U5TTXN45.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/cn';\nimport {\n formatDateValue,\n isValidDate,\n parseDateValue,\n isDateInPast,\n isDateInFuture,\n calculateAge,\n} from '../../utils/date';\nimport {\n Input,\n RequiredMark,\n inputVariants,\n floatingLabelVariants,\n type InputProps,\n} from '../Input';\nimport { Calendar, Clock } from 'lucide-react';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\n\nexport type DateInputMode =\n | 'default'\n | 'dob'\n | 'expiration'\n | 'past'\n | 'future';\n\nexport type DateInputType =\n | 'date'\n | 'datetime-local'\n | 'time'\n | 'month'\n | 'year';\n\nexport type DateInputWidth = 'full' | 'fit' | 'fixed';\n\nexport type DateInputTimeFormat = '12-hour' | '24-hour';\n\nconst widthClasses: Record<DateInputWidth, string> = {\n full: 'w-full',\n fit: 'w-fit',\n fixed: 'w-44', // ~176px - enough for MM/DD/YYYY + calendar icon\n};\n\nconst MONTH_NAMES = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\ninterface PickerDate {\n month: number;\n year: number;\n day: number | null;\n}\n\nfunction isValidPickerDate(year: number, month: number, day: number): boolean {\n return (\n Number.isFinite(year) &&\n month >= 1 &&\n month <= 12 &&\n day >= 1 &&\n day <= new Date(year, month, 0).getDate()\n );\n}\n\nfunction parsePickerDate(\n value: string,\n inputType: DateInputType\n): PickerDate | undefined {\n if (inputType === 'datetime-local') {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})T\\d{2}:\\d{2}$/.exec(value);\n if (!match) return undefined;\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n const [hour, minute] = value.slice(-5).split(':').map(Number);\n if (!isValidPickerDate(year, month, day) || hour > 23 || minute > 59) {\n return undefined;\n }\n return {\n year,\n month: month - 1,\n day,\n };\n }\n\n if (inputType === 'month') {\n const match = /^(\\d{4})-(\\d{2})$/.exec(value);\n if (!match) return undefined;\n const year = Number(match[1]);\n const month = Number(match[2]);\n if (!Number.isFinite(year) || month < 1 || month > 12) return undefined;\n return { year, month: month - 1, day: null };\n }\n\n if (!isValidDate(value)) return undefined;\n const [month, day, year] = value.split('/').map(Number);\n return { month: month - 1, year, day };\n}\n\nfunction formatTimeDisplay(\n time: string,\n timeFormat: DateInputTimeFormat\n): string {\n const [hour, minute] = time.split(':').map(Number);\n if (timeFormat === '12-hour') {\n const displayHour = hour % 12 || 12;\n const meridiem = hour >= 12 ? 'PM' : 'AM';\n return `${displayHour}:${String(minute).padStart(2, '0')} ${meridiem}`;\n }\n return time;\n}\n\nfunction formatPickerValue(\n value: string,\n inputType: DateInputType,\n timeFormat: DateInputTimeFormat\n): string {\n if (inputType === 'datetime-local') {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}:\\d{2})$/.exec(value);\n if (!match) return '';\n return `${match[2]}/${match[3]}/${match[1]} ${formatTimeDisplay(match[4], timeFormat)}`;\n }\n\n if (inputType === 'time') {\n return /^\\d{2}:\\d{2}$/.test(value)\n ? formatTimeDisplay(value, timeFormat)\n : '';\n }\n\n if (inputType === 'month') {\n const date = parsePickerDate(value, inputType);\n return date ? `${MONTH_NAMES[date.month]} ${date.year}` : '';\n }\n\n return value;\n}\n\nexport interface DateInputProps extends Omit<\n InputProps,\n 'type' | 'onChange' | 'value'\n> {\n /** The value for the selected input type. Dates use MM/DD/YYYY format. */\n value?: string;\n /** Callback fired when the value changes */\n onChange?: (value: string) => void;\n /** Date value format and picker control. */\n inputType?: DateInputType;\n /** Minute increment for the time picker (e.g. 15 shows :00, :15, :30, :45). */\n minuteStep?: number;\n /** Time picker display format for datetime values. */\n timeFormat?: DateInputTimeFormat;\n /** Validation mode for the date input */\n mode?: DateInputMode;\n /** Minimum age for DOB validation (default: 0) */\n minAge?: number;\n /** Maximum age for DOB validation */\n maxAge?: number;\n /** Earliest allowed date in MM/DD/YYYY format. */\n minDate?: string;\n /** Latest allowed date in MM/DD/YYYY format. */\n maxDate?: string;\n /** Whether to validate on blur */\n validateOnBlur?: boolean;\n /** Whether to show a calendar picker button */\n showCalendar?: boolean;\n /** Width behavior of the input */\n width?: DateInputWidth;\n}\n\nfunction getValidationError(\n value: string,\n mode: DateInputMode,\n minAge?: number,\n maxAge?: number,\n minDate?: string,\n maxDate?: string\n): string | undefined {\n if (!value || value.replace(/\\D/g, '').length === 0) {\n return undefined;\n }\n\n if (!isValidDate(value)) {\n return 'Please enter a valid date (MM/DD/YYYY)';\n }\n\n const selectedDate = parseDateValue(value);\n const minimumDate = minDate ? parseDateValue(minDate) : null;\n const maximumDate = maxDate ? parseDateValue(maxDate) : null;\n const minimumDateLabel = minDate ? formatDateValue(minDate) : '';\n const maximumDateLabel = maxDate ? formatDateValue(maxDate) : '';\n\n if (selectedDate && minimumDate && selectedDate < minimumDate) {\n return `Date must be on or after ${minimumDateLabel}`;\n }\n\n if (selectedDate && maximumDate && selectedDate > maximumDate) {\n return `Date must be on or before ${maximumDateLabel}`;\n }\n\n switch (mode) {\n case 'dob': {\n if (!isDateInPast(value)) {\n return 'Date of birth must be in the past';\n }\n const age = calculateAge(value);\n if (age !== null) {\n if (minAge !== undefined && age < minAge) {\n return `Must be at least ${minAge} years old`;\n }\n if (maxAge !== undefined && age > maxAge) {\n return `Must be no more than ${maxAge} years old`;\n }\n }\n break;\n }\n case 'expiration':\n if (!isDateInFuture(value)) {\n return 'Expiration date must be in the future';\n }\n break;\n case 'past':\n if (!isDateInPast(value)) {\n return 'Date must be in the past';\n }\n break;\n case 'future':\n if (!isDateInFuture(value)) {\n return 'Date must be in the future';\n }\n break;\n }\n\n return undefined;\n}\n\n/**\n * A date input that automatically formats to MM/DD/YYYY with validation modes.\n *\n * @example\n * ```tsx\n * // Date of birth with age validation\n * <DateInput\n * label=\"Date of Birth\"\n * mode=\"dob\"\n * minAge={18}\n * validateOnBlur\n * />\n *\n * // With calendar picker\n * <DateInput\n * label=\"Select Date\"\n * showCalendar\n * />\n *\n * // Expiration date\n * <DateInput\n * label=\"License Expiration\"\n * mode=\"expiration\"\n * validateOnBlur\n * />\n * ```\n */\nconst DateInput = React.forwardRef<HTMLInputElement, DateInputProps>(\n (\n {\n value = '',\n onChange,\n inputType = 'date',\n minuteStep = 1,\n timeFormat = '24-hour',\n mode = 'default',\n minAge,\n maxAge,\n minDate,\n maxDate,\n validateOnBlur,\n showCalendar = false,\n width = 'full',\n className,\n onBlur,\n onClick,\n hasError,\n error,\n ...props\n },\n ref\n ) => {\n const isFormattedDate = inputType === 'date';\n const [displayValue, setDisplayValue] = React.useState(() =>\n isFormattedDate ? formatDateValue(value) : value\n );\n const [localError, setLocalError] = React.useState<string | undefined>();\n\n // Sync external value changes\n React.useEffect(() => {\n setDisplayValue(isFormattedDate ? formatDateValue(value) : value);\n }, [isFormattedDate, value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const formatted = formatDateValue(e.target.value);\n setDisplayValue(formatted);\n onChange?.(formatted);\n\n // Clear error when user starts typing again\n if (localError) {\n setLocalError(undefined);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n\n if (validateOnBlur) {\n const validationError = getValidationError(\n displayValue,\n mode,\n minAge,\n maxAge,\n minDate,\n maxDate\n );\n setLocalError(validationError);\n }\n };\n\n const placeholder = mode === 'expiration' ? 'MM/DD/YYYY' : 'MM/DD/YYYY';\n const autoComplete =\n mode === 'dob' ? 'bday' : mode === 'expiration' ? 'cc-exp' : undefined;\n\n // Generate stable ID for accessibility\n const generatedId = React.useId();\n\n // Calendar picker state\n const [isCalendarOpen, setIsCalendarOpen] = React.useState(false);\n\n // Portal + fixed positioning so the calendar escapes overflow-hidden\n // ancestors, flips vertically, and clamps to the viewport.\n const {\n anchorRef: buttonRef,\n floatingRef: calendarRef,\n style: calendarStyle,\n } = useAnchoredPosition<HTMLButtonElement, HTMLDivElement>({\n open: isCalendarOpen,\n placement: 'bottom-end',\n });\n\n // Parse current value into date parts for calendar\n const parsedDate = React.useMemo(() => {\n const fallback = new Date();\n return (\n parsePickerDate(displayValue, inputType) ?? {\n month: fallback.getMonth(),\n year: fallback.getFullYear(),\n day: null,\n }\n );\n }, [displayValue, inputType]);\n\n const [calendarMonth, setCalendarMonth] = React.useState(parsedDate.month);\n const [calendarYear, setCalendarYear] = React.useState(parsedDate.year);\n const [selectedTime, setSelectedTime] = React.useState(() => {\n if (inputType === 'time' && /^\\d{2}:\\d{2}$/.test(value)) {\n return value;\n }\n return inputType === 'datetime-local' &&\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$/.test(value)\n ? value.slice(-5)\n : '00:00';\n });\n\n // Minute choices honor minuteStep; an off-step current value is kept\n // selectable so it still displays correctly.\n const minuteOptions = React.useMemo(() => {\n const step = Math.min(Math.max(Math.floor(minuteStep), 1), 60);\n const minutes = Array.from(\n { length: Math.ceil(60 / step) },\n (_, index) => index * step\n );\n const currentMinute = Number(selectedTime.slice(3));\n if (!minutes.includes(currentMinute)) {\n minutes.push(currentMinute);\n minutes.sort((a, b) => a - b);\n }\n return minutes.map((minute) => String(minute).padStart(2, '0'));\n }, [minuteStep, selectedTime]);\n const minimumDate = React.useMemo(\n () => (minDate ? parseDateValue(minDate) : null),\n [minDate]\n );\n const maximumDate = React.useMemo(\n () => (maxDate ? parseDateValue(maxDate) : null),\n [maxDate]\n );\n\n const isDateInRange = React.useCallback(\n (date: Date) => {\n const candidate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n );\n return (\n (!minimumDate || candidate >= minimumDate) &&\n (!maximumDate || candidate <= maximumDate)\n );\n },\n [maximumDate, minimumDate]\n );\n\n const isCalendarDateInRange = React.useCallback(\n (day: number) => {\n return isDateInRange(new Date(calendarYear, calendarMonth, day));\n },\n [calendarMonth, calendarYear, isDateInRange]\n );\n\n const isCalendarMonthInRange = React.useCallback(\n (month: number, year: number) => {\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n return (\n (!minimumDate || lastDay >= minimumDate) &&\n (!maximumDate || firstDay <= maximumDate)\n );\n },\n [maximumDate, minimumDate]\n );\n\n const firstCalendarYear = minimumDate\n ? minimumDate.getFullYear()\n : new Date().getFullYear() - 100;\n const lastCalendarYear = maximumDate\n ? maximumDate.getFullYear()\n : new Date().getFullYear() + 49;\n const calendarYears = Array.from(\n { length: Math.max(0, lastCalendarYear - firstCalendarYear + 1) },\n (_, index) => firstCalendarYear + index\n );\n const previousCalendarMonth = calendarMonth === 0 ? 11 : calendarMonth - 1;\n const previousCalendarYear =\n calendarMonth === 0 ? calendarYear - 1 : calendarYear;\n const nextCalendarMonth = calendarMonth === 11 ? 0 : calendarMonth + 1;\n const nextCalendarYear =\n calendarMonth === 11 ? calendarYear + 1 : calendarYear;\n const canGoToPreviousCalendar =\n inputType === 'month'\n ? !minimumDate || calendarYear > minimumDate.getFullYear()\n : isCalendarMonthInRange(previousCalendarMonth, previousCalendarYear);\n const canGoToNextCalendar =\n inputType === 'month'\n ? !maximumDate || calendarYear < maximumDate.getFullYear()\n : isCalendarMonthInRange(nextCalendarMonth, nextCalendarYear);\n\n // Update calendar view when value changes\n React.useEffect(() => {\n if (inputType === 'time') {\n if (/^\\d{2}:\\d{2}$/.test(displayValue)) {\n setSelectedTime(displayValue);\n }\n return;\n }\n const date = parsePickerDate(displayValue, inputType);\n if (!date) return;\n setCalendarMonth(date.month);\n setCalendarYear(date.year);\n if (inputType === 'datetime-local') {\n setSelectedTime(displayValue.slice(-5));\n }\n }, [displayValue, inputType]);\n\n React.useEffect(() => {\n if (isCalendarMonthInRange(calendarMonth, calendarYear)) return;\n\n const closestAllowedDate = minimumDate ?? maximumDate;\n if (!closestAllowedDate) return;\n\n setCalendarMonth(closestAllowedDate.getMonth());\n setCalendarYear(closestAllowedDate.getFullYear());\n }, [\n calendarMonth,\n calendarYear,\n isCalendarMonthInRange,\n maximumDate,\n minimumDate,\n ]);\n\n // Close calendar on click outside\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n calendarRef.current &&\n !calendarRef.current.contains(event.target as HTMLElement) &&\n buttonRef.current &&\n !buttonRef.current.contains(event.target as HTMLElement)\n ) {\n setIsCalendarOpen(false);\n }\n };\n\n if (isCalendarOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () =>\n document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isCalendarOpen, buttonRef, calendarRef]);\n\n // Close on Escape key\n React.useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsCalendarOpen(false);\n buttonRef.current?.focus();\n }\n };\n\n if (isCalendarOpen) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [isCalendarOpen, buttonRef]);\n\n const handleDateSelect = (day: number) => {\n if (!isCalendarDateInRange(day)) return;\n\n const month = String(calendarMonth + 1).padStart(2, '0');\n const dayStr = String(day).padStart(2, '0');\n const year = String(calendarYear);\n const formatted =\n inputType === 'datetime-local'\n ? `${year}-${month}-${dayStr}T${selectedTime}`\n : `${month}/${dayStr}/${year}`;\n setDisplayValue(formatted);\n onChange?.(formatted);\n if (inputType === 'date') {\n setIsCalendarOpen(false);\n }\n\n // Validate if needed\n if (inputType === 'date' && validateOnBlur) {\n const validationError = getValidationError(\n formatted,\n mode,\n minAge,\n maxAge,\n minDate,\n maxDate\n );\n setLocalError(validationError);\n }\n };\n\n const handleMonthSelect = (month: number) => {\n if (!isCalendarMonthInRange(month, calendarYear)) return;\n\n const formatted = `${calendarYear}-${String(month + 1).padStart(2, '0')}`;\n setDisplayValue(formatted);\n onChange?.(formatted);\n setIsCalendarOpen(false);\n };\n\n const handleCalendarYearChange = (year: number) => {\n setCalendarYear(year);\n if (isCalendarMonthInRange(calendarMonth, year)) return;\n\n const firstAvailableMonth = MONTH_NAMES.findIndex((_, month) =>\n isCalendarMonthInRange(month, year)\n );\n if (firstAvailableMonth !== -1) {\n setCalendarMonth(firstAvailableMonth);\n }\n };\n\n const handleTimeChange = (part: 'hour' | 'minute', nextValue: string) => {\n const [hour, minute] = selectedTime.split(':');\n const nextTime =\n part === 'hour' ? `${nextValue}:${minute}` : `${hour}:${nextValue}`;\n setSelectedTime(nextTime);\n\n if (inputType === 'time') {\n setDisplayValue(nextTime);\n onChange?.(nextTime);\n return;\n }\n\n if (parsedDate.day === null) return;\n const month = String(parsedDate.month + 1).padStart(2, '0');\n const day = String(parsedDate.day).padStart(2, '0');\n const formatted = `${parsedDate.year}-${month}-${day}T${nextTime}`;\n setDisplayValue(formatted);\n onChange?.(formatted);\n };\n\n const handleMeridiemChange = (meridiem: 'AM' | 'PM') => {\n const [hour] = selectedTime.split(':').map(Number);\n const nextHour = (hour % 12) + (meridiem === 'PM' ? 12 : 0);\n handleTimeChange('hour', String(nextHour).padStart(2, '0'));\n };\n\n const getDaysInMonth = (month: number, year: number) => {\n return new Date(year, month + 1, 0).getDate();\n };\n\n const getFirstDayOfMonth = (month: number, year: number) => {\n return new Date(year, month, 1).getDay();\n };\n\n const renderCalendar = () => {\n const daysInMonth = getDaysInMonth(calendarMonth, calendarYear);\n const firstDay = getFirstDayOfMonth(calendarMonth, calendarYear);\n const days: (number | null)[] = [];\n\n // Add empty cells for days before the first day of the month\n for (let i = 0; i < firstDay; i++) {\n days.push(null);\n }\n\n // Add the days of the month\n for (let i = 1; i <= daysInMonth; i++) {\n days.push(i);\n }\n\n const isSelectedDay = (day: number) => {\n return (\n parsedDate.day === day &&\n parsedDate.month === calendarMonth &&\n parsedDate.year === calendarYear\n );\n };\n\n const isToday = (day: number) => {\n const today = new Date();\n return (\n day === today.getDate() &&\n calendarMonth === today.getMonth() &&\n calendarYear === today.getFullYear()\n );\n };\n\n return (\n <div\n ref={calendarRef}\n className={cn(\n 'bg-background border-border rounded-lg border shadow-lg',\n 'overflow-auto p-3',\n inputType === 'time' ? 'w-fit' : 'w-72'\n )}\n style={calendarStyle}\n role=\"dialog\"\n aria-label={\n inputType === 'month'\n ? 'Choose month'\n : inputType === 'time'\n ? 'Choose time'\n : inputType === 'datetime-local'\n ? 'Choose date and time'\n : 'Choose date'\n }\n >\n {/* Header with month/year navigation */}\n {inputType !== 'time' && (\n <div className=\"mb-3 flex items-center justify-between\">\n <button\n type=\"button\"\n onClick={() => {\n if (inputType === 'month') {\n setCalendarYear(calendarYear - 1);\n } else if (calendarMonth === 0) {\n setCalendarMonth(11);\n setCalendarYear(calendarYear - 1);\n } else {\n setCalendarMonth(calendarMonth - 1);\n }\n }}\n disabled={!canGoToPreviousCalendar}\n className=\"enabled:hover:bg-muted rounded-md p-1 transition-colors disabled:cursor-not-allowed disabled:opacity-50\"\n aria-label={\n inputType === 'month' ? 'Previous year' : 'Previous month'\n }\n >\n <ChevronLeftIcon />\n </button>\n <div className=\"flex items-center gap-2\">\n {inputType !== 'month' && (\n <select\n value={calendarMonth}\n onChange={(e) => setCalendarMonth(Number(e.target.value))}\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select month\"\n >\n {MONTH_NAMES.map((name, month) =>\n isCalendarMonthInRange(month, calendarYear) ? (\n <option key={name} value={month}>\n {name}\n </option>\n ) : null\n )}\n </select>\n )}\n <select\n value={calendarYear}\n onChange={(e) =>\n handleCalendarYearChange(Number(e.target.value))\n }\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select year\"\n >\n {calendarYears.map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n </div>\n <button\n type=\"button\"\n onClick={() => {\n if (inputType === 'month') {\n setCalendarYear(calendarYear + 1);\n } else if (calendarMonth === 11) {\n setCalendarMonth(0);\n setCalendarYear(calendarYear + 1);\n } else {\n setCalendarMonth(calendarMonth + 1);\n }\n }}\n disabled={!canGoToNextCalendar}\n className=\"hover:bg-muted rounded-md p-1 transition-colors disabled:cursor-not-allowed disabled:opacity-50\"\n aria-label={inputType === 'month' ? 'Next year' : 'Next month'}\n >\n <ChevronRightIcon />\n </button>\n </div>\n )}\n\n {inputType === 'time' ? null : inputType === 'month' ? (\n <div className=\"grid grid-cols-3 gap-1\">\n {MONTH_NAMES.map((name, month) => (\n <button\n key={name}\n type=\"button\"\n onClick={() => handleMonthSelect(month)}\n className={cn(\n 'rounded-md px-2 py-2 text-sm transition-colors',\n 'focus:ring-ring focus:ring-2 focus:outline-none',\n 'hover:bg-muted',\n parsedDate.month === month &&\n parsedDate.year === calendarYear &&\n 'bg-primary-800 hover:bg-primary-900 text-white'\n )}\n >\n {name.slice(0, 3)}\n </button>\n ))}\n </div>\n ) : (\n <>\n <div className=\"mb-1 grid grid-cols-7 gap-1\">\n {['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'].map((day) => (\n <div\n key={day}\n className=\"text-muted-foreground py-1 text-center text-xs font-medium\"\n >\n {day}\n </div>\n ))}\n </div>\n <div className=\"grid grid-cols-7 gap-1\">\n {days.map((day, index) => (\n <button\n key={index}\n type=\"button\"\n disabled={day === null || !isCalendarDateInRange(day)}\n onClick={() => day && handleDateSelect(day)}\n className={cn(\n 'h-8 w-8 rounded-md text-sm transition-colors',\n 'focus:ring-ring focus:ring-2 focus:outline-none',\n day === null && 'invisible',\n day !== null && 'hover:bg-muted',\n day !== null &&\n !isCalendarDateInRange(day) &&\n 'cursor-not-allowed opacity-50',\n isSelectedDay(day!) &&\n 'bg-primary-800 hover:bg-primary-900 text-white',\n isToday(day!) &&\n !isSelectedDay(day!) &&\n 'border-primary-800 text-primary-800 border'\n )}\n >\n {day}\n </button>\n ))}\n </div>\n </>\n )}\n\n {(inputType === 'datetime-local' || inputType === 'time') && (\n <div\n className={cn(\n 'flex items-center gap-2',\n inputType === 'datetime-local' &&\n 'border-border mt-3 border-t pt-3'\n )}\n >\n <select\n value={\n timeFormat === '12-hour'\n ? String(\n Number(selectedTime.slice(0, 2)) % 12 || 12\n ).padStart(2, '0')\n : selectedTime.slice(0, 2)\n }\n onChange={(event) => {\n const hour = Number(event.target.value);\n const isPm = Number(selectedTime.slice(0, 2)) >= 12;\n handleTimeChange(\n 'hour',\n String(\n timeFormat === '12-hour'\n ? (hour % 12) + (isPm ? 12 : 0)\n : hour\n ).padStart(2, '0')\n );\n }}\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select hour\"\n >\n {Array.from(\n { length: timeFormat === '12-hour' ? 12 : 24 },\n (_, index) => (timeFormat === '12-hour' ? index + 1 : index)\n ).map((hour) => (\n <option key={hour} value={String(hour).padStart(2, '0')}>\n {String(hour).padStart(2, '0')}\n </option>\n ))}\n </select>\n <span aria-hidden=\"true\">:</span>\n <select\n value={selectedTime.slice(3)}\n onChange={(event) =>\n handleTimeChange('minute', event.target.value)\n }\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select minute\"\n >\n {minuteOptions.map((minute) => (\n <option key={minute} value={minute}>\n {minute}\n </option>\n ))}\n </select>\n {timeFormat === '12-hour' && (\n <select\n value={Number(selectedTime.slice(0, 2)) >= 12 ? 'PM' : 'AM'}\n onChange={(event) =>\n handleMeridiemChange(event.target.value as 'AM' | 'PM')\n }\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select AM or PM\"\n >\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n )}\n </div>\n )}\n\n <div className=\"border-border mt-3 flex gap-2 border-t pt-3\">\n {inputType !== 'time' && (\n <button\n type=\"button\"\n onClick={() => {\n const today = new Date();\n setCalendarMonth(today.getMonth());\n setCalendarYear(today.getFullYear());\n if (inputType === 'month') {\n handleMonthSelect(today.getMonth());\n } else {\n handleDateSelect(today.getDate());\n }\n }}\n disabled={\n inputType === 'month'\n ? !isCalendarMonthInRange(\n new Date().getMonth(),\n new Date().getFullYear()\n )\n : !isDateInRange(new Date())\n }\n className=\"text-primary-800 flex-1 text-sm hover:underline disabled:cursor-not-allowed disabled:opacity-50\"\n >\n Today\n </button>\n )}\n {(inputType === 'datetime-local' || inputType === 'time') && (\n <button\n type=\"button\"\n onClick={() => setIsCalendarOpen(false)}\n className=\"text-primary-800 flex-1 text-sm hover:underline\"\n >\n Done\n </button>\n )}\n </div>\n </div>\n );\n };\n\n if (inputType === 'year') {\n return (\n <Input\n ref={ref}\n type={inputType === 'year' ? 'text' : inputType}\n inputMode={inputType === 'year' ? 'numeric' : undefined}\n pattern={inputType === 'year' ? '[0-9]{4}' : undefined}\n maxLength={inputType === 'year' ? 4 : undefined}\n placeholder={inputType === 'year' ? 'YYYY' : undefined}\n value={value.replace(/\\D/g, '').slice(0, 4)}\n onChange={(event) =>\n onChange?.(event.target.value.replace(/\\D/g, '').slice(0, 4))\n }\n onBlur={onBlur}\n onClick={onClick}\n hasError={hasError}\n error={error}\n className={cn(widthClasses[width], className)}\n {...props}\n />\n );\n }\n\n if (showCalendar || inputType !== 'date') {\n // Extract label/error/helper and component-specific props to handle positioning correctly\n // Filter out Input component props that aren't valid HTML input attributes\n const {\n label,\n labelVariant,\n helperText,\n hideLabel,\n required,\n requiredVariant,\n size,\n placeholder: placeholderProp,\n ...inputProps\n } = props;\n // Ensure size has a valid value (fallback to 'md' if null/undefined)\n const resolvedSize = size ?? 'md';\n const inputId = inputProps.id || generatedId;\n const errorId = `${inputId}-error`;\n const helperId = `${inputId}-helper`;\n const showError = hasError || !!localError;\n const errorMessage = error || localError;\n const isFloating = labelVariant === 'floating' && !!label && !hideLabel;\n\n const requiredMark = required && (\n <RequiredMark variant={requiredVariant} />\n );\n\n return (\n <div\n data-slot=\"input-wrapper\"\n className={cn('flex flex-col gap-1.5', widthClasses[width])}\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 <div className=\"relative\">\n <input\n data-slot=\"input\"\n ref={ref}\n id={inputId}\n type=\"text\"\n inputMode={inputType === 'date' ? 'numeric' : undefined}\n autoComplete={autoComplete}\n placeholder={\n isFloating\n ? ' '\n : (placeholderProp ??\n (inputType === 'month'\n ? 'Select month'\n : inputType === 'time'\n ? 'Select time'\n : inputType === 'datetime-local'\n ? 'Select date and time'\n : placeholder))\n }\n value={formatPickerValue(displayValue, inputType, timeFormat)}\n onChange={handleChange}\n onBlur={inputType === 'date' ? handleBlur : onBlur}\n onClick={(event) => {\n onClick?.(event);\n setIsCalendarOpen(true);\n }}\n readOnly={!isFormattedDate}\n required={required}\n aria-invalid={showError}\n aria-describedby={\n [errorMessage ? errorId : null, helperText ? helperId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n className={cn(\n inputVariants({\n size: resolvedSize,\n hasError: showError,\n labelVariant: isFloating ? 'floating' : 'stacked',\n }),\n 'pr-10',\n className\n )}\n {...inputProps}\n />\n {isFloating && (\n <label\n data-slot=\"input-label\"\n htmlFor={inputId}\n className={floatingLabelVariants({\n size: resolvedSize,\n hasError: showError,\n })}\n >\n {label}\n {requiredMark}\n </label>\n )}\n <button\n data-slot=\"date-input-trigger\"\n ref={buttonRef}\n type=\"button\"\n onClick={() => setIsCalendarOpen(!isCalendarOpen)}\n className={cn(\n 'absolute top-1/2 right-3 -translate-y-1/2',\n 'text-muted-foreground hover:text-foreground',\n 'focus:text-foreground focus:outline-none',\n 'transition-colors'\n )}\n aria-label={\n inputType === 'time' ? 'Open time picker' : 'Open calendar'\n }\n aria-expanded={isCalendarOpen}\n aria-haspopup=\"dialog\"\n >\n {inputType === 'time' ? (\n <Clock size={18} />\n ) : (\n <Calendar size={18} />\n )}\n </button>\n </div>\n {isCalendarOpen && createPortal(renderCalendar(), document.body)}\n {errorMessage && (\n <p\n id={errorId}\n data-slot=\"input-error\"\n className=\"text-sm\"\n style={{ color: '#ef4444' }}\n role=\"alert\"\n >\n {errorMessage}\n </p>\n )}\n {helperText && !errorMessage && (\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 return (\n <Input\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={autoComplete}\n placeholder={placeholder}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n hasError={hasError || !!localError}\n error={error || localError}\n className={cn(widthClasses[width], className)}\n {...props}\n />\n );\n }\n);\n\nDateInput.displayName = 'DateInput';\n\n// Simple icon components\nfunction ChevronLeftIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\nexport { DateInput };\n"]}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { useState, useRef, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
// src/hooks/useScrollSpy.ts
|
|
4
|
+
function useScrollSpy({
|
|
5
|
+
selectors,
|
|
6
|
+
ids,
|
|
7
|
+
rootMargin = "0px 0px -60% 0px",
|
|
8
|
+
threshold = 0,
|
|
9
|
+
root,
|
|
10
|
+
enabled = true
|
|
11
|
+
} = {}) {
|
|
12
|
+
const [activeId, setActiveId] = useState(null);
|
|
13
|
+
const visibleEntries = useRef(
|
|
14
|
+
/* @__PURE__ */ new Map()
|
|
15
|
+
);
|
|
16
|
+
const rootEl = root?.current ?? null;
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (!enabled) return;
|
|
19
|
+
const container = rootEl ?? document;
|
|
20
|
+
function resolveElements() {
|
|
21
|
+
let els = [];
|
|
22
|
+
if (ids && ids.length > 0) {
|
|
23
|
+
els = ids.map((id) => document.getElementById(id)).filter((el) => el !== null);
|
|
24
|
+
} else if (selectors) {
|
|
25
|
+
els = Array.from(container.querySelectorAll(selectors));
|
|
26
|
+
}
|
|
27
|
+
return els.filter((el) => el.id);
|
|
28
|
+
}
|
|
29
|
+
let intersectionObserver = null;
|
|
30
|
+
let mutationObserver = null;
|
|
31
|
+
function startObserving() {
|
|
32
|
+
const elements = resolveElements();
|
|
33
|
+
if (elements.length === 0) return false;
|
|
34
|
+
intersectionObserver = new IntersectionObserver(
|
|
35
|
+
(entries2) => {
|
|
36
|
+
for (const entry of entries2) {
|
|
37
|
+
if (entry.isIntersecting) {
|
|
38
|
+
visibleEntries.current.set(entry.target.id, entry);
|
|
39
|
+
} else {
|
|
40
|
+
visibleEntries.current.delete(entry.target.id);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (visibleEntries.current.size > 0) {
|
|
44
|
+
let topmost = null;
|
|
45
|
+
let topmostTop = Infinity;
|
|
46
|
+
for (const [id, entry] of visibleEntries.current) {
|
|
47
|
+
const top = entry.boundingClientRect.top;
|
|
48
|
+
if (top < topmostTop) {
|
|
49
|
+
topmostTop = top;
|
|
50
|
+
topmost = id;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (topmost) {
|
|
54
|
+
setActiveId(topmost);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
root: rootEl,
|
|
60
|
+
rootMargin,
|
|
61
|
+
threshold
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
for (const el of elements) {
|
|
65
|
+
intersectionObserver.observe(el);
|
|
66
|
+
}
|
|
67
|
+
mutationObserver?.disconnect();
|
|
68
|
+
mutationObserver = null;
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
if (!startObserving()) {
|
|
72
|
+
const watchRoot = rootEl ?? document.body;
|
|
73
|
+
mutationObserver = new MutationObserver(() => {
|
|
74
|
+
startObserving();
|
|
75
|
+
});
|
|
76
|
+
mutationObserver.observe(watchRoot, { childList: true, subtree: true });
|
|
77
|
+
}
|
|
78
|
+
const entries = visibleEntries.current;
|
|
79
|
+
return () => {
|
|
80
|
+
mutationObserver?.disconnect();
|
|
81
|
+
intersectionObserver?.disconnect();
|
|
82
|
+
entries.clear();
|
|
83
|
+
};
|
|
84
|
+
}, [selectors, ids, rootMargin, threshold, rootEl, enabled]);
|
|
85
|
+
return { activeId };
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export { useScrollSpy };
|
|
89
|
+
//# sourceMappingURL=chunk-WBGUYSWY.js.map
|
|
90
|
+
//# sourceMappingURL=chunk-WBGUYSWY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useScrollSpy.ts"],"names":["entries"],"mappings":"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","file":"chunk-WBGUYSWY.js","sourcesContent":["import { useEffect, useState, useRef, type RefObject } from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseScrollSpyOptions {\n /** CSS selector for the elements to observe (e.g. 'h2, h3, h4') */\n selectors?: string;\n /** Explicit list of element IDs to observe (alternative to selectors) */\n ids?: string[];\n /** IntersectionObserver root margin (default: '0px 0px -60% 0px') */\n rootMargin?: string;\n /** IntersectionObserver threshold (default: 0) */\n threshold?: number | number[];\n /** Scroll container element ref. Defaults to document viewport. */\n root?: RefObject<HTMLElement | null>;\n /** Whether the hook is active (default: true) */\n enabled?: boolean;\n}\n\nexport interface UseScrollSpyReturn {\n /** The ID of the currently active (in-view) element */\n activeId: string | null;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\n/**\n * Tracks which section is currently in the viewport using IntersectionObserver.\n * Pairs naturally with `TableOfContents` to highlight the active heading.\n *\n * @example\n * ```tsx\n * function DocsPage() {\n * const { activeId } = useScrollSpy({ selectors: 'h2, h3' });\n * return (\n * <aside>\n * <TableOfContents activeId={activeId} />\n * </aside>\n * );\n * }\n * ```\n */\nexport function useScrollSpy({\n selectors,\n ids,\n rootMargin = '0px 0px -60% 0px',\n threshold = 0,\n root,\n enabled = true,\n}: UseScrollSpyOptions = {}): UseScrollSpyReturn {\n const [activeId, setActiveId] = useState<string | null>(null);\n const visibleEntries = useRef<Map<string, IntersectionObserverEntry>>(\n new Map()\n );\n\n // Track root.current so the effect re-runs when the ref attaches\n const rootEl = root?.current ?? null;\n\n useEffect(() => {\n if (!enabled) return;\n\n const container = rootEl ?? document;\n\n // Resolve target elements from the DOM\n function resolveElements(): Element[] {\n let els: Element[] = [];\n if (ids && ids.length > 0) {\n els = ids\n .map((id) => document.getElementById(id))\n .filter((el): el is HTMLElement => el !== null);\n } else if (selectors) {\n els = Array.from(container.querySelectorAll(selectors));\n }\n return els.filter((el) => el.id);\n }\n\n let intersectionObserver: IntersectionObserver | null = null;\n let mutationObserver: MutationObserver | null = null;\n\n function startObserving(): boolean {\n const elements = resolveElements();\n if (elements.length === 0) return false;\n\n intersectionObserver = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n visibleEntries.current.set(entry.target.id, entry);\n } else {\n visibleEntries.current.delete(entry.target.id);\n }\n }\n\n // Pick the topmost visible heading (by DOM order)\n if (visibleEntries.current.size > 0) {\n let topmost: string | null = null;\n let topmostTop = Infinity;\n\n for (const [id, entry] of visibleEntries.current) {\n const top = entry.boundingClientRect.top;\n if (top < topmostTop) {\n topmostTop = top;\n topmost = id;\n }\n }\n\n if (topmost) {\n setActiveId(topmost);\n }\n }\n },\n {\n root: rootEl,\n rootMargin,\n threshold,\n }\n );\n\n for (const el of elements) {\n intersectionObserver.observe(el);\n }\n\n // Elements found — stop watching for new DOM nodes\n mutationObserver?.disconnect();\n mutationObserver = null;\n return true;\n }\n\n // If target elements don't exist yet (e.g. headings mount after ToC),\n // watch for DOM changes and retry until they appear.\n if (!startObserving()) {\n const watchRoot = rootEl ?? document.body;\n mutationObserver = new MutationObserver(() => {\n startObserving();\n });\n mutationObserver.observe(watchRoot, { childList: true, subtree: true });\n }\n\n const entries = visibleEntries.current;\n return () => {\n mutationObserver?.disconnect();\n intersectionObserver?.disconnect();\n entries.clear();\n };\n }, [selectors, ids, rootMargin, threshold, rootEl, enabled]);\n\n return { activeId };\n}\n"]}
|
|
@@ -343,5 +343,5 @@ exports.CodeBlock = CodeBlock;
|
|
|
343
343
|
exports.MarkdownRenderer = MarkdownRenderer;
|
|
344
344
|
exports.highlightCode = highlightCode;
|
|
345
345
|
exports.useMarkdown = useMarkdown;
|
|
346
|
-
//# sourceMappingURL=chunk-
|
|
347
|
-
//# sourceMappingURL=chunk-
|
|
346
|
+
//# sourceMappingURL=chunk-WIYQI35R.cjs.map
|
|
347
|
+
//# sourceMappingURL=chunk-WIYQI35R.cjs.map
|