eidos-ui 1.0.1 → 1.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/LICENSE +22 -22
- package/README.md +227 -225
- package/dist/Combobox.types-B7ozlnA9.d.cts +35 -0
- package/dist/Combobox.types-DkigkEh2.d.ts +35 -0
- package/dist/SegmentedControl.types-CK8EiShd.d.ts +35 -0
- package/dist/SegmentedControl.types-Dm4SnwCK.d.cts +35 -0
- package/dist/Select.types-B4kDpkGB.d.ts +42 -0
- package/dist/Select.types-CAkT2ACt.d.cts +42 -0
- package/dist/accordion/index.cjs +2 -2
- package/dist/accordion/index.cjs.map +1 -1
- package/dist/accordion/index.js +1 -1
- package/dist/alert/index.cjs +5 -5
- package/dist/alert/index.cjs.map +1 -1
- package/dist/alert/index.js +4 -4
- package/dist/avatar/index.cjs +2 -2
- package/dist/avatar/index.cjs.map +1 -1
- package/dist/avatar/index.js +1 -1
- package/dist/badge/index.cjs.map +1 -1
- package/dist/breadcrumb/index.cjs +2 -2
- package/dist/breadcrumb/index.cjs.map +1 -1
- package/dist/breadcrumb/index.js +1 -1
- package/dist/button/index.cjs +4 -4
- package/dist/button/index.cjs.map +1 -1
- package/dist/button/index.js +3 -3
- package/dist/button-group/index.cjs +2 -2
- package/dist/button-group/index.cjs.map +1 -1
- package/dist/button-group/index.js +1 -1
- package/dist/card/index.cjs +2 -2
- package/dist/card/index.cjs.map +1 -1
- package/dist/card/index.js +1 -1
- package/dist/checkbox/index.cjs +2 -2
- package/dist/checkbox/index.cjs.map +1 -1
- package/dist/checkbox/index.js +1 -1
- package/dist/chip/index.cjs +4 -4
- package/dist/chip/index.cjs.map +1 -1
- package/dist/chip/index.js +3 -3
- package/dist/{chunk-OHUVWPFJ.js → chunk-2BC4M4QZ.js} +1 -1
- package/dist/chunk-2BC4M4QZ.js.map +1 -0
- package/dist/{chunk-OT3VZLN4.js → chunk-2BXCIWL7.js} +3 -3
- package/dist/chunk-2BXCIWL7.js.map +1 -0
- package/dist/{chunk-6QFT3BUD.cjs → chunk-2ROKOO22.cjs} +1 -1
- package/dist/chunk-2ROKOO22.cjs.map +1 -0
- package/dist/{chunk-AOV32YBE.js → chunk-2RXQMQYW.js} +1 -1
- package/dist/chunk-2RXQMQYW.js.map +1 -0
- package/dist/{chunk-VYV45YOK.cjs → chunk-2U7UJOOB.cjs} +17 -17
- package/dist/chunk-2U7UJOOB.cjs.map +1 -0
- package/dist/{chunk-UTENJWSE.cjs → chunk-366R4GKR.cjs} +1 -1
- package/dist/chunk-366R4GKR.cjs.map +1 -0
- package/dist/{chunk-TQCNQKWF.cjs → chunk-3CXULV4G.cjs} +1 -1
- package/dist/chunk-3CXULV4G.cjs.map +1 -0
- package/dist/{chunk-PEPYVWGY.cjs → chunk-3EPND5M2.cjs} +3 -3
- package/dist/chunk-3EPND5M2.cjs.map +1 -0
- package/dist/chunk-3ETWFS2N.cjs.map +1 -1
- package/dist/{chunk-GL4DHGQE.js → chunk-3HMKE2GJ.js} +5 -5
- package/dist/chunk-3HMKE2GJ.js.map +1 -0
- package/dist/{chunk-QYHTMEI5.js → chunk-3LBWAUCR.js} +1 -1
- package/dist/chunk-3LBWAUCR.js.map +1 -0
- package/dist/{chunk-E2B33QB7.js → chunk-3LHQUOGP.js} +4 -4
- package/dist/chunk-3LHQUOGP.js.map +1 -0
- package/dist/chunk-3RUIKBH4.cjs.map +1 -1
- package/dist/{chunk-DK4S3EHG.js → chunk-3TUCQAYL.js} +1 -1
- package/dist/chunk-3TUCQAYL.js.map +1 -0
- package/dist/{chunk-BBOUUHLO.js → chunk-3VRMTWUS.js} +5 -5
- package/dist/chunk-3VRMTWUS.js.map +1 -0
- package/dist/{chunk-SXF3TCYA.js → chunk-4BKTBV2I.js} +1 -1
- package/dist/chunk-4BKTBV2I.js.map +1 -0
- package/dist/{chunk-P74HNSNJ.cjs → chunk-4BQM5F76.cjs} +3 -3
- package/dist/chunk-4BQM5F76.cjs.map +1 -0
- package/dist/{chunk-Z7S4UQKY.js → chunk-4LM33LDV.js} +2 -2
- package/dist/chunk-4LM33LDV.js.map +1 -0
- package/dist/{chunk-GRH57M3E.js → chunk-4M3LZLOH.js} +3 -3
- package/dist/chunk-4M3LZLOH.js.map +1 -0
- package/dist/{chunk-M56IGNH7.cjs → chunk-4UJ7LG4W.cjs} +3 -3
- package/dist/chunk-4UJ7LG4W.cjs.map +1 -0
- package/dist/{chunk-P6ZBENAG.js → chunk-56B6RLOE.js} +3 -3
- package/dist/chunk-56B6RLOE.js.map +1 -0
- package/dist/{chunk-XSGUFMT4.js → chunk-5CLC3FJO.js} +1 -1
- package/dist/chunk-5CLC3FJO.js.map +1 -0
- package/dist/{chunk-VLC2OZV3.cjs → chunk-5O73AALP.cjs} +1 -1
- package/dist/chunk-5O73AALP.cjs.map +1 -0
- package/dist/{chunk-F54MVGKO.js → chunk-5WROPW7Z.js} +4 -4
- package/dist/chunk-5WROPW7Z.js.map +1 -0
- package/dist/{chunk-H56YUMFB.cjs → chunk-6A2ZKVST.cjs} +5 -5
- package/dist/chunk-6A2ZKVST.cjs.map +1 -0
- package/dist/{chunk-CJUZDUXW.cjs → chunk-6RGJAQCU.cjs} +5 -5
- package/dist/chunk-6RGJAQCU.cjs.map +1 -0
- package/dist/{chunk-P2BTQ33C.cjs → chunk-6U2H26A4.cjs} +4 -4
- package/dist/chunk-6U2H26A4.cjs.map +1 -0
- package/dist/{chunk-6USUVU6J.js → chunk-6ZAT5CGB.js} +1 -1
- package/dist/chunk-6ZAT5CGB.js.map +1 -0
- package/dist/{chunk-YKECQKOV.cjs → chunk-7AHZTHXR.cjs} +9 -9
- package/dist/chunk-7AHZTHXR.cjs.map +1 -0
- package/dist/{chunk-QYK4ECSZ.js → chunk-7HEUWGYW.js} +1 -1
- package/dist/chunk-7HEUWGYW.js.map +1 -0
- package/dist/{chunk-KF64C4QI.js → chunk-A3NE2C7C.js} +2 -2
- package/dist/chunk-A3NE2C7C.js.map +1 -0
- package/dist/{chunk-6GAIQ2IY.cjs → chunk-A5JVDHML.cjs} +239 -116
- package/dist/chunk-A5JVDHML.cjs.map +1 -0
- package/dist/{chunk-6HGDQ4BM.js → chunk-A5LHCAQY.js} +209 -86
- package/dist/chunk-A5LHCAQY.js.map +1 -0
- package/dist/{chunk-LTOHGCU4.cjs → chunk-A7Z2QAFZ.cjs} +7 -7
- package/dist/chunk-A7Z2QAFZ.cjs.map +1 -0
- package/dist/{chunk-ICHPPNFV.js → chunk-ALGX5X4N.js} +5 -5
- package/dist/chunk-ALGX5X4N.js.map +1 -0
- package/dist/{chunk-FNUOTM44.cjs → chunk-AYMD4D4M.cjs} +3 -3
- package/dist/chunk-AYMD4D4M.cjs.map +1 -0
- package/dist/{chunk-HQ4KZRFH.js → chunk-BOB5JJ7F.js} +3 -3
- package/dist/chunk-BOB5JJ7F.js.map +1 -0
- package/dist/{chunk-BTPCSBGP.js → chunk-CJVC3A4O.js} +2 -2
- package/dist/chunk-CJVC3A4O.js.map +1 -0
- package/dist/{chunk-ZBGTVTQJ.js → chunk-CMOBXLNA.js} +1 -1
- package/dist/chunk-CMOBXLNA.js.map +1 -0
- package/dist/{chunk-POX6JZLO.cjs → chunk-DKZTDYH5.cjs} +5 -5
- package/dist/chunk-DKZTDYH5.cjs.map +1 -0
- package/dist/{chunk-S25WB7KJ.js → chunk-DRXPTACG.js} +1 -1
- package/dist/chunk-DRXPTACG.js.map +1 -0
- package/dist/{chunk-XMRMCWSQ.js → chunk-DW2YDWGN.js} +5 -5
- package/dist/chunk-DW2YDWGN.js.map +1 -0
- package/dist/chunk-DZUJEN5N.cjs.map +1 -1
- package/dist/chunk-EACNRR3C.cjs.map +1 -1
- package/dist/{chunk-7IOOFKG3.js → chunk-EF4Y6Q35.js} +1 -1
- package/dist/chunk-EF4Y6Q35.js.map +1 -0
- package/dist/chunk-EQ6BNPTL.cjs.map +1 -1
- package/dist/{chunk-VZ43OLU6.cjs → chunk-EQEV7GPT.cjs} +7 -7
- package/dist/chunk-EQEV7GPT.cjs.map +1 -0
- package/dist/{chunk-ICJ3SV5I.cjs → chunk-FKXKBJUI.cjs} +1 -1
- package/dist/chunk-FKXKBJUI.cjs.map +1 -0
- package/dist/{chunk-BFYSYUA6.cjs → chunk-FMPXSF3H.cjs} +11 -11
- package/dist/chunk-FMPXSF3H.cjs.map +1 -0
- package/dist/chunk-FQZ6F7FQ.cjs.map +1 -1
- package/dist/{chunk-KV2FG7AN.cjs → chunk-FRUOA2QU.cjs} +1 -1
- package/dist/chunk-FRUOA2QU.cjs.map +1 -0
- package/dist/{chunk-CDV2OAS3.cjs → chunk-G5IGADJI.cjs} +7 -7
- package/dist/chunk-G5IGADJI.cjs.map +1 -0
- package/dist/{chunk-TBMVUI7S.cjs → chunk-GOR642KK.cjs} +1 -1
- package/dist/chunk-GOR642KK.cjs.map +1 -0
- package/dist/{chunk-XJBMEDQ5.js → chunk-H6CWTMAH.js} +1 -1
- package/dist/chunk-H6CWTMAH.js.map +1 -0
- package/dist/{chunk-2ZWBN3LK.cjs → chunk-HFZ5FKRG.cjs} +1 -1
- package/dist/chunk-HFZ5FKRG.cjs.map +1 -0
- package/dist/{chunk-QGZF5MOS.cjs → chunk-HLNKIAE5.cjs} +7 -7
- package/dist/chunk-HLNKIAE5.cjs.map +1 -0
- package/dist/{chunk-GI7WPGP2.cjs → chunk-HNUTV3HR.cjs} +7 -7
- package/dist/chunk-HNUTV3HR.cjs.map +1 -0
- package/dist/chunk-I44YNYI6.cjs.map +1 -1
- package/dist/chunk-I6UOIS4J.cjs.map +1 -1
- package/dist/{chunk-LEZ4HSBD.cjs → chunk-IC2M4N7R.cjs} +34 -34
- package/dist/chunk-IC2M4N7R.cjs.map +1 -0
- package/dist/{chunk-G2FANEA2.cjs → chunk-IJ4DXG7D.cjs} +1 -1
- package/dist/chunk-IJ4DXG7D.cjs.map +1 -0
- package/dist/{chunk-SOGUWOSQ.cjs → chunk-IJYYHBZC.cjs} +3 -3
- package/dist/chunk-IJYYHBZC.cjs.map +1 -0
- package/dist/{chunk-SAFSEXMU.cjs → chunk-ISABZ2VX.cjs} +8 -8
- package/dist/chunk-ISABZ2VX.cjs.map +1 -0
- package/dist/{chunk-VTAABT55.js → chunk-IV4LM3MB.js} +6 -6
- package/dist/chunk-IV4LM3MB.js.map +1 -0
- package/dist/{chunk-KO2MKZDW.cjs → chunk-IXZMKIV5.cjs} +1 -1
- package/dist/chunk-IXZMKIV5.cjs.map +1 -0
- package/dist/{chunk-7KGV6YCG.cjs → chunk-IYWAZEFI.cjs} +1 -1
- package/dist/chunk-IYWAZEFI.cjs.map +1 -0
- package/dist/{chunk-E3XATJ63.js → chunk-IZBJW37N.js} +6 -6
- package/dist/chunk-IZBJW37N.js.map +1 -0
- package/dist/{chunk-HO7P6IJO.js → chunk-JC4WLVBG.js} +2 -2
- package/dist/chunk-JC4WLVBG.js.map +1 -0
- package/dist/{chunk-O6B4KB4D.js → chunk-JMD3P4CY.js} +5 -5
- package/dist/chunk-JMD3P4CY.js.map +1 -0
- package/dist/{chunk-T56K5IKQ.js → chunk-JV7Z3D3U.js} +2 -2
- package/dist/chunk-JV7Z3D3U.js.map +1 -0
- package/dist/{chunk-DFADZZ3K.js → chunk-K7IFNKMN.js} +3 -3
- package/dist/chunk-K7IFNKMN.js.map +1 -0
- package/dist/{chunk-C7F2VFAI.cjs → chunk-KIXFSXIN.cjs} +1 -1
- package/dist/chunk-KIXFSXIN.cjs.map +1 -0
- package/dist/{chunk-V5JNYS77.cjs → chunk-KV3V2CPH.cjs} +1 -1
- package/dist/chunk-KV3V2CPH.cjs.map +1 -0
- package/dist/{chunk-5TGBNYZK.cjs → chunk-KVIL4EP4.cjs} +1 -1
- package/dist/chunk-KVIL4EP4.cjs.map +1 -0
- package/dist/{chunk-PWIA4XQD.js → chunk-LUSLBNSG.js} +1 -1
- package/dist/chunk-LUSLBNSG.js.map +1 -0
- package/dist/{chunk-73EKJU4G.js → chunk-LYH3EKKQ.js} +1 -1
- package/dist/chunk-LYH3EKKQ.js.map +1 -0
- package/dist/{chunk-D7PGZ3M3.cjs → chunk-MW2S7PZ7.cjs} +5 -5
- package/dist/chunk-MW2S7PZ7.cjs.map +1 -0
- package/dist/{chunk-LQ3C3OR2.js → chunk-MZZ4SAFY.js} +1 -1
- package/dist/chunk-MZZ4SAFY.js.map +1 -0
- package/dist/{chunk-KKOZX64Z.js → chunk-NEQXEVHM.js} +1 -1
- package/dist/chunk-NEQXEVHM.js.map +1 -0
- package/dist/{chunk-NDLMU6HJ.js → chunk-NFIK3KMT.js} +9 -9
- package/dist/chunk-NFIK3KMT.js.map +1 -0
- package/dist/{chunk-3YPTYI7R.js → chunk-NQ4L6PYW.js} +1 -1
- package/dist/chunk-NQ4L6PYW.js.map +1 -0
- package/dist/{chunk-JFA5ABVE.js → chunk-NSITXZBU.js} +1 -1
- package/dist/chunk-NSITXZBU.js.map +1 -0
- package/dist/{chunk-2YQE26EK.js → chunk-O3I3RBZJ.js} +1 -1
- package/dist/chunk-O3I3RBZJ.js.map +1 -0
- package/dist/{chunk-O5ZPSZNY.cjs → chunk-OGKD5PLS.cjs} +6 -6
- package/dist/chunk-OGKD5PLS.cjs.map +1 -0
- package/dist/{chunk-7R7IFWGB.cjs → chunk-OZZHOEN5.cjs} +1 -1
- package/dist/chunk-OZZHOEN5.cjs.map +1 -0
- package/dist/{chunk-6P4WYB3B.js → chunk-P2GCAVUZ.js} +2 -2
- package/dist/chunk-P2GCAVUZ.js.map +1 -0
- package/dist/{chunk-L3UPSLJ5.cjs → chunk-PA4IT2XQ.cjs} +19 -19
- package/dist/chunk-PA4IT2XQ.cjs.map +1 -0
- package/dist/{chunk-N7HX5635.cjs → chunk-PJC7NZUV.cjs} +3 -3
- package/dist/chunk-PJC7NZUV.cjs.map +1 -0
- package/dist/{chunk-QP2A5ZMK.cjs → chunk-PTBBY4ZX.cjs} +1 -1
- package/dist/chunk-PTBBY4ZX.cjs.map +1 -0
- package/dist/{chunk-VFYG7GAH.js → chunk-PY2376XI.js} +2 -2
- package/dist/chunk-PY2376XI.js.map +1 -0
- package/dist/{chunk-R5UNLPQZ.cjs → chunk-Q3GNKF74.cjs} +1 -1
- package/dist/chunk-Q3GNKF74.cjs.map +1 -0
- package/dist/{chunk-YLKESEHQ.cjs → chunk-QF2RAUPB.cjs} +1 -1
- package/dist/chunk-QF2RAUPB.cjs.map +1 -0
- package/dist/{chunk-2HTBZGBP.cjs → chunk-QQIALSTX.cjs} +1 -1
- package/dist/chunk-QQIALSTX.cjs.map +1 -0
- package/dist/{chunk-5QG2I3FK.cjs → chunk-S77GR5YQ.cjs} +3 -3
- package/dist/chunk-S77GR5YQ.cjs.map +1 -0
- package/dist/{chunk-YCUT6NQ4.js → chunk-S7TWEVC3.js} +2 -2
- package/dist/chunk-S7TWEVC3.js.map +1 -0
- package/dist/{chunk-2JWY36LD.cjs → chunk-SDEKANNL.cjs} +1 -1
- package/dist/chunk-SDEKANNL.cjs.map +1 -0
- package/dist/{chunk-RSBQNIJZ.js → chunk-SENVA467.js} +1 -1
- package/dist/chunk-SENVA467.js.map +1 -0
- package/dist/chunk-SJDTFR3I.cjs.map +1 -1
- package/dist/chunk-SWPZ3HFY.cjs.map +1 -1
- package/dist/{chunk-R36SGSJX.cjs → chunk-TROYIUDH.cjs} +1 -1
- package/dist/chunk-TROYIUDH.cjs.map +1 -0
- package/dist/{chunk-3KAR5KCS.cjs → chunk-UGMONQGH.cjs} +11 -11
- package/dist/chunk-UGMONQGH.cjs.map +1 -0
- package/dist/{chunk-CKH36D7H.js → chunk-UTUPJOBY.js} +1 -1
- package/dist/chunk-UTUPJOBY.js.map +1 -0
- package/dist/{chunk-63N2KZZX.cjs → chunk-V2S6XWIQ.cjs} +1 -1
- package/dist/chunk-V2S6XWIQ.cjs.map +1 -0
- package/dist/{chunk-G36S5CWN.cjs → chunk-V5RS3JZN.cjs} +1 -1
- package/dist/chunk-V5RS3JZN.cjs.map +1 -0
- package/dist/chunk-VW32UTUE.cjs.map +1 -1
- package/dist/{chunk-4NUZP66U.js → chunk-VZYLJSV5.js} +3 -3
- package/dist/chunk-VZYLJSV5.js.map +1 -0
- package/dist/{chunk-GOVOQZYN.js → chunk-W2F6WDUX.js} +1 -1
- package/dist/chunk-W2F6WDUX.js.map +1 -0
- package/dist/{chunk-AUFCW7QU.cjs → chunk-W6IKHJ76.cjs} +3 -3
- package/dist/chunk-W6IKHJ76.cjs.map +1 -0
- package/dist/{chunk-A35Y5MRJ.js → chunk-WE5FTQGD.js} +3 -3
- package/dist/chunk-WE5FTQGD.js.map +1 -0
- package/dist/{chunk-FO5FNTJX.js → chunk-WIE7HDIM.js} +3 -3
- package/dist/chunk-WIE7HDIM.js.map +1 -0
- package/dist/{chunk-YZOVF7JV.cjs → chunk-WPTMMOA6.cjs} +9 -9
- package/dist/chunk-WPTMMOA6.cjs.map +1 -0
- package/dist/{chunk-HUNMRKGE.js → chunk-WTXASLBB.js} +2 -2
- package/dist/chunk-WTXASLBB.js.map +1 -0
- package/dist/chunk-XJAXKENE.cjs.map +1 -1
- package/dist/{chunk-TCX3QKF3.js → chunk-XJBWFDDE.js} +1 -1
- package/dist/chunk-XJBWFDDE.js.map +1 -0
- package/dist/{chunk-IYQX7PBO.cjs → chunk-XKQMEVOD.cjs} +1 -1
- package/dist/chunk-XKQMEVOD.cjs.map +1 -0
- package/dist/{chunk-KQKJVFYF.js → chunk-YQLCPKGV.js} +1 -1
- package/dist/chunk-YQLCPKGV.js.map +1 -0
- package/dist/{chunk-H523JFY2.js → chunk-YV57RSPD.js} +1 -1
- package/dist/chunk-YV57RSPD.js.map +1 -0
- package/dist/{chunk-JORQYNJD.js → chunk-Z4ZY7L7W.js} +3 -3
- package/dist/chunk-Z4ZY7L7W.js.map +1 -0
- package/dist/{chunk-R5QPUQSI.cjs → chunk-Z5U4NJTW.cjs} +1 -1
- package/dist/chunk-Z5U4NJTW.cjs.map +1 -0
- package/dist/{chunk-5D3LIJYW.cjs → chunk-ZBKJ3EMK.cjs} +5 -5
- package/dist/chunk-ZBKJ3EMK.cjs.map +1 -0
- package/dist/{chunk-K5TKNT6I.cjs → chunk-ZMDZGL5A.cjs} +1 -1
- package/dist/chunk-ZMDZGL5A.cjs.map +1 -0
- package/dist/{chunk-OVYIBDGE.js → chunk-ZZSPQFMX.js} +1 -1
- package/dist/chunk-ZZSPQFMX.js.map +1 -0
- package/dist/color-picker/index.cjs +3 -3
- package/dist/color-picker/index.cjs.map +1 -1
- package/dist/color-picker/index.js +2 -2
- package/dist/combobox/index.cjs +6 -6
- package/dist/combobox/index.cjs.map +1 -1
- package/dist/combobox/index.d.cts +4 -33
- package/dist/combobox/index.d.ts +4 -33
- package/dist/combobox/index.js +5 -5
- package/dist/command-palette/index.cjs +3 -3
- package/dist/command-palette/index.cjs.map +1 -1
- package/dist/command-palette/index.js +2 -2
- package/dist/context-menu/index.cjs +7 -7
- package/dist/context-menu/index.cjs.map +1 -1
- package/dist/context-menu/index.js +6 -6
- package/dist/data-grid/index.cjs +19 -17
- package/dist/data-grid/index.cjs.map +1 -1
- package/dist/data-grid/index.d.cts +91 -3
- package/dist/data-grid/index.d.ts +91 -3
- package/dist/data-grid/index.js +18 -16
- package/dist/date-picker/index.cjs +8 -8
- package/dist/date-picker/index.cjs.map +1 -1
- package/dist/date-picker/index.js +7 -7
- package/dist/divider/index.cjs +2 -2
- package/dist/divider/index.cjs.map +1 -1
- package/dist/divider/index.js +1 -1
- package/dist/drawer/index.cjs +5 -5
- package/dist/drawer/index.cjs.map +1 -1
- package/dist/drawer/index.js +4 -4
- package/dist/dropdown/index.cjs +2 -2
- package/dist/dropdown/index.cjs.map +1 -1
- package/dist/dropdown/index.js +1 -1
- package/dist/empty-state/index.cjs +2 -2
- package/dist/empty-state/index.cjs.map +1 -1
- package/dist/empty-state/index.js +1 -1
- package/dist/file-upload/index.cjs +2 -2
- package/dist/file-upload/index.cjs.map +1 -1
- package/dist/file-upload/index.js +1 -1
- package/dist/footer/index.cjs +2 -2
- package/dist/footer/index.cjs.map +1 -1
- package/dist/footer/index.js +1 -1
- package/dist/header/index.cjs +5 -5
- package/dist/header/index.cjs.map +1 -1
- package/dist/header/index.js +4 -4
- package/dist/index.cjs +59 -59
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +20 -4
- package/dist/index.d.cts +7 -4
- package/dist/index.d.ts +7 -4
- package/dist/index.js +59 -59
- package/dist/inline-edit/index.cjs +5 -5
- package/dist/inline-edit/index.cjs.map +1 -1
- package/dist/inline-edit/index.js +4 -4
- package/dist/input/index.cjs +4 -4
- package/dist/input/index.cjs.map +1 -1
- package/dist/input/index.js +3 -3
- package/dist/kbd/index.cjs +2 -2
- package/dist/kbd/index.cjs.map +1 -1
- package/dist/kbd/index.js +1 -1
- package/dist/menu/index.cjs +6 -6
- package/dist/menu/index.cjs.map +1 -1
- package/dist/menu/index.js +5 -5
- package/dist/modal/index.cjs +5 -5
- package/dist/modal/index.cjs.map +1 -1
- package/dist/modal/index.js +4 -4
- package/dist/navigation/index.cjs +6 -6
- package/dist/navigation/index.cjs.map +1 -1
- package/dist/navigation/index.js +5 -5
- package/dist/number-input/index.cjs +2 -2
- package/dist/number-input/index.cjs.map +1 -1
- package/dist/number-input/index.js +1 -1
- package/dist/o-t-p-input/index.cjs +2 -2
- package/dist/o-t-p-input/index.cjs.map +1 -1
- package/dist/o-t-p-input/index.js +1 -1
- package/dist/page-layout/index.cjs +15 -15
- package/dist/page-layout/index.cjs.map +1 -1
- package/dist/page-layout/index.js +14 -14
- package/dist/pagination/index.cjs +8 -8
- package/dist/pagination/index.cjs.map +1 -1
- package/dist/pagination/index.js +7 -7
- package/dist/pill/index.cjs.map +1 -1
- package/dist/popover/index.cjs +2 -2
- package/dist/popover/index.cjs.map +1 -1
- package/dist/popover/index.js +1 -1
- package/dist/progress/index.cjs +2 -2
- package/dist/progress/index.cjs.map +1 -1
- package/dist/progress/index.js +1 -1
- package/dist/radio/index.cjs +2 -2
- package/dist/radio/index.cjs.map +1 -1
- package/dist/radio/index.js +1 -1
- package/dist/segmented-control/index.cjs +4 -4
- package/dist/segmented-control/index.cjs.map +1 -1
- package/dist/segmented-control/index.d.cts +5 -34
- package/dist/segmented-control/index.d.ts +5 -34
- package/dist/segmented-control/index.js +3 -3
- package/dist/select/index.cjs +6 -6
- package/dist/select/index.cjs.map +1 -1
- package/dist/select/index.d.cts +5 -41
- package/dist/select/index.d.ts +5 -41
- package/dist/select/index.js +5 -5
- package/dist/skeleton/index.cjs +2 -2
- package/dist/skeleton/index.cjs.map +1 -1
- package/dist/skeleton/index.js +1 -1
- package/dist/slider/index.cjs +2 -2
- package/dist/slider/index.cjs.map +1 -1
- package/dist/slider/index.js +1 -1
- package/dist/snackbar/index.cjs +5 -5
- package/dist/snackbar/index.cjs.map +1 -1
- package/dist/snackbar/index.js +4 -4
- package/dist/spinner/index.cjs +2 -2
- package/dist/spinner/index.cjs.map +1 -1
- package/dist/spinner/index.js +1 -1
- package/dist/split-button/index.cjs +7 -7
- package/dist/split-button/index.cjs.map +1 -1
- package/dist/split-button/index.js +6 -6
- package/dist/stepper/index.cjs +2 -2
- package/dist/stepper/index.cjs.map +1 -1
- package/dist/stepper/index.js +1 -1
- package/dist/switch/index.cjs +2 -2
- package/dist/switch/index.cjs.map +1 -1
- package/dist/switch/index.js +1 -1
- package/dist/table/index.cjs +17 -17
- package/dist/table/index.cjs.map +1 -1
- package/dist/table/index.js +16 -16
- package/dist/tabs/index.cjs +3 -3
- package/dist/tabs/index.cjs.map +1 -1
- package/dist/tabs/index.js +2 -2
- package/dist/tag-input/index.cjs +6 -6
- package/dist/tag-input/index.cjs.map +1 -1
- package/dist/tag-input/index.js +5 -5
- package/dist/textarea/index.cjs +4 -4
- package/dist/textarea/index.cjs.map +1 -1
- package/dist/textarea/index.js +3 -3
- package/dist/timeline/index.cjs +2 -2
- package/dist/timeline/index.cjs.map +1 -1
- package/dist/timeline/index.js +1 -1
- package/dist/toolbar/index.cjs +11 -11
- package/dist/toolbar/index.cjs.map +1 -1
- package/dist/toolbar/index.js +10 -10
- package/dist/tooltip/index.cjs +2 -2
- package/dist/tooltip/index.cjs.map +1 -1
- package/dist/tooltip/index.js +1 -1
- package/dist/tree-view/index.cjs +2 -2
- package/dist/tree-view/index.cjs.map +1 -1
- package/dist/tree-view/index.js +1 -1
- package/dist/virtual-list/index.cjs +3 -3
- package/dist/virtual-list/index.cjs.map +1 -1
- package/dist/virtual-list/index.js +2 -2
- package/package.json +111 -114
- package/dist/chunk-2HTBZGBP.cjs.map +0 -1
- package/dist/chunk-2JWY36LD.cjs.map +0 -1
- package/dist/chunk-2YQE26EK.js.map +0 -1
- package/dist/chunk-2ZWBN3LK.cjs.map +0 -1
- package/dist/chunk-3KAR5KCS.cjs.map +0 -1
- package/dist/chunk-3YPTYI7R.js.map +0 -1
- package/dist/chunk-4NUZP66U.js.map +0 -1
- package/dist/chunk-5D3LIJYW.cjs.map +0 -1
- package/dist/chunk-5QG2I3FK.cjs.map +0 -1
- package/dist/chunk-5TGBNYZK.cjs.map +0 -1
- package/dist/chunk-63N2KZZX.cjs.map +0 -1
- package/dist/chunk-6GAIQ2IY.cjs.map +0 -1
- package/dist/chunk-6HGDQ4BM.js.map +0 -1
- package/dist/chunk-6P4WYB3B.js.map +0 -1
- package/dist/chunk-6QFT3BUD.cjs.map +0 -1
- package/dist/chunk-6USUVU6J.js.map +0 -1
- package/dist/chunk-73EKJU4G.js.map +0 -1
- package/dist/chunk-7IOOFKG3.js.map +0 -1
- package/dist/chunk-7KGV6YCG.cjs.map +0 -1
- package/dist/chunk-7R7IFWGB.cjs.map +0 -1
- package/dist/chunk-A35Y5MRJ.js.map +0 -1
- package/dist/chunk-AOV32YBE.js.map +0 -1
- package/dist/chunk-AUFCW7QU.cjs.map +0 -1
- package/dist/chunk-BBOUUHLO.js.map +0 -1
- package/dist/chunk-BFYSYUA6.cjs.map +0 -1
- package/dist/chunk-BTPCSBGP.js.map +0 -1
- package/dist/chunk-C7F2VFAI.cjs.map +0 -1
- package/dist/chunk-CDV2OAS3.cjs.map +0 -1
- package/dist/chunk-CJUZDUXW.cjs.map +0 -1
- package/dist/chunk-CKH36D7H.js.map +0 -1
- package/dist/chunk-D7PGZ3M3.cjs.map +0 -1
- package/dist/chunk-DFADZZ3K.js.map +0 -1
- package/dist/chunk-DK4S3EHG.js.map +0 -1
- package/dist/chunk-E2B33QB7.js.map +0 -1
- package/dist/chunk-E3XATJ63.js.map +0 -1
- package/dist/chunk-F54MVGKO.js.map +0 -1
- package/dist/chunk-FNUOTM44.cjs.map +0 -1
- package/dist/chunk-FO5FNTJX.js.map +0 -1
- package/dist/chunk-G2FANEA2.cjs.map +0 -1
- package/dist/chunk-G36S5CWN.cjs.map +0 -1
- package/dist/chunk-GI7WPGP2.cjs.map +0 -1
- package/dist/chunk-GL4DHGQE.js.map +0 -1
- package/dist/chunk-GOVOQZYN.js.map +0 -1
- package/dist/chunk-GRH57M3E.js.map +0 -1
- package/dist/chunk-H523JFY2.js.map +0 -1
- package/dist/chunk-H56YUMFB.cjs.map +0 -1
- package/dist/chunk-HO7P6IJO.js.map +0 -1
- package/dist/chunk-HQ4KZRFH.js.map +0 -1
- package/dist/chunk-HUNMRKGE.js.map +0 -1
- package/dist/chunk-ICHPPNFV.js.map +0 -1
- package/dist/chunk-ICJ3SV5I.cjs.map +0 -1
- package/dist/chunk-IYQX7PBO.cjs.map +0 -1
- package/dist/chunk-JFA5ABVE.js.map +0 -1
- package/dist/chunk-JORQYNJD.js.map +0 -1
- package/dist/chunk-K5TKNT6I.cjs.map +0 -1
- package/dist/chunk-KF64C4QI.js.map +0 -1
- package/dist/chunk-KKOZX64Z.js.map +0 -1
- package/dist/chunk-KO2MKZDW.cjs.map +0 -1
- package/dist/chunk-KQKJVFYF.js.map +0 -1
- package/dist/chunk-KV2FG7AN.cjs.map +0 -1
- package/dist/chunk-L3UPSLJ5.cjs.map +0 -1
- package/dist/chunk-LEZ4HSBD.cjs.map +0 -1
- package/dist/chunk-LQ3C3OR2.js.map +0 -1
- package/dist/chunk-LTOHGCU4.cjs.map +0 -1
- package/dist/chunk-M56IGNH7.cjs.map +0 -1
- package/dist/chunk-N7HX5635.cjs.map +0 -1
- package/dist/chunk-NDLMU6HJ.js.map +0 -1
- package/dist/chunk-O5ZPSZNY.cjs.map +0 -1
- package/dist/chunk-O6B4KB4D.js.map +0 -1
- package/dist/chunk-OHUVWPFJ.js.map +0 -1
- package/dist/chunk-OT3VZLN4.js.map +0 -1
- package/dist/chunk-OVYIBDGE.js.map +0 -1
- package/dist/chunk-P2BTQ33C.cjs.map +0 -1
- package/dist/chunk-P6ZBENAG.js.map +0 -1
- package/dist/chunk-P74HNSNJ.cjs.map +0 -1
- package/dist/chunk-PEPYVWGY.cjs.map +0 -1
- package/dist/chunk-POX6JZLO.cjs.map +0 -1
- package/dist/chunk-PWIA4XQD.js.map +0 -1
- package/dist/chunk-QGZF5MOS.cjs.map +0 -1
- package/dist/chunk-QP2A5ZMK.cjs.map +0 -1
- package/dist/chunk-QYHTMEI5.js.map +0 -1
- package/dist/chunk-QYK4ECSZ.js.map +0 -1
- package/dist/chunk-R36SGSJX.cjs.map +0 -1
- package/dist/chunk-R5QPUQSI.cjs.map +0 -1
- package/dist/chunk-R5UNLPQZ.cjs.map +0 -1
- package/dist/chunk-RSBQNIJZ.js.map +0 -1
- package/dist/chunk-S25WB7KJ.js.map +0 -1
- package/dist/chunk-SAFSEXMU.cjs.map +0 -1
- package/dist/chunk-SOGUWOSQ.cjs.map +0 -1
- package/dist/chunk-SXF3TCYA.js.map +0 -1
- package/dist/chunk-T56K5IKQ.js.map +0 -1
- package/dist/chunk-TBMVUI7S.cjs.map +0 -1
- package/dist/chunk-TCX3QKF3.js.map +0 -1
- package/dist/chunk-TQCNQKWF.cjs.map +0 -1
- package/dist/chunk-UTENJWSE.cjs.map +0 -1
- package/dist/chunk-V5JNYS77.cjs.map +0 -1
- package/dist/chunk-VFYG7GAH.js.map +0 -1
- package/dist/chunk-VLC2OZV3.cjs.map +0 -1
- package/dist/chunk-VTAABT55.js.map +0 -1
- package/dist/chunk-VYV45YOK.cjs.map +0 -1
- package/dist/chunk-VZ43OLU6.cjs.map +0 -1
- package/dist/chunk-XJBMEDQ5.js.map +0 -1
- package/dist/chunk-XMRMCWSQ.js.map +0 -1
- package/dist/chunk-XSGUFMT4.js.map +0 -1
- package/dist/chunk-YCUT6NQ4.js.map +0 -1
- package/dist/chunk-YKECQKOV.cjs.map +0 -1
- package/dist/chunk-YLKESEHQ.cjs.map +0 -1
- package/dist/chunk-YZOVF7JV.cjs.map +0 -1
- package/dist/chunk-Z7S4UQKY.js.map +0 -1
- package/dist/chunk-ZBGTVTQJ.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkA7Z2QAFZcjs = require('./chunk-A7Z2QAFZ.cjs');
|
|
4
4
|
|
|
5
5
|
// src/components/Drawer/Drawer.component.tsx
|
|
6
6
|
var _react = require('react');
|
|
@@ -110,7 +110,7 @@ var Drawer = ({
|
|
|
110
110
|
] }),
|
|
111
111
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { id: bodyId, className: "eidos-drawer-body", children }),
|
|
112
112
|
actions && actions.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-drawer-footer", children: actions.map((action) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
113
|
-
|
|
113
|
+
_chunkA7Z2QAFZcjs.Button,
|
|
114
114
|
{
|
|
115
115
|
variant: _nullishCoalesce(action.variant, () => ( "outlined")),
|
|
116
116
|
color: action.color,
|
|
@@ -135,4 +135,4 @@ Drawer.displayName = "Drawer";
|
|
|
135
135
|
|
|
136
136
|
|
|
137
137
|
exports.Drawer = Drawer;
|
|
138
|
-
//# sourceMappingURL=chunk-
|
|
138
|
+
//# sourceMappingURL=chunk-PJC7NZUV.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-PJC7NZUV.cjs","../src/components/Drawer/Drawer.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-PJC7NZUV.cjs","sourcesContent":[null,"import React, { useEffect, useCallback, useId, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from 'lucide-react';\nimport { Button } from '../Button';\nimport type { DrawerProps } from './Drawer.types';\n\nexport const Drawer: React.FC<DrawerProps> = ({\n isOpen,\n onClose,\n placement = 'right',\n title,\n children,\n actions,\n size = 'md',\n closeOnBackdropClick = true,\n closeOnEscape = true,\n className = '',\n}) => {\n const titleId = useId();\n const bodyId = useId();\n\n // ── Animation state ────────────────────────────────────────────────────────\n // isMounted: whether the portal DOM node exists at all.\n // isVisible: whether the '--open' CSS class is applied (drives the transition).\n //\n // On open: mount first → one rAF → apply --open (browser sees initial\n // closed position before transitioning, so the animation fires).\n // On close: remove --open (CSS transition plays) → after 300 ms unmount.\n // 300 ms matches the CSS `transition: 0.3s` in Drawer.scss.\n const TRANSITION_MS = 300;\n const [isMounted, setIsMounted] = useState(isOpen);\n const [isVisible, setIsVisible] = useState(isOpen);\n\n useEffect(() => {\n let raf1 = 0;\n let raf2 = 0;\n let timerId: ReturnType<typeof setTimeout>;\n\n if (isOpen) {\n setIsMounted(true);\n // Double rAF: React 18 automatic batching means setIsMounted(true) may\n // not produce a committed browser paint before the first rAF fires.\n // The second frame guarantees the panel is rendered in its off-screen\n // (closed) position before the CSS transition begins.\n raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setIsVisible(true));\n });\n } else {\n setIsVisible(false);\n timerId = setTimeout(() => setIsMounted(false), TRANSITION_MS);\n }\n\n return () => {\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n clearTimeout(timerId);\n };\n }, [isOpen]);\n\n // ── Escape key + scroll lock (tied to isOpen, not isMounted) ───────────────\n const handleEscapeKey = useCallback(\n (event: KeyboardEvent) => {\n if (closeOnEscape && event.key === 'Escape' && isOpen) {\n onClose();\n }\n },\n [closeOnEscape, isOpen, onClose],\n );\n\n useEffect(() => {\n if (isOpen) {\n document.addEventListener('keydown', handleEscapeKey);\n document.body.style.overflow = 'hidden';\n }\n return () => {\n document.removeEventListener('keydown', handleEscapeKey);\n document.body.style.overflow = '';\n };\n }, [isOpen, handleEscapeKey]);\n\n // ── Backdrop click ─────────────────────────────────────────────────────────\n const handleBackdropClick = useCallback(\n (event: React.MouseEvent) => {\n if (closeOnBackdropClick && event.target === event.currentTarget) {\n onClose();\n }\n },\n [closeOnBackdropClick, onClose],\n );\n\n if (!isMounted) return null;\n\n return createPortal(\n <div\n className={[\n 'eidos-drawer',\n `eidos-drawer--${placement}`,\n isVisible && 'eidos-drawer--open',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {/* Backdrop */}\n <div className=\"eidos-drawer-backdrop\" onClick={handleBackdropClick} aria-hidden=\"true\" />\n\n {/* Panel */}\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={bodyId}\n className={[\n 'eidos-drawer-panel',\n `eidos-drawer-panel--${size}`,\n `eidos-drawer-panel--${placement}`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {/* Header */}\n <div className=\"eidos-drawer-header\">\n {title && (\n <h3 id={titleId} className=\"eidos-drawer-title\">\n {title}\n </h3>\n )}\n <button\n type=\"button\"\n className=\"eidos-drawer-close\"\n onClick={onClose}\n aria-label=\"Close drawer\"\n >\n <X aria-hidden=\"true\" />\n </button>\n </div>\n\n {/* Body */}\n <div id={bodyId} className=\"eidos-drawer-body\">\n {children}\n </div>\n\n {/* Footer - only rendered when actions are provided */}\n {actions && actions.length > 0 && (\n <div className=\"eidos-drawer-footer\">\n {actions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant ?? 'outlined'}\n color={action.color}\n disabled={action.disabled}\n loading={action.loading}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>,\n document.body,\n );\n};\n\nDrawer.displayName = 'Drawer';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-PTBBY4ZX.cjs","../src/components/Footer/Footer.component.tsx"],"names":[],"mappings":"AAAA;ACgBS,+CAAA;AAZF,IAAM,OAAA,EAAgC,CAAC,KAAA,EAAA,GAAU;AACtD,EAAA,MAAM,EAAE,UAAA,EAAY,GAAG,EAAA,EAAI,KAAA;AAC3B,EAAA,MAAM,YAAA,EAAc,YAAA,GAAe,MAAA,GAAS,KAAA,CAAM,UAAA,IAAc,KAAA,CAAA;AAEhE,EAAA,MAAM,QAAA,EAAU;AAAA,IACd,cAAA;AAAA,IACA,YAAA,EAAc,0BAAA,EAA4B,yBAAA;AAAA,IAC1C;AAAA,EACF,CAAA,CACG,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA;AAEX,EAAA,uBAAO,6BAAA,QAAC,EAAA,EAAO,SAAA,EAAW,OAAA,EAAU,QAAA,EAAA,YAAA,EAAc,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,UAAA,CAAU,CAAA;AACtF,CAAA;AAEA,MAAA,CAAO,YAAA,EAAc,QAAA;ADNrB;AACA;AACE;AACF,wBAAC","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-PTBBY4ZX.cjs","sourcesContent":[null,"import React from 'react';\nimport type { FooterProps } from './Footer.types';\nimport './Footer.scss';\n\nexport const Footer: React.FC<FooterProps> = (props) => {\n const { className = '' } = props;\n const isCopyright = 'copyright' in props && props.copyright !== undefined;\n\n const classes = [\n 'eidos-footer',\n isCopyright ? 'eidos-footer--copyright' : 'eidos-footer--component',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return <footer className={classes}>{isCopyright ? props.copyright : props.component}</footer>;\n};\n\nFooter.displayName = 'Footer';\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Kbd
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LYH3EKKQ.js";
|
|
4
4
|
|
|
5
5
|
// src/components/CommandPalette/CommandPalette.component.tsx
|
|
6
6
|
import { useCallback, useEffect, useId, useMemo, useRef, useState } from "react";
|
|
@@ -324,4 +324,4 @@ CommandPalette.displayName = "CommandPalette";
|
|
|
324
324
|
export {
|
|
325
325
|
CommandPalette
|
|
326
326
|
};
|
|
327
|
-
//# sourceMappingURL=chunk-
|
|
327
|
+
//# sourceMappingURL=chunk-PY2376XI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/CommandPalette/CommandPalette.component.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ArrowDown, ArrowUp, Command, CornerDownLeft, Search } from 'lucide-react';\nimport type { CommandItem, CommandPaletteProps } from './CommandPalette.types';\nimport { Kbd } from '../Kbd';\nimport './CommandPalette.scss';\n\n// ── Constants ──────────────────────────────────────────────────────────────────\n\n/** Must match the CSS transition duration in CommandPalette.scss */\nconst TRANSITION_MS = 200;\n\n// ── Pure helpers ───────────────────────────────────────────────────────────────\n\nfunction filterItems(items: CommandItem[], query: string): CommandItem[] {\n const q = query.trim().toLowerCase();\n if (!q) return items;\n return items.filter(({ label, description, keywords }) => {\n return (\n label.toLowerCase().includes(q) ||\n (description?.toLowerCase().includes(q) ?? false) ||\n (keywords?.some((k) => k.toLowerCase().includes(q)) ?? false)\n );\n });\n}\n\ninterface Group {\n label: string | null;\n items: CommandItem[];\n}\n\n/**\n * Groups items while preserving the order in which groups first appear.\n * Items with no `group` property are placed in a leading implicit section\n * (label: null) so that labelled groups always follow them.\n */\nfunction buildGroups(items: CommandItem[]): Group[] {\n const groups: Group[] = [];\n const groupMap = new Map<string, Group>();\n\n for (const item of items) {\n const key = item.group ?? '';\n let group = groupMap.get(key);\n if (!group) {\n group = { label: item.group ?? null, items: [] };\n groups.push(group);\n groupMap.set(key, group);\n }\n group.items.push(item);\n }\n\n return groups;\n}\n\n// ── Component ──────────────────────────────────────────────────────────────────\n\nexport const CommandPalette: React.FC<CommandPaletteProps> = ({\n open: openProp,\n defaultOpen = false,\n onClose,\n onOpen,\n shortcutKey = 'k',\n items,\n onSelect,\n placeholder = 'Search commands…',\n emptyText = 'No commands found',\n maxHeight = 360,\n className = '',\n footer,\n trigger,\n triggerLabel = 'Search',\n}) => {\n const dialogId = useId();\n const listId = `${dialogId}-list`;\n\n // ── Controlled / uncontrolled open state ───────────────────────────────────\n // Omitting `open` lets the palette own its state entirely, which combined\n // with the shortcut listener below means it needs zero external\n // useState/useEffect to work. Passing `open` (+ `onClose`, optionally\n // `onOpen`) keeps full external control for consumers who need it (syncing\n // with a URL, another piece of app state, etc).\n const isControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const open = isControlled ? (openProp as boolean) : internalOpen;\n\n const close = useCallback(() => {\n if (!isControlled) setInternalOpen(false);\n onClose?.();\n }, [isControlled, onClose]);\n\n // Shared \"open\" path - uncontrolled flips the internal state directly;\n // controlled defers to `onOpen` since the palette can't change `open`\n // itself. Used by both the keyboard shortcut below and the inline\n // `trigger`'s click handler.\n const openPalette = useCallback(() => {\n if (isControlled) {\n onOpen?.();\n } else {\n setInternalOpen(true);\n }\n }, [isControlled, onOpen]);\n\n // Global keyboard shortcut - Cmd/Ctrl+<shortcutKey> opens the palette.\n useEffect(() => {\n if (!shortcutKey) return;\n\n const handler = (e: KeyboardEvent) => {\n if (!(e.metaKey || e.ctrlKey) || e.key.toLowerCase() !== shortcutKey.toLowerCase()) return;\n e.preventDefault();\n openPalette();\n };\n\n window.addEventListener('keydown', handler);\n return () => window.removeEventListener('keydown', handler);\n }, [shortcutKey, openPalette]);\n\n // ── Animation state machine (mirrors the Drawer pattern) ─────────────────\n // isMounted → portal exists in the DOM (controls render/null)\n // isVisible → CSS --visible modifier is applied (drives transitions)\n //\n // Opening: isMounted=true → double rAF → isVisible=true → CSS transitions fire\n // Closing: isVisible=false → CSS transitions reverse → after TRANSITION_MS → isMounted=false\n const [isMounted, setIsMounted] = useState(open);\n const [isVisible, setIsVisible] = useState(open);\n\n useEffect(() => {\n let raf1 = 0;\n let raf2 = 0;\n let timerId: ReturnType<typeof setTimeout>;\n\n if (open) {\n setIsMounted(true);\n // Double rAF: ensures the browser has painted the initial off-screen\n // state before the CSS transition begins (React 18 automatic batching\n // means a single rAF is not always sufficient).\n raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setIsVisible(true));\n });\n } else {\n setIsVisible(false);\n timerId = setTimeout(() => setIsMounted(false), TRANSITION_MS);\n }\n\n return () => {\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n clearTimeout(timerId);\n };\n }, [open]);\n\n // ── Search state ───────────────────────────────────────────────────────────\n const [query, setQuery] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(0);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const itemRefs = useRef<Map<string, HTMLDivElement>>(new Map());\n\n // Derived lists - memoised to stabilise scroll-effect deps\n const filtered = useMemo(() => filterItems(items, query), [items, query]);\n const navigable = useMemo(() => filtered.filter((item) => !item.disabled), [filtered]);\n const groups = useMemo(() => buildGroups(filtered), [filtered]);\n\n // Reset search query and selection when the palette is opened\n useEffect(() => {\n if (open) {\n setQuery('');\n setFocusedIndex(0);\n }\n }, [open]);\n\n // Auto-focus the search input after the entry animation begins\n useEffect(() => {\n if (isVisible) {\n inputRef.current?.focus();\n }\n }, [isVisible]);\n\n // Reset focused index to 0 whenever the filtered list changes\n useEffect(() => {\n setFocusedIndex(0);\n }, [query]);\n\n // Scroll the focused item into view during keyboard navigation\n useEffect(() => {\n const focusedItem = navigable[focusedIndex];\n if (!focusedItem) return;\n itemRefs.current.get(focusedItem.id)?.scrollIntoView({ block: 'nearest' });\n }, [focusedIndex, navigable]);\n\n // Body scroll lock (tied to open, not to isMounted, so it releases promptly\n // when the consumer decides to close - even before the exit animation ends)\n useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [open]);\n\n // ── Interaction handlers ───────────────────────────────────────────────────\n\n const selectItem = useCallback(\n (item: CommandItem) => {\n if (item.disabled) return;\n item.action?.();\n onSelect?.(item);\n close();\n },\n [close, onSelect],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n if (navigable.length === 0) return;\n setFocusedIndex((i) => (i + 1) % navigable.length);\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n if (navigable.length === 0) return;\n setFocusedIndex((i) => (i - 1 + navigable.length) % navigable.length);\n break;\n }\n case 'Enter': {\n e.preventDefault();\n const item = navigable[focusedIndex];\n if (item) selectItem(item);\n break;\n }\n case 'Escape': {\n e.preventDefault();\n close();\n break;\n }\n }\n },\n [focusedIndex, navigable, close, selectItem],\n );\n\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Only fire when the click lands directly on the backdrop element,\n // not on any child (the dialog itself or its contents).\n if (e.target === e.currentTarget) {\n close();\n }\n },\n [close],\n );\n\n // ── Render ─────────────────────────────────────────────────────────────────\n\n // The inline trigger (if any) must render regardless of `isMounted` - it's\n // what opens the palette in the first place, so it can't be gated behind\n // the portal's own mount state.\n const triggerNode =\n trigger === true ? (\n <button type=\"button\" className=\"eidos-cmd-trigger-default\" onClick={openPalette}>\n <span>{triggerLabel}</span>\n {shortcutKey && (\n <Kbd size=\"sm\" className=\"eidos-cmd-trigger-kbd\">\n <Command size={10} />\n {shortcutKey.toUpperCase()}\n </Kbd>\n )}\n </button>\n ) : trigger ? (\n <div className=\"eidos-cmd-trigger\" role=\"button\" tabIndex={0} onClick={openPalette}>\n {trigger}\n </div>\n ) : null;\n\n if (!isMounted) return triggerNode;\n\n const maxHeightValue = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n\n return (\n <>\n {triggerNode}\n {createPortal(\n <div\n className={['eidos-cmd-backdrop', isVisible && 'eidos-cmd-backdrop--visible']\n .filter(Boolean)\n .join(' ')}\n onClick={handleBackdropClick}\n aria-hidden={!open}\n >\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n id={dialogId}\n className={['eidos-cmd-dialog', isVisible && 'eidos-cmd-dialog--visible', className]\n .filter(Boolean)\n .join(' ')}\n onKeyDown={handleKeyDown}\n >\n {/* ── Search ──────────────────────────────────────────────────────── */}\n <div className=\"eidos-cmd-search\">\n <Search className=\"eidos-cmd-search-icon\" size={18} aria-hidden=\"true\" />\n\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-label={placeholder}\n className=\"eidos-cmd-input\"\n placeholder={placeholder}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n spellCheck={false}\n autoComplete=\"off\"\n />\n\n {/* Reminds users of the configured shortcut, if any */}\n {shortcutKey && (\n <div className=\"eidos-cmd-search-badge\" aria-hidden=\"true\">\n <Command size={11} />\n <span>{shortcutKey.toUpperCase()}</span>\n </div>\n )}\n </div>\n\n {/* ── Results list ─────────────────────────────────────────────────── */}\n <div\n id={listId}\n role=\"listbox\"\n aria-label=\"Commands\"\n className=\"eidos-cmd-list\"\n style={{ maxHeight: maxHeightValue }}\n >\n {filtered.length === 0 ? (\n <p className=\"eidos-cmd-empty\" role=\"status\">\n {emptyText}\n </p>\n ) : (\n groups.map((group) => (\n <div\n key={group.label ?? '__ungrouped__'}\n role=\"group\"\n aria-label={group.label ?? undefined}\n >\n {group.label && (\n <div className=\"eidos-cmd-group-label\" aria-hidden=\"true\">\n {group.label}\n </div>\n )}\n\n {group.items.map((item) => {\n const isFocused = navigable[focusedIndex]?.id === item.id;\n const Icon = item.icon;\n\n return (\n <div\n key={item.id}\n ref={(el) => {\n if (el) {\n itemRefs.current.set(item.id, el);\n } else {\n itemRefs.current.delete(item.id);\n }\n }}\n role=\"option\"\n aria-selected={isFocused}\n aria-disabled={item.disabled}\n className={[\n 'eidos-cmd-item',\n isFocused && 'eidos-cmd-item--focused',\n item.disabled && 'eidos-cmd-item--disabled',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => selectItem(item)}\n onMouseEnter={() => {\n if (!item.disabled) {\n const idx = navigable.findIndex((n) => n.id === item.id);\n if (idx !== -1) setFocusedIndex(idx);\n }\n }}\n >\n {Icon && (\n <span className=\"eidos-cmd-item-icon\" aria-hidden=\"true\">\n <Icon size={16} />\n </span>\n )}\n\n <div className=\"eidos-cmd-item-body\">\n <div className=\"eidos-cmd-item-label\">{item.label}</div>\n {item.description && (\n <div className=\"eidos-cmd-item-description\">{item.description}</div>\n )}\n </div>\n\n {item.shortcut && item.shortcut.length > 0 && (\n <div\n className=\"eidos-cmd-item-shortcut\"\n aria-label={`Shortcut: ${item.shortcut.join(' ')}`}\n >\n {item.shortcut.map((key, i) => (\n <kbd key={i} className=\"eidos-cmd-kbd\">\n {key}\n </kbd>\n ))}\n </div>\n )}\n </div>\n );\n })}\n </div>\n ))\n )}\n </div>\n\n {/* ── Footer ───────────────────────────────────────────────────────── */}\n <div className=\"eidos-cmd-footer\">\n <div className=\"eidos-cmd-hints\" aria-hidden=\"true\">\n <span>\n <ArrowUp size={11} />\n <ArrowDown size={11} /> Navigate\n </span>\n <span>\n <CornerDownLeft size={11} /> Select\n </span>\n <span>Esc Close</span>\n </div>\n\n {footer && <div className=\"eidos-cmd-footer-slot\">{footer}</div>}\n </div>\n </div>\n </div>,\n document.body,\n )}\n </>\n );\n};\n\nCommandPalette.displayName = 'CommandPalette';\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-Q3GNKF74.cjs","../src/components/Avatar/Avatar.component.tsx"],"names":[],"mappings":"AAAA;ACAA,4EAAgC;AAChC,2CAAqB;AAmEjB,+CAAA;AA3DJ,IAAM,cAAA,EAA+B;AAAA,EACnC,SAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAMA,SAAS,WAAA,CAAY,IAAA,EAAsB;AACzC,EAAA,MAAM,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,CAAE,KAAA,CAAM,KAAK,CAAA;AACrC,EAAA,GAAA,CAAI,KAAA,CAAM,OAAA,IAAW,CAAA,EAAG,OAAO,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,CAAY,CAAA;AAC9D,EAAA,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,EAAA,EAAI,KAAA,CAAM,KAAA,CAAM,OAAA,EAAS,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAA,CAAG,WAAA,CAAY,CAAA;AAC9E;AAEA,SAAS,YAAA,CAAa,IAAA,EAA2B;AAC/C,EAAA,MAAM,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,EAAA,GAAM,IAAA,EAAM,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA,EAAG,CAAC,CAAA;AACtE,EAAA,OAAO,aAAA,CAAc,IAAA,EAAM,aAAA,CAAc,MAAM,CAAA;AACjD;AAMO,IAAM,OAAA,EAAgC,CAAC;AAAA,EAC5C,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA,EAAO,IAAA;AAAA,EACP,KAAA;AAAA,EACA,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,EAAA,EAAI,6BAAA,KAAc,CAAA;AAE9C,EAAA,MAAM,UAAA,EAAY,CAAC,CAAC,IAAA,GAAO,CAAC,QAAA;AAC5B,EAAA,MAAM,aAAA,EAAe,CAAC,UAAA,GAAa,CAAC,CAAC,IAAA;AACrC,EAAA,MAAM,aAAA,EAAe,CAAC,UAAA,GAAa,CAAC,YAAA;AAEpC,EAAA,MAAM,cAAA,mBAA6B,KAAA,UAAA,CAAU,KAAA,EAAO,YAAA,CAAa,IAAI,EAAA,EAAI,MAAA,GAAA;AAEzE,EAAA,MAAM,QAAA,EAAU;AAAA,IACd,cAAA;AAAA,IACA,CAAA,cAAA,EAAiB,IAAI,CAAA,CAAA;AACC,IAAA;AACN,IAAA;AACL,IAAA;AACX,IAAA;AAGM,EAAA;AAGN,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACX,MAAA;AACgB,MAAA;AACI,MAAA;AAElB,MAAA;AAEoB,QAAA;AACV,UAAA;AACM,UAAA;AACV,QAAA;AAEF,MAAA;AAGL,MAAA;AACC,QAAA;AAAC,UAAA;AAAA,UAAA;AACC,YAAA;AACY,YAAA;AACF,YAAA;AACD,YAAA;AAAsB,UAAA;AACjC,QAAA;AAEe,QAAA;AAEd,QAAA;AAA4E,MAAA;AAAA,IAAA;AACjF,EAAA;AAEJ;AAM0D;AACrC,EAAA;AACI,EAAA;AACN,EAAA;AAGf,EAAA;AACuB,IAAA;AAMnB,IAAA;AAAC,MAAA;AAAA,MAAA;AACY,QAAA;AACT,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AAGC,QAAA;AAEH,QAAA;AAAwC,UAAA;AAAE,UAAA;AAAS,QAAA;AAAA,MAAA;AACrD,IAAA;AAEJ,EAAA;AAEJ;ADlC0B;AACA;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-Q3GNKF74.cjs","sourcesContent":[null,"import React, { useState } from 'react';\nimport { User } from 'lucide-react';\nimport type { AvatarProps, AvatarGroupProps, AvatarColor } from './Avatar.types';\nimport './Avatar.scss';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst AVATAR_COLORS: AvatarColor[] = [\n 'primary',\n 'secondary',\n 'success',\n 'danger',\n 'warning',\n 'info',\n];\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase();\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();\n}\n\nfunction getAutoColor(name: string): AvatarColor {\n const sum = name.split('').reduce((acc, c) => acc + c.charCodeAt(0), 0);\n return AVATAR_COLORS[sum % AVATAR_COLORS.length];\n}\n\n// ============================================================================\n// Avatar\n// ============================================================================\n\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt,\n name,\n size = 'md',\n color,\n shape = 'circle',\n fallback,\n className,\n onClick,\n}) => {\n const [imgError, setImgError] = useState(false);\n\n const showImage = !!src && !imgError;\n const showInitials = !showImage && !!name;\n const showFallback = !showImage && !showInitials;\n\n const resolvedColor: AvatarColor = color ?? (name ? getAutoColor(name) : 'gray');\n\n const classes = [\n 'eidos-avatar',\n `eidos-avatar--${size}`,\n `eidos-avatar--${shape}`,\n showInitials && `eidos-avatar--${resolvedColor}`,\n onClick && 'eidos-avatar--clickable',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={classes}\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={\n onClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n }\n : undefined\n }\n >\n {showImage && (\n <img\n src={src}\n alt={alt ?? name ?? 'Avatar'}\n className=\"eidos-avatar-image\"\n onError={() => setImgError(true)}\n />\n )}\n {showInitials && <span className=\"eidos-avatar-initials\">{getInitials(name!)}</span>}\n {showFallback &&\n (fallback ?? <User className=\"eidos-avatar-fallback-icon\" aria-hidden=\"true\" />)}\n </div>\n );\n};\n\n// ============================================================================\n// AvatarGroup\n// ============================================================================\n\nexport const AvatarGroup: React.FC<AvatarGroupProps> = ({ children, max, size, className }) => {\n const childArray = React.Children.toArray(children) as React.ReactElement<AvatarProps>[];\n const visibleAvatars = max !== undefined ? childArray.slice(0, max) : childArray;\n const overflow = childArray.length - visibleAvatars.length;\n\n return (\n <div className={['eidos-avatar-group', className].filter(Boolean).join(' ')}>\n {visibleAvatars.map((child, i) => (\n <div key={i} className=\"eidos-avatar-group-item\">\n {React.cloneElement(child, { size: size ?? child.props.size })}\n </div>\n ))}\n {overflow > 0 && (\n <div\n className={[\n 'eidos-avatar',\n `eidos-avatar--${size ?? 'md'}`,\n 'eidos-avatar--circle',\n 'eidos-avatar--overflow',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <span className=\"eidos-avatar-initials\">+{overflow}</span>\n </div>\n )}\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-QF2RAUPB.cjs","../src/components/NumberInput/NumberInput.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-QF2RAUPB.cjs","sourcesContent":[null,"import React, { forwardRef, useState, useEffect, useId } from 'react';\nimport { Minus, Plus } from 'lucide-react';\nimport type { NumberInputProps } from './NumberInput.types';\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value,\n defaultValue = 0,\n onChange,\n min,\n max,\n step = 1,\n precision = 0,\n placeholder,\n disabled = false,\n readOnly = false,\n label,\n helperText,\n error = false,\n errorMessage,\n size = 'md',\n fullWidth = false,\n allowTyping = true,\n className = '',\n id,\n name,\n },\n ref,\n ) => {\n const generatedId = useId();\n const inputId = id || `number-input-${generatedId}`;\n\n // Controlled / uncontrolled bridge\n const isControlled = value !== undefined;\n const [localValue, setLocalValue] = useState<number>(defaultValue);\n\n // Intermediate text while the user is actively typing\n const [inputText, setInputText] = useState<string>(defaultValue.toFixed(precision));\n const [isFocused, setIsFocused] = useState(false);\n\n const currentValue = isControlled ? value! : localValue;\n\n // When min/max props change (e.g. via Storybook controls), clamp the\n // uncontrolled localValue so the display never shows an out-of-range value.\n useEffect(() => {\n if (isControlled) return;\n setLocalValue((prev) => {\n let result = prev;\n if (min !== undefined) result = Math.max(min, result);\n if (max !== undefined) result = Math.min(max, result);\n return parseFloat(result.toFixed(precision));\n });\n }, [min, max, precision, isControlled]);\n\n // Clamp to [min, max] and apply precision rounding\n const clampValue = (raw: number): number => {\n let result = raw;\n if (min !== undefined) result = Math.max(min, result);\n if (max !== undefined) result = Math.min(max, result);\n return parseFloat(result.toFixed(precision));\n };\n\n const commitValue = (newVal: number) => {\n const clamped = clampValue(newVal);\n if (!isControlled) setLocalValue(clamped);\n onChange?.(clamped);\n };\n\n // ── Stepper buttons ────────────────────────────────────────────────────\n const handleDecrement = () => {\n if (disabled || readOnly) return;\n commitValue(currentValue - step);\n };\n\n const handleIncrement = () => {\n if (disabled || readOnly) return;\n commitValue(currentValue + step);\n };\n\n // ── Typing mode handlers ───────────────────────────────────────────────\n const handleTextFocus = () => {\n setInputText(currentValue.toFixed(precision));\n setIsFocused(true);\n };\n\n const handleTextChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputText(e.target.value);\n };\n\n const handleTextBlur = () => {\n setIsFocused(false);\n const parsed = parseFloat(inputText);\n if (!isNaN(parsed)) {\n const clamped = clampValue(parsed);\n if (!isControlled) setLocalValue(clamped);\n onChange?.(clamped);\n setInputText(clamped.toFixed(precision));\n } else {\n // Revert to the last known-good value\n setInputText(currentValue.toFixed(precision));\n }\n };\n\n // ArrowUp / ArrowDown keyboard support for both display modes\n const handleDisplayKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n handleIncrement();\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n handleDecrement();\n }\n };\n\n // ── Display value ──────────────────────────────────────────────────────\n // Show intermediate inputText while focused in typing mode;\n // otherwise always derive from the real (controlled/uncontrolled) value.\n const formattedValue = currentValue.toFixed(precision);\n const displayedText = allowTyping && isFocused ? inputText : formattedValue;\n\n // ── Disabled states for buttons ────────────────────────────────────────\n const isDecrementDisabled = disabled || readOnly || (min !== undefined && currentValue <= min);\n const isIncrementDisabled = disabled || readOnly || (max !== undefined && currentValue >= max);\n\n // ── CSS classes ────────────────────────────────────────────────────────\n const rootClasses = [\n 'eidos-number-input',\n `eidos-number-input--${size}`,\n fullWidth && 'eidos-number-input--fullWidth',\n error && 'eidos-number-input--error',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const controlClasses = [\n 'eidos-number-input-control',\n disabled && 'eidos-number-input-control--disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClasses}>\n {label && (\n <label htmlFor={allowTyping ? inputId : undefined} className=\"eidos-number-input-label\">\n {label}\n </label>\n )}\n\n <div\n className={controlClasses}\n role={allowTyping ? undefined : 'spinbutton'}\n aria-valuemin={allowTyping ? undefined : min}\n aria-valuemax={allowTyping ? undefined : max}\n aria-valuenow={allowTyping ? undefined : currentValue}\n aria-label={allowTyping ? undefined : (label ?? 'Number input')}\n aria-disabled={disabled || undefined}\n tabIndex={!allowTyping && !disabled ? 0 : undefined}\n onKeyDown={!allowTyping ? handleDisplayKeyDown : undefined}\n >\n <button\n type=\"button\"\n className=\"eidos-number-input-btn\"\n onClick={handleDecrement}\n disabled={isDecrementDisabled}\n aria-label=\"Decrease\"\n >\n <Minus />\n </button>\n\n <div className=\"eidos-number-input-divider\" aria-hidden=\"true\" />\n\n {allowTyping ? (\n <input\n id={inputId}\n type=\"text\"\n className=\"eidos-number-input-display\"\n value={displayedText}\n onChange={handleTextChange}\n onFocus={handleTextFocus}\n onBlur={handleTextBlur}\n onKeyDown={handleDisplayKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n inputMode=\"decimal\"\n role=\"spinbutton\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n aria-label={label ?? 'Number input'}\n />\n ) : (\n <span className=\"eidos-number-input-display\" aria-hidden=\"true\">\n {placeholder && formattedValue === (0).toFixed(precision) && !isFocused\n ? placeholder\n : formattedValue}\n </span>\n )}\n\n <div className=\"eidos-number-input-divider\" aria-hidden=\"true\" />\n\n <button\n type=\"button\"\n className=\"eidos-number-input-btn\"\n onClick={handleIncrement}\n disabled={isIncrementDisabled}\n aria-label=\"Increase\"\n >\n <Plus />\n </button>\n </div>\n\n {/* Hidden native <input type=\"number\"> for form integration */}\n <input\n ref={ref}\n type=\"number\"\n name={name}\n value={currentValue}\n onChange={() => {}}\n className=\"eidos-number-input-hidden\"\n tabIndex={-1}\n aria-hidden=\"true\"\n disabled={disabled}\n readOnly={readOnly}\n min={min}\n max={max}\n step={step}\n />\n\n {helperText && !error && <span className=\"eidos-number-input-helper\">{helperText}</span>}\n\n {error && errorMessage && (\n <span className=\"eidos-number-input-error\" role=\"alert\">\n {errorMessage}\n </span>\n )}\n </div>\n );\n },\n);\n\nNumberInput.displayName = 'NumberInput';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-QQIALSTX.cjs","../src/components/Radio/Radio.component.tsx"],"names":[],"mappings":"AAAA;ACAA,8BAAmD;AACnD,2CAA4B;AA6DtB,+CAAA;AAtDC,IAAM,MAAA,EAAQ,+BAAA;AAAA,EACnB,CACE;AAAA,IACE,KAAA;AAAA,IACA,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,GAAG;AAAA,EACL,CAAA,EACA,GAAA,EAAA,GACG;AACH,IAAA,MAAM,YAAA,EAAc,0BAAA,CAAM;AAC1B,IAAA,MAAM,QAAA,EAAU,GAAA,GAAM,CAAA,MAAA,EAAS,WAAW,CAAA,CAAA;AAKT,IAAA;AACO,IAAA;AAGX,IAAA;AAEoC,IAAA;AAC5C,MAAA;AACe,QAAA;AAClC,MAAA;AACY,sBAAA;AACd,IAAA;AAEuB,IAAA;AACrB,MAAA;AAC6B,MAAA;AACD,MAAA;AAChB,MAAA;AACZ,MAAA;AAGS,IAAA;AAEY,IAAA;AACrB,MAAA;AACa,MAAA;AACD,MAAA;AAGH,IAAA;AAGF,IAAA;AACL,sBAAA;AAAC,QAAA;AAAA,QAAA;AACC,UAAA;AACK,UAAA;AACD,UAAA;AACM,UAAA;AACV,UAAA;AACU,UAAA;AAC0B,UAAA;AAChC,UAAA;AAAA,QAAA;AACN,MAAA;AACiB,sBAAA;AAGD,MAAA;AAClB,IAAA;AAEJ,EAAA;AACF;AAEoB;AAWkC;AACpD,EAAA;AACO,EAAA;AACP,EAAA;AACA,EAAA;AACA,EAAA;AACY,EAAA;AACJ,EAAA;AACD,EAAA;AACI,EAAA;AACX,EAAA;AACY,EAAA;AACR;AAC+B,EAAA;AAC8B,EAAA;AAG7B,EAAA;AAEgB,EAAA;AAC/B,IAAA;AACQ,MAAA;AAC3B,IAAA;AACsB,oBAAA;AACxB,EAAA;AAE2C,EAAA;AAMvC,EAAA;AAAgB,oBAAA;AAEX,MAAA;AAAA,MAAA;AAEC,QAAA;AACc,QAAA;AACmB,QAAA;AAChB,QAAA;AACO,UAAA;AACxB,QAAA;AAC6B,QAAA;AACf,QAAA;AACd,QAAA;AACA,QAAA;AAAA,MAAA;AAVY,MAAA;AAalB,IAAA;AAGO,IAAA;AACU,sBAAA;AACN,sBAAA;AACT,IAAA;AAEJ,EAAA;AAEJ;AAEyB;AD9CsB;AACA;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-QQIALSTX.cjs","sourcesContent":[null,"import React, { forwardRef, useId, useState } from 'react';\nimport { CircleAlert } from 'lucide-react';\nimport type { RadioProps, RadioGroupProps } from './Radio.types';\n\n// ============================================================================\n// Radio\n// ============================================================================\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n label,\n color = 'primary',\n size = 'md',\n className = '',\n disabled = false,\n id,\n checked,\n defaultChecked,\n onChange,\n ...inputProps\n },\n ref,\n ) => {\n const generatedId = useId();\n const radioId = id || `radio-${generatedId}`;\n\n // Track checked state for the visual control:\n // - controlled mode: `checked` prop drives the visual\n // - uncontrolled mode (standalone Radio): local state mirrors the native input\n const isControlled = checked !== undefined;\n const [localChecked, setLocalChecked] = useState<boolean>(defaultChecked ?? false);\n\n // `??` only falls back when `checked` is undefined – `false` is kept as-is\n const isChecked = checked ?? localChecked;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setLocalChecked(e.target.checked);\n }\n onChange?.(e);\n };\n\n const wrapperClasses = [\n 'eidos-radio-wrapper',\n `eidos-radio-wrapper--${color}`,\n `eidos-radio-wrapper--${size}`,\n disabled && 'eidos-radio-wrapper--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const controlClasses = [\n 'eidos-radio-control',\n isChecked && 'eidos-radio-control--checked',\n disabled && 'eidos-radio-control--disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <label className={wrapperClasses}>\n <input\n ref={ref}\n type=\"radio\"\n id={radioId}\n className=\"eidos-radio-input\"\n disabled={disabled}\n onChange={handleChange}\n {...(isControlled ? { checked } : { defaultChecked })}\n {...inputProps}\n />\n <span className={controlClasses}>\n <span className=\"eidos-radio-dot\" />\n </span>\n {label && <span className=\"eidos-radio-label\">{label}</span>}\n </label>\n );\n },\n);\n\nRadio.displayName = 'Radio';\n\n// ============================================================================\n// RadioGroup\n//\n// Design note: RadioGroup always passes a controlled `checked` prop to every\n// Radio child so that the selection dot stays in sync across the full group.\n// For the \"uncontrolled\" case (defaultValue), RadioGroup owns the state\n// internally – individual Radios never need to manage it themselves.\n// ============================================================================\n\nexport const RadioGroup: React.FC<RadioGroupProps> = ({\n name,\n value: valueProp,\n defaultValue,\n onChange,\n options,\n direction = 'vertical',\n color = 'primary',\n size = 'md',\n disabled = false,\n error,\n className = '',\n}) => {\n const isControlled = valueProp !== undefined;\n const [localValue, setLocalValue] = useState<string | undefined>(defaultValue);\n\n // currentValue is always defined when valueProp is provided (controlled)\n const currentValue = isControlled ? valueProp : localValue;\n\n const handleOptionChange = (optionValue: string) => {\n if (!isControlled) {\n setLocalValue(optionValue);\n }\n onChange?.(optionValue);\n };\n\n const groupClasses = ['eidos-radio-group', `eidos-radio-group--${direction}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div>\n <div className={groupClasses}>\n {options.map((option) => (\n <Radio\n key={option.value}\n name={name}\n value={option.value}\n checked={currentValue === option.value}\n onChange={(e) => {\n if (e.target.checked) handleOptionChange(option.value);\n }}\n disabled={disabled || option.disabled}\n label={option.label}\n color={color}\n size={size}\n />\n ))}\n </div>\n\n {error && (\n <div className=\"eidos-radio-error-message\">\n <CircleAlert />\n <span>{error}</span>\n </div>\n )}\n </div>\n );\n};\n\nRadioGroup.displayName = 'RadioGroup';\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
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 _chunkGOR642KKcjs = require('./chunk-GOR642KK.cjs');
|
|
4
4
|
|
|
5
5
|
// src/components/Tabs/Tabs.component.tsx
|
|
6
6
|
var _react = require('react'); var _react2 = _interopRequireDefault(_react);
|
|
@@ -61,7 +61,7 @@ var Tab = ({
|
|
|
61
61
|
onKeyDown: handleKeyDown,
|
|
62
62
|
type: "button",
|
|
63
63
|
children: [
|
|
64
|
-
icon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-tab-icon", children:
|
|
64
|
+
icon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-tab-icon", children: _chunkGOR642KKcjs.renderIcon.call(void 0, icon, "eidos-tab-icon-svg") }),
|
|
65
65
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-tab-label", children })
|
|
66
66
|
]
|
|
67
67
|
}
|
|
@@ -166,4 +166,4 @@ Tabs.displayName = "Tabs";
|
|
|
166
166
|
|
|
167
167
|
|
|
168
168
|
exports.Tab = Tab; exports.TabPanel = TabPanel; exports.Tabs = Tabs;
|
|
169
|
-
//# sourceMappingURL=chunk-
|
|
169
|
+
//# sourceMappingURL=chunk-S77GR5YQ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-S77GR5YQ.cjs","../src/components/Tabs/Tabs.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-S77GR5YQ.cjs","sourcesContent":[null,"import React, { useState, useRef, useContext, useLayoutEffect } from 'react';\nimport { renderIcon } from '../../utils';\nimport type { TabsProps, TabProps, TabPanelProps, TabsContextValue } from './Tabs.types';\n\n// ============================================================================\n// CONTEXT\n// ============================================================================\n\nconst TabsContext = React.createContext<TabsContextValue | null>(null);\n\nconst useTabsContext = (): TabsContextValue => {\n const ctx = useContext(TabsContext);\n if (!ctx) throw new Error('Tab/TabPanel must be used inside <Tabs>');\n return ctx;\n};\n\n// ============================================================================\n// TAB - individual tab trigger button\n// Defined before Tabs so Tabs can use `child.type === Tab` for child separation.\n// ============================================================================\n\nexport const Tab: React.FC<TabProps> = ({\n value,\n children,\n disabled = false,\n icon,\n className = '',\n}) => {\n const { activeValue, onSelect, size, fullWidth, listRef } = useTabsContext();\n const isActive = activeValue === value;\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n const list = listRef.current;\n if (!list) return;\n\n const allTabs = Array.from(\n list.querySelectorAll('[role=\"tab\"]:not([disabled])'),\n ) as HTMLElement[];\n const currentIndex = allTabs.indexOf(e.currentTarget);\n if (currentIndex === -1) return;\n\n let targetIndex = -1;\n if (e.key === 'ArrowRight') targetIndex = (currentIndex + 1) % allTabs.length;\n else if (e.key === 'ArrowLeft')\n targetIndex = (currentIndex - 1 + allTabs.length) % allTabs.length;\n else if (e.key === 'Home') targetIndex = 0;\n else if (e.key === 'End') targetIndex = allTabs.length - 1;\n\n if (targetIndex !== -1) {\n e.preventDefault();\n allTabs[targetIndex].focus();\n }\n };\n\n const tabClasses = [\n 'eidos-tab',\n `eidos-tab--${size}`,\n isActive && 'eidos-tab--active',\n disabled && 'eidos-tab--disabled',\n fullWidth && 'eidos-tab--fullWidth',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n id={`eidos-tab-${value}`}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`eidos-tabpanel-${value}`}\n tabIndex={isActive ? 0 : -1}\n disabled={disabled}\n className={tabClasses}\n onClick={() => !disabled && onSelect(value)}\n onKeyDown={handleKeyDown}\n type=\"button\"\n >\n {icon && <span className=\"eidos-tab-icon\">{renderIcon(icon, 'eidos-tab-icon-svg')}</span>}\n <span className=\"eidos-tab-label\">{children}</span>\n </button>\n );\n};\n\nTab.displayName = 'Tab';\n\n// ============================================================================\n// TAB PANEL - content region shown when its value matches the active tab\n// Defined before Tabs for the same `child.type === TabPanel` check.\n// ============================================================================\n\nexport const TabPanel: React.FC<TabPanelProps> = ({ value, children, className = '' }) => {\n const { activeValue } = useTabsContext();\n const isActive = activeValue === value;\n\n if (!isActive) return null;\n\n return (\n <div\n id={`eidos-tabpanel-${value}`}\n role=\"tabpanel\"\n aria-labelledby={`eidos-tab-${value}`}\n tabIndex={0}\n className={['eidos-tab-panel', className].filter(Boolean).join(' ')}\n >\n {children}\n </div>\n );\n};\n\nTabPanel.displayName = 'TabPanel';\n\n// ============================================================================\n// TABS - root container; provides context, separates tab/panel children\n// ============================================================================\n\nexport const Tabs: React.FC<TabsProps> = ({\n value,\n defaultValue,\n onChange,\n variant = 'line',\n size = 'md',\n color = 'primary',\n fullWidth = false,\n className = '',\n children,\n}) => {\n const isControlled = value !== undefined;\n const [localValue, setLocalValue] = useState(defaultValue ?? '');\n const activeValue = isControlled ? value! : localValue;\n\n const listRef = useRef<HTMLDivElement>(null);\n const indicatorRef = useRef<HTMLSpanElement>(null);\n // Tracks whether the indicator has been positioned at least once so we can\n // skip the CSS transition on the very first render and avoid it animating\n // from the top-left corner to the initial tab.\n const hasPositioned = useRef(false);\n\n useLayoutEffect(() => {\n if (variant !== 'line') return;\n const list = listRef.current;\n const indicator = indicatorRef.current;\n if (!list || !indicator) return;\n\n const activeTab = list.querySelector('[aria-selected=\"true\"]') as HTMLElement | null;\n if (!activeTab) return;\n\n // Suppress the CSS transition on the initial paint so the indicator snaps\n // into place rather than sliding from 0.\n if (!hasPositioned.current) {\n indicator.style.transition = 'none';\n }\n\n indicator.style.left = `${activeTab.offsetLeft}px`;\n indicator.style.width = `${activeTab.offsetWidth}px`;\n\n if (!hasPositioned.current) {\n // Force a synchronous reflow so the browser commits the no-transition\n // position before we re-enable the transition for future clicks.\n void indicator.offsetWidth;\n indicator.style.transition = '';\n hasPositioned.current = true;\n }\n }, [activeValue, variant, fullWidth]);\n\n const onSelect = (newValue: string) => {\n if (!isControlled) {\n setLocalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n // Separate Tab and TabPanel children so the list and panels render in\n // distinct DOM regions, regardless of how the consumer orders them.\n const tabChildren: React.ReactElement[] = [];\n const panelChildren: React.ReactElement[] = [];\n\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) return;\n if (child.type === Tab) {\n tabChildren.push(child);\n } else if (child.type === TabPanel) {\n panelChildren.push(child);\n }\n });\n\n const rootClasses = ['eidos-tabs', `eidos-tabs--${variant}`, `eidos-tabs--${color}`, className]\n .filter(Boolean)\n .join(' ');\n\n const listClasses = [\n 'eidos-tabs-list',\n `eidos-tabs-list--${size}`,\n fullWidth && 'eidos-tabs-list--fullWidth',\n ]\n .filter(Boolean)\n .join(' ');\n\n const contextValue: TabsContextValue = {\n activeValue,\n onSelect,\n variant,\n size,\n color,\n fullWidth,\n listRef,\n };\n\n return (\n <TabsContext.Provider value={contextValue}>\n <div className={rootClasses}>\n <div ref={listRef} className={listClasses} role=\"tablist\">\n {tabChildren}\n {variant === 'line' && (\n <span ref={indicatorRef} className=\"eidos-tabs-indicator\" aria-hidden=\"true\" />\n )}\n </div>\n <div className=\"eidos-tabs-panels\">{panelChildren}</div>\n </div>\n </TabsContext.Provider>\n );\n};\n\nTabs.displayName = 'Tabs';\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MenuPanel
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JMD3P4CY.js";
|
|
4
4
|
|
|
5
5
|
// src/components/ContextMenu/ContextMenu.component.tsx
|
|
6
6
|
import { useState, useEffect, useRef, useCallback } from "react";
|
|
@@ -103,4 +103,4 @@ var ContextMenu = ({
|
|
|
103
103
|
export {
|
|
104
104
|
ContextMenu
|
|
105
105
|
};
|
|
106
|
-
//# sourceMappingURL=chunk-
|
|
106
|
+
//# sourceMappingURL=chunk-S7TWEVC3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ContextMenu/ContextMenu.component.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { MenuPanel } from '../Menu';\nimport type { MenuItem } from '../Menu';\nimport type { ContextMenuProps } from './ContextMenu.types';\n\ninterface MenuPosition {\n x: number;\n y: number;\n}\n\n/**\n * ContextMenu - wraps any content and attaches a right-click (or long-press)\n * triggered menu positioned at the cursor.\n *\n * The browser's native context menu is suppressed when `disabled` is false.\n * The menu closes on: click outside, item selection, Escape, and scroll.\n *\n * @example\n * ```tsx\n * <ContextMenu\n * items={[\n * { type: 'item', id: 'copy', label: 'Copy', icon: Copy, onClick: () => copy() },\n * { type: 'item', id: 'cut', label: 'Cut', icon: Scissors, onClick: () => cut() },\n * { type: 'separator', id: 'sep1' },\n * { type: 'item', id: 'delete', label: 'Delete', icon: Trash2, onClick: () => remove(), disabled: true },\n * ]}\n * >\n * <div className=\"canvas-area\">...</div>\n * </ContextMenu>\n * ```\n */\nexport const ContextMenu: React.FC<ContextMenuProps> = ({\n items,\n children,\n disabled = false,\n className = '',\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [position, setPosition] = useState<MenuPosition>({ x: 0, y: 0 });\n const [isPositioned, setIsPositioned] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const close = useCallback(() => {\n setIsOpen(false);\n setIsPositioned(false);\n }, []);\n\n // Measure the menu panel after it renders and clamp to viewport edges.\n useEffect(() => {\n if (!isOpen || !menuRef.current) return;\n\n const menu = menuRef.current;\n const { width, height } = menu.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const GAP = 4; // px clearance from viewport edge\n\n const clampedX = Math.min(position.x, vw - width - GAP);\n const clampedY = Math.min(position.y, vh - height - GAP);\n\n menu.style.left = `${Math.max(GAP, clampedX)}px`;\n menu.style.top = `${Math.max(GAP, clampedY)}px`;\n setIsPositioned(true);\n }, [isOpen, position]);\n\n // Close on click outside.\n useEffect(() => {\n if (!isOpen) return;\n\n const handleMouseDown = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n close();\n }\n };\n\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [isOpen, close]);\n\n // Close on Escape or scroll.\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') close();\n };\n\n const handleScroll = () => close();\n\n document.addEventListener('keydown', handleKeyDown);\n window.addEventListener('scroll', handleScroll, true); // capture: catches nested scrollers\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n window.removeEventListener('scroll', handleScroll, true);\n };\n }, [isOpen, close]);\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (disabled) return;\n e.preventDefault();\n e.stopPropagation();\n setIsOpen(true);\n setIsPositioned(false);\n setPosition({ x: e.clientX, y: e.clientY });\n };\n\n const handleItemClick = useCallback(\n (_item: MenuItem) => {\n close();\n },\n [close],\n );\n\n return (\n <>\n <div\n className={['eidos-context-menu-target', className].filter(Boolean).join(' ')}\n onContextMenu={handleContextMenu}\n >\n {children}\n </div>\n\n {isOpen &&\n createPortal(\n <div\n ref={menuRef}\n className={[\n 'eidos-context-menu-panel',\n isPositioned && 'eidos-context-menu-panel--positioned',\n ]\n .filter(Boolean)\n .join(' ')}\n style={{\n top: position.y,\n left: position.x,\n }}\n >\n <MenuPanel items={items} onItemClick={handleItemClick} />\n </div>,\n document.body,\n )}\n </>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-SDEKANNL.cjs","../src/components/Accordion/Accordion.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-SDEKANNL.cjs","sourcesContent":[null,"import React, { useState, useRef, useContext, useId, useEffect, useCallback } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport type { AccordionProps, AccordionItemProps, AccordionContextValue } from './Accordion.types';\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\n/** Normalise a controlled/default value (string | string[] | undefined) to string[]. */\nconst toArray = (v: string | string[] | undefined): string[] =>\n v === undefined ? [] : Array.isArray(v) ? v : [v];\n\n// ============================================================================\n// CONTEXT\n// ============================================================================\n\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\nconst useAccordion = (): AccordionContextValue => {\n const ctx = useContext(AccordionContext);\n if (!ctx) throw new Error('AccordionItem must be used inside <Accordion>');\n return ctx;\n};\n\n// ============================================================================\n// ACCORDION - root container; owns open state; provides context\n// ============================================================================\n\nexport const Accordion: React.FC<AccordionProps> = ({\n multiple = false,\n value,\n defaultValue,\n onChange,\n variant = 'default',\n size = 'md',\n color = 'primary',\n className = '',\n children,\n}) => {\n const isControlled = value !== undefined;\n\n const [localOpen, setLocalOpen] = useState<string[]>(() => toArray(defaultValue));\n const openValues = isControlled ? toArray(value) : localOpen;\n\n const toggle = useCallback(\n (itemValue: string) => {\n const isOpen = openValues.includes(itemValue);\n let next: string[];\n\n if (multiple) {\n next = isOpen ? openValues.filter((v) => v !== itemValue) : [...openValues, itemValue];\n } else {\n next = isOpen ? [] : [itemValue];\n }\n\n if (!isControlled) setLocalOpen(next);\n onChange?.(multiple ? next : (next[0] ?? ''));\n },\n [openValues, multiple, isControlled, onChange],\n );\n\n const rootClasses = ['eidos-accordion', `eidos-accordion--${variant}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <AccordionContext.Provider value={{ openValues, toggle, variant, size, color }}>\n <div className={rootClasses}>{children}</div>\n </AccordionContext.Provider>\n );\n};\n\nAccordion.displayName = 'Accordion';\n\n// ============================================================================\n// ACCORDION ITEM - individual item; reads context; renders trigger + animated panel\n// ============================================================================\n\nexport const AccordionItem: React.FC<AccordionItemProps> = ({\n value,\n label,\n icon,\n disabled = false,\n className = '',\n children,\n}) => {\n const { openValues, toggle, size, color } = useAccordion();\n const isOpen = openValues.includes(value);\n const contentRef = useRef<HTMLDivElement>(null);\n const triggerId = useId();\n const panelId = useId();\n\n // Drives the max-height CSS transition.\n // On open: set to scrollHeight so the wrapper animates to its natural height.\n // On close: set to 0 so the wrapper animates shut.\n // The CSS transition on .eidos-accordion-content-wrapper handles the animation.\n const [maxHeight, setMaxHeight] = useState<number>(0);\n\n useEffect(() => {\n if (!contentRef.current) return;\n setMaxHeight(isOpen ? contentRef.current.scrollHeight : 0);\n }, [isOpen]);\n\n const itemClasses = [\n 'eidos-accordion-item',\n isOpen && 'eidos-accordion-item--open',\n disabled && 'eidos-accordion-item--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const triggerClasses = [\n 'eidos-accordion-trigger',\n `eidos-accordion-trigger--${size}`,\n isOpen && 'eidos-accordion-trigger--open',\n isOpen && `eidos-accordion-trigger--${color}`,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={itemClasses}>\n <button\n id={triggerId}\n type=\"button\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n disabled={disabled}\n onClick={() => !disabled && toggle(value)}\n className={triggerClasses}\n >\n {icon && <span className=\"eidos-accordion-trigger-icon\">{icon}</span>}\n <span className=\"eidos-accordion-trigger-label\">{label}</span>\n <ChevronDown className=\"eidos-accordion-chevron\" aria-hidden=\"true\" />\n </button>\n\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n ref={contentRef}\n className=\"eidos-accordion-content-wrapper\"\n style={{ maxHeight: `${maxHeight}px` }}\n >\n <div className=\"eidos-accordion-content\">{children}</div>\n </div>\n </div>\n );\n};\n\nAccordionItem.displayName = 'AccordionItem';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/NumberInput/NumberInput.component.tsx"],"sourcesContent":["import React, { forwardRef, useState, useEffect, useId } from 'react';\nimport { Minus, Plus } from 'lucide-react';\nimport type { NumberInputProps } from './NumberInput.types';\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value,\n defaultValue = 0,\n onChange,\n min,\n max,\n step = 1,\n precision = 0,\n placeholder,\n disabled = false,\n readOnly = false,\n label,\n helperText,\n error = false,\n errorMessage,\n size = 'md',\n fullWidth = false,\n allowTyping = true,\n className = '',\n id,\n name,\n },\n ref,\n ) => {\n const generatedId = useId();\n const inputId = id || `number-input-${generatedId}`;\n\n // Controlled / uncontrolled bridge\n const isControlled = value !== undefined;\n const [localValue, setLocalValue] = useState<number>(defaultValue);\n\n // Intermediate text while the user is actively typing\n const [inputText, setInputText] = useState<string>(defaultValue.toFixed(precision));\n const [isFocused, setIsFocused] = useState(false);\n\n const currentValue = isControlled ? value! : localValue;\n\n // When min/max props change (e.g. via Storybook controls), clamp the\n // uncontrolled localValue so the display never shows an out-of-range value.\n useEffect(() => {\n if (isControlled) return;\n setLocalValue((prev) => {\n let result = prev;\n if (min !== undefined) result = Math.max(min, result);\n if (max !== undefined) result = Math.min(max, result);\n return parseFloat(result.toFixed(precision));\n });\n }, [min, max, precision, isControlled]);\n\n // Clamp to [min, max] and apply precision rounding\n const clampValue = (raw: number): number => {\n let result = raw;\n if (min !== undefined) result = Math.max(min, result);\n if (max !== undefined) result = Math.min(max, result);\n return parseFloat(result.toFixed(precision));\n };\n\n const commitValue = (newVal: number) => {\n const clamped = clampValue(newVal);\n if (!isControlled) setLocalValue(clamped);\n onChange?.(clamped);\n };\n\n // ── Stepper buttons ────────────────────────────────────────────────────\n const handleDecrement = () => {\n if (disabled || readOnly) return;\n commitValue(currentValue - step);\n };\n\n const handleIncrement = () => {\n if (disabled || readOnly) return;\n commitValue(currentValue + step);\n };\n\n // ── Typing mode handlers ───────────────────────────────────────────────\n const handleTextFocus = () => {\n setInputText(currentValue.toFixed(precision));\n setIsFocused(true);\n };\n\n const handleTextChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputText(e.target.value);\n };\n\n const handleTextBlur = () => {\n setIsFocused(false);\n const parsed = parseFloat(inputText);\n if (!isNaN(parsed)) {\n const clamped = clampValue(parsed);\n if (!isControlled) setLocalValue(clamped);\n onChange?.(clamped);\n setInputText(clamped.toFixed(precision));\n } else {\n // Revert to the last known-good value\n setInputText(currentValue.toFixed(precision));\n }\n };\n\n // ArrowUp / ArrowDown keyboard support for both display modes\n const handleDisplayKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n handleIncrement();\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n handleDecrement();\n }\n };\n\n // ── Display value ──────────────────────────────────────────────────────\n // Show intermediate inputText while focused in typing mode;\n // otherwise always derive from the real (controlled/uncontrolled) value.\n const formattedValue = currentValue.toFixed(precision);\n const displayedText = allowTyping && isFocused ? inputText : formattedValue;\n\n // ── Disabled states for buttons ────────────────────────────────────────\n const isDecrementDisabled = disabled || readOnly || (min !== undefined && currentValue <= min);\n const isIncrementDisabled = disabled || readOnly || (max !== undefined && currentValue >= max);\n\n // ── CSS classes ────────────────────────────────────────────────────────\n const rootClasses = [\n 'eidos-number-input',\n `eidos-number-input--${size}`,\n fullWidth && 'eidos-number-input--fullWidth',\n error && 'eidos-number-input--error',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const controlClasses = [\n 'eidos-number-input-control',\n disabled && 'eidos-number-input-control--disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClasses}>\n {label && (\n <label htmlFor={allowTyping ? inputId : undefined} className=\"eidos-number-input-label\">\n {label}\n </label>\n )}\n\n <div\n className={controlClasses}\n role={allowTyping ? undefined : 'spinbutton'}\n aria-valuemin={allowTyping ? undefined : min}\n aria-valuemax={allowTyping ? undefined : max}\n aria-valuenow={allowTyping ? undefined : currentValue}\n aria-label={allowTyping ? undefined : (label ?? 'Number input')}\n aria-disabled={disabled || undefined}\n tabIndex={!allowTyping && !disabled ? 0 : undefined}\n onKeyDown={!allowTyping ? handleDisplayKeyDown : undefined}\n >\n <button\n type=\"button\"\n className=\"eidos-number-input-btn\"\n onClick={handleDecrement}\n disabled={isDecrementDisabled}\n aria-label=\"Decrease\"\n >\n <Minus />\n </button>\n\n <div className=\"eidos-number-input-divider\" aria-hidden=\"true\" />\n\n {allowTyping ? (\n <input\n id={inputId}\n type=\"text\"\n className=\"eidos-number-input-display\"\n value={displayedText}\n onChange={handleTextChange}\n onFocus={handleTextFocus}\n onBlur={handleTextBlur}\n onKeyDown={handleDisplayKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n inputMode=\"decimal\"\n role=\"spinbutton\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n aria-label={label ?? 'Number input'}\n />\n ) : (\n <span className=\"eidos-number-input-display\" aria-hidden=\"true\">\n {placeholder && formattedValue === (0).toFixed(precision) && !isFocused\n ? placeholder\n : formattedValue}\n </span>\n )}\n\n <div className=\"eidos-number-input-divider\" aria-hidden=\"true\" />\n\n <button\n type=\"button\"\n className=\"eidos-number-input-btn\"\n onClick={handleIncrement}\n disabled={isIncrementDisabled}\n aria-label=\"Increase\"\n >\n <Plus />\n </button>\n </div>\n\n {/* Hidden native <input type=\"number\"> for form integration */}\n <input\n ref={ref}\n type=\"number\"\n name={name}\n value={currentValue}\n onChange={() => {}}\n className=\"eidos-number-input-hidden\"\n tabIndex={-1}\n aria-hidden=\"true\"\n disabled={disabled}\n readOnly={readOnly}\n min={min}\n max={max}\n step={step}\n />\n\n {helperText && !error && <span className=\"eidos-number-input-helper\">{helperText}</span>}\n\n {error && errorMessage && (\n <span className=\"eidos-number-input-error\" role=\"alert\">\n {errorMessage}\n </span>\n )}\n </div>\n );\n },\n);\n\nNumberInput.displayName = 'NumberInput';\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-SJDTFR3I.cjs"],"names":[],"mappings":"AAAA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-SJDTFR3I.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-SWPZ3HFY.cjs"],"names":[],"mappings":"AAAA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-SWPZ3HFY.cjs"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-TROYIUDH.cjs","../src/components/Spinner/Spinner.component.tsx"],"names":[],"mappings":"AAAA;ACCA,2CAA6B;AA4BzB,+CAAA;AAjBG,IAAM,QAAA,EAAkC,CAAC;AAAA,EAC9C,KAAA,EAAO,IAAA;AAAA,EACP,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY;AACd,CAAA,EAAA,mBACE,6BAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,IAAA,EAAK,QAAA;AAAA,IACL,YAAA,EAAW,SAAA;AAAA,IACX,SAAA,EAAW;AAAA,MACT,uBAAA;AAAA,MACA,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA;AACC,MAAA;AAC/B,MAAA;AAGS,IAAA;AAEV,IAAA;AAA0D,EAAA;AAC7D;ADTmC;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-TROYIUDH.cjs","sourcesContent":[null,"import React from 'react';\nimport { LoaderCircle } from 'lucide-react';\nimport type { ComponentSizeProps } from '../../utils';\n\nexport type SpinnerColorProps = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info';\n\nexport interface SpinnerProps {\n size?: ComponentSizeProps;\n color?: SpinnerColorProps;\n className?: string;\n}\n\nexport const Spinner: React.FC<SpinnerProps> = ({\n size = 'md',\n color = 'primary',\n className = '',\n}) => (\n <div\n role=\"status\"\n aria-label=\"Loading\"\n className={[\n 'eidos-spinner-wrapper',\n `eidos-spinner-wrapper--${size}`,\n `eidos-spinner-wrapper--${color}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <LoaderCircle className=\"eidos-spinner\" aria-hidden=\"true\" />\n </div>\n);\n"]}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunk3EPND5M2cjs = require('./chunk-3EPND5M2.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkFMPXSF3Hcjs = require('./chunk-FMPXSF3H.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkQ3GNKF74cjs = require('./chunk-Q3GNKF74.cjs');
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _chunk5O73AALPcjs = require('./chunk-5O73AALP.cjs');
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _chunkA7Z2QAFZcjs = require('./chunk-A7Z2QAFZ.cjs');
|
|
16
16
|
|
|
17
17
|
// src/components/Toolbar/Toolbar.component.tsx
|
|
18
18
|
var _jsxruntime = require('react/jsx-runtime');
|
|
@@ -25,14 +25,14 @@ var Toolbar = ({
|
|
|
25
25
|
}) => {
|
|
26
26
|
const classes = ["eidos-toolbar", className].filter(Boolean).join(" ");
|
|
27
27
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: classes, children: [
|
|
28
|
-
breadcrumbs && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
28
|
+
breadcrumbs && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5O73AALPcjs.Breadcrumb, { ...breadcrumbs }),
|
|
29
29
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "eidos-toolbar__content", children: [
|
|
30
|
-
cmdPaletteItems && cmdPaletteItems.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
31
|
-
actions && actions.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-toolbar__actions", children: actions.map((action, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
30
|
+
cmdPaletteItems && cmdPaletteItems.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3EPND5M2cjs.CommandPalette, { trigger: true, triggerLabel: "Search", items: cmdPaletteItems }),
|
|
31
|
+
actions && actions.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-toolbar__actions", children: actions.map((action, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkA7Z2QAFZcjs.IconButton, { variant: "text", size: "sm", ...action }, index)) }),
|
|
32
32
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
33
|
-
|
|
33
|
+
_chunkFMPXSF3Hcjs.Menu,
|
|
34
34
|
{
|
|
35
|
-
trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
35
|
+
trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQ3GNKF74cjs.Avatar, { name: "John Doe", size: "sm", color: "primary" }),
|
|
36
36
|
items: userMenu,
|
|
37
37
|
minWidth: 220
|
|
38
38
|
}
|
|
@@ -44,4 +44,4 @@ var Toolbar = ({
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
exports.Toolbar = Toolbar;
|
|
47
|
-
//# sourceMappingURL=chunk-
|
|
47
|
+
//# sourceMappingURL=chunk-UGMONQGH.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-UGMONQGH.cjs","../src/components/Toolbar/Toolbar.component.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACIsB,+CAAA;AAXf,IAAM,QAAA,EAAkC,CAAC;AAAA,EAC9C,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA,EAAY;AACd,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAErE,EAAA,uBACE,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAW,OAAA,EACb,QAAA,EAAA;AAAA,IAAA,YAAA,mBAAe,6BAAA,4BAAC,EAAA,EAAY,GAAG,YAAA,CAAa,CAAA;AAAA,oBAC7C,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,wBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,gBAAA,GAAmB,eAAA,CAAgB,OAAA,EAAS,EAAA,mBAC3C,6BAAA,gCAAC,EAAA,EAAe,OAAA,EAAO,IAAA,EAAC,YAAA,EAAa,QAAA,EAAS,KAAA,EAAO,gBAAA,CAAiB,CAAA;AAAA,MAEvE,QAAA,GAAW,OAAA,CAAQ,OAAA,EAAS,EAAA,mBAC3B,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,wBAAA,EACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,EAAA,mBACpB,6BAAA,4BAAC,EAAA,EAAuB,OAAA,EAAQ,MAAA,EAAO,IAAA,EAAK,IAAA,EAAM,GAAG,OAAA,CAAA,EAApC,KAA4C,CAC9D,EAAA,CACH,CAAA;AAAA,sBAEF,6BAAA;AAAA,QAAC,sBAAA;AAAA,QAAA;AAAA,UACC,OAAA,kBAAS,6BAAA,wBAAC,EAAA,EAAO,IAAA,EAAK,UAAA,EAAW,IAAA,EAAK,IAAA,EAAK,KAAA,EAAM,UAAA,CAAU,CAAA;AAAA,UAC3D,KAAA,EAAO,QAAA;AAAA,UACP,QAAA,EAAU;AAAA,QAAA;AAAA,MACZ;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,CAAA;AAEJ,CAAA;ADEA;AACA;AACE;AACF,0BAAC","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-UGMONQGH.cjs","sourcesContent":[null,"import React from 'react';\nimport type { ToolbarProps } from './Toolbar.types';\nimport './Toolbar.scss';\nimport { IconButton } from '../Button';\nimport { Breadcrumb } from '../Breadcrumb';\nimport { Avatar } from '../Avatar';\nimport { Menu } from '../Menu';\nimport { CommandPalette } from '../CommandPalette';\n\nexport const Toolbar: React.FC<ToolbarProps> = ({\n breadcrumbs,\n actions,\n userMenu,\n cmdPaletteItems,\n className = '',\n}) => {\n const classes = ['eidos-toolbar', className].filter(Boolean).join(' ');\n\n return (\n <div className={classes}>\n {breadcrumbs && <Breadcrumb {...breadcrumbs} />}\n <div className=\"eidos-toolbar__content\">\n {cmdPaletteItems && cmdPaletteItems.length > 0 && (\n <CommandPalette trigger triggerLabel=\"Search\" items={cmdPaletteItems} />\n )}\n {actions && actions.length > 0 && (\n <div className=\"eidos-toolbar__actions\">\n {actions.map((action, index) => (\n <IconButton key={index} variant=\"text\" size=\"sm\" {...action} />\n ))}\n </div>\n )}\n <Menu\n trigger={<Avatar name=\"John Doe\" size=\"sm\" color=\"primary\" />}\n items={userMenu}\n minWidth={220}\n />\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ButtonGroup/ButtonGroup.component.tsx"],"sourcesContent":["import React from 'react';\nimport type { ButtonGroupProps } from './ButtonGroup.types';\n\n/**\n * ButtonGroup - wraps adjacent Button components into a single visual unit.\n *\n * - Collapses inner border-radii so only the two outer ends are rounded.\n * - Collapses the shared border between adjacent outlined buttons into one line.\n * - Optionally propagates `size`, `variant`, and `color` down to children that\n * don't already specify those props (each child can still override individually).\n *\n * @example\n * ```tsx\n * <ButtonGroup variant=\"outlined\" color=\"primary\">\n * <Button>Left</Button>\n * <Button>Center</Button>\n * <Button>Right</Button>\n * </ButtonGroup>\n * ```\n */\nexport const ButtonGroup: React.FC<ButtonGroupProps> = ({\n children,\n size,\n variant,\n color,\n orientation = 'horizontal',\n className = '',\n}) => {\n const clampedChildren = React.Children.map(children, (child) => {\n if (!React.isValidElement(child)) return child;\n // Child's own explicitly-set props win; group-level props are fallbacks.\n const childProps = child.props as Record<string, unknown>;\n return React.cloneElement(child as React.ReactElement<Record<string, unknown>>, {\n ...(size !== undefined && childProps.size === undefined && { size }),\n ...(variant !== undefined && childProps.variant === undefined && { variant }),\n ...(color !== undefined && childProps.color === undefined && { color }),\n });\n });\n\n const classes = ['eidos-button-group', `eidos-button-group--${orientation}`, className]\n .filter(Boolean)\n .join(' ');\n\n return <div className={classes}>{clampedChildren}</div>;\n};\n"],"mappings":";AAAA,OAAO,WAAW;AA2CT;AAvBF,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,YAAY;AACd,MAAM;AACJ,QAAM,kBAAkB,MAAM,SAAS,IAAI,UAAU,CAAC,UAAU;AAC9D,QAAI,CAAC,MAAM,eAAe,KAAK,EAAG,QAAO;AAEzC,UAAM,aAAa,MAAM;AACzB,WAAO,MAAM,aAAa,OAAsD;AAAA,MAC9E,GAAI,SAAS,UAAa,WAAW,SAAS,UAAa,EAAE,KAAK;AAAA,MAClE,GAAI,YAAY,UAAa,WAAW,YAAY,UAAa,EAAE,QAAQ;AAAA,MAC3E,GAAI,UAAU,UAAa,WAAW,UAAU,UAAa,EAAE,MAAM;AAAA,IACvE,CAAC;AAAA,EACH,CAAC;AAED,QAAM,UAAU,CAAC,sBAAsB,uBAAuB,WAAW,IAAI,SAAS,EACnF,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SAAO,oBAAC,SAAI,WAAW,SAAU,2BAAgB;AACnD;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-V2S6XWIQ.cjs","../src/components/Progress/Progress.component.tsx"],"names":[],"mappings":"AAAA;ACyCI,+CAAA;AArCG,IAAM,SAAA,EAAoC,CAAC;AAAA,EAChD,KAAA;AAAA,EACA,IAAA,EAAM,GAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,UAAA,EAAY,KAAA;AAAA,EACZ,KAAA;AAAA,EACA,QAAA,EAAU,KAAA;AAAA,EACV;AACF,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,WAAA,EACJ,MAAA,IAAU,KAAA,EAAA,EAAY,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAI,MAAA,EAAQ,IAAA,EAAO,GAAG,CAAC,EAAA,EAAI,KAAA,CAAA;AAE1E,EAAA,MAAM,gBAAA,EAAkB,WAAA,IAAe,KAAA,CAAA;AAEvC,EAAA,MAAM,aAAA,mBACJ,KAAA,UAAA,CAAU,WAAA,IAAe,KAAA,EAAA,EAAY,CAAA,EAAA;AAEvB,EAAA;AACd,IAAA;AACwB,IAAA;AACD,IAAA;AACZ,IAAA;AACQ,IAAA;AACnB,IAAA;AAGS,EAAA;AAES,EAAA;AAClB,IAAA;AACmB,IAAA;AAGV,EAAA;AAGT,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACN,MAAA;AACU,MAAA;AACA,MAAA;AACA,MAAA;AACyB,MAAA;AAExC,MAAA;AAAe,wBAAA;AACZ,UAAA;AAAA,UAAA;AACY,YAAA;AAC2B,YAAA;AAAkB,UAAA;AAE5D,QAAA;AAEE,QAAA;AAAqD,MAAA;AAAA,IAAA;AAEzD,EAAA;AAEJ;ADX0D;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-V2S6XWIQ.cjs","sourcesContent":[null,"import React from 'react';\nimport type { ProgressProps } from './Progress.types';\nimport './Progress.scss';\n\nexport const Progress: React.FC<ProgressProps> = ({\n value,\n max = 100,\n color = 'primary',\n size = 'md',\n showLabel = false,\n label,\n striped = false,\n className,\n}) => {\n const percentage =\n value !== undefined ? Math.min(100, Math.max(0, (value / max) * 100)) : undefined;\n\n const isIndeterminate = percentage === undefined;\n\n const displayLabel =\n label ?? (percentage !== undefined ? `${Math.round(percentage)}%` : undefined);\n\n const classes = [\n 'eidos-progress',\n `eidos-progress--${color}`,\n `eidos-progress--${size}`,\n striped && 'eidos-progress--striped',\n isIndeterminate && 'eidos-progress--indeterminate',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const fillClasses = [\n 'eidos-progress-fill',\n isIndeterminate && 'eidos-progress-fill--indeterminate',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={classes}\n role=\"progressbar\"\n aria-valuenow={percentage}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label ?? (isIndeterminate ? 'Loading…' : `${Math.round(percentage!)}%`)}\n >\n <div className=\"eidos-progress-track\">\n <div\n className={fillClasses}\n style={!isIndeterminate ? { width: `${percentage}%` } : undefined}\n />\n </div>\n {showLabel && !isIndeterminate && (\n <span className=\"eidos-progress-label\">{displayLabel}</span>\n )}\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-V5RS3JZN.cjs","../src/components/Card/Card.component.tsx"],"names":[],"mappings":"AAAA;AC2BI,+CAAA;AAvBG,IAAM,KAAA,EAA4B,CAAC;AAAA,EACxC,QAAA,EAAU,UAAA;AAAA,EACV,QAAA,EAAU,IAAA;AAAA,EACV,EAAA,EAAI,GAAA;AAAA,EACJ,UAAA,EAAY,KAAA;AAAA,EACZ,UAAA,EAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAA,GAAM;AAEJ,EAAA,MAAM,QAAA,EAA6B,IAAA,GAAO,KAAA;AAE1C,EAAA,MAAM,QAAA,EAAU;AAAA,IACd,YAAA;AAAA,IACA,CAAA,YAAA,EAAe,OAAO,CAAA,CAAA;AACC,IAAA;AACX,IAAA;AACZ,IAAA;AAGM,EAAA;AAGN,EAAA;AAIJ;ADV2B;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-V5RS3JZN.cjs","sourcesContent":[null,"import React from 'react';\nimport type { CardProps } from './Card.types';\nimport './Card.scss';\n\nexport const Card: React.FC<CardProps> = ({\n variant = 'outlined',\n padding = 'md',\n as: Tag,\n clickable = false,\n className = '',\n children,\n ...rest\n}) => {\n // Guard against empty string passed by Storybook's text control\n const Element: React.ElementType = Tag || 'div';\n\n const classes = [\n 'eidos-card',\n `eidos-card--${variant}`,\n `eidos-card--padding-${padding}`,\n clickable ? 'eidos-card--clickable' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Element className={classes} {...rest}>\n {children}\n </Element>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-VW32UTUE.cjs"],"names":[],"mappings":"AAAA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-VW32UTUE.cjs"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Chip
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4M3LZLOH.js";
|
|
4
4
|
import {
|
|
5
5
|
Dropdown
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-4BKTBV2I.js";
|
|
7
7
|
|
|
8
8
|
// src/components/TagInput/TagInput.component.tsx
|
|
9
9
|
import { useState, useId, useRef, useCallback, useMemo, useEffect } from "react";
|
|
@@ -296,4 +296,4 @@ TagInput.displayName = "TagInput";
|
|
|
296
296
|
export {
|
|
297
297
|
TagInput
|
|
298
298
|
};
|
|
299
|
-
//# sourceMappingURL=chunk-
|
|
299
|
+
//# sourceMappingURL=chunk-VZYLJSV5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/TagInput/TagInput.component.tsx"],"sourcesContent":["import React, { useState, useId, useRef, useCallback, useMemo, useEffect } from 'react';\nimport { CircleAlert } from 'lucide-react';\nimport { Chip } from '../Chip/Chip.component';\nimport { Dropdown } from '../Dropdown/Dropdown.component';\nimport type { TagInputProps } from './TagInput.types';\nimport './TagInput.scss';\n\nexport const TagInput: React.FC<TagInputProps> = ({\n value,\n defaultValue = [],\n onChange,\n placeholder = 'Add tag…',\n size = 'md',\n disabled = false,\n label,\n error,\n hint,\n allowDuplicates = false,\n maxTags,\n separators = ['Enter', ',', 'Tab'],\n validate,\n className = '',\n fullWidth = false,\n suggestions,\n onSearch,\n suggestionsEmptyText = 'No matches',\n}) => {\n const generatedId = useId();\n const inputId = `tag-input-${generatedId}`;\n const inputRef = useRef<HTMLInputElement>(null);\n\n /** Entire component wrapper - used for click-outside detection on the suggestions dropdown */\n const containerRef = useRef<HTMLDivElement>(null);\n\n /** The field wrapper - passed to Dropdown as externalTriggerRef for width/anchoring */\n const fieldRef = useRef<HTMLDivElement>(null);\n\n /** The 0-height span that IS the Dropdown trigger element - programmatically clicked to open */\n const dropdownSpanRef = useRef<HTMLSpanElement>(null);\n\n const hasSuggestions = suggestions !== undefined;\n const isSuggestionsOpenRef = useRef(false);\n const [isSuggestionsOpen, setIsSuggestionsOpen] = useState(false);\n const [suggestionsMenuKey, setSuggestionsMenuKey] = useState(0);\n const [focusedSuggestionIndex, setFocusedSuggestionIndex] = useState(-1);\n\n const isControlled = value !== undefined;\n\n const [internalTags, setInternalTags] = useState<string[]>(defaultValue);\n const [inputValue, setInputValue] = useState('');\n const [isFocused, setIsFocused] = useState(false);\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const tags = isControlled ? (value as string[]) : internalTags;\n\n const updateTags = useCallback(\n (newTags: string[]) => {\n if (!isControlled) {\n setInternalTags(newTags);\n }\n onChange?.(newTags);\n },\n [isControlled, onChange],\n );\n\n const addTag = useCallback(\n (rawTag: string) => {\n const tag = rawTag.trim();\n\n if (!tag) return;\n\n if (!allowDuplicates && tags.includes(tag)) return;\n\n if (maxTags !== undefined && tags.length >= maxTags) return;\n\n if (validate) {\n const result = validate(tag);\n if (result === false) return;\n if (typeof result === 'string') {\n setValidationError(result);\n return;\n }\n // result === true → valid, fall through\n }\n\n setValidationError(null);\n updateTags([...tags, tag]);\n setInputValue('');\n },\n [tags, allowDuplicates, maxTags, validate, updateTags],\n );\n\n const removeTag = useCallback(\n (index: number) => {\n updateTags(tags.filter((_, i) => i !== index));\n },\n [tags, updateTags],\n );\n\n // ─── Suggestions dropdown (autocomplete) ───────────────────────────────────\n\n const filteredSuggestions = useMemo<string[]>(() => {\n if (!suggestions) return [];\n const query = inputValue.trim().toLowerCase();\n return suggestions.filter((suggestion) => {\n if (!allowDuplicates && tags.includes(suggestion)) return false;\n if (!query) return true;\n return suggestion.toLowerCase().includes(query);\n });\n }, [suggestions, inputValue, tags, allowDuplicates]);\n\n useEffect(() => {\n setFocusedSuggestionIndex(-1);\n }, [filteredSuggestions]);\n\n const openSuggestions = useCallback(() => {\n if (isSuggestionsOpenRef.current || disabled || !hasSuggestions) return;\n dropdownSpanRef.current?.click(); // opens the Dropdown (bubbles to trigger)\n isSuggestionsOpenRef.current = true;\n setIsSuggestionsOpen(true);\n }, [disabled, hasSuggestions]);\n\n const closeSuggestions = useCallback(() => {\n isSuggestionsOpenRef.current = false;\n setIsSuggestionsOpen(false);\n setFocusedSuggestionIndex(-1);\n setSuggestionsMenuKey((prev) => prev + 1);\n }, []);\n\n const selectSuggestion = useCallback(\n (suggestion: string) => {\n addTag(suggestion);\n closeSuggestions();\n inputRef.current?.focus();\n },\n [addTag, closeSuggestions],\n );\n\n // Click-outside detection for the suggestions dropdown.\n useEffect(() => {\n if (!hasSuggestions) return;\n\n const handleMouseDown = (e: MouseEvent) => {\n if (!isSuggestionsOpenRef.current) return;\n if (e.defaultPrevented) return; // click inside the portal-rendered listbox\n if (containerRef.current?.contains(e.target as Node)) return;\n closeSuggestions();\n };\n\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [hasSuggestions, closeSuggestions]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (hasSuggestions && isSuggestionsOpenRef.current && filteredSuggestions.length > 0) {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setFocusedSuggestionIndex((prev) => (prev + 1 < filteredSuggestions.length ? prev + 1 : 0));\n return;\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n setFocusedSuggestionIndex((prev) => (prev > 0 ? prev - 1 : filteredSuggestions.length - 1));\n return;\n }\n if (e.key === 'Enter' && focusedSuggestionIndex >= 0) {\n e.preventDefault();\n selectSuggestion(filteredSuggestions[focusedSuggestionIndex]);\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n closeSuggestions();\n return;\n }\n }\n\n if (separators.includes(e.key)) {\n e.preventDefault();\n addTag(inputValue);\n return;\n }\n\n if (e.key === 'Backspace' && inputValue === '' && tags.length > 0) {\n e.preventDefault();\n removeTag(tags.length - 1);\n }\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const query = e.target.value;\n setInputValue(query);\n if (validationError) {\n setValidationError(null);\n }\n onSearch?.(query);\n if (hasSuggestions && !isSuggestionsOpenRef.current) openSuggestions();\n };\n\n const handleInputFocus = () => {\n setIsFocused(true);\n if (hasSuggestions) openSuggestions();\n };\n\n const handleFieldClick = (e: React.MouseEvent<HTMLDivElement>) => {\n // Don't steal focus from interactive child elements\n if ((e.target as HTMLElement).closest('button, input')) return;\n if (!disabled) {\n inputRef.current?.focus();\n }\n };\n\n const displayError = validationError ?? error;\n const hasError = !!displayError;\n const errorId = `${inputId}-error`;\n const hintId = `${inputId}-hint`;\n\n const containerClasses = [\n 'eidos-tag-input',\n hasError && 'eidos-tag-input--error',\n disabled && 'eidos-tag-input--disabled',\n fullWidth && 'eidos-tag-input--full-width',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const fieldClasses = [\n 'eidos-tag-input-field',\n `eidos-tag-input-field--${size}`,\n isFocused && 'eidos-tag-input-field--focused',\n hasError && 'eidos-tag-input-field--error',\n disabled && 'eidos-tag-input-field--disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n const uid = generatedId;\n\n return (\n <div\n className={containerClasses}\n ref={containerRef}\n aria-expanded={hasSuggestions ? isSuggestionsOpen : undefined}\n aria-haspopup={hasSuggestions ? 'listbox' : undefined}\n >\n {label && (\n <label htmlFor={inputId} className=\"eidos-tag-input-label\">\n {label}\n </label>\n )}\n\n <div className={fieldClasses} onClick={handleFieldClick} ref={fieldRef}>\n {tags.map((tag, index) => (\n <Chip\n key={`${tag}-${index}`}\n variant=\"filled\"\n color=\"primary\"\n size={size}\n onRemove={disabled ? undefined : () => removeTag(index)}\n >\n {tag}\n </Chip>\n ))}\n\n <input\n ref={inputRef}\n id={inputId}\n className=\"eidos-tag-input-input\"\n type=\"text\"\n value={inputValue}\n placeholder={tags.length === 0 ? placeholder : undefined}\n disabled={disabled}\n onKeyDown={handleKeyDown}\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n onBlur={() => setIsFocused(false)}\n aria-label={label ? undefined : 'Tag input'}\n aria-describedby={hasError ? errorId : hint ? hintId : undefined}\n aria-autocomplete={hasSuggestions ? 'list' : undefined}\n aria-controls={hasSuggestions ? `${uid}-tag-suggestions` : undefined}\n aria-activedescendant={\n hasSuggestions && focusedSuggestionIndex >= 0\n ? `${uid}-tag-suggestion-${focusedSuggestionIndex}`\n : undefined\n }\n />\n\n {hasSuggestions && (\n <Dropdown\n key={suggestionsMenuKey}\n trigger={\n <span\n ref={dropdownSpanRef}\n className=\"eidos-tag-input-dropdown-anchor\"\n aria-hidden=\"true\"\n />\n }\n content={\n <div\n id={`${uid}-tag-suggestions`}\n className=\"eidos-tag-input-suggestions\"\n role=\"listbox\"\n aria-label={label ?? 'Suggestions'}\n onMouseDown={(e) => e.preventDefault()}\n >\n {filteredSuggestions.length === 0 ? (\n <div className=\"eidos-tag-input-suggestions-empty\">{suggestionsEmptyText}</div>\n ) : (\n filteredSuggestions.map((suggestion, index) => (\n <div\n key={suggestion}\n id={`${uid}-tag-suggestion-${index}`}\n className={[\n 'eidos-tag-input-suggestion',\n index === focusedSuggestionIndex && 'eidos-tag-input-suggestion--focused',\n ]\n .filter(Boolean)\n .join(' ')}\n role=\"option\"\n aria-selected={index === focusedSuggestionIndex}\n onClick={() => selectSuggestion(suggestion)}\n onMouseEnter={() => setFocusedSuggestionIndex(index)}\n >\n {suggestion}\n </div>\n ))\n )}\n </div>\n }\n triggerRef={fieldRef as React.RefObject<HTMLElement | null>}\n autoWidth\n closeOnClickOutside={false}\n closeOnEscape={false}\n />\n )}\n </div>\n\n {hint && !hasError && (\n <p className=\"eidos-tag-input-hint\" id={hintId}>\n {hint}\n </p>\n )}\n\n {hasError && (\n <p className=\"eidos-tag-input-error-message\" id={errorId} role=\"alert\">\n <CircleAlert />\n {displayError}\n </p>\n )}\n </div>\n );\n};\n\nTagInput.displayName = 'TagInput';\n"],"mappings":"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","names":[]}
|