@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,3 +1,4 @@
|
|
|
1
|
+
import { floatingGroupLabelVariants, floatingGroupVariants } from './chunk-3IMM2PM4.js';
|
|
1
2
|
import { cn } from './chunk-TQONQSJO.js';
|
|
2
3
|
import * as React from 'react';
|
|
3
4
|
import { cva } from 'class-variance-authority';
|
|
@@ -145,6 +146,7 @@ var Checkbox = React.forwardRef(
|
|
|
145
146
|
Checkbox.displayName = "Checkbox";
|
|
146
147
|
function CheckboxGroup({
|
|
147
148
|
label,
|
|
149
|
+
labelVariant = "stacked",
|
|
148
150
|
description,
|
|
149
151
|
error,
|
|
150
152
|
orientation = "vertical",
|
|
@@ -154,6 +156,19 @@ function CheckboxGroup({
|
|
|
154
156
|
const groupId = React.useId();
|
|
155
157
|
const descriptionId = `${groupId}-description`;
|
|
156
158
|
const errorId = `${groupId}-error`;
|
|
159
|
+
const isFloating = labelVariant === "floating" && !!label;
|
|
160
|
+
const itemsElement = /* @__PURE__ */ jsx(
|
|
161
|
+
"div",
|
|
162
|
+
{
|
|
163
|
+
role: "group",
|
|
164
|
+
"data-slot": "checkbox-group-items",
|
|
165
|
+
className: cn(
|
|
166
|
+
"flex gap-4",
|
|
167
|
+
orientation === "vertical" && "flex-col gap-2"
|
|
168
|
+
),
|
|
169
|
+
children
|
|
170
|
+
}
|
|
171
|
+
);
|
|
157
172
|
return /* @__PURE__ */ jsxs(
|
|
158
173
|
"fieldset",
|
|
159
174
|
{
|
|
@@ -165,31 +180,47 @@ function CheckboxGroup({
|
|
|
165
180
|
"legend",
|
|
166
181
|
{
|
|
167
182
|
"data-slot": "checkbox-group-legend",
|
|
168
|
-
className:
|
|
183
|
+
className: cn(
|
|
184
|
+
// Legends are excluded from the fieldset's flex layout; explicit
|
|
185
|
+
// margin matches the stacked Input label's 6px gap.
|
|
186
|
+
"text-foreground mb-1.5 text-sm font-medium",
|
|
187
|
+
isFloating && "sr-only"
|
|
188
|
+
),
|
|
169
189
|
children: label
|
|
170
190
|
}
|
|
171
191
|
),
|
|
192
|
+
isFloating ? /* @__PURE__ */ jsxs(
|
|
193
|
+
"div",
|
|
194
|
+
{
|
|
195
|
+
"data-slot": "checkbox-group-field",
|
|
196
|
+
className: floatingGroupVariants({ hasError: !!error }),
|
|
197
|
+
children: [
|
|
198
|
+
/* @__PURE__ */ jsx(
|
|
199
|
+
"span",
|
|
200
|
+
{
|
|
201
|
+
"aria-hidden": "true",
|
|
202
|
+
"data-slot": "checkbox-group-floating-label",
|
|
203
|
+
className: floatingGroupLabelVariants({ hasError: !!error }),
|
|
204
|
+
children: label
|
|
205
|
+
}
|
|
206
|
+
),
|
|
207
|
+
itemsElement
|
|
208
|
+
]
|
|
209
|
+
}
|
|
210
|
+
) : null,
|
|
172
211
|
description && /* @__PURE__ */ jsx(
|
|
173
212
|
"p",
|
|
174
213
|
{
|
|
175
214
|
id: descriptionId,
|
|
176
215
|
"data-slot": "checkbox-group-description",
|
|
177
|
-
className: "text-muted-foreground mb-3 text-xs",
|
|
178
|
-
children: description
|
|
179
|
-
}
|
|
180
|
-
),
|
|
181
|
-
/* @__PURE__ */ jsx(
|
|
182
|
-
"div",
|
|
183
|
-
{
|
|
184
|
-
role: "group",
|
|
185
|
-
"data-slot": "checkbox-group-items",
|
|
186
216
|
className: cn(
|
|
187
|
-
"
|
|
188
|
-
|
|
217
|
+
"text-muted-foreground text-xs",
|
|
218
|
+
isFloating ? "mt-1" : "mb-3"
|
|
189
219
|
),
|
|
190
|
-
children
|
|
220
|
+
children: description
|
|
191
221
|
}
|
|
192
222
|
),
|
|
223
|
+
!isFloating && itemsElement,
|
|
193
224
|
error && /* @__PURE__ */ jsx(
|
|
194
225
|
"p",
|
|
195
226
|
{
|
|
@@ -257,5 +288,5 @@ function MinusIcon({ size, className }) {
|
|
|
257
288
|
}
|
|
258
289
|
|
|
259
290
|
export { Checkbox, CheckboxGroup, checkboxVariants };
|
|
260
|
-
//# sourceMappingURL=chunk-
|
|
261
|
-
//# sourceMappingURL=chunk-
|
|
291
|
+
//# sourceMappingURL=chunk-753Z3NXL.js.map
|
|
292
|
+
//# sourceMappingURL=chunk-753Z3NXL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":";;;;;;AAQA,IAAM,gBAAA,GAAmB,GAAA;AAAA,EACvB;AAAA,IACE,0BAAA;AAAA,IACA,+BAAA;AAAA,IACA,eAAA;AAAA,IACA,6BAAA;AAAA,IACA,gBAAA;AAAA,IACA,qGAAA;AAAA,IACA,iDAAA;AAAA,IACA,mDAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;AA4BA,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EACrB,CACE;AAAA,IACE,SAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA,GAAgB,KAAA;AAAA,IAChB,KAAA;AAAA,IACA,aAAA,GAAgB,OAAA;AAAA,IAChB,EAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,WAAA,GAAoB,aAAyB,IAAI,CAAA;AACvD,IAAA,MAAM,cAAoB,KAAA,CAAA,KAAA,EAAM;AAChC,IAAA,MAAM,aAAa,EAAA,IAAM,WAAA;AACzB,IAAA,MAAM,aAAA,GAAgB,GAAG,UAAU,CAAA,YAAA,CAAA;AACnC,IAAA,MAAM,OAAA,GAAU,GAAG,UAAU,CAAA,MAAA,CAAA;AAG7B,IAAM,gBAAU,MAAM;AACpB,MAAA,MAAM,WAAW,WAAA,CAAY,OAAA;AAC7B,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS,aAAA,GAAgB,aAAA;AAAA,MAC3B;AAAA,IACF,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAGlB,IAAM,KAAA,CAAA,mBAAA,CAAoB,GAAA,EAAK,MAAM,WAAA,CAAY,OAAQ,CAAA;AAEzD,IAAA,MAAM,eAAA,mBACJ,IAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,oBAAA;AAAA,QACV,SAAA,EAAU,kDAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,WAAA;AAAA,cACL,WAAA,EAAU,UAAA;AAAA,cACV,EAAA,EAAI,UAAA;AAAA,cACJ,IAAA,EAAK,UAAA;AAAA,cACL,QAAA;AAAA,cACA,kBAAA,EACE,CAAC,WAAA,GAAc,aAAA,GAAgB,MAAM,KAAA,GAAQ,OAAA,GAAU,IAAI,CAAA,CACxD,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAAA,cAElB,cAAA,EAAc,CAAC,CAAC,KAAA;AAAA,cAChB,SAAA,EAAW,GAAG,MAAA,EAAQ,gBAAA,CAAiB,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,cAC1D,GAAG;AAAA;AAAA,WACN;AAAA,0BAEA,GAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,IAAA;AAAA,cACA,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BAEA,GAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,IAAA;AAAA,cACA,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AAAA,KACF;AAGF,IAAA,MAAM,YAAA,GAAe,KAAA,oBACnB,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,UAAA;AAAA,UACT,WAAA,EAAU,gBAAA;AAAA,UACV,SAAA,EAAW,EAAA;AAAA,YACT,gEAAA;AAAA,YACA,QAAA,IAAY;AAAA,WACd;AAAA,UAEC,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,MACC,WAAA,oBACC,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI,aAAA;AAAA,UACJ,WAAA,EAAU,sBAAA;AAAA,UACV,SAAA,EAAU,sCAAA;AAAA,UAET,QAAA,EAAA;AAAA;AAAA;AACH,KAAA,EAEJ,CAAA;AAGF,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,kBAAA,EAAmB,WAAU,qBAAA,EAC1C,QAAA,EAAA;AAAA,sBAAA,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAU,cAAA;AAAA,UACV,SAAA,EAAW,EAAA;AAAA,YACT,YAAA;AAAA,YACA,cAAc,aAAA,GAAgB,cAAA;AAAA,YAC9B,kBAAkB,MAAA,IAAU;AAAA,WAC9B;AAAA,UAEC,QAAA,EAAA;AAAA,YAAA,eAAA;AAAA,YACA;AAAA;AAAA;AAAA,OACH;AAAA,MACC,KAAA,oBACC,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI,OAAA;AAAA,UACJ,WAAA,EAAU,gBAAA;AAAA,UACV,SAAA,EAAU,wDAAA;AAAA,UACV,IAAA,EAAK,OAAA;AAAA,UAEJ,QAAA,EAAA;AAAA;AAAA;AACH,KAAA,EAEJ,CAAA;AAAA,EAEJ;AACF;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;AAyCvB,SAAS,aAAA,CAAc;AAAA,EACrB,KAAA;AAAA,EACA,YAAA,GAAe,SAAA;AAAA,EACf,WAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA,GAAc,UAAA;AAAA,EACd,QAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,UAAgB,KAAA,CAAA,KAAA,EAAM;AAC5B,EAAA,MAAM,aAAA,GAAgB,GAAG,OAAO,CAAA,YAAA,CAAA;AAChC,EAAA,MAAM,OAAA,GAAU,GAAG,OAAO,CAAA,MAAA,CAAA;AAE1B,EAAA,MAAM,UAAA,GAAa,YAAA,KAAiB,UAAA,IAAc,CAAC,CAAC,KAAA;AAEpD,EAAA,MAAM,YAAA,mBACJ,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,YAAA;AAAA,QACA,gBAAgB,UAAA,IAAc;AAAA,OAChC;AAAA,MAEC;AAAA;AAAA,GACH;AAGF,EAAA,uBACE,IAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,SAAS,CAAA;AAAA,MACxC,kBAAA,EACE,CAAC,WAAA,GAAc,aAAA,GAAgB,MAAM,KAAA,GAAQ,OAAA,GAAU,IAAI,CAAA,CACxD,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAAA,MAGjB,QAAA,EAAA;AAAA,QAAA,KAAA,oBACC,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,uBAAA;AAAA,YACV,SAAA,EAAW,EAAA;AAAA;AAAA;AAAA,cAGT,4CAAA;AAAA,cACA,UAAA,IAAc;AAAA,aAChB;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAED,UAAA,mBACC,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,sBAAA;AAAA,YACV,WAAW,qBAAA,CAAsB,EAAE,UAAU,CAAC,CAAC,OAAO,CAAA;AAAA,YAEtD,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,aAAA,EAAY,MAAA;AAAA,kBACZ,WAAA,EAAU,+BAAA;AAAA,kBACV,WAAW,0BAAA,CAA2B,EAAE,UAAU,CAAC,CAAC,OAAO,CAAA;AAAA,kBAE1D,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,cACC;AAAA;AAAA;AAAA,SACH,GACE,IAAA;AAAA,QACH,WAAA,oBACC,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,aAAA;AAAA,YACJ,WAAA,EAAU,4BAAA;AAAA,YACV,SAAA,EAAW,EAAA;AAAA,cACT,+BAAA;AAAA,cACA,aAAa,MAAA,GAAS;AAAA,aACxB;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAED,CAAC,UAAA,IAAc,YAAA;AAAA,QACf,KAAA,oBACC,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,OAAA;AAAA,YACJ,WAAA,EAAU,sBAAA;AAAA,YACV,SAAA,EAAU,+BAAA;AAAA,YACV,IAAA,EAAK,OAAA;AAAA,YAEJ,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;AAW5B,SAAS,SAAA,CAAU,EAAE,IAAA,EAAM,SAAA,EAAU,EAAmB;AACtD,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,EAAA,EAAI,EAAA;AAAA,IACJ,EAAA,EAAI,EAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AACA,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,IAAQ,IAAI,CAAA;AAErC,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,4BAAA;AAAA,MACN,KAAA,EAAO,QAAA;AAAA,MACP,MAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MACf,SAAA;AAAA,MACA,aAAA,EAAY,MAAA;AAAA,MAEZ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iBAAA,EAAkB;AAAA;AAAA,GAC5B;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,IAAA,EAAM,SAAA,EAAU,EAAmB;AACtD,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,EAAA,EAAI,EAAA;AAAA,IACJ,EAAA,EAAI,EAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AACA,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,IAAQ,IAAI,CAAA;AAErC,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,4BAAA;AAAA,MACN,KAAA,EAAO,QAAA;AAAA,MACP,MAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MACf,SAAA;AAAA,MACA,aAAA,EAAY,MAAA;AAAA,MAEZ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW;AAAA;AAAA,GACrB;AAEJ","file":"chunk-753Z3NXL.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport {\n floatingGroupVariants,\n floatingGroupLabelVariants,\n} from '../Input/Input';\n\nconst checkboxVariants = cva(\n [\n 'shrink-0 appearance-none',\n 'border-2 border-input rounded',\n 'bg-background',\n 'transition-all duration-150',\n 'cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'checked:bg-primary-800 checked:border-primary-500',\n 'indeterminate:bg-primary-800 indeterminate:border-primary-500',\n ],\n {\n variants: {\n size: {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport interface CheckboxProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>,\n VariantProps<typeof checkboxVariants> {\n /** Label for the checkbox */\n label?: string;\n /** Description text below the label */\n description?: string;\n /** Indeterminate state (neither checked nor unchecked) */\n indeterminate?: boolean;\n /** Error message */\n error?: string;\n /** Position of the label */\n labelPosition?: 'left' | 'right';\n}\n\n/**\n * An accessible checkbox component with support for indeterminate state.\n *\n * @example\n * ```tsx\n * <Checkbox label=\"Accept terms and conditions\" />\n * <Checkbox label=\"Newsletter\" description=\"Receive updates about new features\" />\n * <Checkbox indeterminate label=\"Select all\" />\n * ```\n */\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n size,\n label,\n description,\n indeterminate = false,\n error,\n labelPosition = 'right',\n id,\n disabled,\n ...props\n },\n ref\n ) => {\n const internalRef = React.useRef<HTMLInputElement>(null);\n const generatedId = React.useId();\n const checkboxId = id || generatedId;\n const descriptionId = `${checkboxId}-description`;\n const errorId = `${checkboxId}-error`;\n\n // Handle indeterminate state\n React.useEffect(() => {\n const checkbox = internalRef.current;\n if (checkbox) {\n checkbox.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n // Combine refs\n React.useImperativeHandle(ref, () => internalRef.current!);\n\n const checkboxElement = (\n <span\n data-slot=\"checkbox-indicator\"\n className=\"relative inline-flex items-center justify-center\"\n >\n <input\n ref={internalRef}\n data-slot=\"checkbox\"\n id={checkboxId}\n type=\"checkbox\"\n disabled={disabled}\n aria-describedby={\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n aria-invalid={!!error}\n className={cn('peer', checkboxVariants({ size }), className)}\n {...props}\n />\n {/* Custom check icon overlay */}\n <CheckIcon\n size={size}\n className=\"pointer-events-none absolute text-white opacity-0 transition-opacity peer-checked:opacity-100\"\n />\n {/* Custom indeterminate icon overlay */}\n <MinusIcon\n size={size}\n className=\"pointer-events-none absolute text-white opacity-0 transition-opacity peer-indeterminate:opacity-100\"\n />\n </span>\n );\n\n const labelElement = label && (\n <div className=\"flex flex-col\">\n <label\n htmlFor={checkboxId}\n data-slot=\"checkbox-label\"\n className={cn(\n 'text-foreground cursor-pointer text-sm font-medium select-none',\n disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n {label}\n </label>\n {description && (\n <p\n id={descriptionId}\n data-slot=\"checkbox-description\"\n className=\"text-muted-foreground mt-0.5 text-xs\"\n >\n {description}\n </p>\n )}\n </div>\n );\n\n return (\n <div data-slot=\"checkbox-wrapper\" className=\"flex flex-col gap-1\">\n <div\n data-slot=\"checkbox-row\"\n className={cn(\n 'flex gap-2',\n description ? 'items-start' : 'items-center',\n labelPosition === 'left' && 'flex-row-reverse'\n )}\n >\n {checkboxElement}\n {labelElement}\n </div>\n {error && (\n <p\n id={errorId}\n data-slot=\"checkbox-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n\n// ============================================================================\n// Checkbox Group\n// ============================================================================\n\nexport interface CheckboxGroupProps {\n /** Group label */\n label?: string;\n /**\n * How the group label is rendered.\n * - `stacked` (default): label above the options.\n * - `floating`: renders the group as a bordered field matching floating\n * inputs, with the label fixed in the floated position so mixed forms\n * stay vertically aligned.\n */\n labelVariant?: 'stacked' | 'floating';\n /** Description for the group */\n description?: string;\n /** Error message for the group */\n error?: string;\n /** Orientation of checkboxes */\n orientation?: 'horizontal' | 'vertical';\n /** Children checkboxes */\n children: React.ReactNode;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A container for grouping related checkboxes.\n *\n * @example\n * ```tsx\n * <CheckboxGroup label=\"Interests\" orientation=\"vertical\">\n * <Checkbox label=\"Sports\" />\n * <Checkbox label=\"Music\" />\n * <Checkbox label=\"Travel\" />\n * </CheckboxGroup>\n * ```\n */\nfunction CheckboxGroup({\n label,\n labelVariant = 'stacked',\n description,\n error,\n orientation = 'vertical',\n children,\n className,\n}: CheckboxGroupProps) {\n const groupId = React.useId();\n const descriptionId = `${groupId}-description`;\n const errorId = `${groupId}-error`;\n\n const isFloating = labelVariant === 'floating' && !!label;\n\n const itemsElement = (\n <div\n role=\"group\"\n data-slot=\"checkbox-group-items\"\n className={cn(\n 'flex gap-4',\n orientation === 'vertical' && 'flex-col gap-2'\n )}\n >\n {children}\n </div>\n );\n\n return (\n <fieldset\n data-slot=\"checkbox-group\"\n className={cn('flex flex-col', className)}\n aria-describedby={\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n >\n {label && (\n <legend\n data-slot=\"checkbox-group-legend\"\n className={cn(\n // Legends are excluded from the fieldset's flex layout; explicit\n // margin matches the stacked Input label's 6px gap.\n 'text-foreground mb-1.5 text-sm font-medium',\n isFloating && 'sr-only'\n )}\n >\n {label}\n </legend>\n )}\n {isFloating ? (\n <div\n data-slot=\"checkbox-group-field\"\n className={floatingGroupVariants({ hasError: !!error })}\n >\n <span\n aria-hidden=\"true\"\n data-slot=\"checkbox-group-floating-label\"\n className={floatingGroupLabelVariants({ hasError: !!error })}\n >\n {label}\n </span>\n {itemsElement}\n </div>\n ) : null}\n {description && (\n <p\n id={descriptionId}\n data-slot=\"checkbox-group-description\"\n className={cn(\n 'text-muted-foreground text-xs',\n isFloating ? 'mt-1' : 'mb-3'\n )}\n >\n {description}\n </p>\n )}\n {!isFloating && itemsElement}\n {error && (\n <p\n id={errorId}\n data-slot=\"checkbox-group-error\"\n className=\"text-destructive mt-2 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n </fieldset>\n );\n}\n\nCheckboxGroup.displayName = 'CheckboxGroup';\n\n// ============================================================================\n// Check Icon\n// ============================================================================\n\ninterface CheckIconProps {\n size?: 'sm' | 'md' | 'lg' | null;\n className?: string;\n}\n\nfunction CheckIcon({ size, className }: CheckIconProps) {\n const sizeMap = {\n sm: 10,\n md: 12,\n lg: 14,\n };\n const iconSize = sizeMap[size || 'md'];\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nfunction MinusIcon({ size, className }: CheckIconProps) {\n const sizeMap = {\n sm: 10,\n md: 12,\n lg: 14,\n };\n const iconSize = sizeMap[size || 'md'];\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M5 12h14\" />\n </svg>\n );\n}\n\nexport { Checkbox, CheckboxGroup, checkboxVariants };\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var chunkZ5S5JEJD_cjs = require('./chunk-Z5S5JEJD.cjs');
|
|
3
4
|
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
4
5
|
var React = require('react');
|
|
5
6
|
var classVarianceAuthority = require('class-variance-authority');
|
|
@@ -167,6 +168,7 @@ var Checkbox = React__namespace.forwardRef(
|
|
|
167
168
|
Checkbox.displayName = "Checkbox";
|
|
168
169
|
function CheckboxGroup({
|
|
169
170
|
label,
|
|
171
|
+
labelVariant = "stacked",
|
|
170
172
|
description,
|
|
171
173
|
error,
|
|
172
174
|
orientation = "vertical",
|
|
@@ -176,6 +178,19 @@ function CheckboxGroup({
|
|
|
176
178
|
const groupId = React__namespace.useId();
|
|
177
179
|
const descriptionId = `${groupId}-description`;
|
|
178
180
|
const errorId = `${groupId}-error`;
|
|
181
|
+
const isFloating = labelVariant === "floating" && !!label;
|
|
182
|
+
const itemsElement = /* @__PURE__ */ jsxRuntime.jsx(
|
|
183
|
+
"div",
|
|
184
|
+
{
|
|
185
|
+
role: "group",
|
|
186
|
+
"data-slot": "checkbox-group-items",
|
|
187
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
188
|
+
"flex gap-4",
|
|
189
|
+
orientation === "vertical" && "flex-col gap-2"
|
|
190
|
+
),
|
|
191
|
+
children
|
|
192
|
+
}
|
|
193
|
+
);
|
|
179
194
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
180
195
|
"fieldset",
|
|
181
196
|
{
|
|
@@ -187,31 +202,47 @@ function CheckboxGroup({
|
|
|
187
202
|
"legend",
|
|
188
203
|
{
|
|
189
204
|
"data-slot": "checkbox-group-legend",
|
|
190
|
-
className:
|
|
205
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
206
|
+
// Legends are excluded from the fieldset's flex layout; explicit
|
|
207
|
+
// margin matches the stacked Input label's 6px gap.
|
|
208
|
+
"text-foreground mb-1.5 text-sm font-medium",
|
|
209
|
+
isFloating && "sr-only"
|
|
210
|
+
),
|
|
191
211
|
children: label
|
|
192
212
|
}
|
|
193
213
|
),
|
|
214
|
+
isFloating ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
215
|
+
"div",
|
|
216
|
+
{
|
|
217
|
+
"data-slot": "checkbox-group-field",
|
|
218
|
+
className: chunkZ5S5JEJD_cjs.floatingGroupVariants({ hasError: !!error }),
|
|
219
|
+
children: [
|
|
220
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
221
|
+
"span",
|
|
222
|
+
{
|
|
223
|
+
"aria-hidden": "true",
|
|
224
|
+
"data-slot": "checkbox-group-floating-label",
|
|
225
|
+
className: chunkZ5S5JEJD_cjs.floatingGroupLabelVariants({ hasError: !!error }),
|
|
226
|
+
children: label
|
|
227
|
+
}
|
|
228
|
+
),
|
|
229
|
+
itemsElement
|
|
230
|
+
]
|
|
231
|
+
}
|
|
232
|
+
) : null,
|
|
194
233
|
description && /* @__PURE__ */ jsxRuntime.jsx(
|
|
195
234
|
"p",
|
|
196
235
|
{
|
|
197
236
|
id: descriptionId,
|
|
198
237
|
"data-slot": "checkbox-group-description",
|
|
199
|
-
className: "text-muted-foreground mb-3 text-xs",
|
|
200
|
-
children: description
|
|
201
|
-
}
|
|
202
|
-
),
|
|
203
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
204
|
-
"div",
|
|
205
|
-
{
|
|
206
|
-
role: "group",
|
|
207
|
-
"data-slot": "checkbox-group-items",
|
|
208
238
|
className: chunkS5RVSXDV_cjs.cn(
|
|
209
|
-
"
|
|
210
|
-
|
|
239
|
+
"text-muted-foreground text-xs",
|
|
240
|
+
isFloating ? "mt-1" : "mb-3"
|
|
211
241
|
),
|
|
212
|
-
children
|
|
242
|
+
children: description
|
|
213
243
|
}
|
|
214
244
|
),
|
|
245
|
+
!isFloating && itemsElement,
|
|
215
246
|
error && /* @__PURE__ */ jsxRuntime.jsx(
|
|
216
247
|
"p",
|
|
217
248
|
{
|
|
@@ -281,5 +312,5 @@ function MinusIcon({ size, className }) {
|
|
|
281
312
|
exports.Checkbox = Checkbox;
|
|
282
313
|
exports.CheckboxGroup = CheckboxGroup;
|
|
283
314
|
exports.checkboxVariants = checkboxVariants;
|
|
284
|
-
//# sourceMappingURL=chunk-
|
|
285
|
-
//# sourceMappingURL=chunk-
|
|
315
|
+
//# sourceMappingURL=chunk-7AECNMYV.cjs.map
|
|
316
|
+
//# sourceMappingURL=chunk-7AECNMYV.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Checkbox/Checkbox.tsx"],"names":["cva","React","jsxs","jsx","cn","floatingGroupVariants","floatingGroupLabelVariants"],"mappings":"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","file":"chunk-7AECNMYV.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport {\n floatingGroupVariants,\n floatingGroupLabelVariants,\n} from '../Input/Input';\n\nconst checkboxVariants = cva(\n [\n 'shrink-0 appearance-none',\n 'border-2 border-input rounded',\n 'bg-background',\n 'transition-all duration-150',\n 'cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'checked:bg-primary-800 checked:border-primary-500',\n 'indeterminate:bg-primary-800 indeterminate:border-primary-500',\n ],\n {\n variants: {\n size: {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport interface CheckboxProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>,\n VariantProps<typeof checkboxVariants> {\n /** Label for the checkbox */\n label?: string;\n /** Description text below the label */\n description?: string;\n /** Indeterminate state (neither checked nor unchecked) */\n indeterminate?: boolean;\n /** Error message */\n error?: string;\n /** Position of the label */\n labelPosition?: 'left' | 'right';\n}\n\n/**\n * An accessible checkbox component with support for indeterminate state.\n *\n * @example\n * ```tsx\n * <Checkbox label=\"Accept terms and conditions\" />\n * <Checkbox label=\"Newsletter\" description=\"Receive updates about new features\" />\n * <Checkbox indeterminate label=\"Select all\" />\n * ```\n */\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n size,\n label,\n description,\n indeterminate = false,\n error,\n labelPosition = 'right',\n id,\n disabled,\n ...props\n },\n ref\n ) => {\n const internalRef = React.useRef<HTMLInputElement>(null);\n const generatedId = React.useId();\n const checkboxId = id || generatedId;\n const descriptionId = `${checkboxId}-description`;\n const errorId = `${checkboxId}-error`;\n\n // Handle indeterminate state\n React.useEffect(() => {\n const checkbox = internalRef.current;\n if (checkbox) {\n checkbox.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n // Combine refs\n React.useImperativeHandle(ref, () => internalRef.current!);\n\n const checkboxElement = (\n <span\n data-slot=\"checkbox-indicator\"\n className=\"relative inline-flex items-center justify-center\"\n >\n <input\n ref={internalRef}\n data-slot=\"checkbox\"\n id={checkboxId}\n type=\"checkbox\"\n disabled={disabled}\n aria-describedby={\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n aria-invalid={!!error}\n className={cn('peer', checkboxVariants({ size }), className)}\n {...props}\n />\n {/* Custom check icon overlay */}\n <CheckIcon\n size={size}\n className=\"pointer-events-none absolute text-white opacity-0 transition-opacity peer-checked:opacity-100\"\n />\n {/* Custom indeterminate icon overlay */}\n <MinusIcon\n size={size}\n className=\"pointer-events-none absolute text-white opacity-0 transition-opacity peer-indeterminate:opacity-100\"\n />\n </span>\n );\n\n const labelElement = label && (\n <div className=\"flex flex-col\">\n <label\n htmlFor={checkboxId}\n data-slot=\"checkbox-label\"\n className={cn(\n 'text-foreground cursor-pointer text-sm font-medium select-none',\n disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n {label}\n </label>\n {description && (\n <p\n id={descriptionId}\n data-slot=\"checkbox-description\"\n className=\"text-muted-foreground mt-0.5 text-xs\"\n >\n {description}\n </p>\n )}\n </div>\n );\n\n return (\n <div data-slot=\"checkbox-wrapper\" className=\"flex flex-col gap-1\">\n <div\n data-slot=\"checkbox-row\"\n className={cn(\n 'flex gap-2',\n description ? 'items-start' : 'items-center',\n labelPosition === 'left' && 'flex-row-reverse'\n )}\n >\n {checkboxElement}\n {labelElement}\n </div>\n {error && (\n <p\n id={errorId}\n data-slot=\"checkbox-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n\n// ============================================================================\n// Checkbox Group\n// ============================================================================\n\nexport interface CheckboxGroupProps {\n /** Group label */\n label?: string;\n /**\n * How the group label is rendered.\n * - `stacked` (default): label above the options.\n * - `floating`: renders the group as a bordered field matching floating\n * inputs, with the label fixed in the floated position so mixed forms\n * stay vertically aligned.\n */\n labelVariant?: 'stacked' | 'floating';\n /** Description for the group */\n description?: string;\n /** Error message for the group */\n error?: string;\n /** Orientation of checkboxes */\n orientation?: 'horizontal' | 'vertical';\n /** Children checkboxes */\n children: React.ReactNode;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A container for grouping related checkboxes.\n *\n * @example\n * ```tsx\n * <CheckboxGroup label=\"Interests\" orientation=\"vertical\">\n * <Checkbox label=\"Sports\" />\n * <Checkbox label=\"Music\" />\n * <Checkbox label=\"Travel\" />\n * </CheckboxGroup>\n * ```\n */\nfunction CheckboxGroup({\n label,\n labelVariant = 'stacked',\n description,\n error,\n orientation = 'vertical',\n children,\n className,\n}: CheckboxGroupProps) {\n const groupId = React.useId();\n const descriptionId = `${groupId}-description`;\n const errorId = `${groupId}-error`;\n\n const isFloating = labelVariant === 'floating' && !!label;\n\n const itemsElement = (\n <div\n role=\"group\"\n data-slot=\"checkbox-group-items\"\n className={cn(\n 'flex gap-4',\n orientation === 'vertical' && 'flex-col gap-2'\n )}\n >\n {children}\n </div>\n );\n\n return (\n <fieldset\n data-slot=\"checkbox-group\"\n className={cn('flex flex-col', className)}\n aria-describedby={\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n >\n {label && (\n <legend\n data-slot=\"checkbox-group-legend\"\n className={cn(\n // Legends are excluded from the fieldset's flex layout; explicit\n // margin matches the stacked Input label's 6px gap.\n 'text-foreground mb-1.5 text-sm font-medium',\n isFloating && 'sr-only'\n )}\n >\n {label}\n </legend>\n )}\n {isFloating ? (\n <div\n data-slot=\"checkbox-group-field\"\n className={floatingGroupVariants({ hasError: !!error })}\n >\n <span\n aria-hidden=\"true\"\n data-slot=\"checkbox-group-floating-label\"\n className={floatingGroupLabelVariants({ hasError: !!error })}\n >\n {label}\n </span>\n {itemsElement}\n </div>\n ) : null}\n {description && (\n <p\n id={descriptionId}\n data-slot=\"checkbox-group-description\"\n className={cn(\n 'text-muted-foreground text-xs',\n isFloating ? 'mt-1' : 'mb-3'\n )}\n >\n {description}\n </p>\n )}\n {!isFloating && itemsElement}\n {error && (\n <p\n id={errorId}\n data-slot=\"checkbox-group-error\"\n className=\"text-destructive mt-2 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n </fieldset>\n );\n}\n\nCheckboxGroup.displayName = 'CheckboxGroup';\n\n// ============================================================================\n// Check Icon\n// ============================================================================\n\ninterface CheckIconProps {\n size?: 'sm' | 'md' | 'lg' | null;\n className?: string;\n}\n\nfunction CheckIcon({ size, className }: CheckIconProps) {\n const sizeMap = {\n sm: 10,\n md: 12,\n lg: 14,\n };\n const iconSize = sizeMap[size || 'md'];\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nfunction MinusIcon({ size, className }: CheckIconProps) {\n const sizeMap = {\n sm: 10,\n md: 12,\n lg: 14,\n };\n const iconSize = sizeMap[size || 'md'];\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M5 12h14\" />\n </svg>\n );\n}\n\nexport { Checkbox, CheckboxGroup, checkboxVariants };\n"]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
|
|
5
|
+
// src/hooks/useScrollSpy.ts
|
|
6
|
+
function useScrollSpy({
|
|
7
|
+
selectors,
|
|
8
|
+
ids,
|
|
9
|
+
rootMargin = "0px 0px -60% 0px",
|
|
10
|
+
threshold = 0,
|
|
11
|
+
root,
|
|
12
|
+
enabled = true
|
|
13
|
+
} = {}) {
|
|
14
|
+
const [activeId, setActiveId] = react.useState(null);
|
|
15
|
+
const visibleEntries = react.useRef(
|
|
16
|
+
/* @__PURE__ */ new Map()
|
|
17
|
+
);
|
|
18
|
+
const rootEl = root?.current ?? null;
|
|
19
|
+
react.useEffect(() => {
|
|
20
|
+
if (!enabled) return;
|
|
21
|
+
const container = rootEl ?? document;
|
|
22
|
+
function resolveElements() {
|
|
23
|
+
let els = [];
|
|
24
|
+
if (ids && ids.length > 0) {
|
|
25
|
+
els = ids.map((id) => document.getElementById(id)).filter((el) => el !== null);
|
|
26
|
+
} else if (selectors) {
|
|
27
|
+
els = Array.from(container.querySelectorAll(selectors));
|
|
28
|
+
}
|
|
29
|
+
return els.filter((el) => el.id);
|
|
30
|
+
}
|
|
31
|
+
let intersectionObserver = null;
|
|
32
|
+
let mutationObserver = null;
|
|
33
|
+
function startObserving() {
|
|
34
|
+
const elements = resolveElements();
|
|
35
|
+
if (elements.length === 0) return false;
|
|
36
|
+
intersectionObserver = new IntersectionObserver(
|
|
37
|
+
(entries2) => {
|
|
38
|
+
for (const entry of entries2) {
|
|
39
|
+
if (entry.isIntersecting) {
|
|
40
|
+
visibleEntries.current.set(entry.target.id, entry);
|
|
41
|
+
} else {
|
|
42
|
+
visibleEntries.current.delete(entry.target.id);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (visibleEntries.current.size > 0) {
|
|
46
|
+
let topmost = null;
|
|
47
|
+
let topmostTop = Infinity;
|
|
48
|
+
for (const [id, entry] of visibleEntries.current) {
|
|
49
|
+
const top = entry.boundingClientRect.top;
|
|
50
|
+
if (top < topmostTop) {
|
|
51
|
+
topmostTop = top;
|
|
52
|
+
topmost = id;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (topmost) {
|
|
56
|
+
setActiveId(topmost);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
root: rootEl,
|
|
62
|
+
rootMargin,
|
|
63
|
+
threshold
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
for (const el of elements) {
|
|
67
|
+
intersectionObserver.observe(el);
|
|
68
|
+
}
|
|
69
|
+
mutationObserver?.disconnect();
|
|
70
|
+
mutationObserver = null;
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
if (!startObserving()) {
|
|
74
|
+
const watchRoot = rootEl ?? document.body;
|
|
75
|
+
mutationObserver = new MutationObserver(() => {
|
|
76
|
+
startObserving();
|
|
77
|
+
});
|
|
78
|
+
mutationObserver.observe(watchRoot, { childList: true, subtree: true });
|
|
79
|
+
}
|
|
80
|
+
const entries = visibleEntries.current;
|
|
81
|
+
return () => {
|
|
82
|
+
mutationObserver?.disconnect();
|
|
83
|
+
intersectionObserver?.disconnect();
|
|
84
|
+
entries.clear();
|
|
85
|
+
};
|
|
86
|
+
}, [selectors, ids, rootMargin, threshold, rootEl, enabled]);
|
|
87
|
+
return { activeId };
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
exports.useScrollSpy = useScrollSpy;
|
|
91
|
+
//# sourceMappingURL=chunk-7IKLGH3Z.cjs.map
|
|
92
|
+
//# sourceMappingURL=chunk-7IKLGH3Z.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useScrollSpy.ts"],"names":["useState","useRef","useEffect","entries"],"mappings":"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","file":"chunk-7IKLGH3Z.cjs","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"]}
|