eidos-ui 3.3.0 → 3.5.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 +17 -5
- package/dist/{Input.types-XrJTI0JC.d.ts → Input.types-CSDMaZNe.d.ts} +10 -0
- package/dist/{Input.types-DFZNyJGF.d.cts → Input.types-D7-sWq-q.d.cts} +10 -0
- package/dist/{Menu.types-DNIpjSAK.d.ts → Menu.types-BN4g1-3A.d.ts} +9 -0
- package/dist/{Menu.types-DwcuCZM7.d.cts → Menu.types-CTnUijv5.d.cts} +9 -0
- package/dist/{Select.types-B4kDpkGB.d.ts → Select.types-C2tGy1vj.d.ts} +11 -1
- package/dist/{Select.types-CAkT2ACt.d.cts → Select.types-ok-03rLo.d.cts} +11 -1
- package/dist/{Table.types-CPj-udMc.d.cts → Table.types-D-9tC0kJ.d.cts} +2 -3
- package/dist/{Table.types-CZZ7QWAI.d.ts → Table.types-D8pmgxKA.d.ts} +2 -3
- package/dist/{Toolbar.types-RN0klQzu.d.ts → Toolbar.types-CKnQC_TW.d.ts} +1 -1
- package/dist/{Toolbar.types-DSk8z2iy.d.cts → Toolbar.types-DUz2mxct.d.cts} +1 -1
- 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/checkbox/index.cjs +2 -2
- package/dist/checkbox/index.js +1 -1
- package/dist/chip/index.cjs +4 -4
- package/dist/chip/index.js +3 -3
- package/dist/{chunk-ITXDSQT2.js → chunk-24HKKSKX.js} +94 -102
- package/dist/chunk-24HKKSKX.js.map +1 -0
- package/dist/{chunk-GDQWSCJQ.js → chunk-26SO4LZ5.js} +4 -4
- package/dist/{chunk-GPRJYPIG.js → chunk-2JW3WSBF.js} +6 -4
- package/dist/chunk-2JW3WSBF.js.map +1 -0
- package/dist/{chunk-MHZIBV2C.js → chunk-2PCCGQOH.js} +90 -19
- package/dist/chunk-2PCCGQOH.js.map +1 -0
- package/dist/{chunk-3EPND5M2.cjs → chunk-2T7ZMMH5.cjs} +72 -19
- package/dist/chunk-2T7ZMMH5.cjs.map +1 -0
- package/dist/chunk-35LGEPLP.cjs +134 -0
- package/dist/chunk-35LGEPLP.cjs.map +1 -0
- package/dist/{chunk-R4M6SNUU.cjs → chunk-36JFXFM2.cjs} +48 -37
- package/dist/chunk-36JFXFM2.cjs.map +1 -0
- package/dist/{chunk-ND526PMG.cjs → chunk-3KBBJZHK.cjs} +11 -11
- package/dist/{chunk-ND526PMG.cjs.map → chunk-3KBBJZHK.cjs.map} +1 -1
- package/dist/{chunk-EH42ND5Q.cjs → chunk-3RWZC6OW.cjs} +5 -5
- package/dist/{chunk-EH42ND5Q.cjs.map → chunk-3RWZC6OW.cjs.map} +1 -1
- package/dist/{chunk-G5N3C6AU.cjs → chunk-3ZRFOKDM.cjs} +36 -36
- package/dist/{chunk-G5N3C6AU.cjs.map → chunk-3ZRFOKDM.cjs.map} +1 -1
- package/dist/{chunk-I5XR2V4A.cjs → chunk-4AO5RKV5.cjs} +87 -96
- package/dist/chunk-4AO5RKV5.cjs.map +1 -0
- package/dist/{chunk-5HUZYY54.js → chunk-4J25XZDI.js} +23 -13
- package/dist/chunk-4J25XZDI.js.map +1 -0
- package/dist/{chunk-FXZJL2AM.cjs → chunk-4JSTBA4F.cjs} +12 -6
- package/dist/chunk-4JSTBA4F.cjs.map +1 -0
- package/dist/{chunk-GG5YGESX.js → chunk-4LNTZPSQ.js} +4 -3
- package/dist/chunk-4LNTZPSQ.js.map +1 -0
- package/dist/{chunk-3EUTXQDB.js → chunk-5XH2PHT2.js} +31 -24
- package/dist/chunk-5XH2PHT2.js.map +1 -0
- package/dist/{chunk-OJDYTCMO.cjs → chunk-66UQTF57.cjs} +69 -62
- package/dist/chunk-66UQTF57.cjs.map +1 -0
- package/dist/{chunk-MCWTQT3M.cjs → chunk-6JHVXWDV.cjs} +125 -54
- package/dist/chunk-6JHVXWDV.cjs.map +1 -0
- package/dist/chunk-75GFIQRU.js +88 -0
- package/dist/chunk-75GFIQRU.js.map +1 -0
- package/dist/{chunk-55J4LEKT.cjs → chunk-7BFODYNL.cjs} +11 -8
- package/dist/chunk-7BFODYNL.cjs.map +1 -0
- package/dist/{chunk-TEVZHN5I.cjs → chunk-7VJCGKVP.cjs} +28 -15
- package/dist/chunk-7VJCGKVP.cjs.map +1 -0
- package/dist/{chunk-KQJ3IAFT.js → chunk-A3LMUPG3.js} +2 -2
- package/dist/{chunk-O2AACVSF.js → chunk-AR2ZOO6L.js} +3 -3
- package/dist/{chunk-Z5U4NJTW.cjs → chunk-BEOECPVJ.cjs} +50 -23
- package/dist/chunk-BEOECPVJ.cjs.map +1 -0
- package/dist/{chunk-E7FGY7BJ.js → chunk-BFKPJ627.js} +5 -4
- package/dist/chunk-BFKPJ627.js.map +1 -0
- package/dist/{chunk-M7PF4FKQ.js → chunk-D7SQ7LHJ.js} +6 -3
- package/dist/chunk-D7SQ7LHJ.js.map +1 -0
- package/dist/chunk-DA375AI6.cjs +88 -0
- package/dist/chunk-DA375AI6.cjs.map +1 -0
- package/dist/{chunk-H6CWTMAH.js → chunk-DGXHR6FV.js} +5 -2
- package/dist/chunk-DGXHR6FV.js.map +1 -0
- package/dist/{chunk-ZNWIHUHZ.cjs → chunk-DU5JKTHK.cjs} +12 -4
- package/dist/chunk-DU5JKTHK.cjs.map +1 -0
- package/dist/{chunk-HALVTKW7.js → chunk-FIVMMCGM.js} +72 -81
- package/dist/chunk-FIVMMCGM.js.map +1 -0
- package/dist/{chunk-RYOQYYDO.js → chunk-GIEDIAPD.js} +12 -6
- package/dist/chunk-GIEDIAPD.js.map +1 -0
- package/dist/{chunk-NQ4L6PYW.js → chunk-GOF6A4M4.js} +2 -2
- package/dist/{chunk-NQ4L6PYW.js.map → chunk-GOF6A4M4.js.map} +1 -1
- package/dist/{chunk-L23WWO3D.js → chunk-GPVGGBIR.js} +2 -2
- package/dist/{chunk-OAK7HFOJ.js → chunk-GWHZFX2H.js} +21 -16
- package/dist/chunk-GWHZFX2H.js.map +1 -0
- package/dist/{chunk-HYDNZXPU.js → chunk-H2RS6Z6Q.js} +41 -25
- package/dist/{chunk-HYDNZXPU.js.map → chunk-H2RS6Z6Q.js.map} +1 -1
- package/dist/{chunk-2QEKSRVX.js → chunk-HEX4IMLO.js} +4 -4
- package/dist/{chunk-QJRKXT54.cjs → chunk-HMEREPDB.cjs} +7 -7
- package/dist/{chunk-QJRKXT54.cjs.map → chunk-HMEREPDB.cjs.map} +1 -1
- package/dist/{chunk-TTO7JXDB.cjs → chunk-HNGFRRVZ.cjs} +3 -3
- package/dist/{chunk-TTO7JXDB.cjs.map → chunk-HNGFRRVZ.cjs.map} +1 -1
- package/dist/{chunk-CJGFRPAS.cjs → chunk-I6M6CVI2.cjs} +4 -4
- package/dist/chunk-I6M6CVI2.cjs.map +1 -0
- package/dist/chunk-J76JHN7J.cjs +225 -0
- package/dist/chunk-J76JHN7J.cjs.map +1 -0
- package/dist/{chunk-YW65NAKH.cjs → chunk-JCKGAAPZ.cjs} +7 -7
- package/dist/{chunk-YW65NAKH.cjs.map → chunk-JCKGAAPZ.cjs.map} +1 -1
- package/dist/{chunk-6CPCNQKV.js → chunk-JHX6JK3M.js} +79 -75
- package/dist/chunk-JHX6JK3M.js.map +1 -0
- package/dist/{chunk-YV57RSPD.js → chunk-JNY7TUDS.js} +49 -22
- package/dist/chunk-JNY7TUDS.js.map +1 -0
- package/dist/{chunk-O3LG7B2J.cjs → chunk-JPYJQ4TF.cjs} +13 -5
- package/dist/chunk-JPYJQ4TF.cjs.map +1 -0
- package/dist/{chunk-PY2376XI.js → chunk-JT4KVXJK.js} +68 -15
- package/dist/chunk-JT4KVXJK.js.map +1 -0
- package/dist/{chunk-AOGNTG3W.cjs → chunk-KBQD4JLK.cjs} +5 -4
- package/dist/chunk-KBQD4JLK.cjs.map +1 -0
- package/dist/{chunk-P2JM22BF.cjs → chunk-KIZVY57H.cjs} +82 -78
- package/dist/chunk-KIZVY57H.cjs.map +1 -0
- package/dist/{chunk-QQIALSTX.cjs → chunk-KPMIIGHH.cjs} +27 -17
- package/dist/chunk-KPMIIGHH.cjs.map +1 -0
- package/dist/{chunk-ZXJU3TQD.cjs → chunk-KREHT4AQ.cjs} +11 -10
- package/dist/chunk-KREHT4AQ.cjs.map +1 -0
- package/dist/{chunk-S4S4LB63.js → chunk-L65MHFMD.js} +11 -3
- package/dist/chunk-L65MHFMD.js.map +1 -0
- package/dist/{chunk-OGC44JFZ.cjs → chunk-LQXFXXMJ.cjs} +8 -7
- package/dist/chunk-LQXFXXMJ.cjs.map +1 -0
- package/dist/{chunk-25PSIDPC.js → chunk-MPIVBAMY.js} +79 -21
- package/dist/chunk-MPIVBAMY.js.map +1 -0
- package/dist/{chunk-7SVDYEKM.js → chunk-MQAOXZD4.js} +28 -14
- package/dist/chunk-MQAOXZD4.js.map +1 -0
- package/dist/{chunk-6CSUUQ5M.cjs → chunk-NOQF7UQ5.cjs} +6 -6
- package/dist/{chunk-6CSUUQ5M.cjs.map → chunk-NOQF7UQ5.cjs.map} +1 -1
- package/dist/{chunk-OU7DCYIA.js → chunk-O3QM3BFE.js} +2 -2
- package/dist/{chunk-WKDT2XFQ.js → chunk-OOCCSMWM.js} +4 -4
- package/dist/chunk-P4XZH3OR.js +225 -0
- package/dist/chunk-P4XZH3OR.js.map +1 -0
- package/dist/{chunk-ZWAFL2B3.cjs → chunk-PMSENLOA.cjs} +37 -27
- package/dist/chunk-PMSENLOA.cjs.map +1 -0
- package/dist/{chunk-L5W2XC6M.js → chunk-RHFD2Z5V.js} +8 -8
- package/dist/chunk-RHHZRTWM.js +134 -0
- package/dist/chunk-RHHZRTWM.js.map +1 -0
- package/dist/{chunk-NZO2I5AL.cjs → chunk-RJVHR45I.cjs} +7 -7
- package/dist/{chunk-NZO2I5AL.cjs.map → chunk-RJVHR45I.cjs.map} +1 -1
- package/dist/{chunk-E6SE552P.cjs → chunk-RUDXHT76.cjs} +41 -25
- package/dist/chunk-RUDXHT76.cjs.map +1 -0
- package/dist/{chunk-SXGCRHBZ.js → chunk-SDUGYJGW.js} +24 -14
- package/dist/chunk-SDUGYJGW.js.map +1 -0
- package/dist/{chunk-VPRUHE35.js → chunk-SFFKQQ5Z.js} +4 -4
- package/dist/{chunk-2RXQMQYW.js → chunk-SXL4DMZ7.js} +27 -17
- package/dist/{chunk-2RXQMQYW.js.map → chunk-SXL4DMZ7.js.map} +1 -1
- package/dist/{chunk-OAPOGYA5.cjs → chunk-TC5IC6OP.cjs} +7 -4
- package/dist/chunk-TC5IC6OP.cjs.map +1 -0
- package/dist/{chunk-T2KB3DJJ.js → chunk-THCTUBX6.js} +12 -4
- package/dist/chunk-THCTUBX6.js.map +1 -0
- package/dist/{chunk-NEYLNRVG.cjs → chunk-TTLFY76J.cjs} +21 -16
- package/dist/chunk-TTLFY76J.cjs.map +1 -0
- package/dist/{chunk-ZZSPQFMX.js → chunk-U233KQZX.js} +2 -1
- package/dist/{chunk-ZZSPQFMX.js.map → chunk-U233KQZX.js.map} +1 -1
- package/dist/{chunk-65PC3YDT.cjs → chunk-V4BZWBZT.cjs} +7 -7
- package/dist/{chunk-65PC3YDT.cjs.map → chunk-V4BZWBZT.cjs.map} +1 -1
- package/dist/{chunk-FKXKBJUI.cjs → chunk-VHO6JPRR.cjs} +2 -1
- package/dist/chunk-VHO6JPRR.cjs.map +1 -0
- package/dist/{chunk-3E7TKBQI.cjs → chunk-VQGLVBPL.cjs} +24 -14
- package/dist/chunk-VQGLVBPL.cjs.map +1 -0
- package/dist/{chunk-27ZWUEPE.js → chunk-WE2SBWZ6.js} +20 -9
- package/dist/chunk-WE2SBWZ6.js.map +1 -0
- package/dist/{chunk-TQGO5WK6.js → chunk-WNDDS367.js} +7 -6
- package/dist/chunk-WNDDS367.js.map +1 -0
- package/dist/{chunk-Q5KQVBQP.cjs → chunk-X3BVQBXD.cjs} +18 -16
- package/dist/chunk-X3BVQBXD.cjs.map +1 -0
- package/dist/{chunk-J5RMLZ4P.cjs → chunk-XERBOFYZ.cjs} +80 -22
- package/dist/chunk-XERBOFYZ.cjs.map +1 -0
- package/dist/{chunk-3CXULV4G.cjs → chunk-XRVRGRC3.cjs} +2 -2
- package/dist/{chunk-3CXULV4G.cjs.map → chunk-XRVRGRC3.cjs.map} +1 -1
- package/dist/{chunk-K7T25Y3A.cjs → chunk-XZLSHEHE.cjs} +41 -27
- package/dist/chunk-XZLSHEHE.cjs.map +1 -0
- package/dist/{chunk-JRLUZDKA.js → chunk-YAKTVIVK.js} +20 -7
- package/dist/chunk-YAKTVIVK.js.map +1 -0
- package/dist/{chunk-IJ4DXG7D.cjs → chunk-YJNQLH2L.cjs} +5 -2
- package/dist/chunk-YJNQLH2L.cjs.map +1 -0
- package/dist/{chunk-ZPDETHQ7.js → chunk-YP4HUBKN.js} +3 -3
- package/dist/{chunk-ZPDETHQ7.js.map → chunk-YP4HUBKN.js.map} +1 -1
- package/dist/{chunk-5WH3JMR5.js → chunk-YXRKBKFB.js} +7 -4
- package/dist/chunk-YXRKBKFB.js.map +1 -0
- package/dist/{chunk-ACNTH2OQ.cjs → chunk-ZMRINZIO.cjs} +98 -106
- package/dist/chunk-ZMRINZIO.cjs.map +1 -0
- package/dist/color-picker/index.cjs +4 -4
- package/dist/color-picker/index.d.cts +8 -0
- package/dist/color-picker/index.d.ts +8 -0
- 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 -2
- package/dist/command-palette/index.cjs.map +1 -1
- package/dist/command-palette/index.js +2 -1
- package/dist/context-menu/index.cjs +6 -6
- package/dist/context-menu/index.d.cts +1 -1
- package/dist/context-menu/index.d.ts +1 -1
- package/dist/context-menu/index.js +5 -5
- package/dist/conversation/index.cjs +8 -8
- package/dist/conversation/index.d.cts +1 -1
- package/dist/conversation/index.d.ts +1 -1
- package/dist/conversation/index.js +7 -7
- package/dist/data-grid/index.cjs +16 -16
- package/dist/data-grid/index.d.cts +14 -15
- package/dist/data-grid/index.d.ts +14 -15
- package/dist/data-grid/index.js +15 -15
- package/dist/date-picker/index.cjs +8 -8
- package/dist/date-picker/index.d.cts +12 -2
- package/dist/date-picker/index.d.ts +12 -2
- 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.d.cts +34 -0
- package/dist/dropdown/index.d.ts +34 -0
- package/dist/dropdown/index.js +2 -2
- package/dist/file-upload/index.cjs +2 -2
- package/dist/file-upload/index.js +1 -1
- package/dist/header/index.cjs +6 -6
- package/dist/header/index.js +5 -5
- package/dist/index.cjs +42 -42
- package/dist/index.css +112 -40
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +41 -41
- 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.d.cts +2 -2
- package/dist/input/index.d.ts +2 -2
- package/dist/input/index.js +3 -3
- package/dist/menu/index.cjs +5 -5
- package/dist/menu/index.d.cts +23 -2
- package/dist/menu/index.d.ts +23 -2
- 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 +3 -3
- package/dist/number-input/index.js +2 -2
- package/dist/o-t-p-input/index.cjs +2 -2
- package/dist/o-t-p-input/index.js +1 -1
- package/dist/page-layout/index.cjs +12 -12
- package/dist/page-layout/index.d.cts +2 -2
- package/dist/page-layout/index.d.ts +2 -2
- 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 -2
- package/dist/popover/index.cjs.map +1 -1
- package/dist/popover/index.d.cts +3 -1
- package/dist/popover/index.d.ts +3 -1
- package/dist/popover/index.js +2 -1
- package/dist/radio/index.cjs +2 -2
- package/dist/radio/index.js +1 -1
- package/dist/segmented-control/index.cjs +4 -4
- package/dist/segmented-control/index.js +3 -3
- package/dist/select/index.cjs +6 -6
- package/dist/select/index.d.cts +3 -3
- package/dist/select/index.d.ts +3 -3
- package/dist/select/index.js +5 -5
- package/dist/snackbar/index.cjs +5 -5
- package/dist/snackbar/index.d.cts +4 -0
- package/dist/snackbar/index.d.ts +4 -0
- 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/table/index.cjs +14 -14
- package/dist/table/index.d.cts +2 -2
- package/dist/table/index.d.ts +2 -2
- package/dist/table/index.js +13 -13
- 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 +11 -11
- package/dist/theme-editor/index.js +10 -10
- package/dist/theme-provider/index.cjs +3 -3
- package/dist/theme-provider/index.js +2 -2
- package/dist/toolbar/index.cjs +8 -8
- package/dist/toolbar/index.d.cts +3 -3
- package/dist/toolbar/index.d.ts +3 -3
- package/dist/toolbar/index.js +7 -7
- package/dist/tooltip/index.cjs +3 -2
- package/dist/tooltip/index.cjs.map +1 -1
- package/dist/tooltip/index.js +2 -1
- package/dist/virtual-list/index.cjs +2 -2
- package/dist/virtual-list/index.js +1 -1
- package/package.json +7 -2
- package/dist/chunk-25PSIDPC.js.map +0 -1
- package/dist/chunk-27ZWUEPE.js.map +0 -1
- package/dist/chunk-3E7TKBQI.cjs.map +0 -1
- package/dist/chunk-3EPND5M2.cjs.map +0 -1
- package/dist/chunk-3EUTXQDB.js.map +0 -1
- package/dist/chunk-55J4LEKT.cjs.map +0 -1
- package/dist/chunk-5HUZYY54.js.map +0 -1
- package/dist/chunk-5WH3JMR5.js.map +0 -1
- package/dist/chunk-6CPCNQKV.js.map +0 -1
- package/dist/chunk-7SVDYEKM.js.map +0 -1
- package/dist/chunk-ACNTH2OQ.cjs.map +0 -1
- package/dist/chunk-AOGNTG3W.cjs.map +0 -1
- package/dist/chunk-BNVQ34FD.js +0 -125
- package/dist/chunk-BNVQ34FD.js.map +0 -1
- package/dist/chunk-CJGFRPAS.cjs.map +0 -1
- package/dist/chunk-CUJBNRJJ.cjs +0 -38
- package/dist/chunk-CUJBNRJJ.cjs.map +0 -1
- package/dist/chunk-E6SE552P.cjs.map +0 -1
- package/dist/chunk-E7FGY7BJ.js.map +0 -1
- package/dist/chunk-EAJHEYZM.js +0 -38
- package/dist/chunk-EAJHEYZM.js.map +0 -1
- package/dist/chunk-FKXKBJUI.cjs.map +0 -1
- package/dist/chunk-FXZJL2AM.cjs.map +0 -1
- package/dist/chunk-GG5YGESX.js.map +0 -1
- package/dist/chunk-GPRJYPIG.js.map +0 -1
- package/dist/chunk-H6CWTMAH.js.map +0 -1
- package/dist/chunk-HALVTKW7.js.map +0 -1
- package/dist/chunk-I5XR2V4A.cjs.map +0 -1
- package/dist/chunk-IJ4DXG7D.cjs.map +0 -1
- package/dist/chunk-ITXDSQT2.js.map +0 -1
- package/dist/chunk-J5RMLZ4P.cjs.map +0 -1
- package/dist/chunk-JRLUZDKA.js.map +0 -1
- package/dist/chunk-K7T25Y3A.cjs.map +0 -1
- package/dist/chunk-L5Q6UDY3.js +0 -69
- package/dist/chunk-L5Q6UDY3.js.map +0 -1
- package/dist/chunk-M7PF4FKQ.js.map +0 -1
- package/dist/chunk-MCWTQT3M.cjs.map +0 -1
- package/dist/chunk-MHZIBV2C.js.map +0 -1
- package/dist/chunk-NEYLNRVG.cjs.map +0 -1
- package/dist/chunk-O3LG7B2J.cjs.map +0 -1
- package/dist/chunk-OAK7HFOJ.js.map +0 -1
- package/dist/chunk-OAPOGYA5.cjs.map +0 -1
- package/dist/chunk-OGC44JFZ.cjs.map +0 -1
- package/dist/chunk-OJDYTCMO.cjs.map +0 -1
- package/dist/chunk-P2JM22BF.cjs.map +0 -1
- package/dist/chunk-PY2376XI.js.map +0 -1
- package/dist/chunk-Q5KQVBQP.cjs.map +0 -1
- package/dist/chunk-QQIALSTX.cjs.map +0 -1
- package/dist/chunk-R4M6SNUU.cjs.map +0 -1
- package/dist/chunk-RYOQYYDO.js.map +0 -1
- package/dist/chunk-S4S4LB63.js.map +0 -1
- package/dist/chunk-SXGCRHBZ.js.map +0 -1
- package/dist/chunk-T2KB3DJJ.js.map +0 -1
- package/dist/chunk-TEVZHN5I.cjs.map +0 -1
- package/dist/chunk-TQGO5WK6.js.map +0 -1
- package/dist/chunk-VXO2MYYH.cjs +0 -125
- package/dist/chunk-VXO2MYYH.cjs.map +0 -1
- package/dist/chunk-WWYJNWJY.cjs +0 -69
- package/dist/chunk-WWYJNWJY.cjs.map +0 -1
- package/dist/chunk-YV57RSPD.js.map +0 -1
- package/dist/chunk-Z5U4NJTW.cjs.map +0 -1
- package/dist/chunk-ZNWIHUHZ.cjs.map +0 -1
- package/dist/chunk-ZWAFL2B3.cjs.map +0 -1
- package/dist/chunk-ZXJU3TQD.cjs.map +0 -1
- /package/dist/{chunk-GDQWSCJQ.js.map → chunk-26SO4LZ5.js.map} +0 -0
- /package/dist/{chunk-KQJ3IAFT.js.map → chunk-A3LMUPG3.js.map} +0 -0
- /package/dist/{chunk-O2AACVSF.js.map → chunk-AR2ZOO6L.js.map} +0 -0
- /package/dist/{chunk-L23WWO3D.js.map → chunk-GPVGGBIR.js.map} +0 -0
- /package/dist/{chunk-2QEKSRVX.js.map → chunk-HEX4IMLO.js.map} +0 -0
- /package/dist/{chunk-OU7DCYIA.js.map → chunk-O3QM3BFE.js.map} +0 -0
- /package/dist/{chunk-WKDT2XFQ.js.map → chunk-OOCCSMWM.js.map} +0 -0
- /package/dist/{chunk-L5W2XC6M.js.map → chunk-RHFD2Z5V.js.map} +0 -0
- /package/dist/{chunk-VPRUHE35.js.map → chunk-SFFKQQ5Z.js.map} +0 -0
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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; }
|
|
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 _chunk7VJCGKVPcjs = require('./chunk-7VJCGKVP.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkKIZVY57Hcjs = require('./chunk-KIZVY57H.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
|
|
11
|
+
var _chunk35LGEPLPcjs = require('./chunk-35LGEPLP.cjs');
|
|
11
12
|
|
|
12
13
|
// src/components/Select/Select.component.tsx
|
|
13
14
|
var _react = require('react'); var _react2 = _interopRequireDefault(_react);
|
|
@@ -21,6 +22,7 @@ var Select = _react2.default.forwardRef(
|
|
|
21
22
|
onChange,
|
|
22
23
|
className = "",
|
|
23
24
|
multiple = false,
|
|
25
|
+
label,
|
|
24
26
|
placeholder = "Select an option...",
|
|
25
27
|
disabled = false,
|
|
26
28
|
inputProps = {},
|
|
@@ -45,9 +47,8 @@ var Select = _react2.default.forwardRef(
|
|
|
45
47
|
}
|
|
46
48
|
return /* @__PURE__ */ new Set();
|
|
47
49
|
});
|
|
48
|
-
const [menuKey, setMenuKey] = _react.useState.call(void 0, 0);
|
|
49
50
|
const [focusedIndex, setFocusedIndex] = _react.useState.call(void 0, -1);
|
|
50
|
-
const [isOpen, setIsOpen] = _react.useState.call(void 0,
|
|
51
|
+
const [isOpen, setIsOpen] = _react.useState.call(void 0, autoOpen);
|
|
51
52
|
const inputRef = _react.useRef.call(void 0, null);
|
|
52
53
|
const triggerRef = _react.useRef.call(void 0, null);
|
|
53
54
|
const optionRefs = _react.useRef.call(void 0, []);
|
|
@@ -95,7 +96,7 @@ var Select = _react2.default.forwardRef(
|
|
|
95
96
|
}
|
|
96
97
|
if (!multiple) {
|
|
97
98
|
setIsOpen(false);
|
|
98
|
-
|
|
99
|
+
_optionalChain([inputRef, 'access', _ => _.current, 'optionalAccess', _2 => _2.focus, 'call', _3 => _3()]);
|
|
99
100
|
}
|
|
100
101
|
},
|
|
101
102
|
[multiple, onChange, selectedValues, isControlled]
|
|
@@ -109,13 +110,24 @@ var Select = _react2.default.forwardRef(
|
|
|
109
110
|
setSelectedValues(/* @__PURE__ */ new Set());
|
|
110
111
|
}
|
|
111
112
|
setIsOpen(false);
|
|
112
|
-
|
|
113
|
+
_optionalChain([inputRef, 'access', _4 => _4.current, 'optionalAccess', _5 => _5.focus, 'call', _6 => _6()]);
|
|
113
114
|
if (onChange) {
|
|
114
115
|
onChange(multiple ? [] : "");
|
|
115
116
|
}
|
|
116
117
|
},
|
|
117
118
|
[multiple, onChange, isControlled]
|
|
118
119
|
);
|
|
120
|
+
_react.useEffect.call(void 0, () => {
|
|
121
|
+
const element = inputRef.current;
|
|
122
|
+
if (!element) return;
|
|
123
|
+
const named = (_nullishCoalesce(_optionalChain([element, 'access', _7 => _7.labels, 'optionalAccess', _8 => _8.length]), () => ( 0))) > 0 || element.hasAttribute("aria-label") || element.hasAttribute("aria-labelledby");
|
|
124
|
+
if (!named) {
|
|
125
|
+
_chunk35LGEPLPcjs.devWarn.call(void 0,
|
|
126
|
+
"select-missing-label",
|
|
127
|
+
'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
|
+
);
|
|
129
|
+
}
|
|
130
|
+
}, []);
|
|
119
131
|
const handleKeyDown = _react.useCallback.call(void 0,
|
|
120
132
|
(e) => {
|
|
121
133
|
if (disabled) return;
|
|
@@ -129,7 +141,7 @@ var Select = _react2.default.forwardRef(
|
|
|
129
141
|
setFocusedIndex((prev) => {
|
|
130
142
|
const nextIndex = prev < options.length - 1 ? prev + 1 : 0;
|
|
131
143
|
setTimeout(() => {
|
|
132
|
-
_optionalChain([optionRefs, 'access',
|
|
144
|
+
_optionalChain([optionRefs, 'access', _9 => _9.current, 'access', _10 => _10[nextIndex], 'optionalAccess', _11 => _11.scrollIntoView, 'call', _12 => _12({
|
|
133
145
|
block: "nearest",
|
|
134
146
|
behavior: "smooth"
|
|
135
147
|
})]);
|
|
@@ -147,7 +159,7 @@ var Select = _react2.default.forwardRef(
|
|
|
147
159
|
setFocusedIndex((prev) => {
|
|
148
160
|
const nextIndex = prev > 0 ? prev - 1 : options.length - 1;
|
|
149
161
|
setTimeout(() => {
|
|
150
|
-
_optionalChain([optionRefs, 'access',
|
|
162
|
+
_optionalChain([optionRefs, 'access', _13 => _13.current, 'access', _14 => _14[nextIndex], 'optionalAccess', _15 => _15.scrollIntoView, 'call', _16 => _16({
|
|
151
163
|
block: "nearest",
|
|
152
164
|
behavior: "smooth"
|
|
153
165
|
})]);
|
|
@@ -172,14 +184,13 @@ var Select = _react2.default.forwardRef(
|
|
|
172
184
|
if (isOpen) {
|
|
173
185
|
setIsOpen(false);
|
|
174
186
|
setFocusedIndex(-1);
|
|
175
|
-
setMenuKey((prev) => prev + 1);
|
|
176
187
|
}
|
|
177
188
|
break;
|
|
178
189
|
case "Home":
|
|
179
190
|
e.preventDefault();
|
|
180
191
|
if (isOpen) {
|
|
181
192
|
setFocusedIndex(0);
|
|
182
|
-
_optionalChain([optionRefs, 'access',
|
|
193
|
+
_optionalChain([optionRefs, 'access', _17 => _17.current, 'access', _18 => _18[0], 'optionalAccess', _19 => _19.scrollIntoView, 'call', _20 => _20({
|
|
183
194
|
block: "nearest",
|
|
184
195
|
behavior: "smooth"
|
|
185
196
|
})]);
|
|
@@ -190,7 +201,7 @@ var Select = _react2.default.forwardRef(
|
|
|
190
201
|
if (isOpen) {
|
|
191
202
|
const lastIndex = options.length - 1;
|
|
192
203
|
setFocusedIndex(lastIndex);
|
|
193
|
-
_optionalChain([optionRefs, 'access',
|
|
204
|
+
_optionalChain([optionRefs, 'access', _21 => _21.current, 'access', _22 => _22[lastIndex], 'optionalAccess', _23 => _23.scrollIntoView, 'call', _24 => _24({
|
|
194
205
|
block: "nearest",
|
|
195
206
|
behavior: "smooth"
|
|
196
207
|
})]);
|
|
@@ -204,7 +215,7 @@ var Select = _react2.default.forwardRef(
|
|
|
204
215
|
);
|
|
205
216
|
if (foundIndex !== -1) {
|
|
206
217
|
setFocusedIndex(foundIndex);
|
|
207
|
-
_optionalChain([optionRefs, 'access',
|
|
218
|
+
_optionalChain([optionRefs, 'access', _25 => _25.current, 'access', _26 => _26[foundIndex], 'optionalAccess', _27 => _27.scrollIntoView, 'call', _28 => _28({
|
|
208
219
|
block: "nearest",
|
|
209
220
|
behavior: "smooth"
|
|
210
221
|
})]);
|
|
@@ -214,7 +225,7 @@ var Select = _react2.default.forwardRef(
|
|
|
214
225
|
);
|
|
215
226
|
if (foundFromStart !== -1) {
|
|
216
227
|
setFocusedIndex(foundFromStart);
|
|
217
|
-
_optionalChain([optionRefs, 'access',
|
|
228
|
+
_optionalChain([optionRefs, 'access', _29 => _29.current, 'access', _30 => _30[foundFromStart], 'optionalAccess', _31 => _31.scrollIntoView, 'call', _32 => _32({
|
|
218
229
|
block: "nearest",
|
|
219
230
|
behavior: "smooth"
|
|
220
231
|
})]);
|
|
@@ -232,7 +243,7 @@ var Select = _react2.default.forwardRef(
|
|
|
232
243
|
(option) => selectedValuesRef.current.has(option.value)
|
|
233
244
|
);
|
|
234
245
|
if (idx === -1) return;
|
|
235
|
-
_optionalChain([optionRefs, 'access',
|
|
246
|
+
_optionalChain([optionRefs, 'access', _33 => _33.current, 'access', _34 => _34[idx], 'optionalAccess', _35 => _35.scrollIntoView, 'call', _36 => _36({ block: "nearest" })]);
|
|
236
247
|
}, []);
|
|
237
248
|
const COMPACT_LABEL_THRESHOLD = 2;
|
|
238
249
|
const displayValue = _react.useMemo.call(void 0, () => {
|
|
@@ -251,6 +262,7 @@ var Select = _react2.default.forwardRef(
|
|
|
251
262
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
252
263
|
"div",
|
|
253
264
|
{
|
|
265
|
+
id: `${id || "select"}-option-${index}`,
|
|
254
266
|
ref: (el) => {
|
|
255
267
|
optionRefs.current[index] = el;
|
|
256
268
|
},
|
|
@@ -266,7 +278,7 @@ var Select = _react2.default.forwardRef(
|
|
|
266
278
|
"aria-selected": isSelected,
|
|
267
279
|
"aria-disabled": option.disabled,
|
|
268
280
|
children: [
|
|
269
|
-
option.icon &&
|
|
281
|
+
option.icon && _chunk35LGEPLPcjs.renderIcon.call(void 0, option.icon, "eidos-select-option-icon"),
|
|
270
282
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-select-option-label", children: option.label }),
|
|
271
283
|
isSelected && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Check, { className: "eidos-select-option-check-icon" })
|
|
272
284
|
]
|
|
@@ -274,22 +286,22 @@ var Select = _react2.default.forwardRef(
|
|
|
274
286
|
option.id
|
|
275
287
|
);
|
|
276
288
|
}) }),
|
|
277
|
-
[options, selectedValues, focusedIndex, handleOptionSelect, handleOptionsMount]
|
|
289
|
+
[options, selectedValues, focusedIndex, handleOptionSelect, handleOptionsMount, id]
|
|
278
290
|
);
|
|
279
291
|
const triggerElement = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
280
292
|
"div",
|
|
281
293
|
{
|
|
282
294
|
ref: triggerRef,
|
|
283
|
-
className: `eidos-select-trigger ${fullWidth ?
|
|
295
|
+
className: `eidos-select-trigger ${fullWidth ? _chunk35LGEPLPcjs.fullWidthModifier.call(void 0, "eidos-select-trigger") : ""}`,
|
|
284
296
|
onKeyDown: handleKeyDown,
|
|
285
297
|
tabIndex: disabled ? -1 : void 0,
|
|
286
298
|
role: "combobox",
|
|
287
299
|
"aria-expanded": isOpen,
|
|
288
300
|
"aria-haspopup": "listbox",
|
|
289
|
-
"aria-controls": `${id || "select"}-options
|
|
301
|
+
"aria-controls": isOpen ? `${id || "select"}-options` : void 0,
|
|
290
302
|
"aria-activedescendant": focusedIndex >= 0 ? `${id || "select"}-option-${focusedIndex}` : void 0,
|
|
291
303
|
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
292
|
-
|
|
304
|
+
_chunk7VJCGKVPcjs.Input,
|
|
293
305
|
{
|
|
294
306
|
ref: inputRef,
|
|
295
307
|
value: selectedValues.size > 0 ? displayValue : "",
|
|
@@ -297,9 +309,11 @@ var Select = _react2.default.forwardRef(
|
|
|
297
309
|
posIcon: selectedValues.size > 0 && clearable ? _lucidereact.X : void 0,
|
|
298
310
|
posIconButton: selectedValues.size > 0 && clearable,
|
|
299
311
|
onPosIconClick: selectedValues.size > 0 && clearable ? handleClear : void 0,
|
|
312
|
+
posIconLabel: "Clear selection",
|
|
300
313
|
disabled,
|
|
301
314
|
readOnly: true,
|
|
302
315
|
isSelect: true,
|
|
316
|
+
label,
|
|
303
317
|
name,
|
|
304
318
|
id,
|
|
305
319
|
required,
|
|
@@ -313,11 +327,12 @@ var Select = _react2.default.forwardRef(
|
|
|
313
327
|
"div",
|
|
314
328
|
{
|
|
315
329
|
ref,
|
|
316
|
-
className: `${"eidos-select-container"} ${fullWidth ?
|
|
330
|
+
className: `${"eidos-select-container"} ${fullWidth ? _chunk35LGEPLPcjs.fullWidthModifier.call(void 0, "eidos-select-container") : ""} ${className}`,
|
|
317
331
|
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
318
|
-
|
|
332
|
+
_chunkKIZVY57Hcjs.Dropdown,
|
|
319
333
|
{
|
|
320
|
-
|
|
334
|
+
open: isOpen,
|
|
335
|
+
onOpenChange: setIsOpen,
|
|
321
336
|
trigger: triggerElement,
|
|
322
337
|
content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { id: `${id || "select"}-options`, role: "listbox", "aria-multiselectable": multiple, children: selectContent }),
|
|
323
338
|
minWidth,
|
|
@@ -328,8 +343,7 @@ var Select = _react2.default.forwardRef(
|
|
|
328
343
|
fullWidth,
|
|
329
344
|
triggerRef,
|
|
330
345
|
...dropdownProps
|
|
331
|
-
}
|
|
332
|
-
menuKey
|
|
346
|
+
}
|
|
333
347
|
)
|
|
334
348
|
}
|
|
335
349
|
);
|
|
@@ -340,4 +354,4 @@ Select.displayName = "Select";
|
|
|
340
354
|
|
|
341
355
|
|
|
342
356
|
exports.Select = Select;
|
|
343
|
-
//# sourceMappingURL=chunk-
|
|
357
|
+
//# sourceMappingURL=chunk-XZLSHEHE.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-XZLSHEHE.cjs","../src/components/Select/Select.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-XZLSHEHE.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, fullWidthModifier, 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 ? fullWidthModifier('eidos-select-trigger') : ''}`}\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 ? fullWidthModifier('eidos-select-container') : ''\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,10 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Tooltip
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JNY7TUDS.js";
|
|
4
4
|
import {
|
|
5
|
+
devWarn,
|
|
5
6
|
fullWidthModifier,
|
|
6
7
|
renderIcon
|
|
7
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-RHHZRTWM.js";
|
|
8
9
|
|
|
9
10
|
// src/components/Input/Input.component.tsx
|
|
10
11
|
import { forwardRef, useState, useId } from "react";
|
|
@@ -27,6 +28,7 @@ var Input = forwardRef(
|
|
|
27
28
|
posIcon,
|
|
28
29
|
posIconButton = false,
|
|
29
30
|
onPosIconClick,
|
|
31
|
+
posIconLabel,
|
|
30
32
|
type = "text",
|
|
31
33
|
id,
|
|
32
34
|
name,
|
|
@@ -47,6 +49,14 @@ var Input = forwardRef(
|
|
|
47
49
|
const currentValue = isControlled ? restInputProps.value : localValue;
|
|
48
50
|
const shouldFloatLabel = isSelect ? false : currentValue || defaultValue;
|
|
49
51
|
const isRequired = required || Boolean("required" in restInputProps && restInputProps.required);
|
|
52
|
+
const errorId = `${inputId}-error`;
|
|
53
|
+
const describedBy = [restInputProps["aria-describedby"], error ? errorId : null].filter(Boolean).join(" ") || void 0;
|
|
54
|
+
if (posIcon && posIconButton && onPosIconClick && !posIconLabel) {
|
|
55
|
+
devWarn(
|
|
56
|
+
"input-pos-icon-label",
|
|
57
|
+
'Input: `posIconButton` renders an icon-only button, so it needs `posIconLabel` to have an accessible name. Falling back to "Input action".'
|
|
58
|
+
);
|
|
59
|
+
}
|
|
50
60
|
const handleNumberInput = (e) => {
|
|
51
61
|
if (type === "number") {
|
|
52
62
|
const allowedKeys = [
|
|
@@ -167,6 +177,8 @@ var Input = forwardRef(
|
|
|
167
177
|
disabled: disabled || loading,
|
|
168
178
|
onKeyDown: handleNumberInput,
|
|
169
179
|
...restInputProps,
|
|
180
|
+
"aria-invalid": error ? true : restInputProps["aria-invalid"],
|
|
181
|
+
"aria-describedby": describedBy,
|
|
170
182
|
value: currentValue,
|
|
171
183
|
onFocus: (e) => {
|
|
172
184
|
handleFocus();
|
|
@@ -186,7 +198,8 @@ var Input = forwardRef(
|
|
|
186
198
|
className: `eidos-input-password-toggle`,
|
|
187
199
|
onClick: () => setShowPassword(!showPassword),
|
|
188
200
|
disabled: disabled || loading,
|
|
189
|
-
|
|
201
|
+
"aria-label": showPassword ? "Hide password" : "Show password",
|
|
202
|
+
"aria-pressed": showPassword,
|
|
190
203
|
children: showPassword ? /* @__PURE__ */ jsx(EyeOff, { className: `eidos-input-password-toggle-icon` }) : /* @__PURE__ */ jsx(Eye, { className: `eidos-input-password-toggle-icon` })
|
|
191
204
|
}
|
|
192
205
|
),
|
|
@@ -197,7 +210,7 @@ var Input = forwardRef(
|
|
|
197
210
|
className: `eidos-input-clear-button`,
|
|
198
211
|
onClick: handleClear,
|
|
199
212
|
disabled: disabled || loading,
|
|
200
|
-
|
|
213
|
+
"aria-label": label ? `Clear ${label}` : "Clear",
|
|
201
214
|
children: /* @__PURE__ */ jsx(X, { className: `eidos-input-clear-button-icon` })
|
|
202
215
|
}
|
|
203
216
|
),
|
|
@@ -209,13 +222,13 @@ var Input = forwardRef(
|
|
|
209
222
|
className: `eidos-input-pos-icon-button`,
|
|
210
223
|
onClick: onPosIconClick,
|
|
211
224
|
disabled: disabled || loading,
|
|
212
|
-
|
|
225
|
+
"aria-label": posIconLabel ?? "Input action",
|
|
213
226
|
children: renderIcon(posIcon, `eidos-input-pos-icon-svg`)
|
|
214
227
|
}
|
|
215
228
|
),
|
|
216
229
|
isSelect && /* @__PURE__ */ jsx("span", { className: `eidos-input-select-chevron`, children: /* @__PURE__ */ jsx(ChevronDown, { className: `eidos-input-pos-icon-svg` }) })
|
|
217
230
|
] }),
|
|
218
|
-
error && /* @__PURE__ */ jsxs("div", { className: `eidos-input-error-message`, children: [
|
|
231
|
+
error && /* @__PURE__ */ jsxs("div", { id: errorId, className: `eidos-input-error-message`, children: [
|
|
219
232
|
/* @__PURE__ */ jsx(CircleAlert, { className: `eidos-input-error-icon` }),
|
|
220
233
|
/* @__PURE__ */ jsx("span", { children: error })
|
|
221
234
|
] })
|
|
@@ -229,4 +242,4 @@ Input.displayName = "Input";
|
|
|
229
242
|
export {
|
|
230
243
|
Input
|
|
231
244
|
};
|
|
232
|
-
//# sourceMappingURL=chunk-
|
|
245
|
+
//# sourceMappingURL=chunk-YAKTVIVK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Input/Input.component.tsx"],"sourcesContent":["import React, { forwardRef, useState, useId } from 'react';\nimport { Eye, EyeOff, CircleAlert, X, ChevronDown } from 'lucide-react';\nimport { renderIcon, fullWidthModifier, devWarn } from '../../utils';\nimport type { InputProps } from './Input.types';\nimport { Tooltip } from '../Tooltip/Tooltip.component';\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n variant = 'filled',\n color = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n className = '',\n width,\n label,\n error,\n disclaimerIcon,\n disclaimerContent,\n preIcon,\n posIcon,\n posIconButton = false,\n onPosIconClick,\n posIconLabel,\n type = 'text',\n id,\n name,\n required,\n isSelect = false,\n clearable = true,\n fullWidth = false,\n ...inputProps\n },\n ref,\n ) => {\n // Extract defaultValue so it never reaches the native <input> alongside `value`.\n // Passing both causes React's \"controlled/uncontrolled\" warning because we always\n // set value={currentValue} below - defaultValue is only needed to seed local state.\n const { defaultValue, ...restInputProps } = inputProps;\n\n const [showPassword, setShowPassword] = useState(false);\n const [localValue, setLocalValue] = useState(defaultValue || '');\n const [isFocused, setIsFocused] = useState(false);\n\n // Auto-generate id and name if not provided\n const generatedId = useId();\n const inputId = id || `input-${generatedId}`;\n const inputName = name || inputId;\n\n // Determine if using controlled or uncontrolled mode\n const isControlled = restInputProps.value !== undefined;\n const currentValue = isControlled ? restInputProps.value : localValue;\n\n // For select inputs, don't manage localValue - let the select component handle it\n // This prevents the Input's clear button from showing\n\n // Determine if label should float (only when there's content - static behavior)\n // For select inputs, keep label completely static (never float)\n const shouldFloatLabel = isSelect ? false : currentValue || defaultValue;\n\n // Check if field is required (from props or enhanced register function)\n const isRequired = required || Boolean('required' in restInputProps && restInputProps.required);\n\n // ── Error identification (SC 3.3.1) ───────────────────────────────\n //\n // The error was rendered as a red message next to the field and nothing\n // more: no `aria-invalid`, and no association between the two. Visually\n // obvious, entirely absent from the accessibility tree.\n //\n // `aria-describedby` is merged rather than assigned, because callers\n // pass their own - `TagInput` and `Combobox` both describe their fields\n // with hint text - and overwriting it would trade one missing\n // description for another.\n const errorId = `${inputId}-error`;\n const describedBy =\n [restInputProps['aria-describedby'], error ? errorId : null].filter(Boolean).join(' ') ||\n undefined;\n\n // An icon-only button with no name is announced as just \"button\", and\n // only the caller knows what the icon means. Warned rather than enforced\n // at the type level, which would be a breaking change - see the note on\n // `posIconLabel` in Input.types.ts.\n if (posIcon && posIconButton && onPosIconClick && !posIconLabel) {\n devWarn(\n 'input-pos-icon-label',\n 'Input: `posIconButton` renders an icon-only button, so it needs `posIconLabel` to have an accessible name. Falling back to \"Input action\".',\n );\n }\n\n // Handle number input to allow decimals and negative numbers\n const handleNumberInput = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (type === 'number') {\n const allowedKeys = [\n 'Backspace',\n 'Delete',\n 'Tab',\n 'Escape',\n 'Enter',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n ];\n const isNumber = /[0-9]/.test(e.key);\n const isDecimal = /[.,]/.test(e.key);\n const isMinus = e.key === '-';\n const isAllowedKey = allowedKeys.includes(e.key);\n const isControlKey = e.ctrlKey || e.metaKey;\n\n // Allow minus only at the beginning or when no text is selected\n if (isMinus) {\n const selectionStart = e.currentTarget.selectionStart || 0;\n const selectionEnd = e.currentTarget.selectionEnd || 0;\n const hasSelection = selectionStart !== selectionEnd;\n\n // Allow if at beginning or if replacing selected text\n if (selectionStart !== 0 && !hasSelection) {\n e.preventDefault();\n return;\n }\n }\n\n // Allow decimal only once\n if (isDecimal) {\n const currentValue = e.currentTarget.value;\n const hasDecimal = /[.,]/.test(currentValue);\n if (hasDecimal) {\n e.preventDefault();\n return;\n }\n }\n\n if (!isNumber && !isDecimal && !isMinus && !isAllowedKey && !isControlKey) {\n e.preventDefault();\n }\n }\n };\n\n // Handle input change for number inputs\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n // Only update localValue if uncontrolled and not a select input\n if (!isControlled && !isSelect) {\n setLocalValue(value);\n }\n restInputProps.onChange?.(e);\n };\n\n // Handle clear button\n const handleClear = () => {\n // Update localValue if uncontrolled\n if (!isControlled) {\n setLocalValue('');\n }\n\n // Create a proper synthetic event for React Hook Form\n const syntheticEvent = {\n target: {\n value: '',\n name: inputName,\n id: inputId,\n type: actualType,\n },\n } as React.ChangeEvent<HTMLInputElement>;\n\n // Call the form's onChange handler\n restInputProps.onChange?.(syntheticEvent);\n\n // Also try to update the input element directly\n if (ref && typeof ref === 'object' && ref.current) {\n ref.current.value = '';\n }\n };\n\n // Handle focus and blur\n const handleFocus = () => {\n setIsFocused(true);\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n };\n\n // Determine actual input type (handle password visibility)\n const actualType = type === 'password' ? (showPassword ? 'text' : 'password') : type;\n\n // Generate CSS classes\n const inputClasses = [\n 'eidos-input',\n `eidos-input--${variant}`,\n `eidos-input--${color}`,\n `eidos-input--${size}`,\n fullWidth && fullWidthModifier('eidos-input'),\n loading && `eidos-input--loading`,\n error && `eidos-input--error`,\n ]\n .filter(Boolean)\n .join(' ');\n\n const wrapperClasses = [\n 'eidos-input-wrapper',\n `eidos-input-wrapper--${variant}`,\n `eidos-input-wrapper--${color}`,\n `eidos-input-wrapper--${size}`,\n fullWidth && fullWidthModifier('eidos-input-wrapper'),\n loading && `eidos-input-wrapper--loading`,\n isFocused && `eidos-input-wrapper--focused`,\n error && `eidos-input-wrapper--error`,\n ]\n .filter(Boolean)\n .join(' ');\n\n const labelClasses = [\n 'eidos-input-label',\n shouldFloatLabel && `eidos-input-label--floating`,\n disclaimerIcon && `eidos-input-label--with-icon`,\n error && `eidos-input-label--error`,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={`eidos-input-container ${fullWidth ? fullWidthModifier('eidos-input-container') : ''} ${className}`}\n // `width` sizes the whole field, so it belongs on the container rather\n // than on the inner <input> (which is a `flex: 1 1 0` child of the\n // wrapper and only ever fills whatever the wrapper gives it). Applying\n // it here also keeps it a *preferred* width: `max-width: 100%` lets the\n // field shrink inside a narrower parent instead of overflowing it.\n style={\n width\n ? { width: typeof width === 'number' ? `${width}px` : width, maxWidth: '100%' }\n : undefined\n }\n >\n {label && (\n <label htmlFor={inputId} className={labelClasses}>\n <span className={`eidos-input-label-text`}>{label}</span>\n {isRequired && <span className={`eidos-input-required-asterisk`}>*</span>}\n {disclaimerIcon &&\n (disclaimerContent ? (\n <Tooltip message={disclaimerContent}>\n <span className={`eidos-input-disclaimer-icon`}>\n {renderIcon(disclaimerIcon, `eidos-input-disclaimer-icon-svg`)}\n </span>\n </Tooltip>\n ) : (\n <span className={`eidos-input-disclaimer-icon`}>\n {renderIcon(disclaimerIcon, `eidos-input-disclaimer-icon-svg`)}\n </span>\n ))}\n </label>\n )}\n\n <div className={wrapperClasses}>\n {preIcon && (\n <span className={`eidos-input-pre-icon`}>\n {renderIcon(preIcon, `eidos-input-pre-icon-svg`)}\n </span>\n )}\n\n <input\n ref={ref}\n id={inputId}\n name={inputName}\n type={actualType}\n className={inputClasses}\n disabled={disabled || loading}\n onKeyDown={handleNumberInput}\n {...restInputProps}\n aria-invalid={error ? true : restInputProps['aria-invalid']}\n aria-describedby={describedBy}\n value={currentValue}\n onFocus={(e) => {\n handleFocus();\n restInputProps.onFocus?.(e);\n }}\n onBlur={(e) => {\n handleBlur();\n restInputProps.onBlur?.(e);\n }}\n onChange={handleInputChange}\n />\n\n {type === 'password' && (\n <button\n type=\"button\"\n className={`eidos-input-password-toggle`}\n onClick={() => setShowPassword(!showPassword)}\n disabled={disabled || loading}\n // The name changes with state so a screen reader announces what\n // pressing it will do, not what it just did.\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n aria-pressed={showPassword}\n >\n {showPassword ? (\n <EyeOff className={`eidos-input-password-toggle-icon`} />\n ) : (\n <Eye className={`eidos-input-password-toggle-icon`} />\n )}\n </button>\n )}\n\n {/* Clear button - show when there's content and clearable is enabled (default: true) */}\n {currentValue &&\n String(currentValue).trim().length > 0 &&\n type !== 'password' &&\n !isSelect &&\n clearable !== false && (\n <button\n type=\"button\"\n className={`eidos-input-clear-button`}\n onClick={handleClear}\n disabled={disabled || loading}\n aria-label={label ? `Clear ${label}` : 'Clear'}\n >\n <X className={`eidos-input-clear-button-icon`} />\n </button>\n )}\n\n {posIcon && !posIconButton && (\n <span className={`eidos-input-pos-icon`}>\n {renderIcon(posIcon, `eidos-input-pos-icon-svg`)}\n </span>\n )}\n\n {posIcon && posIconButton && onPosIconClick && (\n <button\n type=\"button\"\n className={`eidos-input-pos-icon-button`}\n onClick={onPosIconClick}\n disabled={disabled || loading}\n aria-label={posIconLabel ?? 'Input action'}\n >\n {renderIcon(posIcon, `eidos-input-pos-icon-svg`)}\n </button>\n )}\n\n {/* Chevron for select inputs */}\n {isSelect && (\n <span className={`eidos-input-select-chevron`}>\n <ChevronDown className={`eidos-input-pos-icon-svg`} />\n </span>\n )}\n </div>\n\n {error && (\n <div id={errorId} className={`eidos-input-error-message`}>\n <CircleAlert className={`eidos-input-error-icon`} />\n <span>{error}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = 'Input';\n"],"mappings":"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","names":["currentValue"]}
|
|
@@ -20,6 +20,7 @@ var Checkbox = _react.forwardRef.call(void 0,
|
|
|
20
20
|
}, ref) => {
|
|
21
21
|
const generatedId = _react.useId.call(void 0, );
|
|
22
22
|
const checkboxId = id || `checkbox-${generatedId}`;
|
|
23
|
+
const errorId = `${checkboxId}-error`;
|
|
23
24
|
const internalRef = _react.useRef.call(void 0, null);
|
|
24
25
|
const isControlled = checked !== void 0;
|
|
25
26
|
const [localChecked, setLocalChecked] = _react.useState.call(void 0, _nullishCoalesce(defaultChecked, () => ( false)));
|
|
@@ -73,6 +74,8 @@ var Checkbox = _react.forwardRef.call(void 0,
|
|
|
73
74
|
type: "checkbox",
|
|
74
75
|
id: checkboxId,
|
|
75
76
|
className: "eidos-checkbox-input",
|
|
77
|
+
"aria-invalid": error ? true : void 0,
|
|
78
|
+
"aria-describedby": error ? errorId : void 0,
|
|
76
79
|
disabled,
|
|
77
80
|
onChange: handleChange,
|
|
78
81
|
onClick: handleClick,
|
|
@@ -86,7 +89,7 @@ var Checkbox = _react.forwardRef.call(void 0,
|
|
|
86
89
|
] }),
|
|
87
90
|
label && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-checkbox-label", children: label })
|
|
88
91
|
] }),
|
|
89
|
-
error && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "eidos-checkbox-error-message", children: [
|
|
92
|
+
error && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { id: errorId, className: "eidos-checkbox-error-message", children: [
|
|
90
93
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.CircleAlert, {}),
|
|
91
94
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: error })
|
|
92
95
|
] })
|
|
@@ -98,4 +101,4 @@ Checkbox.displayName = "Checkbox";
|
|
|
98
101
|
|
|
99
102
|
|
|
100
103
|
exports.Checkbox = Checkbox;
|
|
101
|
-
//# sourceMappingURL=chunk-
|
|
104
|
+
//# sourceMappingURL=chunk-YJNQLH2L.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-YJNQLH2L.cjs","../src/components/Checkbox/Checkbox.component.tsx"],"names":[],"mappings":"AAAA;ACAA,8BAAmF;AACnF,2CAA0C;AA6GhC,+CAAA;AA1GH,IAAM,SAAA,EAAW,+BAAA;AAAA,EACtB,CACE;AAAA,IACE,KAAA;AAAA,IACA,KAAA;AAAA,IACA,cAAA,EAAgB,KAAA;AAAA,IAChB,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAO,IAAA;AAAA,IACP,UAAA,EAAY,EAAA;AAAA,IACZ,SAAA,EAAW,KAAA;AAAA,IACX,EAAA;AAAA,IACA,OAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAG;AAAA,EACL,CAAA,EACA,GAAA,EAAA,GACG;AACH,IAAA,MAAM,YAAA,EAAc,0BAAA,CAAM;AAC1B,IAAA,MAAM,WAAA,EAAa,GAAA,GAAM,CAAA,SAAA,EAAY,WAAW,CAAA,CAAA;AAKnB,IAAA;AAGoB,IAAA;AAKhB,IAAA;AACyB,IAAA;AAG7B,IAAA;AAGb,IAAA;AACW,MAAA;AACa,QAAA;AACtC,MAAA;AACgB,IAAA;AAKA,IAAA;AACmB,MAAA;AACX,QAAA;AACS,QAAA;AACrB,UAAA;AACM,QAAA;AACqD,UAAA;AACrE,QAAA;AACF,MAAA;AACI,MAAA;AACN,IAAA;AAEiE,IAAA;AAC5C,MAAA;AACe,QAAA;AAClC,MAAA;AACY,sBAAA;AACd,IAAA;AAY+D,IAAA;AAClD,sBAAA;AACO,MAAA;AACpB,IAAA;AAEuB,IAAA;AACrB,MAAA;AACgC,MAAA;AACD,MAAA;AACnB,MAAA;AACH,MAAA;AAGA,IAAA;AAEY,IAAA;AACrB,MAAA;AACa,MAAA;AACI,MAAA;AACL,MAAA;AACU,MAAA;AAGb,IAAA;AAGQ,IAAA;AACG,sBAAA;AAChB,wBAAA;AAAC,UAAA;AAAA,UAAA;AACM,YAAA;AACA,YAAA;AACD,YAAA;AACM,YAAA;AACmB,YAAA;AACO,YAAA;AACpC,YAAA;AACU,YAAA;AACD,YAAA;AAC2B,YAAA;AAChC,YAAA;AAAA,UAAA;AACN,QAAA;AACiB,wBAAA;AACiB,UAAA;AACb,UAAA;AACrB,QAAA;AACgB,QAAA;AAClB,MAAA;AAGW,MAAA;AACM,wBAAA;AACN,wBAAA;AACT,MAAA;AAEJ,IAAA;AAEJ,EAAA;AACF;AAEuB;AD1C8B;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-YJNQLH2L.cjs","sourcesContent":[null,"import React, { forwardRef, useId, useRef, useState, useEffect, useCallback } from 'react';\nimport { Check, Minus, CircleAlert } from 'lucide-react';\nimport type { CheckboxProps } from './Checkbox.types';\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n label,\n error,\n indeterminate = false,\n color = 'primary',\n size = 'md',\n className = '',\n disabled = false,\n id,\n checked,\n defaultChecked,\n onChange,\n onClick,\n ...inputProps\n },\n ref,\n ) => {\n const generatedId = useId();\n const checkboxId = id || `checkbox-${generatedId}`;\n // Associates the visible error with the control. Without it the message\n // is just a red line of text sitting near the field - obvious to look\n // at, absent from the accessibility tree (SC 3.3.1). See the fuller\n // note in `Input`.\n const errorId = `${checkboxId}-error`;\n\n // Internal ref needed to imperatively set `indeterminate` (not a standard HTML attribute)\n const internalRef = useRef<HTMLInputElement>(null);\n\n // Track checked state for the visual control:\n // - controlled mode: `checked` prop drives everything\n // - uncontrolled mode: local state mirrors the native input\n const isControlled = checked !== undefined;\n const [localChecked, setLocalChecked] = useState<boolean>(defaultChecked ?? false);\n\n // `??` correctly handles `false` (falsy but defined): only falls back when `checked` is undefined\n const isChecked = checked ?? localChecked;\n\n // Imperatively set the indeterminate property – it has no HTML attribute equivalent\n useEffect(() => {\n if (internalRef.current) {\n internalRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n // Merge the forwarded ref with our internal ref so callers can still access the input.\n // useCallback(_, [ref]) prevents the ref callback from being a new function identity\n // every render, which would cause React to detach/re-attach the ref unnecessarily.\n const mergedRef = useCallback(\n (node: HTMLInputElement | null) => {\n internalRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n }\n },\n [ref],\n );\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setLocalChecked(e.target.checked);\n }\n onChange?.(e);\n };\n\n // Clicking anywhere in the surrounding <label> (e.g. the custom\n // `.eidos-checkbox-control` box) fires a click on the clicked element\n // *and* a second, browser-synthesized click targeted at this input -\n // both bubble up. A consumer that wraps Checkbox in its own click\n // handler (e.g. DataGrid toggling a cell on click) would otherwise see\n // that handler fire twice per click and cancel itself out. Stopping\n // propagation here only cancels the synthesized click's bubbling; the\n // original click (whichever element the user actually clicked) still\n // bubbles normally. Still forwards to a caller-supplied `onClick`\n // first, so passing one through doesn't silently disable this fix.\n const handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n onClick?.(e);\n e.stopPropagation();\n };\n\n const wrapperClasses = [\n 'eidos-checkbox-wrapper',\n `eidos-checkbox-wrapper--${color}`,\n `eidos-checkbox-wrapper--${size}`,\n disabled && 'eidos-checkbox-wrapper--disabled',\n error && 'eidos-checkbox-wrapper--error',\n ]\n .filter(Boolean)\n .join(' ');\n\n const controlClasses = [\n 'eidos-checkbox-control',\n isChecked && 'eidos-checkbox-control--checked',\n indeterminate && 'eidos-checkbox-control--indeterminate',\n disabled && 'eidos-checkbox-control--disabled',\n error && !disabled && 'eidos-checkbox-control--error',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={['eidos-checkbox-container', className].filter(Boolean).join(' ')}>\n <label className={wrapperClasses}>\n <input\n ref={mergedRef}\n type=\"checkbox\"\n id={checkboxId}\n className=\"eidos-checkbox-input\"\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n disabled={disabled}\n onChange={handleChange}\n onClick={handleClick}\n {...(isControlled ? { checked } : { defaultChecked })}\n {...inputProps}\n />\n <span className={controlClasses}>\n {isChecked && !indeterminate && <Check className=\"eidos-checkbox-icon\" />}\n {indeterminate && <Minus className=\"eidos-checkbox-icon\" />}\n </span>\n {label && <span className=\"eidos-checkbox-label\">{label}</span>}\n </label>\n\n {error && (\n <div id={errorId} className=\"eidos-checkbox-error-message\">\n <CircleAlert />\n <span>{error}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Input
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YAKTVIVK.js";
|
|
4
4
|
|
|
5
5
|
// src/components/InlineEdit/InlineEdit.component.tsx
|
|
6
6
|
import { useState, useRef, useCallback } from "react";
|
|
@@ -95,7 +95,7 @@ var InlineEdit = ({
|
|
|
95
95
|
{
|
|
96
96
|
role: "button",
|
|
97
97
|
tabIndex: disabled ? void 0 : 0,
|
|
98
|
-
"aria-label": disabled ? void 0 :
|
|
98
|
+
"aria-label": disabled || isEmpty ? void 0 : `${value}, click to edit`,
|
|
99
99
|
className: [
|
|
100
100
|
"eidos-inline-edit",
|
|
101
101
|
`eidos-inline-edit--${size}`,
|
|
@@ -122,4 +122,4 @@ var InlineEdit = ({
|
|
|
122
122
|
export {
|
|
123
123
|
InlineEdit
|
|
124
124
|
};
|
|
125
|
-
//# sourceMappingURL=chunk-
|
|
125
|
+
//# sourceMappingURL=chunk-YP4HUBKN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/InlineEdit/InlineEdit.component.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback } from 'react';\nimport { Pencil } from 'lucide-react';\nimport { Input } from '../Input/Input.component';\nimport type { InlineEditProps } from './InlineEdit.types';\nimport './InlineEdit.scss';\n\nexport const InlineEdit: React.FC<InlineEditProps> = ({\n value,\n onChange,\n onConfirm,\n onCancel,\n editing: editingProp,\n onEditingChange,\n type = 'text',\n placeholder,\n trigger = 'click',\n size = 'md',\n fullWidth = false,\n disabled = false,\n confirmOnBlur = true,\n renderDisplay,\n showEditIcon = true,\n inputVariant = 'outlined',\n className = '',\n}) => {\n const isControlled = editingProp !== undefined;\n const [internalEditing, setInternalEditing] = useState(false);\n const editing = isControlled ? editingProp : internalEditing;\n\n // Track the value at the moment editing begins so Esc can revert to it.\n const valueAtEditStart = useRef(value);\n\n // Local draft while editing - keeps Input value in sync without forcing the\n // parent to wire `onChange` just to see live keystrokes.\n const [draft, setDraft] = useState(value);\n\n // ------------------------------------------------------------------\n // Editing state helpers\n // ------------------------------------------------------------------\n\n const openEdit = useCallback(() => {\n if (disabled) return;\n valueAtEditStart.current = value;\n setDraft(value);\n if (!isControlled) setInternalEditing(true);\n onEditingChange?.(true);\n }, [disabled, isControlled, onEditingChange, value]);\n\n const closeEdit = useCallback(() => {\n if (!isControlled) setInternalEditing(false);\n onEditingChange?.(false);\n }, [isControlled, onEditingChange]);\n\n const confirm = useCallback(() => {\n closeEdit();\n onConfirm?.(draft);\n }, [closeEdit, draft, onConfirm]);\n\n const cancel = useCallback(() => {\n // Revert the draft AND propagate the original value so the parent stays in\n // sync when `onChange` is used to maintain external state.\n setDraft(valueAtEditStart.current);\n onChange?.(valueAtEditStart.current);\n closeEdit();\n onCancel?.();\n }, [closeEdit, onChange, onCancel]);\n\n // ------------------------------------------------------------------\n // Input handlers\n // ------------------------------------------------------------------\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setDraft(e.target.value);\n onChange?.(e.target.value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n // Stop propagation so parent grids/tables don't double-handle Enter.\n e.stopPropagation();\n confirm();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n cancel();\n }\n // Tab and Arrow keys intentionally bubble - consumers like DataGrid own\n // Tab-to-next-cell and arrow-key navigation at the container level.\n };\n\n const handleBlur = () => {\n if (confirmOnBlur) confirm();\n };\n\n // ------------------------------------------------------------------\n // Trigger props for display mode\n // ------------------------------------------------------------------\n\n const displayTriggerProps =\n trigger === 'doubleClick' ? { onDoubleClick: openEdit } : { onClick: openEdit };\n\n // ------------------------------------------------------------------\n // Render: edit mode\n // ------------------------------------------------------------------\n\n if (editing) {\n return (\n <Input\n type={type}\n variant={inputVariant}\n size={size}\n value={draft}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n placeholder={placeholder}\n fullWidth={fullWidth}\n clearable={false}\n autoFocus\n className={`eidos-inline-edit eidos-inline-edit--editing ${className}`}\n />\n );\n }\n\n // ------------------------------------------------------------------\n // Render: display mode\n // ------------------------------------------------------------------\n\n const isEmpty = !value;\n\n return (\n <span\n role=\"button\"\n tabIndex={disabled ? undefined : 0}\n aria-label={disabled ? undefined :
|
|
1
|
+
{"version":3,"sources":["../src/components/InlineEdit/InlineEdit.component.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback } from 'react';\nimport { Pencil } from 'lucide-react';\nimport { Input } from '../Input/Input.component';\nimport type { InlineEditProps } from './InlineEdit.types';\nimport './InlineEdit.scss';\n\nexport const InlineEdit: React.FC<InlineEditProps> = ({\n value,\n onChange,\n onConfirm,\n onCancel,\n editing: editingProp,\n onEditingChange,\n type = 'text',\n placeholder,\n trigger = 'click',\n size = 'md',\n fullWidth = false,\n disabled = false,\n confirmOnBlur = true,\n renderDisplay,\n showEditIcon = true,\n inputVariant = 'outlined',\n className = '',\n}) => {\n const isControlled = editingProp !== undefined;\n const [internalEditing, setInternalEditing] = useState(false);\n const editing = isControlled ? editingProp : internalEditing;\n\n // Track the value at the moment editing begins so Esc can revert to it.\n const valueAtEditStart = useRef(value);\n\n // Local draft while editing - keeps Input value in sync without forcing the\n // parent to wire `onChange` just to see live keystrokes.\n const [draft, setDraft] = useState(value);\n\n // ------------------------------------------------------------------\n // Editing state helpers\n // ------------------------------------------------------------------\n\n const openEdit = useCallback(() => {\n if (disabled) return;\n valueAtEditStart.current = value;\n setDraft(value);\n if (!isControlled) setInternalEditing(true);\n onEditingChange?.(true);\n }, [disabled, isControlled, onEditingChange, value]);\n\n const closeEdit = useCallback(() => {\n if (!isControlled) setInternalEditing(false);\n onEditingChange?.(false);\n }, [isControlled, onEditingChange]);\n\n const confirm = useCallback(() => {\n closeEdit();\n onConfirm?.(draft);\n }, [closeEdit, draft, onConfirm]);\n\n const cancel = useCallback(() => {\n // Revert the draft AND propagate the original value so the parent stays in\n // sync when `onChange` is used to maintain external state.\n setDraft(valueAtEditStart.current);\n onChange?.(valueAtEditStart.current);\n closeEdit();\n onCancel?.();\n }, [closeEdit, onChange, onCancel]);\n\n // ------------------------------------------------------------------\n // Input handlers\n // ------------------------------------------------------------------\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setDraft(e.target.value);\n onChange?.(e.target.value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n // Stop propagation so parent grids/tables don't double-handle Enter.\n e.stopPropagation();\n confirm();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n cancel();\n }\n // Tab and Arrow keys intentionally bubble - consumers like DataGrid own\n // Tab-to-next-cell and arrow-key navigation at the container level.\n };\n\n const handleBlur = () => {\n if (confirmOnBlur) confirm();\n };\n\n // ------------------------------------------------------------------\n // Trigger props for display mode\n // ------------------------------------------------------------------\n\n const displayTriggerProps =\n trigger === 'doubleClick' ? { onDoubleClick: openEdit } : { onClick: openEdit };\n\n // ------------------------------------------------------------------\n // Render: edit mode\n // ------------------------------------------------------------------\n\n if (editing) {\n return (\n <Input\n type={type}\n variant={inputVariant}\n size={size}\n value={draft}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n placeholder={placeholder}\n fullWidth={fullWidth}\n clearable={false}\n autoFocus\n className={`eidos-inline-edit eidos-inline-edit--editing ${className}`}\n />\n );\n }\n\n // ------------------------------------------------------------------\n // Render: display mode\n // ------------------------------------------------------------------\n\n const isEmpty = !value;\n\n return (\n <span\n role=\"button\"\n tabIndex={disabled ? undefined : 0}\n // The visible text has to be *in* the name (SC 2.5.3 Label in Name).\n //\n // This was a flat \"Click to edit\", which shares nothing with the value\n // on screen - so a speech-input user saying what they can see (\"Page\n // title\") matched nothing, and a screen reader announced an edit\n // affordance without ever saying what it edits. Every `InlineEdit` on\n // a page was also announced identically.\n //\n // Left off entirely when there is no value: the placeholder is then\n // the visible text and `textContent` already provides the name.\n aria-label={disabled || isEmpty ? undefined : `${value}, click to edit`}\n className={[\n 'eidos-inline-edit',\n `eidos-inline-edit--${size}`,\n fullWidth ? 'eidos-inline-edit--full-width' : '',\n disabled ? 'eidos-inline-edit--disabled' : '',\n isEmpty ? 'eidos-inline-edit--empty' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...(disabled ? {} : displayTriggerProps)}\n onKeyDown={\n disabled\n ? undefined\n : (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n openEdit();\n }\n }\n }\n >\n <span className=\"eidos-inline-edit__text\">\n {renderDisplay\n ? renderDisplay(value)\n : value || <span className=\"eidos-inline-edit__placeholder\">{placeholder}</span>}\n </span>\n {!disabled && showEditIcon && (\n <span className=\"eidos-inline-edit__icon\" aria-hidden>\n <Pencil />\n </span>\n )}\n </span>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Tooltip
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JNY7TUDS.js";
|
|
4
4
|
import {
|
|
5
5
|
fullWidthModifier,
|
|
6
6
|
renderIcon
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-RHHZRTWM.js";
|
|
8
8
|
|
|
9
9
|
// src/components/Textarea/Textarea.component.tsx
|
|
10
10
|
import { forwardRef, useState, useId } from "react";
|
|
@@ -33,6 +33,7 @@ var Textarea = forwardRef(
|
|
|
33
33
|
}, ref) => {
|
|
34
34
|
const generatedId = useId();
|
|
35
35
|
const textareaId = id || `textarea-${generatedId}`;
|
|
36
|
+
const errorId = `${textareaId}-error`;
|
|
36
37
|
const { defaultValue, ...restTextareaProps } = textareaProps;
|
|
37
38
|
const isControlled = restTextareaProps.value !== void 0;
|
|
38
39
|
const [localValue, setLocalValue] = useState(defaultValue != null ? String(defaultValue) : "");
|
|
@@ -90,6 +91,8 @@ var Textarea = forwardRef(
|
|
|
90
91
|
ref,
|
|
91
92
|
id: textareaId,
|
|
92
93
|
className: textareaClasses,
|
|
94
|
+
"aria-invalid": error ? true : void 0,
|
|
95
|
+
"aria-describedby": error ? errorId : void 0,
|
|
93
96
|
rows,
|
|
94
97
|
maxLength,
|
|
95
98
|
disabled: disabled || loading,
|
|
@@ -112,7 +115,7 @@ var Textarea = forwardRef(
|
|
|
112
115
|
maxLength
|
|
113
116
|
] })
|
|
114
117
|
] }),
|
|
115
|
-
error && /* @__PURE__ */ jsxs("div", { className: "eidos-textarea-error-message", children: [
|
|
118
|
+
error && /* @__PURE__ */ jsxs("div", { id: errorId, className: "eidos-textarea-error-message", children: [
|
|
116
119
|
/* @__PURE__ */ jsx(CircleAlert, { className: "eidos-textarea-error-icon" }),
|
|
117
120
|
/* @__PURE__ */ jsx("span", { children: error })
|
|
118
121
|
] })
|
|
@@ -124,4 +127,4 @@ Textarea.displayName = "Textarea";
|
|
|
124
127
|
export {
|
|
125
128
|
Textarea
|
|
126
129
|
};
|
|
127
|
-
//# sourceMappingURL=chunk-
|
|
130
|
+
//# sourceMappingURL=chunk-YXRKBKFB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Textarea/Textarea.component.tsx"],"sourcesContent":["import React, { forwardRef, useState, useId } from 'react';\nimport { CircleAlert } from 'lucide-react';\nimport { renderIcon, fullWidthModifier } from '../../utils';\nimport type { TextareaProps } from './Textarea.types';\nimport { Tooltip } from '../Tooltip/Tooltip.component';\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n variant = 'filled',\n color = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n className = '',\n fullWidth = false,\n label,\n error,\n disclaimerIcon,\n disclaimerContent,\n required,\n rows = 4,\n resize = 'vertical',\n showCount = false,\n maxLength,\n id,\n ...textareaProps\n },\n ref,\n ) => {\n const generatedId = useId();\n const textareaId = id || `textarea-${generatedId}`;\n // Associates the visible error with the control. Without it the message\n // is just a red line of text sitting near the field - obvious to look\n // at, absent from the accessibility tree (SC 3.3.1). See the fuller\n // note in `Input`.\n const errorId = `${textareaId}-error`;\n\n // Extract defaultValue so it never reaches the native <textarea> alongside `value`.\n // Same reasoning as Input: we always set value={currentValue}, so having defaultValue\n // in the spread as well triggers React's controlled/uncontrolled warning.\n const { defaultValue, ...restTextareaProps } = textareaProps;\n\n // Determine if using controlled or uncontrolled mode\n const isControlled = restTextareaProps.value !== undefined;\n const [localValue, setLocalValue] = useState(defaultValue != null ? String(defaultValue) : '');\n const [isFocused, setIsFocused] = useState(false);\n\n const currentValue = isControlled ? restTextareaProps.value : localValue;\n\n // Label floats when the field has content (same logic as Input)\n const shouldFloatLabel = Boolean(currentValue) || Boolean(defaultValue);\n\n const isRequired =\n required || Boolean('required' in restTextareaProps && restTextareaProps.required);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (!isControlled) {\n setLocalValue(e.target.value);\n }\n restTextareaProps.onChange?.(e);\n };\n\n // ── Class lists ──────────────────────────────────────────────────────────\n\n const containerClasses = [\n 'eidos-textarea-container',\n fullWidth && fullWidthModifier('eidos-textarea-container'),\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const wrapperClasses = [\n 'eidos-textarea-wrapper',\n `eidos-textarea-wrapper--${variant}`,\n `eidos-textarea-wrapper--${color}`,\n `eidos-textarea-wrapper--${size}`,\n fullWidth && fullWidthModifier('eidos-textarea-wrapper'),\n loading && 'eidos-textarea-wrapper--loading',\n isFocused && 'eidos-textarea-wrapper--focused',\n error && 'eidos-textarea-wrapper--error',\n ]\n .filter(Boolean)\n .join(' ');\n\n const textareaClasses = [\n 'eidos-textarea',\n `eidos-textarea--${variant}`,\n `eidos-textarea--${color}`,\n `eidos-textarea--${size}`,\n `eidos-textarea--resize-${resize}`,\n fullWidth && fullWidthModifier('eidos-textarea'),\n loading && 'eidos-textarea--loading',\n error && 'eidos-textarea--error',\n ]\n .filter(Boolean)\n .join(' ');\n\n const labelClasses = [\n 'eidos-textarea-label',\n shouldFloatLabel && 'eidos-textarea-label--floating',\n disclaimerIcon && 'eidos-textarea-label--with-icon',\n error && 'eidos-textarea-label--error',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={containerClasses}>\n {label && (\n <label htmlFor={textareaId} className={labelClasses}>\n <span className=\"eidos-textarea-label-text\">{label}</span>\n {isRequired && <span className=\"eidos-textarea-required-asterisk\">*</span>}\n {disclaimerIcon &&\n (disclaimerContent ? (\n <Tooltip message={disclaimerContent}>\n <span className=\"eidos-textarea-disclaimer-icon\">\n {renderIcon(disclaimerIcon, 'eidos-textarea-disclaimer-icon-svg')}\n </span>\n </Tooltip>\n ) : (\n <span className=\"eidos-textarea-disclaimer-icon\">\n {renderIcon(disclaimerIcon, 'eidos-textarea-disclaimer-icon-svg')}\n </span>\n ))}\n </label>\n )}\n\n <div className={wrapperClasses}>\n <textarea\n ref={ref}\n id={textareaId}\n className={textareaClasses}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n rows={rows}\n maxLength={maxLength}\n disabled={disabled || loading}\n {...restTextareaProps}\n value={currentValue}\n onFocus={(e) => {\n setIsFocused(true);\n restTextareaProps.onFocus?.(e);\n }}\n onBlur={(e) => {\n setIsFocused(false);\n restTextareaProps.onBlur?.(e);\n }}\n onChange={handleChange}\n />\n\n {showCount && maxLength && (\n <span className=\"eidos-textarea-count\">\n {String(currentValue ?? '').length}/{maxLength}\n </span>\n )}\n </div>\n\n {error && (\n <div id={errorId} className=\"eidos-textarea-error-message\">\n <CircleAlert className=\"eidos-textarea-error-icon\" />\n <span>{error}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nTextarea.displayName = 'Textarea';\n"],"mappings":"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","names":[]}
|