eidos-ui 3.8.1 → 4.1.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 +21 -11
- package/dist/{SegmentedControl.types-D_gHYL9X.d.cts → SegmentedControl.types-50fprBiO.d.cts} +9 -0
- package/dist/{SegmentedControl.types-CHtjABQM.d.ts → SegmentedControl.types-DKlamnBZ.d.ts} +9 -0
- package/dist/{ThemeProvider.types-DgXN0gEH.d.cts → ThemeProvider.types-CI9P1anY.d.cts} +53 -2
- package/dist/{ThemeProvider.types-DgXN0gEH.d.ts → ThemeProvider.types-CI9P1anY.d.ts} +53 -2
- package/dist/alert/index.cjs +5 -5
- package/dist/alert/index.js +4 -4
- package/dist/button/index.cjs +4 -4
- package/dist/button/index.js +3 -3
- package/dist/chip/index.cjs +4 -4
- package/dist/chip/index.js +3 -3
- package/dist/{chunk-V5CM5TH3.js → chunk-2OBOD3GO.js} +3 -3
- package/dist/{chunk-CFVUUMQA.cjs → chunk-2URFSWJT.cjs} +6 -8
- package/dist/chunk-2URFSWJT.cjs.map +1 -0
- package/dist/{chunk-4S57PE43.js → chunk-2WDL2ZVP.js} +6 -7
- package/dist/chunk-2WDL2ZVP.js.map +1 -0
- package/dist/{chunk-LWCFT5SP.cjs → chunk-3QBMSZSE.cjs} +3 -3
- package/dist/{chunk-LWCFT5SP.cjs.map → chunk-3QBMSZSE.cjs.map} +1 -1
- package/dist/{chunk-IC2PIK3E.js → chunk-43DJ3GGR.js} +4 -4
- package/dist/{chunk-L6ERHCQ2.js → chunk-57BVERWD.js} +3 -3
- package/dist/{chunk-AUNDBUHM.cjs → chunk-5HRVHEHE.cjs} +3 -3
- package/dist/{chunk-AUNDBUHM.cjs.map → chunk-5HRVHEHE.cjs.map} +1 -1
- package/dist/{chunk-6IB27I5K.cjs → chunk-6JYXGRJ3.cjs} +8 -8
- package/dist/{chunk-6IB27I5K.cjs.map → chunk-6JYXGRJ3.cjs.map} +1 -1
- package/dist/{chunk-NERASTO2.cjs → chunk-6ZFXIYH7.cjs} +3 -3
- package/dist/{chunk-NERASTO2.cjs.map → chunk-6ZFXIYH7.cjs.map} +1 -1
- package/dist/{chunk-IKXXXVUO.js → chunk-7TQUJ6BJ.js} +3 -3
- package/dist/{chunk-544RAXWO.cjs → chunk-7VMF6LIC.cjs} +19 -19
- package/dist/{chunk-544RAXWO.cjs.map → chunk-7VMF6LIC.cjs.map} +1 -1
- package/dist/{chunk-WTFEMOV5.cjs → chunk-ADB7QRX5.cjs} +16 -16
- package/dist/{chunk-WTFEMOV5.cjs.map → chunk-ADB7QRX5.cjs.map} +1 -1
- package/dist/{chunk-6CW5QSYV.cjs → chunk-AFGC62AL.cjs} +7 -7
- package/dist/{chunk-6CW5QSYV.cjs.map → chunk-AFGC62AL.cjs.map} +1 -1
- package/dist/{chunk-U4SVBE2M.js → chunk-AWPJH3UB.js} +4 -4
- package/dist/{chunk-V64DICJK.js → chunk-BHZ76J2K.js} +45 -33
- package/dist/chunk-BHZ76J2K.js.map +1 -0
- package/dist/{chunk-B2OHBIAL.cjs → chunk-BKUZF7CW.cjs} +10 -11
- package/dist/chunk-BKUZF7CW.cjs.map +1 -0
- package/dist/{chunk-WR77IZUU.cjs → chunk-BPVOQLCA.cjs} +7 -7
- package/dist/{chunk-WR77IZUU.cjs.map → chunk-BPVOQLCA.cjs.map} +1 -1
- package/dist/{chunk-MCPGI6EI.js → chunk-BUSMGQJ4.js} +2 -2
- package/dist/{chunk-H3C6YECZ.js → chunk-D2PXPX56.js} +6 -6
- package/dist/{chunk-L6YJ6QTZ.js → chunk-DCUIT7SI.js} +2 -2
- package/dist/{chunk-FE7S4RSK.js → chunk-DHOBGYRD.js} +164 -34
- package/dist/chunk-DHOBGYRD.js.map +1 -0
- package/dist/{chunk-JFV56ISS.cjs → chunk-E7BFBU6K.cjs} +45 -33
- package/dist/chunk-E7BFBU6K.cjs.map +1 -0
- package/dist/{chunk-HYRLK462.js → chunk-EDPCI2JC.js} +2 -2
- package/dist/{chunk-Z3IJWYUD.js → chunk-EJWEG66P.js} +226 -42
- package/dist/chunk-EJWEG66P.js.map +1 -0
- package/dist/{chunk-DPTTDHZ5.js → chunk-FAGQGGT3.js} +3 -3
- package/dist/{chunk-CNTG7OOO.js → chunk-FFYPSLQV.js} +12 -12
- package/dist/{chunk-7NUVLVSL.cjs → chunk-FJSK2RT7.cjs} +5 -5
- package/dist/{chunk-7NUVLVSL.cjs.map → chunk-FJSK2RT7.cjs.map} +1 -1
- package/dist/{chunk-P6OJQ2RN.js → chunk-FSX7DDLO.js} +8 -9
- package/dist/chunk-FSX7DDLO.js.map +1 -0
- package/dist/{chunk-XIUZT4TO.js → chunk-GE3QCXT7.js} +6 -7
- package/dist/chunk-GE3QCXT7.js.map +1 -0
- package/dist/{chunk-JY77VJAZ.js → chunk-GHUEVNNU.js} +3 -3
- package/dist/{chunk-4V2XYUQL.js → chunk-GLEPKX2R.js} +2 -2
- package/dist/{chunk-GZDT2AHJ.cjs → chunk-GRKC4PIX.cjs} +7 -7
- package/dist/{chunk-GZDT2AHJ.cjs.map → chunk-GRKC4PIX.cjs.map} +1 -1
- package/dist/{chunk-SLHIVEFW.cjs → chunk-HKLLKNRQ.cjs} +6 -9
- package/dist/chunk-HKLLKNRQ.cjs.map +1 -0
- package/dist/{chunk-2TIMJD4K.js → chunk-IBT535UH.js} +3 -3
- package/dist/{chunk-HR5MWA3B.cjs → chunk-IJW6YCJB.cjs} +5 -5
- package/dist/{chunk-HR5MWA3B.cjs.map → chunk-IJW6YCJB.cjs.map} +1 -1
- package/dist/{chunk-OGGZIFTI.cjs → chunk-JO4NDJRA.cjs} +192 -62
- package/dist/chunk-JO4NDJRA.cjs.map +1 -0
- package/dist/{chunk-NNAEQR3Y.cjs → chunk-K6VEUJLY.cjs} +30 -30
- package/dist/{chunk-NNAEQR3Y.cjs.map → chunk-K6VEUJLY.cjs.map} +1 -1
- package/dist/{chunk-F5IRMMZ2.cjs → chunk-K73JO4FK.cjs} +7 -7
- package/dist/{chunk-F5IRMMZ2.cjs.map → chunk-K73JO4FK.cjs.map} +1 -1
- package/dist/{chunk-4HZIXRAJ.cjs → chunk-KF2OGUAD.cjs} +11 -12
- package/dist/chunk-KF2OGUAD.cjs.map +1 -0
- package/dist/{chunk-TJQNGJHP.js → chunk-KLHC5BHS.js} +4 -4
- package/dist/{chunk-XWMXEJVZ.js → chunk-KZKBZ2AV.js} +5 -7
- package/dist/chunk-KZKBZ2AV.js.map +1 -0
- package/dist/{chunk-DG3O5NV4.cjs → chunk-LLHR6QW3.cjs} +3 -3
- package/dist/{chunk-DG3O5NV4.cjs.map → chunk-LLHR6QW3.cjs.map} +1 -1
- package/dist/{chunk-GDRLVX2A.js → chunk-LXRNFQEI.js} +4 -4
- package/dist/{chunk-VXC7Z7XB.cjs → chunk-MKQVDEHI.cjs} +5 -6
- package/dist/chunk-MKQVDEHI.cjs.map +1 -0
- package/dist/{chunk-TNQ2ZZ7W.cjs → chunk-MUMTPMWD.cjs} +7 -7
- package/dist/{chunk-TNQ2ZZ7W.cjs.map → chunk-MUMTPMWD.cjs.map} +1 -1
- package/dist/{chunk-RHWZX7PB.js → chunk-NONYIHXD.js} +4 -4
- package/dist/{chunk-XPG56DLQ.cjs → chunk-NSA7ASZ7.cjs} +8 -8
- package/dist/{chunk-XPG56DLQ.cjs.map → chunk-NSA7ASZ7.cjs.map} +1 -1
- package/dist/{chunk-6NAOAKII.js → chunk-NWFGXLQP.js} +2 -2
- package/dist/{chunk-H46ZLPNJ.cjs → chunk-O45W57Y4.cjs} +233 -49
- package/dist/chunk-O45W57Y4.cjs.map +1 -0
- package/dist/{chunk-UUT2VEN5.cjs → chunk-OC2OBBGM.cjs} +7 -8
- package/dist/chunk-OC2OBBGM.cjs.map +1 -0
- package/dist/{chunk-3X6QVHTD.js → chunk-OERK3T7E.js} +3 -4
- package/dist/chunk-OERK3T7E.js.map +1 -0
- package/dist/{chunk-ZJWQPZ7E.js → chunk-OQWG7NLI.js} +3 -11
- package/dist/chunk-OQWG7NLI.js.map +1 -0
- package/dist/{chunk-U34INRFO.js → chunk-PP6HS4GR.js} +5 -16
- package/dist/chunk-PP6HS4GR.js.map +1 -0
- package/dist/{chunk-ENMDOQQO.cjs → chunk-R5WI5IGR.cjs} +6 -17
- package/dist/{chunk-ENMDOQQO.cjs.map → chunk-R5WI5IGR.cjs.map} +1 -1
- package/dist/{chunk-UTYY35QX.cjs → chunk-RZMQCVAS.cjs} +3 -3
- package/dist/{chunk-UTYY35QX.cjs.map → chunk-RZMQCVAS.cjs.map} +1 -1
- package/dist/{chunk-7FV2X62W.cjs → chunk-SJKD3WCV.cjs} +7 -7
- package/dist/{chunk-7FV2X62W.cjs.map → chunk-SJKD3WCV.cjs.map} +1 -1
- package/dist/{chunk-LUDK44NZ.cjs → chunk-SJPCBRKR.cjs} +3 -3
- package/dist/{chunk-LUDK44NZ.cjs.map → chunk-SJPCBRKR.cjs.map} +1 -1
- package/dist/{chunk-3TF2GZSG.js → chunk-SONL2RCW.js} +7 -7
- package/dist/{chunk-2IXCEKLI.js → chunk-SOS4K7VC.js} +2 -2
- package/dist/{chunk-WHQGJHMD.js → chunk-TOLNPD7S.js} +4 -4
- package/dist/{chunk-FHOD3FUN.js → chunk-UTOTOWPS.js} +4 -4
- package/dist/{chunk-YIOHKQ6Y.cjs → chunk-VCG647BY.cjs} +5 -13
- package/dist/chunk-VCG647BY.cjs.map +1 -0
- package/dist/{chunk-HLI4SOH3.cjs → chunk-VGMRIXW4.cjs} +45 -45
- package/dist/{chunk-HLI4SOH3.cjs.map → chunk-VGMRIXW4.cjs.map} +1 -1
- package/dist/{chunk-N5NXKVFJ.cjs → chunk-VPN7AR7T.cjs} +10 -10
- package/dist/{chunk-N5NXKVFJ.cjs.map → chunk-VPN7AR7T.cjs.map} +1 -1
- package/dist/{chunk-6FXFKMJ5.js → chunk-XBIMNWE6.js} +3 -3
- package/dist/{chunk-3VXUOAIJ.cjs → chunk-XR72A66Q.cjs} +3 -7
- package/dist/chunk-XR72A66Q.cjs.map +1 -0
- package/dist/{chunk-ULKWUKD2.cjs → chunk-YHSCUPP6.cjs} +22 -23
- package/dist/chunk-YHSCUPP6.cjs.map +1 -0
- package/dist/{chunk-S5CMZFX6.js → chunk-YPEJH57Z.js} +6 -7
- package/dist/chunk-YPEJH57Z.js.map +1 -0
- package/dist/{chunk-BO3KK3ZQ.js → chunk-YPPG7NLW.js} +2 -6
- package/dist/chunk-YPPG7NLW.js.map +1 -0
- package/dist/{chunk-PE2SLXUS.cjs → chunk-YWXS4IPH.cjs} +5 -5
- package/dist/{chunk-PE2SLXUS.cjs.map → chunk-YWXS4IPH.cjs.map} +1 -1
- package/dist/{chunk-UC4NYF6T.js → chunk-YYA5SWXD.js} +2 -2
- package/dist/{chunk-IHPSRTVW.js → chunk-Z3OEYDNI.js} +4 -7
- package/dist/chunk-Z3OEYDNI.js.map +1 -0
- package/dist/{chunk-MKC6V3SY.cjs → chunk-Z6FZ7GI5.cjs} +6 -6
- package/dist/{chunk-MKC6V3SY.cjs.map → chunk-Z6FZ7GI5.cjs.map} +1 -1
- package/dist/{chunk-NFD7MPX4.cjs → chunk-ZVA5KJAJ.cjs} +11 -11
- package/dist/{chunk-NFD7MPX4.cjs.map → chunk-ZVA5KJAJ.cjs.map} +1 -1
- package/dist/color-picker/index.cjs +4 -4
- package/dist/color-picker/index.js +3 -3
- package/dist/combobox/index.cjs +6 -6
- package/dist/combobox/index.js +5 -5
- package/dist/command-palette/index.cjs +3 -3
- package/dist/command-palette/index.js +2 -2
- package/dist/context-menu/index.cjs +6 -6
- package/dist/context-menu/index.js +5 -5
- package/dist/conversation/index.cjs +8 -8
- package/dist/conversation/index.js +7 -7
- package/dist/data-grid/index.cjs +15 -15
- package/dist/data-grid/index.d.cts +1 -1
- package/dist/data-grid/index.d.ts +1 -1
- package/dist/data-grid/index.js +14 -14
- package/dist/date-picker/index.cjs +8 -8
- package/dist/date-picker/index.js +7 -7
- package/dist/drawer/index.cjs +5 -5
- package/dist/drawer/index.js +4 -4
- package/dist/dropdown/index.cjs +3 -3
- package/dist/dropdown/index.js +2 -2
- package/dist/header/index.cjs +6 -6
- package/dist/header/index.js +5 -5
- package/dist/index.cjs +39 -39
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +345 -205
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +40 -40
- package/dist/inline-edit/index.cjs +5 -5
- package/dist/inline-edit/index.js +4 -4
- package/dist/input/index.cjs +4 -4
- package/dist/input/index.js +3 -3
- package/dist/menu/index.cjs +5 -5
- package/dist/menu/index.js +4 -4
- package/dist/modal/index.cjs +5 -5
- package/dist/modal/index.js +4 -4
- package/dist/navigation/index.cjs +5 -5
- package/dist/navigation/index.js +4 -4
- package/dist/number-input/index.cjs +2 -4
- package/dist/number-input/index.cjs.map +1 -1
- package/dist/number-input/index.js +1 -3
- package/dist/page-layout/index.cjs +12 -12
- package/dist/page-layout/index.js +11 -11
- package/dist/pagination/index.cjs +8 -8
- package/dist/pagination/index.js +7 -7
- package/dist/popover/index.cjs +3 -3
- package/dist/popover/index.d.cts +1 -3
- package/dist/popover/index.d.ts +1 -3
- package/dist/popover/index.js +2 -2
- package/dist/segmented-control/index.cjs +4 -4
- package/dist/segmented-control/index.d.cts +2 -2
- package/dist/segmented-control/index.d.ts +2 -2
- package/dist/segmented-control/index.js +3 -3
- package/dist/select/index.cjs +6 -6
- package/dist/select/index.js +5 -5
- package/dist/snackbar/index.cjs +5 -5
- package/dist/snackbar/index.js +4 -4
- package/dist/split-button/index.cjs +6 -6
- package/dist/split-button/index.js +5 -5
- package/dist/split-chip/index.cjs +5 -5
- package/dist/split-chip/index.js +4 -4
- package/dist/table/index.cjs +13 -13
- package/dist/table/index.js +12 -12
- package/dist/tabs/index.cjs +3 -3
- package/dist/tabs/index.js +2 -2
- package/dist/tag-input/index.cjs +6 -6
- package/dist/tag-input/index.js +5 -5
- package/dist/textarea/index.cjs +4 -4
- package/dist/textarea/index.js +3 -3
- package/dist/theme-editor/index.cjs +13 -11
- package/dist/theme-editor/index.cjs.map +1 -1
- package/dist/theme-editor/index.d.cts +1 -1
- package/dist/theme-editor/index.d.ts +1 -1
- package/dist/theme-editor/index.js +12 -10
- package/dist/theme-provider/index.cjs +3 -3
- package/dist/theme-provider/index.d.cts +2 -2
- package/dist/theme-provider/index.d.ts +2 -2
- package/dist/theme-provider/index.js +2 -2
- package/dist/toolbar/index.cjs +8 -8
- package/dist/toolbar/index.js +7 -7
- package/dist/tooltip/index.cjs +3 -3
- package/dist/tooltip/index.js +2 -2
- package/package.json +4 -2
- package/dist/chunk-3VXUOAIJ.cjs.map +0 -1
- package/dist/chunk-3X6QVHTD.js.map +0 -1
- package/dist/chunk-4HZIXRAJ.cjs.map +0 -1
- package/dist/chunk-4S57PE43.js.map +0 -1
- package/dist/chunk-B2OHBIAL.cjs.map +0 -1
- package/dist/chunk-BO3KK3ZQ.js.map +0 -1
- package/dist/chunk-CFVUUMQA.cjs.map +0 -1
- package/dist/chunk-FE7S4RSK.js.map +0 -1
- package/dist/chunk-H46ZLPNJ.cjs.map +0 -1
- package/dist/chunk-IHPSRTVW.js.map +0 -1
- package/dist/chunk-JFV56ISS.cjs.map +0 -1
- package/dist/chunk-OGGZIFTI.cjs.map +0 -1
- package/dist/chunk-P6OJQ2RN.js.map +0 -1
- package/dist/chunk-S5CMZFX6.js.map +0 -1
- package/dist/chunk-SLHIVEFW.cjs.map +0 -1
- package/dist/chunk-U34INRFO.js.map +0 -1
- package/dist/chunk-ULKWUKD2.cjs.map +0 -1
- package/dist/chunk-UUT2VEN5.cjs.map +0 -1
- package/dist/chunk-V64DICJK.js.map +0 -1
- package/dist/chunk-VXC7Z7XB.cjs.map +0 -1
- package/dist/chunk-XIUZT4TO.js.map +0 -1
- package/dist/chunk-XWMXEJVZ.js.map +0 -1
- package/dist/chunk-YIOHKQ6Y.cjs.map +0 -1
- package/dist/chunk-Z3IJWYUD.js.map +0 -1
- package/dist/chunk-ZJWQPZ7E.js.map +0 -1
- /package/dist/{chunk-V5CM5TH3.js.map → chunk-2OBOD3GO.js.map} +0 -0
- /package/dist/{chunk-IC2PIK3E.js.map → chunk-43DJ3GGR.js.map} +0 -0
- /package/dist/{chunk-L6ERHCQ2.js.map → chunk-57BVERWD.js.map} +0 -0
- /package/dist/{chunk-IKXXXVUO.js.map → chunk-7TQUJ6BJ.js.map} +0 -0
- /package/dist/{chunk-U4SVBE2M.js.map → chunk-AWPJH3UB.js.map} +0 -0
- /package/dist/{chunk-MCPGI6EI.js.map → chunk-BUSMGQJ4.js.map} +0 -0
- /package/dist/{chunk-H3C6YECZ.js.map → chunk-D2PXPX56.js.map} +0 -0
- /package/dist/{chunk-L6YJ6QTZ.js.map → chunk-DCUIT7SI.js.map} +0 -0
- /package/dist/{chunk-HYRLK462.js.map → chunk-EDPCI2JC.js.map} +0 -0
- /package/dist/{chunk-DPTTDHZ5.js.map → chunk-FAGQGGT3.js.map} +0 -0
- /package/dist/{chunk-CNTG7OOO.js.map → chunk-FFYPSLQV.js.map} +0 -0
- /package/dist/{chunk-JY77VJAZ.js.map → chunk-GHUEVNNU.js.map} +0 -0
- /package/dist/{chunk-4V2XYUQL.js.map → chunk-GLEPKX2R.js.map} +0 -0
- /package/dist/{chunk-2TIMJD4K.js.map → chunk-IBT535UH.js.map} +0 -0
- /package/dist/{chunk-TJQNGJHP.js.map → chunk-KLHC5BHS.js.map} +0 -0
- /package/dist/{chunk-GDRLVX2A.js.map → chunk-LXRNFQEI.js.map} +0 -0
- /package/dist/{chunk-RHWZX7PB.js.map → chunk-NONYIHXD.js.map} +0 -0
- /package/dist/{chunk-6NAOAKII.js.map → chunk-NWFGXLQP.js.map} +0 -0
- /package/dist/{chunk-3TF2GZSG.js.map → chunk-SONL2RCW.js.map} +0 -0
- /package/dist/{chunk-2IXCEKLI.js.map → chunk-SOS4K7VC.js.map} +0 -0
- /package/dist/{chunk-WHQGJHMD.js.map → chunk-TOLNPD7S.js.map} +0 -0
- /package/dist/{chunk-FHOD3FUN.js.map → chunk-UTOTOWPS.js.map} +0 -0
- /package/dist/{chunk-6FXFKMJ5.js.map → chunk-XBIMNWE6.js.map} +0 -0
- /package/dist/{chunk-UC4NYF6T.js.map → chunk-YYA5SWXD.js.map} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Tooltip
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BUSMGQJ4.js";
|
|
4
4
|
import {
|
|
5
5
|
devWarn,
|
|
6
6
|
renderIcon
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-PP6HS4GR.js";
|
|
8
8
|
|
|
9
9
|
// src/components/SegmentedControl/SegmentedControl.component.tsx
|
|
10
10
|
import React, { useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
@@ -20,6 +20,8 @@ var SegmentedControl = ({
|
|
|
20
20
|
disabled = false,
|
|
21
21
|
fullWidth = false,
|
|
22
22
|
scrollButtons = "auto",
|
|
23
|
+
ariaLabel,
|
|
24
|
+
"aria-labelledby": ariaLabelledBy,
|
|
23
25
|
className = ""
|
|
24
26
|
}) => {
|
|
25
27
|
const isControlled = value !== void 0;
|
|
@@ -128,37 +130,47 @@ var SegmentedControl = ({
|
|
|
128
130
|
`eidos-segmented-scroll-button--${direction}`,
|
|
129
131
|
`eidos-segmented-scroll-button--${size}`
|
|
130
132
|
].join(" ");
|
|
131
|
-
const track = /* @__PURE__ */ jsx(
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
133
|
+
const track = /* @__PURE__ */ jsx(
|
|
134
|
+
"div",
|
|
135
|
+
{
|
|
136
|
+
ref: trackRef,
|
|
137
|
+
className: containerClasses,
|
|
138
|
+
role: "radiogroup",
|
|
139
|
+
"aria-label": ariaLabel,
|
|
140
|
+
"aria-labelledby": ariaLabelledBy,
|
|
141
|
+
children: options.map((opt) => {
|
|
142
|
+
const isActive = activeValue === opt.value;
|
|
143
|
+
const isDisabled = disabled || !!opt.disabled;
|
|
144
|
+
if (!opt.label && !opt.tooltip) {
|
|
145
|
+
devWarn(
|
|
146
|
+
"segmented-icon-only-name",
|
|
147
|
+
`SegmentedControl: option "${opt.value}" has an icon but no \`label\` or \`tooltip\`, so it has no accessible name.`
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
const segment = /* @__PURE__ */ jsxs(
|
|
151
|
+
"button",
|
|
152
|
+
{
|
|
153
|
+
type: "button",
|
|
154
|
+
role: "radio",
|
|
155
|
+
"aria-checked": isActive,
|
|
156
|
+
disabled: isDisabled,
|
|
157
|
+
"data-value": opt.value,
|
|
158
|
+
tabIndex: isTabbable(opt.value) ? 0 : -1,
|
|
159
|
+
className: ["eidos-segmented-item", isActive && "eidos-segmented-item--active"].filter(Boolean).join(" "),
|
|
160
|
+
onClick: () => !isDisabled && handleSelect(opt.value),
|
|
161
|
+
onKeyDown: handleKeyDown,
|
|
162
|
+
"aria-label": !opt.label ? opt.tooltip : void 0,
|
|
163
|
+
children: [
|
|
164
|
+
opt.icon && renderIcon(opt.icon, "eidos-segmented-icon"),
|
|
165
|
+
opt.label && /* @__PURE__ */ jsx("span", { className: "eidos-segmented-label", children: opt.label })
|
|
166
|
+
]
|
|
167
|
+
},
|
|
168
|
+
opt.value
|
|
169
|
+
);
|
|
170
|
+
return opt.tooltip ? /* @__PURE__ */ jsx(Tooltip, { message: opt.tooltip, children: segment }, opt.value) : React.cloneElement(segment, { key: opt.value });
|
|
171
|
+
})
|
|
139
172
|
}
|
|
140
|
-
|
|
141
|
-
"button",
|
|
142
|
-
{
|
|
143
|
-
type: "button",
|
|
144
|
-
role: "radio",
|
|
145
|
-
"aria-checked": isActive,
|
|
146
|
-
disabled: isDisabled,
|
|
147
|
-
"data-value": opt.value,
|
|
148
|
-
tabIndex: isTabbable(opt.value) ? 0 : -1,
|
|
149
|
-
className: ["eidos-segmented-item", isActive && "eidos-segmented-item--active"].filter(Boolean).join(" "),
|
|
150
|
-
onClick: () => !isDisabled && handleSelect(opt.value),
|
|
151
|
-
onKeyDown: handleKeyDown,
|
|
152
|
-
"aria-label": !opt.label ? opt.tooltip : void 0,
|
|
153
|
-
children: [
|
|
154
|
-
opt.icon && renderIcon(opt.icon, "eidos-segmented-icon"),
|
|
155
|
-
opt.label && /* @__PURE__ */ jsx("span", { className: "eidos-segmented-label", children: opt.label })
|
|
156
|
-
]
|
|
157
|
-
},
|
|
158
|
-
opt.value
|
|
159
|
-
);
|
|
160
|
-
return opt.tooltip ? /* @__PURE__ */ jsx(Tooltip, { message: opt.tooltip, children: segment }, opt.value) : React.cloneElement(segment, { key: opt.value });
|
|
161
|
-
}) });
|
|
173
|
+
);
|
|
162
174
|
return /* @__PURE__ */ jsxs("div", { className: barClasses, children: [
|
|
163
175
|
showPrevButton && /* @__PURE__ */ jsx(
|
|
164
176
|
"button",
|
|
@@ -191,4 +203,4 @@ var SegmentedControl = ({
|
|
|
191
203
|
export {
|
|
192
204
|
SegmentedControl
|
|
193
205
|
};
|
|
194
|
-
//# sourceMappingURL=chunk-
|
|
206
|
+
//# sourceMappingURL=chunk-BHZ76J2K.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/SegmentedControl/SegmentedControl.component.tsx"],"sourcesContent":["import React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { Tooltip } from '../Tooltip';\nimport { renderIcon, devWarn } from '../../utils';\nimport type { SegmentedControlProps } from './SegmentedControl.types';\n\n/**\n * SegmentedControl - a compact, single-select toggle group rendered as a pill.\n *\n * Semantics: `role=\"radiogroup\"` on the container, `role=\"radio\"` on each\n * segment. Supports controlled and uncontrolled usage.\n *\n * @example\n * ```tsx\n * // Controlled\n * const [view, setView] = useState('list');\n * <SegmentedControl\n * options={[\n * { value: 'list', icon: List, tooltip: 'List view' },\n * { value: 'grid', icon: LayoutGrid, tooltip: 'Grid view' },\n * { value: 'table', icon: Table2, tooltip: 'Table view' },\n * ]}\n * value={view}\n * onChange={setView}\n * />\n *\n * // With labels\n * <SegmentedControl\n * options={[\n * { value: 'day', label: 'Day' },\n * { value: 'week', label: 'Week' },\n * { value: 'month', label: 'Month' },\n * ]}\n * defaultValue=\"week\"\n * onChange={console.log}\n * />\n * ```\n */\nexport const SegmentedControl: React.FC<SegmentedControlProps> = ({\n options,\n value,\n defaultValue,\n onChange,\n size = 'md',\n color = 'primary',\n disabled = false,\n fullWidth = false,\n scrollButtons = 'auto',\n ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n className = '',\n}) => {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? options[0]?.value ?? '',\n );\n\n const activeValue = isControlled ? value : internalValue;\n\n const handleSelect = (optValue: string) => {\n if (disabled) return;\n if (optValue === activeValue) return; // already selected\n if (!isControlled) setInternalValue(optValue);\n onChange?.(optValue);\n };\n\n const trackRef = useRef<HTMLDivElement>(null);\n\n // Roving tabindex: the group is a single tab stop, and arrow keys move\n // within it - the WAI-ARIA radiogroup pattern, which this had none of.\n // Every segment used to be its own tab stop, so a six-option control cost\n // six presses to skip past.\n //\n // The tabbable segment is the selected one; if nothing is selected (a\n // controlled `value` matching no option), the first enabled segment takes\n // the stop so the group can still be reached at all.\n const selectableValues = options.filter((opt) => !opt.disabled).map((opt) => opt.value);\n const hasSelection = selectableValues.includes(activeValue);\n const fallbackTabbableValue = selectableValues[0];\n\n const isTabbable = (optValue: string) =>\n hasSelection ? optValue === activeValue : optValue === fallbackTabbableValue;\n\n // Selection follows focus, which is what the radio pattern specifies -\n // unlike `Tabs`, where arrow keys only move focus. Disabled segments are\n // skipped rather than selected-and-ignored, and both ends wrap.\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (disabled || selectableValues.length === 0) return;\n\n const currentIndex = selectableValues.indexOf(activeValue);\n const from = currentIndex === -1 ? 0 : currentIndex;\n let targetIndex = -1;\n\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n targetIndex = (from + 1) % selectableValues.length;\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n targetIndex = (from - 1 + selectableValues.length) % selectableValues.length;\n } else if (event.key === 'Home') {\n targetIndex = 0;\n } else if (event.key === 'End') {\n targetIndex = selectableValues.length - 1;\n }\n\n if (targetIndex === -1) return;\n\n event.preventDefault();\n const targetValue = selectableValues[targetIndex];\n handleSelect(targetValue);\n\n // Focus has to follow the selection explicitly: the segment that was\n // focused is about to lose its `tabIndex={0}` to the newly selected one,\n // and focus does not move on its own.\n const target = trackRef.current?.querySelector<HTMLElement>(\n `[data-value=\"${CSS.escape(targetValue)}\"]`,\n );\n target?.focus();\n };\n\n // The selected segment can sit outside the scrollport - after a controlled\n // `value` change, or once focus moves to a segment off screen. `scrollLeft`\n // is set directly rather than through `scrollIntoView`, which walks the\n // whole ancestor chain and would scroll the page vertically when the\n // control is below the fold.\n useLayoutEffect(() => {\n const track = trackRef.current;\n if (!track) return;\n\n const activeItem = track.querySelector('[aria-checked=\"true\"]') as HTMLElement | null;\n if (!activeItem) return;\n\n const left = activeItem.offsetLeft;\n const right = left + activeItem.offsetWidth;\n\n if (left < track.scrollLeft) {\n track.scrollLeft = left;\n } else if (right > track.scrollLeft + track.clientWidth) {\n track.scrollLeft = right - track.clientWidth;\n }\n }, [activeValue]);\n\n // Whether either end has segments hidden past it. Drives the presence of\n // each button: none at all when the track fits, and none at the end already\n // reached, since a button there would point at nothing.\n const [scrollState, setScrollState] = useState({ canScrollPrev: false, canScrollNext: false });\n const hasScrollButtons = scrollButtons !== 'none';\n\n useEffect(() => {\n if (!hasScrollButtons) return;\n const track = trackRef.current;\n if (!track) return;\n\n const update = () => {\n const maxScroll = track.scrollWidth - track.clientWidth;\n // 1px of tolerance: fractional layout widths leave a sub-pixel\n // remainder at either end that would otherwise keep a button enabled\n // for a scroll that can no longer move anything.\n const canScrollPrev = track.scrollLeft > 1;\n const canScrollNext = track.scrollLeft < maxScroll - 1;\n setScrollState((previous) =>\n previous.canScrollPrev === canScrollPrev && previous.canScrollNext === canScrollNext\n ? previous\n : { canScrollPrev, canScrollNext },\n );\n };\n\n update();\n track.addEventListener('scroll', update, { passive: true });\n\n // The track's own box stays the same width when a label reflows or a font\n // finishes loading, so the segments have to be observed as well as the\n // container - only their sizes tell us the track started overflowing.\n const observer = new ResizeObserver(update);\n observer.observe(track);\n Array.from(track.children).forEach((child) => observer.observe(child));\n\n return () => {\n track.removeEventListener('scroll', update);\n observer.disconnect();\n };\n }, [hasScrollButtons, options.length, size, fullWidth]);\n\n const scrollByStep = (direction: -1 | 1) => {\n const track = trackRef.current;\n if (!track) return;\n\n // A step just short of a full page keeps a segment of context on screen,\n // the same way a paged scrollbar click does.\n const step = track.clientWidth * 0.8;\n const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n track.scrollBy({ left: direction * step, behavior: reducedMotion ? 'auto' : 'smooth' });\n };\n\n const barClasses = [\n 'eidos-segmented-bar',\n fullWidth && 'eidos-segmented-bar--full-width',\n disabled && 'eidos-segmented-bar--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const containerClasses = [\n 'eidos-segmented',\n `eidos-segmented--${size}`,\n `eidos-segmented--${color}`,\n disabled && 'eidos-segmented--disabled',\n fullWidth && 'eidos-segmented--full-width',\n // With buttons, they are the affordance - a native scrollbar under a\n // compact pill control is redundant and would break its shape.\n hasScrollButtons && 'eidos-segmented--hide-scrollbar',\n ]\n .filter(Boolean)\n .join(' ');\n\n const showPrevButton = hasScrollButtons && scrollState.canScrollPrev;\n const showNextButton = hasScrollButtons && scrollState.canScrollNext;\n\n const scrollButtonClasses = (direction: 'prev' | 'next') =>\n [\n 'eidos-segmented-scroll-button',\n `eidos-segmented-scroll-button--${direction}`,\n `eidos-segmented-scroll-button--${size}`,\n ].join(' ');\n\n const track = (\n <div\n ref={trackRef}\n className={containerClasses}\n role=\"radiogroup\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n {options.map((opt) => {\n const isActive = activeValue === opt.value;\n const isDisabled = disabled || !!opt.disabled;\n\n // An icon-only segment has no text to be named by. `tooltip` wraps\n // it in a `Tooltip`, which contributes nothing to the accessible\n // name, so such a segment was announced as just \"radio\" - identical\n // to every other segment, making the group unusable by voice or\n // screen reader. Same fallback as `Button`.\n if (!opt.label && !opt.tooltip) {\n devWarn(\n 'segmented-icon-only-name',\n `SegmentedControl: option \"${opt.value}\" has an icon but no \\`label\\` or \\`tooltip\\`, so it has no accessible name.`,\n );\n }\n\n const segment = (\n <button\n key={opt.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n disabled={isDisabled}\n // Read back by the keyboard handler to move focus onto the newly\n // selected segment, which `value` alone can't identify in the DOM.\n data-value={opt.value}\n tabIndex={isTabbable(opt.value) ? 0 : -1}\n className={['eidos-segmented-item', isActive && 'eidos-segmented-item--active']\n .filter(Boolean)\n .join(' ')}\n onClick={() => !isDisabled && handleSelect(opt.value)}\n onKeyDown={handleKeyDown}\n aria-label={!opt.label ? opt.tooltip : undefined}\n >\n {opt.icon && renderIcon(opt.icon, 'eidos-segmented-icon')}\n {opt.label && <span className=\"eidos-segmented-label\">{opt.label}</span>}\n </button>\n );\n\n return opt.tooltip ? (\n <Tooltip key={opt.value} message={opt.tooltip}>\n {segment}\n </Tooltip>\n ) : (\n React.cloneElement(segment, { key: opt.value })\n );\n })}\n </div>\n );\n\n // The buttons are siblings of the track, never children of it:\n // `role=\"radiogroup\"` only accepts radios. They are also hidden from\n // assistive tech and skipped by Tab, because they are a pointer affordance\n // for something the keyboard already does - tabbing to a segment scrolls it\n // into view. Same arrangement as `Tabs`.\n return (\n <div className={barClasses}>\n {showPrevButton && (\n <button\n type=\"button\"\n className={scrollButtonClasses('prev')}\n onClick={() => scrollByStep(-1)}\n // `tabIndex={-1}` keeps these out of the tab order, but it does not\n // stop a *click* from focusing them - and focus landing inside an\n // `aria-hidden` subtree is an error the browser reports (\"Blocked\n // aria-hidden on an element because its descendant retained\n // focus\"). Suppressing the default mousedown behaviour keeps the\n // button unfocusable by pointer as well, while the click still\n // fires. `inert` would also prevent the click, so it is not an\n // option here.\n onMouseDown={(event) => event.preventDefault()}\n tabIndex={-1}\n aria-hidden=\"true\"\n >\n <ChevronLeft className=\"eidos-segmented-scroll-button-icon\" />\n </button>\n )}\n\n {track}\n\n {showNextButton && (\n <button\n type=\"button\"\n className={scrollButtonClasses('next')}\n onClick={() => scrollByStep(1)}\n onMouseDown={(event) => event.preventDefault()} // see the prev button\n tabIndex={-1}\n aria-hidden=\"true\"\n >\n <ChevronRight className=\"eidos-segmented-scroll-button-icon\" />\n </button>\n )}\n </div>\n );\n};\n"],"mappings":"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","names":["track"]}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkKF2OGUADcjs = require('./chunk-KF2OGUAD.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkMKQVDEHIcjs = require('./chunk-MKQVDEHI.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
var _chunkENMDOQQOcjs = require('./chunk-ENMDOQQO.cjs');
|
|
10
|
+
var _chunkR5WI5IGRcjs = require('./chunk-R5WI5IGR.cjs');
|
|
12
11
|
|
|
13
12
|
// src/components/Select/Select.component.tsx
|
|
14
13
|
var _react = require('react'); var _react2 = _interopRequireDefault(_react);
|
|
@@ -122,7 +121,7 @@ var Select = _react2.default.forwardRef(
|
|
|
122
121
|
if (!element) return;
|
|
123
122
|
const named = (_nullishCoalesce(_optionalChain([element, 'access', _7 => _7.labels, 'optionalAccess', _8 => _8.length]), () => ( 0))) > 0 || element.hasAttribute("aria-label") || element.hasAttribute("aria-labelledby");
|
|
124
123
|
if (!named) {
|
|
125
|
-
|
|
124
|
+
_chunkR5WI5IGRcjs.devWarn.call(void 0,
|
|
126
125
|
"select-missing-label",
|
|
127
126
|
'Select: no accessible name. Pass `label` for a visible one, or `inputProps={{ "aria-label": "..." }}` where it must stay visually unlabelled - otherwise the field is announced as just "combobox". A placeholder is not a label, and disappears as soon as something is chosen.'
|
|
128
127
|
);
|
|
@@ -278,7 +277,7 @@ var Select = _react2.default.forwardRef(
|
|
|
278
277
|
"aria-selected": isSelected,
|
|
279
278
|
"aria-disabled": option.disabled,
|
|
280
279
|
children: [
|
|
281
|
-
option.icon &&
|
|
280
|
+
option.icon && _chunkR5WI5IGRcjs.renderIcon.call(void 0, option.icon, "eidos-select-option-icon"),
|
|
282
281
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-select-option-label", children: option.label }),
|
|
283
282
|
isSelected && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Check, { className: "eidos-select-option-check-icon" })
|
|
284
283
|
]
|
|
@@ -292,7 +291,7 @@ var Select = _react2.default.forwardRef(
|
|
|
292
291
|
"div",
|
|
293
292
|
{
|
|
294
293
|
ref: triggerRef,
|
|
295
|
-
className: `eidos-select-trigger ${fullWidth ?
|
|
294
|
+
className: `eidos-select-trigger ${fullWidth ? "eidos-select-trigger--full-width" : ""}`,
|
|
296
295
|
onKeyDown: handleKeyDown,
|
|
297
296
|
tabIndex: disabled ? -1 : void 0,
|
|
298
297
|
role: "combobox",
|
|
@@ -301,7 +300,7 @@ var Select = _react2.default.forwardRef(
|
|
|
301
300
|
"aria-controls": isOpen ? `${id || "select"}-options` : void 0,
|
|
302
301
|
"aria-activedescendant": focusedIndex >= 0 ? `${id || "select"}-option-${focusedIndex}` : void 0,
|
|
303
302
|
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
304
|
-
|
|
303
|
+
_chunkKF2OGUADcjs.Input,
|
|
305
304
|
{
|
|
306
305
|
ref: inputRef,
|
|
307
306
|
value: selectedValues.size > 0 ? displayValue : "",
|
|
@@ -327,9 +326,9 @@ var Select = _react2.default.forwardRef(
|
|
|
327
326
|
"div",
|
|
328
327
|
{
|
|
329
328
|
ref,
|
|
330
|
-
className: `${"eidos-select-container"} ${fullWidth ?
|
|
329
|
+
className: `${"eidos-select-container"} ${fullWidth ? "eidos-select-container--full-width" : ""} ${className}`,
|
|
331
330
|
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
332
|
-
|
|
331
|
+
_chunkMKQVDEHIcjs.Dropdown,
|
|
333
332
|
{
|
|
334
333
|
open: isOpen,
|
|
335
334
|
onOpenChange: setIsOpen,
|
|
@@ -354,4 +353,4 @@ Select.displayName = "Select";
|
|
|
354
353
|
|
|
355
354
|
|
|
356
355
|
exports.Select = Select;
|
|
357
|
-
//# sourceMappingURL=chunk-
|
|
356
|
+
//# sourceMappingURL=chunk-BKUZF7CW.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-BKUZF7CW.cjs","../src/components/Select/Select.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-BKUZF7CW.cjs","sourcesContent":[null,"import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';\nimport { X, Check } from 'lucide-react';\nimport { Input } from '../Input/Input.component';\nimport { Dropdown } from '../Dropdown/Dropdown.component';\nimport type { SelectProps, SelectOption } from './Select.types';\nimport { renderIcon, devWarn } from '../../utils';\n\nexport const Select = React.forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n options = [],\n value,\n defaultValue,\n onChange,\n className = '',\n multiple = false,\n label,\n placeholder = 'Select an option...',\n disabled = false,\n inputProps = {},\n name,\n id,\n required = false,\n fullWidth = false,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight = '300px',\n autoWidth = true,\n clearable = true,\n autoOpen = false,\n dropdownProps = {},\n },\n ref,\n ) => {\n const isControlled = value !== undefined;\n\n // Lazy initializer: seed from defaultValue in uncontrolled mode.\n const [selectedValues, setSelectedValues] = useState<Set<string>>(() => {\n if (defaultValue !== undefined) {\n const vals = Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n return new Set(vals.filter((v) => v !== ''));\n }\n return new Set();\n });\n\n const [focusedIndex, setFocusedIndex] = useState(-1);\n // `Select` owns the open state and hands it to `Dropdown` as a controlled\n // value. It used to keep this flag *and* force the dropdown closed by\n // remounting it through a changing `key`, because `Dropdown`'s own state was\n // private - which meant this flag drove the ARIA attributes while reaching\n // nothing that renders, so the keyboard could not open the listbox at all.\n const [isOpen, setIsOpen] = useState(autoOpen);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const optionRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n // Kept in sync every render so the mount-only callback ref below can\n // read the latest values without needing them in its dependency array\n // (see `handleOptionsMount`).\n const optionsRef = useRef(options);\n optionsRef.current = options;\n const selectedValuesRef = useRef(selectedValues);\n selectedValuesRef.current = selectedValues;\n\n useEffect(() => {\n if (value !== undefined) {\n const values = Array.isArray(value) ? value : [value];\n\n const validValues = values.filter((v) => v !== '');\n setSelectedValues(new Set(validValues));\n }\n }, [value]);\n\n useEffect(() => {\n setFocusedIndex(-1);\n }, [options]);\n\n useEffect(() => {\n optionRefs.current = optionRefs.current.slice(0, options.length);\n }, [options.length]);\n\n const handleOptionSelect = useCallback(\n (option: SelectOption) => {\n if (option.disabled) return;\n\n const newSelectedValues = new Set(selectedValues);\n\n if (multiple) {\n if (newSelectedValues.has(option.value)) {\n newSelectedValues.delete(option.value);\n } else {\n newSelectedValues.add(option.value);\n }\n } else {\n if (newSelectedValues.has(option.value)) {\n newSelectedValues.clear();\n } else {\n newSelectedValues.clear();\n newSelectedValues.add(option.value);\n }\n }\n\n // In uncontrolled mode, own the state directly.\n // In controlled mode, let the parent drive via value prop + useEffect sync.\n if (!isControlled) {\n setSelectedValues(newSelectedValues);\n }\n\n if (onChange) {\n const newValue = multiple\n ? Array.from(newSelectedValues)\n : Array.from(newSelectedValues)[0] || '';\n onChange(newValue);\n }\n\n if (!multiple) {\n setIsOpen(false);\n // Focus is returned explicitly because a click lands on an option\n // `div`, which is not focusable - without this, choosing with the\n // mouse would leave focus on `<body>` and the field would be\n // unreachable by keyboard until tabbed to again.\n inputRef.current?.focus();\n }\n },\n [multiple, onChange, selectedValues, isControlled],\n );\n\n const handleClear = useCallback(\n (e?: React.MouseEvent) => {\n if (e) {\n e.stopPropagation();\n }\n if (!isControlled) {\n setSelectedValues(new Set());\n }\n\n setIsOpen(false);\n inputRef.current?.focus();\n if (onChange) {\n onChange(multiple ? [] : '');\n }\n },\n [multiple, onChange, isControlled],\n );\n\n // A form control with no accessible name is announced as just \"combobox\".\n // `Select` was the only field in the library that could not be labelled\n // without knowing about `inputProps`, and three call sites duly shipped\n // without one - so the gap is closed from both ends: a first-class `label`\n // prop, and this warning.\n //\n // Measured from the DOM rather than from props, because a caller may name\n // the field with an external `<label for>` - `Pagination`'s page-size\n // picker does exactly that, and a props-only check would cry wolf at it.\n // `HTMLInputElement.labels` covers both wrapping and `for` labels.\n useEffect(() => {\n const element = inputRef.current;\n if (!element) return;\n const named =\n (element.labels?.length ?? 0) > 0 ||\n element.hasAttribute('aria-label') ||\n element.hasAttribute('aria-labelledby');\n if (!named) {\n devWarn(\n 'select-missing-label',\n 'Select: no accessible name. Pass `label` for a visible one, or `inputProps={{ \"aria-label\": \"...\" }}` where it must stay visually unlabelled - otherwise the field is announced as just \"combobox\". A placeholder is not a label, and disappears as soon as something is chosen.',\n );\n }\n }, []);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(0);\n } else {\n setFocusedIndex((prev) => {\n const nextIndex = prev < options.length - 1 ? prev + 1 : 0;\n\n setTimeout(() => {\n optionRefs.current[nextIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }, 0);\n return nextIndex;\n });\n }\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(options.length - 1);\n } else {\n setFocusedIndex((prev) => {\n const nextIndex = prev > 0 ? prev - 1 : options.length - 1;\n\n setTimeout(() => {\n optionRefs.current[nextIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }, 0);\n return nextIndex;\n });\n }\n break;\n\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(0);\n } else if (focusedIndex >= 0 && focusedIndex < options.length) {\n const focusedOption = options[focusedIndex];\n handleOptionSelect(focusedOption);\n }\n break;\n\n case 'Escape':\n e.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n setFocusedIndex(-1);\n }\n break;\n\n case 'Home':\n e.preventDefault();\n if (isOpen) {\n setFocusedIndex(0);\n optionRefs.current[0]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n break;\n\n case 'End':\n e.preventDefault();\n if (isOpen) {\n const lastIndex = options.length - 1;\n setFocusedIndex(lastIndex);\n optionRefs.current[lastIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n break;\n\n default:\n if (isOpen && e.key.length === 1 && /[a-zA-Z0-9]/.test(e.key)) {\n const searchChar = e.key.toLowerCase();\n const foundIndex = options.findIndex(\n (option, index) =>\n index > focusedIndex && option.label.toLowerCase().startsWith(searchChar),\n );\n\n if (foundIndex !== -1) {\n setFocusedIndex(foundIndex);\n optionRefs.current[foundIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n } else {\n const foundFromStart = options.findIndex((option) =>\n option.label.toLowerCase().startsWith(searchChar),\n );\n if (foundFromStart !== -1) {\n setFocusedIndex(foundFromStart);\n optionRefs.current[foundFromStart]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n }\n }\n break;\n }\n },\n [disabled, isOpen, options, focusedIndex, handleOptionSelect],\n );\n\n // Scrolls the first selected option into view. Attached as the options\n // list's own ref below with an empty dependency array, so its identity\n // never changes and React only invokes it on genuine DOM mount/unmount -\n // i.e. exactly when the dropdown opens/closes (Dropdown unmounts its\n // `content` entirely while closed), not on every re-render while open.\n const handleOptionsMount = useCallback((el: HTMLDivElement | null) => {\n if (!el) return;\n const idx = optionsRef.current.findIndex((option) =>\n selectedValuesRef.current.has(option.value),\n );\n if (idx === -1) return;\n optionRefs.current[idx]?.scrollIntoView({ block: 'nearest' });\n }, []);\n\n // Past this many selections the full comma-joined label list becomes\n // unreadable in the trigger, so we switch to a compact \"N selected\" label.\n const COMPACT_LABEL_THRESHOLD = 2;\n\n const displayValue = useMemo(() => {\n if (selectedValues.size === 0) return '';\n\n if (multiple && selectedValues.size > COMPACT_LABEL_THRESHOLD) {\n return `${selectedValues.size} selected`;\n }\n\n const selectedOptions = options.filter((option) => selectedValues.has(option.value));\n const text = selectedOptions.map((option) => option.label).join(', ');\n return text;\n }, [options, selectedValues, multiple]);\n\n const selectContent = useMemo(\n () => (\n <div className={'eidos-select-options'} ref={handleOptionsMount}>\n {options.map((option, index) => {\n const isSelected = selectedValues.has(option.value);\n const isFocused = index === focusedIndex;\n return (\n <div\n key={option.id}\n // The trigger points `aria-activedescendant` at\n // `${id}-option-${focusedIndex}`, and nothing carried that id -\n // so the moment an option was hovered or arrowed to, the\n // attribute referenced an element that did not exist\n // (`aria-valid-attr-value`, critical). Invisible to axe until a\n // story left the listbox open, because the attribute is only\n // set once something is focused.\n id={`${id || 'select'}-option-${index}`}\n ref={(el) => {\n optionRefs.current[index] = el;\n }}\n className={`\n\t\t\t\t\t\t\t\t\t\t${'eidos-select-option'}\n\t\t\t\t\t\t\t\t\t\t${isSelected ? 'eidos-select-option--selected' : ''}\n\t\t\t\t\t\t\t\t\t\t${option.disabled ? 'eidos-select-option--disabled' : ''}\n\t\t\t\t\t\t\t\t\t\t${isFocused ? 'eidos-select-option--focused' : ''}\n\t\t\t\t\t\t\t\t\t`.trim()}\n onClick={() => handleOptionSelect(option)}\n onMouseEnter={() => setFocusedIndex(index)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n >\n {option.icon && renderIcon(option.icon, 'eidos-select-option-icon')}\n <span className={'eidos-select-option-label'}>{option.label}</span>\n {isSelected && <Check className={'eidos-select-option-check-icon'} />}\n </div>\n );\n })}\n </div>\n ),\n [options, selectedValues, focusedIndex, handleOptionSelect, handleOptionsMount, id],\n );\n\n const triggerElement = (\n <div\n ref={triggerRef}\n className={`eidos-select-trigger ${fullWidth ? 'eidos-select-trigger--full-width' : ''}`}\n onKeyDown={handleKeyDown}\n tabIndex={disabled ? -1 : undefined}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n // Only while the listbox exists. An `aria-controls` pointing at an id\n // that is not in the document is invalid, and the listbox only renders\n // while open - `Combobox`, `TagInput` and `CommandPalette` already gate\n // theirs this way. It could not be gated here before, because `isOpen`\n // did not track whether the panel had actually rendered.\n aria-controls={isOpen ? `${id || 'select'}-options` : undefined}\n aria-activedescendant={\n focusedIndex >= 0 ? `${id || 'select'}-option-${focusedIndex}` : undefined\n }\n >\n <Input\n ref={inputRef}\n value={selectedValues.size > 0 ? displayValue : ''}\n placeholder={selectedValues.size === 0 ? placeholder : ''}\n posIcon={selectedValues.size > 0 && clearable ? X : undefined}\n posIconButton={selectedValues.size > 0 && clearable}\n onPosIconClick={selectedValues.size > 0 && clearable ? handleClear : undefined}\n posIconLabel=\"Clear selection\"\n disabled={disabled}\n readOnly={true}\n isSelect={true}\n label={label}\n name={name}\n id={id}\n required={required}\n fullWidth={fullWidth}\n {...inputProps}\n />\n </div>\n );\n\n return (\n <div\n ref={ref}\n className={`${'eidos-select-container'} ${\n fullWidth ? 'eidos-select-container--full-width' : ''\n } ${className}`}\n >\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n trigger={triggerElement}\n content={\n <div id={`${id || 'select'}-options`} role=\"listbox\" aria-multiselectable={multiple}>\n {selectContent}\n </div>\n }\n minWidth={minWidth}\n maxWidth={maxWidth}\n minHeight={minHeight}\n maxHeight={maxHeight}\n autoWidth={autoWidth}\n fullWidth={fullWidth}\n triggerRef={triggerRef as React.RefObject<HTMLElement | null>}\n {...dropdownProps}\n />\n </div>\n );\n },\n);\n\nSelect.displayName = 'Select';\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkRZMQCVAScjs = require('./chunk-RZMQCVAS.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkR5WI5IGRcjs = require('./chunk-R5WI5IGR.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
var _chunkKXDGW6LJcjs = require('./chunk-KXDGW6LJ.cjs');
|
|
@@ -53,9 +53,9 @@ var Chip = ({
|
|
|
53
53
|
};
|
|
54
54
|
const hasBothControls = isClickable && isRemovable;
|
|
55
55
|
const body = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
56
|
-
preIcon &&
|
|
56
|
+
preIcon && _chunkR5WI5IGRcjs.renderIcon.call(void 0, preIcon, "eidos-chip--pre-icon"),
|
|
57
57
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-chip--copy", children }),
|
|
58
|
-
posIcon &&
|
|
58
|
+
posIcon && _chunkR5WI5IGRcjs.renderIcon.call(void 0, posIcon, "eidos-chip--pos-icon")
|
|
59
59
|
] });
|
|
60
60
|
const renderLink = (linkHref, className2, attributes) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
61
61
|
_chunkKXDGW6LJcjs.EidosLink,
|
|
@@ -72,7 +72,7 @@ var Chip = ({
|
|
|
72
72
|
);
|
|
73
73
|
if (href !== void 0 && !isRemovable) {
|
|
74
74
|
const link = renderLink(href, chipClasses, chipProps);
|
|
75
|
-
return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
75
|
+
return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRZMQCVAScjs.Tooltip, { message: tooltip, children: link }) : link;
|
|
76
76
|
}
|
|
77
77
|
const ChipElement = isClickable && !isRemovable ? "button" : "div";
|
|
78
78
|
const chipContent = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
@@ -107,10 +107,10 @@ var Chip = ({
|
|
|
107
107
|
]
|
|
108
108
|
}
|
|
109
109
|
);
|
|
110
|
-
return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
110
|
+
return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRZMQCVAScjs.Tooltip, { message: tooltip, children: chipContent }) : chipContent;
|
|
111
111
|
};
|
|
112
112
|
|
|
113
113
|
|
|
114
114
|
|
|
115
115
|
exports.Chip = Chip;
|
|
116
|
-
//# sourceMappingURL=chunk-
|
|
116
|
+
//# sourceMappingURL=chunk-BPVOQLCA.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-BPVOQLCA.cjs","../src/components/Chip/Chip.component.tsx"],"names":["className"],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACTA,2CAAkB;AAuEd,+CAAA;AAjEG,IAAM,KAAA,EAA4B,CAAC;AAAA,EACxC,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,KAAA;AAAA,EACX,UAAA,EAAY,KAAA;AAAA,EACZ,OAAA;AAAA,EACA,UAAA,EAAY,EAAA;AAAA,EACZ,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,YAAA,EAAc,CAAC,CAAC,QAAA,GAAW,KAAA,IAAS,KAAA,CAAA;AAC1C,EAAA,MAAM,YAAA,EAAc,CAAC,CAAC,QAAA;AAGtB,EAAA,MAAM,YAAA,EAAc;AAAA,IAClB,YAAA;AAAA,IACA,CAAA,YAAA,EAAe,OAAO,CAAA,CAAA;AACF,IAAA;AACD,IAAA;AACP,IAAA;AACG,IAAA;AACA,IAAA;AACF,IAAA;AACb,IAAA;AAGM,EAAA;AAEY,EAAA;AACD,IAAA;AACT,IAAA;AACV,EAAA;AAEsB,EAAA;AACF,IAAA;AACD,IAAA;AACR,IAAA;AACX,EAAA;AAiBwB,EAAA;AAGtB,EAAA;AACyB,IAAA;AAEtB,oBAAA;AAEsB,IAAA;AACzB,EAAA;AAOA,EAAA;AAIC,IAAA;AAAA,IAAA;AACK,MAAA;AACE,MAAA;AACN,MAAA;AACA,MAAA;AACWA,MAAAA;AACX,MAAA;AACmB,MAAA;AAElB,MAAA;AAAA,IAAA;AACH,EAAA;AAGyB,EAAA;AACZ,IAAA;AACI,IAAA;AACnB,EAAA;AAEoB,EAAA;AAGlB,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACD,MAAA;AACD,MAAA;AACL,MAAA;AAEH,MAAA;AACC,QAAA;AAGG,UAAA;AAAA,UAAA;AACM,YAAA;AACK,YAAA;AACD,YAAA;AACT,YAAA;AAEC,YAAA;AAAA,UAAA;AAIL,QAAA;AAIA,QAAA;AAAC,UAAA;AAAA,UAAA;AACW,YAAA;AACD,YAAA;AACT,YAAA;AACW,YAAA;AACN,YAAA;AAEL,YAAA;AAAuC,UAAA;AACzC,QAAA;AAAA,MAAA;AAAA,IAAA;AAEJ,EAAA;AAGe,EAAA;AACnB;ADrC2B;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-BPVOQLCA.cjs","sourcesContent":[null,"import React from 'react';\nimport { X } from 'lucide-react';\nimport type { ChipProps } from './Chip.types';\nimport { Tooltip } from '../Tooltip/Tooltip.component';\nimport { renderIcon } from '../../utils';\nimport { EidosLink } from '../LinkProvider/Link.component';\n\nexport const Chip: React.FC<ChipProps> = ({\n variant = 'filled',\n color = 'primary',\n size = 'md',\n disabled = false,\n fullWidth = false,\n tooltip,\n className = '',\n preIcon,\n posIcon,\n children,\n onClick,\n onRemove,\n href,\n target,\n rel,\n ...chipProps\n}) => {\n const isClickable = !!onClick || href !== undefined;\n const isRemovable = !!onRemove;\n\n // Build CSS classes\n const chipClasses = [\n 'eidos-chip',\n `eidos-chip--${variant}`,\n `eidos-chip--${color}`,\n `eidos-chip--${size}`,\n disabled && 'eidos-chip--disabled',\n isClickable && 'eidos-chip--clickable',\n isRemovable && 'eidos-chip--removable',\n fullWidth && 'eidos-chip--full-width',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const handleClick = () => {\n if (disabled || !onClick) return;\n onClick();\n };\n\n const handleRemove = (e: React.MouseEvent) => {\n e.stopPropagation(); // Prevent chip click when removing\n if (disabled || !onRemove) return;\n onRemove();\n };\n\n // A chip that is both clickable and removable holds *two* controls, so it\n // has to render them as siblings.\n //\n // The previous shape switched the outer element to a `<div>` when\n // removable - the comment said \"to avoid nested buttons\" - and then gave\n // that div `role=\"button\"` and `tabIndex={0}`. That is the same defect\n // wearing a different hat: a button containing a button, which is invalid\n // (`nested-interactive`) and leaves a screen reader announcing a control\n // inside a control. It is the same shape already fixed on `Dropdown` and\n // `DataGrid`'s rows.\n //\n // Now the outer element is a plain container whenever there is a remove\n // button, and the chip's own action moves to an inner `<button>` wrapping\n // just the content. Each control is separately reachable and separately\n // named.\n const hasBothControls = isClickable && isRemovable;\n\n const body = (\n <>\n {preIcon && renderIcon(preIcon, 'eidos-chip--pre-icon')}\n\n <span className=\"eidos-chip--copy\">{children}</span>\n\n {posIcon && renderIcon(posIcon, 'eidos-chip--pos-icon')}\n </>\n );\n\n // A link chip follows the same two-control rule: alone, the chip *is* the\n // link; with a remove button, the link moves to the inner action slot so\n // the two stay siblings.\n const renderLink = (\n linkHref: string,\n className: string,\n attributes?: React.AnchorHTMLAttributes<HTMLAnchorElement>,\n ) => (\n <EidosLink\n {...attributes}\n href={linkHref}\n target={target}\n rel={rel}\n className={className}\n disabled={disabled}\n onClick={onClick ? handleClick : undefined}\n >\n {body}\n </EidosLink>\n );\n\n if (href !== undefined && !isRemovable) {\n const link = renderLink(href, chipClasses, chipProps);\n return tooltip ? <Tooltip message={tooltip}>{link}</Tooltip> : link;\n }\n\n const ChipElement = isClickable && !isRemovable ? 'button' : 'div';\n\n const chipContent = (\n <ChipElement\n className={chipClasses}\n disabled={ChipElement === 'button' ? disabled : undefined}\n onClick={isClickable && !hasBothControls ? handleClick : undefined}\n {...chipProps}\n >\n {hasBothControls ? (\n href !== undefined ? (\n renderLink(href, 'eidos-chip--action')\n ) : (\n <button\n type=\"button\"\n className=\"eidos-chip--action\"\n onClick={handleClick}\n disabled={disabled}\n >\n {body}\n </button>\n )\n ) : (\n body\n )}\n\n {isRemovable && (\n <button\n className=\"eidos-chip--remove-button\"\n onClick={handleRemove}\n disabled={disabled}\n aria-label=\"Remove\"\n type=\"button\"\n >\n <X className=\"eidos-chip--remove-icon\" />\n </button>\n )}\n </ChipElement>\n );\n\n return tooltip ? <Tooltip message={tooltip}>{chipContent}</Tooltip> : chipContent;\n};\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
FOCUSABLE_SELECTOR
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PP6HS4GR.js";
|
|
4
4
|
|
|
5
5
|
// src/components/Tooltip/Tooltip.component.tsx
|
|
6
6
|
import { useState, useRef, useCallback, useEffect } from "react";
|
|
@@ -327,4 +327,4 @@ Tooltip.displayName = "Tooltip";
|
|
|
327
327
|
export {
|
|
328
328
|
Tooltip
|
|
329
329
|
};
|
|
330
|
-
//# sourceMappingURL=chunk-
|
|
330
|
+
//# sourceMappingURL=chunk-BUSMGQJ4.js.map
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DatePicker
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FSX7DDLO.js";
|
|
4
4
|
import {
|
|
5
5
|
Select
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2WDL2ZVP.js";
|
|
7
7
|
import {
|
|
8
8
|
Input
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-GE3QCXT7.js";
|
|
10
10
|
import {
|
|
11
11
|
Dropdown
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-OERK3T7E.js";
|
|
13
13
|
import {
|
|
14
14
|
Badge
|
|
15
15
|
} from "./chunk-3SKI6FXB.js";
|
|
16
16
|
import {
|
|
17
17
|
Button
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-GHUEVNNU.js";
|
|
19
19
|
|
|
20
20
|
// src/components/Table/TableFiltersDropdown.component.tsx
|
|
21
21
|
import { useMemo, useState, useEffect, useRef } from "react";
|
|
@@ -4443,4 +4443,4 @@ export {
|
|
|
4443
4443
|
sortableKeyboardCoordinates,
|
|
4444
4444
|
TableFiltersDropdown
|
|
4445
4445
|
};
|
|
4446
|
-
//# sourceMappingURL=chunk-
|
|
4446
|
+
//# sourceMappingURL=chunk-D2PXPX56.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Dropdown
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-OERK3T7E.js";
|
|
4
4
|
|
|
5
5
|
// src/components/ColorPicker/ColorPicker.component.tsx
|
|
6
6
|
import { useState, useRef, useEffect, useCallback } from "react";
|
|
@@ -532,4 +532,4 @@ ColorPicker.displayName = "ColorPicker";
|
|
|
532
532
|
export {
|
|
533
533
|
ColorPicker
|
|
534
534
|
};
|
|
535
|
-
//# sourceMappingURL=chunk-
|
|
535
|
+
//# sourceMappingURL=chunk-DCUIT7SI.js.map
|