eidos-ui 1.0.0 → 1.0.2
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 -175
- 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-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-6GAIQ2IY.cjs → chunk-CBLWP43O.cjs} +47 -47
- package/dist/chunk-CBLWP43O.cjs.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-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-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-6HGDQ4BM.js → chunk-S2EICHZK.js} +13 -13
- package/dist/chunk-S2EICHZK.js.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-XMRMCWSQ.js → chunk-W3X3V72Q.js} +3 -3
- package/dist/chunk-W3X3V72Q.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-GI7WPGP2.cjs → chunk-YRK56AOP.cjs} +5 -5
- package/dist/chunk-YRK56AOP.cjs.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.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 +17 -17
- package/dist/data-grid/index.cjs.map +1 -1
- package/dist/data-grid/index.js +16 -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 +56 -56
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +55 -55
- 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.js +3 -3
- package/dist/select/index.cjs +6 -6
- package/dist/select/index.cjs.map +1 -1
- 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 +114 -110
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Table/Table.component.tsx"],"sourcesContent":["import { useState, useMemo, useLayoutEffect, useRef } from 'react';\nimport React from 'react';\nimport {\n ChevronsUpDown,\n ArrowUp,\n ArrowDown,\n X,\n Check,\n Download,\n Columns3,\n AlignJustify,\n GripVertical,\n FolderOpen,\n SearchX,\n} from 'lucide-react';\nimport { DndContext, PointerSensor, KeyboardSensor, useSensor, useSensors } from '@dnd-kit/core';\nimport type { DragEndEvent } from '@dnd-kit/core';\nimport {\n SortableContext,\n horizontalListSortingStrategy,\n useSortable,\n sortableKeyboardCoordinates,\n arrayMove,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport type { TableColumn, TableProps, TableFilters, FilterValue } from './Table.types';\n\nexport type { TableColumn, TableProps, TableFilters, FilterValue };\nimport { Button } from '../Button';\nimport { Checkbox } from '../Checkbox';\nimport { Dropdown } from '../Dropdown';\nimport { EmptyState } from '../EmptyState';\nimport { Pagination } from '../Pagination';\nimport { SplitButton } from '../SplitButton';\nimport { Spinner } from '../Spinner';\nimport { TableFiltersDropdown } from './TableFiltersDropdown.component';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\ntype Density = 'compact' | 'comfortable' | 'spacious';\n\nconst DENSITY_OPTIONS: { value: Density; label: string }[] = [\n { value: 'compact', label: 'Compact' },\n { value: 'comfortable', label: 'Comfortable' },\n { value: 'spacious', label: 'Spacious' },\n];\n\n// ── CSV helpers ───────────────────────────────────────────────────────────────\n\nfunction escapeCsvValue(value: string): string {\n if (value.includes(',') || value.includes('\\n') || value.includes('\"')) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n}\n\n// ── SortableColumnHeader ──────────────────────────────────────────────────────\n// Defined as a standalone component so it can legally call useSortable().\n// Only rendered when draggableColumns=true (inside a DndContext + SortableContext).\n\ninterface SortableThProps {\n id: string;\n column: { label: string };\n isSortable: boolean;\n isCurrentlySorted: boolean;\n sortDirection: 'asc' | 'desc' | null;\n alignment: string;\n columnType: string;\n columnWidth: string | undefined;\n pinnedClass: string;\n stickyStyle: React.CSSProperties;\n onSortClick: () => void;\n}\n\nfunction SortableColumnHeader({\n id,\n column,\n isSortable,\n isCurrentlySorted,\n sortDirection,\n alignment,\n columnType,\n columnWidth,\n pinnedClass,\n stickyStyle,\n onSortClick,\n}: SortableThProps) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id,\n });\n\n const transformStr = CSS.Transform.toString(transform);\n\n const thClassName = [\n 'eidos-table-header-cell',\n `eidos-table-header-cell-${columnType}`,\n isSortable ? 'eidos-table-sortable' : '',\n isCurrentlySorted ? 'eidos-table-sorted' : '',\n `eidos-table-align-${alignment}`,\n pinnedClass,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <th\n ref={setNodeRef as React.LegacyRef<HTMLTableCellElement>}\n className={thClassName}\n style={{\n width: columnWidth,\n ...stickyStyle,\n ...(transformStr ? { transform: transformStr } : {}),\n transition: transition ?? undefined,\n opacity: isDragging ? 0.5 : 1,\n }}\n data-col-key={id}\n onClick={() => isSortable && onSortClick()}\n {...attributes}\n >\n {/* Grip - absolutely positioned in the left padding zone so it never\n displaces the column label or causes layout shift on hover. */}\n <span\n className=\"eidos-table-drag-handle\"\n {...listeners}\n onClick={(e) => e.stopPropagation()}\n title=\"Drag to reorder\"\n >\n <GripVertical size={12} />\n </span>\n <div className={`eidos-table-header-content eidos-table-align-${alignment}`}>\n <span className=\"eidos-table-header-label\">{column.label}</span>\n {isSortable && (\n <div className=\"eidos-table-sort-indicator\">\n {sortDirection === 'asc' && <ArrowUp size={14} />}\n {sortDirection === 'desc' && <ArrowDown size={14} />}\n {!sortDirection && <ChevronsUpDown size={14} />}\n </div>\n )}\n </div>\n </th>\n );\n}\n\n// ── Table ─────────────────────────────────────────────────────────────────────\n\nexport const Table = <T extends Record<string, unknown>>({\n data,\n columns,\n loading = false,\n emptyMessage = 'No data available',\n onRowClick,\n className,\n showFooter = false,\n totalItems,\n showPagination = false,\n pageSize = 25,\n pageSizeOptions = [10, 25, 50, 100],\n onSortChange,\n currentSort,\n filters = {},\n onFiltersChange,\n defaultFilters,\n showFilters = false,\n // Selection\n selectable = false,\n rowKey,\n selectedRows: controlledSelected,\n defaultSelectedRows = [],\n onSelectionChange,\n bulkActions = [],\n // New features\n density = 'comfortable',\n showDensity = false,\n showColumnVisibility = false,\n showExport = false,\n draggableColumns = false,\n onColumnReorder,\n}: TableProps<T>) => {\n // ── Column ordering (drag-reorder) ────────────────────────────────────────\n const [columnOrder, setColumnOrder] = useState<string[]>(() => columns.map((c) => String(c.key)));\n\n // Derived-state reset: when the set of column keys changes, reset the order.\n // Calling setState during render is the React-idiomatic way to do this.\n const columnKeysSignature = columns.map((c) => String(c.key)).join('\\0');\n const prevKeysRef = useRef(columnKeysSignature);\n if (prevKeysRef.current !== columnKeysSignature) {\n prevKeysRef.current = columnKeysSignature;\n setColumnOrder(columns.map((c) => String(c.key)));\n }\n\n const orderedColumns = useMemo(() => {\n const orderMap = new Map(columnOrder.map((key, idx) => [key, idx]));\n return [...columns].sort((a, b) => {\n const ai = orderMap.get(String(a.key)) ?? Infinity;\n const bi = orderMap.get(String(b.key)) ?? Infinity;\n return ai - bi;\n });\n }, [columns, columnOrder]);\n\n // ── Density (internal state when showDensity=true) ────────────────────────\n const [internalDensity, setInternalDensity] = useState<Density>(density as Density);\n // When showDensity is true the table owns density; otherwise respect the prop.\n const effectiveDensity: Density = showDensity ? internalDensity : (density as Density);\n\n // ── Column visibility ─────────────────────────────────────────────────────\n const [hiddenColumnKeys, setHiddenColumnKeys] = useState<Set<string>>(() => new Set<string>());\n\n const visibleColumns = useMemo(\n () => orderedColumns.filter((c) => !hiddenColumnKeys.has(String(c.key))),\n [orderedColumns, hiddenColumnKeys],\n );\n\n // ── Pinned / sticky columns ────────────────────────────────────────────────\n const theadRef = useRef<HTMLTableSectionElement>(null);\n const [pinnedOffsets, setPinnedOffsets] = useState<\n Map<string, { side: 'left' | 'right'; offset: number }>\n >(new Map());\n\n useLayoutEffect(() => {\n const hasPinned = visibleColumns.some((c) => c.pin);\n if (!hasPinned || !theadRef.current) {\n setPinnedOffsets(new Map());\n return;\n }\n\n const headerRow = theadRef.current.querySelector('tr');\n if (!headerRow) return;\n\n const cells = Array.from(headerRow.querySelectorAll<HTMLTableCellElement>('th[data-col-key]'));\n\n const newOffsets = new Map<string, { side: 'left' | 'right'; offset: number }>();\n\n // Left-pinned: scan left-to-right.\n // Checkbox (when selectable) counts as a left-pinned element.\n let leftAccum = 0;\n for (const cell of cells) {\n const key = cell.dataset.colKey!;\n if (key === '__checkbox__') {\n newOffsets.set(key, { side: 'left', offset: leftAccum });\n leftAccum += cell.offsetWidth;\n } else {\n const col = visibleColumns.find((c) => String(c.key) === key);\n if (col?.pin === 'left') {\n newOffsets.set(key, { side: 'left', offset: leftAccum });\n leftAccum += cell.offsetWidth;\n }\n }\n }\n\n // Right-pinned: scan right-to-left.\n let rightAccum = 0;\n for (let i = cells.length - 1; i >= 0; i--) {\n const cell = cells[i];\n const key = cell.dataset.colKey!;\n const col = visibleColumns.find((c) => String(c.key) === key);\n if (col?.pin === 'right') {\n newOffsets.set(key, { side: 'right', offset: rightAccum });\n rightAccum += cell.offsetWidth;\n }\n }\n\n setPinnedOffsets(newOffsets);\n }, [visibleColumns, selectable]);\n\n // ── Selection state (controlled / uncontrolled) ──────────────────────────\n const isControlledSelection = controlledSelected !== undefined;\n const [internalSelected, setInternalSelected] = useState<string[]>(defaultSelectedRows);\n const selectedSet = useMemo(\n () => new Set(isControlledSelection ? controlledSelected : internalSelected),\n [isControlledSelection, controlledSelected, internalSelected],\n );\n\n /** Stable string key for a row - uses `rowKey` prop, then \"id\", then index. */\n const getRowKey = (item: T, index: number): string => {\n if (rowKey) return String(item[rowKey]);\n if ('id' in item) return String(item.id);\n return String(index);\n };\n\n const commitSelection = (keys: string[]) => {\n if (!isControlledSelection) setInternalSelected(keys);\n const rows = data.filter((item, idx) => keys.includes(getRowKey(item, idx)));\n onSelectionChange?.(keys, rows);\n };\n\n const toggleRow = (key: string) => {\n const next = selectedSet.has(key)\n ? [...selectedSet].filter((k) => k !== key)\n : [...selectedSet, key];\n commitSelection(next);\n };\n\n const allKeys = useMemo(\n () => data.map((item, idx) => getRowKey(item, idx)),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [data, rowKey],\n );\n\n const allSelected = allKeys.length > 0 && allKeys.every((k) => selectedSet.has(k));\n const someSelected = !allSelected && allKeys.some((k) => selectedSet.has(k));\n\n const toggleAll = () => {\n commitSelection(allSelected ? [] : allKeys);\n };\n\n const clearSelection = () => commitSelection([]);\n\n // ── Pagination ────────────────────────────────────────────────────────────\n const [currentPage, setCurrentPage] = useState(1);\n const [currentPageSize, setCurrentPageSize] = useState(pageSize);\n\n const displayData = useMemo(() => {\n if (!showPagination) return data;\n const startIndex = (currentPage - 1) * currentPageSize;\n return data.slice(startIndex, startIndex + currentPageSize);\n }, [data, showPagination, currentPage, currentPageSize]);\n\n const totalPages = Math.ceil(data.length / currentPageSize);\n\n const handleSort = (key: string) => {\n const newDirection =\n currentSort?.key === key && currentSort?.direction === 'asc' ? 'desc' : 'asc';\n onSortChange?.(key, newDirection);\n };\n\n const handlePageChange = (page: number) => setCurrentPage(page);\n const handlePageSizeChange = (newPageSize: number) => {\n setCurrentPageSize(newPageSize);\n setCurrentPage(1);\n };\n\n // ── Derived UI state ──────────────────────────────────────────────────────\n const hasSelection = selectedSet.size > 0;\n const showToolbar =\n (showFilters && !!onFiltersChange) ||\n showColumnVisibility ||\n showExport ||\n showDensity ||\n (selectable && hasSelection);\n\n const selectedItems = useMemo(\n () => data.filter((item, idx) => selectedSet.has(getRowKey(item, idx))),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [data, selectedSet, rowKey],\n );\n\n // ── CSV Export ────────────────────────────────────────────────────────────\n const getRawValue = (item: T, column: TableColumn<T>): string => {\n const value =\n typeof column.key === 'string' && column.key.includes('.')\n ? (column.key as string)\n .split('.')\n .reduce(\n (obj: unknown, k: string) => (obj as Record<string, unknown>)?.[k],\n item as unknown,\n )\n : item[column.key as keyof T];\n return String(value ?? '');\n };\n\n const handleExportCsv = () => {\n const headers = visibleColumns.map((c) => escapeCsvValue(c.label)).join(',');\n const rows = data.map((item) =>\n visibleColumns.map((col) => escapeCsvValue(getRawValue(item, col))).join(','),\n );\n const csv = [headers, ...rows].join('\\n');\n const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = 'export.csv';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n };\n\n // ── DnD setup ─────────────────────────────────────────────────────────────\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const activeId = String(active.id);\n const overId = String(over.id);\n const oldIndex = columnOrder.indexOf(activeId);\n const newIndex = columnOrder.indexOf(overId);\n if (oldIndex === -1 || newIndex === -1) return;\n\n const newOrder = arrayMove(columnOrder, oldIndex, newIndex);\n setColumnOrder(newOrder);\n\n if (onColumnReorder) {\n const orderMap = new Map(newOrder.map((key, idx) => [key, idx]));\n const reordered = [...columns].sort((a, b) => {\n const ai = orderMap.get(String(a.key)) ?? Infinity;\n const bi = orderMap.get(String(b.key)) ?? Infinity;\n return ai - bi;\n });\n onColumnReorder(reordered);\n }\n };\n\n // ── Helpers ───────────────────────────────────────────────────────────────\n\n /** Returns sticky style + className for body <td> cells (zIndex: 1). */\n const getCellPinnedProps = (\n colKey: string,\n ): { style: React.CSSProperties; className: string } => {\n const pinInfo = pinnedOffsets.get(colKey);\n if (!pinInfo) return { style: {}, className: '' };\n return {\n style: {\n position: 'sticky',\n [pinInfo.side]: pinInfo.offset,\n zIndex: 1,\n },\n className:\n pinInfo.side === 'left'\n ? 'eidos-table-cell--pinned-left'\n : 'eidos-table-cell--pinned-right',\n };\n };\n\n /** Returns sticky style + className for header <th> cells (zIndex: 3). */\n const getHeaderPinnedProps = (\n colKey: string,\n ): { style: React.CSSProperties; className: string } => {\n const pinInfo = pinnedOffsets.get(colKey);\n if (!pinInfo) return { style: {}, className: '' };\n return {\n style: {\n position: 'sticky',\n [pinInfo.side]: pinInfo.offset,\n zIndex: 3,\n },\n className:\n pinInfo.side === 'left'\n ? 'eidos-table-header-cell--pinned-left'\n : 'eidos-table-header-cell--pinned-right',\n };\n };\n\n // ── Density class ─────────────────────────────────────────────────────────\n const densityClass = effectiveDensity !== 'comfortable' ? `eidos-table--${effectiveDensity}` : '';\n\n // ── Loading ───────────────────────────────────────────────────────────────\n if (loading) {\n return (\n <div className={`eidos-table-container ${className || ''}`}>\n <div className=\"eidos-table-loading\">\n <Spinner size=\"md\" />\n <p>Loading...</p>\n </div>\n </div>\n );\n }\n\n // ── Density panel (Dropdown content) ──────────────────────────────────────\n const densityPanel = (\n <div className=\"eidos-table-menu-panel\">\n {DENSITY_OPTIONS.map((option) => (\n <button\n key={option.value}\n className={[\n 'eidos-table-menu-item',\n effectiveDensity === option.value ? 'eidos-table-menu-item--active' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => setInternalDensity(option.value)}\n >\n <span className=\"eidos-table-menu-item-check\">\n {effectiveDensity === option.value && <Check size={14} />}\n </span>\n <span>{option.label}</span>\n </button>\n ))}\n </div>\n );\n\n // ── Column visibility panel (Dropdown content) ────────────────────────────\n const columnVisibilityPanel = (\n <div className=\"eidos-table-menu-panel\">\n {/* Use orderedColumns so list order mirrors current column order */}\n {orderedColumns.map((col) => {\n const key = String(col.key);\n const isVisible = !hiddenColumnKeys.has(key);\n const isLastVisible = visibleColumns.length === 1 && isVisible;\n return (\n <button\n key={key}\n className={['eidos-table-menu-item', isVisible ? 'eidos-table-menu-item--active' : '']\n .filter(Boolean)\n .join(' ')}\n disabled={isLastVisible}\n onClick={() => {\n setHiddenColumnKeys((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n }}\n >\n <Checkbox\n checked={isVisible}\n disabled={isLastVisible}\n size=\"sm\"\n onChange={() => {\n /* click handled by parent button */\n }}\n />\n <span>{col.label}</span>\n </button>\n );\n })}\n </div>\n );\n\n // ── SortableContext items: visible column keys only ───────────────────────\n const sortableItems = visibleColumns.map((c) => String(c.key));\n\n // ── Main JSX ──────────────────────────────────────────────────────────────\n const tableContent = (\n <div className={`eidos-table-container ${className || ''}`}>\n {/* ── Toolbar ───────────────────────────────────────────────────────── */}\n {showToolbar && (\n <div className=\"eidos-table-toolbar\">\n {/* Left - bulk actions / selection info */}\n <div className=\"eidos-table-toolbar-left\">\n {selectable && hasSelection && (\n <>\n <span className=\"eidos-table-selection-count\">{selectedSet.size} selected</span>\n\n {bulkActions.length > 0 && (\n <div className=\"eidos-table-bulk-actions\">\n {bulkActions.map((action) => {\n const isDisabled =\n typeof action.disabled === 'function'\n ? action.disabled(selectedItems)\n : (action.disabled ?? false);\n\n if (action.type === 'split-button') {\n return (\n <SplitButton\n key={action.id}\n size=\"sm\"\n variant={action.variant ?? 'outlined'}\n color={action.color ?? 'secondary'}\n preIcon={action.icon}\n disabled={isDisabled}\n label={action.label}\n onClick={() => action.onClick(selectedItems)}\n options={action.options.map((option) => ({\n id: option.id,\n label: option.label,\n icon: option.icon,\n disabled: option.disabled,\n onClick: () => option.onClick(selectedItems),\n }))}\n />\n );\n }\n\n return action.label ? (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant ?? 'outlined'}\n color={action.color ?? 'secondary'}\n preIcon={action.icon}\n posIcon={action.posIcon}\n disabled={isDisabled}\n onClick={() => action.onClick(selectedItems)}\n >\n {action.label}\n </Button>\n ) : action.icon ? (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant ?? 'outlined'}\n color={action.color ?? 'secondary'}\n icon={action.icon}\n disabled={isDisabled}\n onClick={() => action.onClick(selectedItems)}\n />\n ) : null;\n })}\n </div>\n )}\n\n <button\n className=\"eidos-table-clear-selection\"\n onClick={clearSelection}\n aria-label=\"Clear selection\"\n >\n <X size={14} />\n </button>\n </>\n )}\n </div>\n\n {/* Right - density, column visibility, export, filter */}\n <div className=\"eidos-table-toolbar-right\">\n {showDensity && (\n <Dropdown\n placement=\"bottom\"\n align=\"end\"\n autoWidth={false}\n trigger={\n <Button variant=\"text\" size=\"sm\" preIcon={AlignJustify}>\n Density\n </Button>\n }\n content={densityPanel}\n />\n )}\n\n {showColumnVisibility && (\n <Dropdown\n placement=\"bottom\"\n align=\"end\"\n autoWidth={false}\n trigger={\n <Button variant=\"text\" size=\"sm\" preIcon={Columns3}>\n Columns\n </Button>\n }\n content={columnVisibilityPanel}\n />\n )}\n\n {showExport && (\n <Button\n variant=\"text\"\n size=\"sm\"\n icon={Download}\n onClick={handleExportCsv}\n tooltip=\"Export CSV\"\n />\n )}\n\n {showFilters && onFiltersChange && (\n <TableFiltersDropdown\n columns={columns}\n filters={filters}\n onFiltersChange={onFiltersChange}\n defaultFilters={defaultFilters}\n />\n )}\n </div>\n </div>\n )}\n\n {/* ── Table (wrapped for horizontal scroll) ─────────────────────────── */}\n <div className=\"eidos-table-scroll\">\n <table\n className={[\n 'eidos-table',\n densityClass,\n draggableColumns ? 'eidos-table--draggable-columns' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <thead ref={theadRef}>\n <tr>\n {selectable && (\n <th\n className={[\n 'eidos-table-header-cell',\n 'eidos-table-checkbox-cell',\n getHeaderPinnedProps('__checkbox__').className,\n ]\n .filter(Boolean)\n .join(' ')}\n style={getHeaderPinnedProps('__checkbox__').style}\n data-col-key=\"__checkbox__\"\n >\n <Checkbox\n size=\"sm\"\n checked={allSelected}\n indeterminate={someSelected}\n onChange={toggleAll}\n aria-label=\"Select all rows\"\n />\n </th>\n )}\n\n {/* ── Headers: draggable or plain ──────────────────────────── */}\n {draggableColumns\n ? visibleColumns.map((column) => {\n const colKey = String(column.key);\n const columnType = column.type || 'data';\n const columnWidth =\n column.type === 'icon' ? 'var(--component-size-lg)' : column.width;\n const isSortable = !!column.sortable;\n const isCurrentlySorted = currentSort?.key === colKey;\n const sortDirection = isCurrentlySorted\n ? (currentSort!.direction as 'asc' | 'desc')\n : null;\n const alignment = column.align || 'left';\n const { style: pinnedStyle, className: pinnedClass } =\n getHeaderPinnedProps(colKey);\n\n return (\n <SortableColumnHeader\n key={colKey}\n id={colKey}\n column={column}\n isSortable={isSortable}\n isCurrentlySorted={!!isCurrentlySorted}\n sortDirection={sortDirection}\n alignment={alignment}\n columnType={columnType}\n columnWidth={columnWidth}\n pinnedClass={pinnedClass}\n stickyStyle={pinnedStyle}\n onSortClick={() => handleSort(colKey)}\n />\n );\n })\n : visibleColumns.map((column, index) => {\n const colKey = String(column.key);\n const columnType = column.type || 'data';\n const columnWidth =\n column.type === 'icon' ? 'var(--component-size-lg)' : column.width;\n const isSortable = column.sortable;\n const isCurrentlySorted = currentSort?.key === colKey;\n const sortDirection = isCurrentlySorted ? currentSort!.direction : null;\n const alignment = column.align || 'left';\n const alignmentClass = `eidos-table-align-${alignment}`;\n const { style: pinnedStyle, className: pinnedClass } =\n getHeaderPinnedProps(colKey);\n\n return (\n <th\n key={index}\n className={[\n 'eidos-table-header-cell',\n `eidos-table-header-cell-${columnType}`,\n isSortable ? 'eidos-table-sortable' : '',\n isCurrentlySorted ? 'eidos-table-sorted' : '',\n alignmentClass,\n pinnedClass,\n ]\n .filter(Boolean)\n .join(' ')}\n style={{ width: columnWidth, ...pinnedStyle }}\n data-col-key={colKey}\n onClick={() => isSortable && handleSort(colKey)}\n >\n <div className={`eidos-table-header-content ${alignmentClass}`}>\n <span>{column.label}</span>\n {isSortable && (\n <div className=\"eidos-table-sort-indicator\">\n {sortDirection === 'asc' && <ArrowUp size={14} />}\n {sortDirection === 'desc' && <ArrowDown size={14} />}\n {!sortDirection && <ChevronsUpDown size={14} />}\n </div>\n )}\n </div>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {displayData.length > 0 ? (\n displayData.map((item, rowIndex) => {\n const globalIndex = showPagination\n ? (currentPage - 1) * currentPageSize + rowIndex\n : rowIndex;\n const key = getRowKey(item, globalIndex);\n const isSelected = selectedSet.has(key);\n\n return (\n <tr\n key={key}\n className={[\n 'eidos-table-row',\n onRowClick ? 'eidos-table-clickable' : '',\n isSelected ? 'eidos-table-row--selected' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => onRowClick?.(item)}\n >\n {selectable && (\n <td\n className={[\n 'eidos-table-cell',\n 'eidos-table-checkbox-cell',\n getCellPinnedProps('__checkbox__').className,\n ]\n .filter(Boolean)\n .join(' ')}\n style={getCellPinnedProps('__checkbox__').style}\n onClick={(e) => {\n e.stopPropagation();\n toggleRow(key);\n }}\n >\n {/* Wrap in a span so Checkbox click-events don't\n bubble to the <td> and cause a double-toggle.\n The <td> onClick handles toggling when the user\n clicks the cell margin outside the checkbox. */}\n <span onClick={(e) => e.stopPropagation()}>\n <Checkbox\n size=\"sm\"\n checked={isSelected}\n onChange={() => toggleRow(key)}\n aria-label={`Select row ${globalIndex + 1}`}\n />\n </span>\n </td>\n )}\n {visibleColumns.map((column, colIndex) => {\n const colKey = String(column.key);\n const value =\n typeof column.key === 'string' && column.key.includes('.')\n ? (column.key as string)\n .split('.')\n .reduce(\n (obj: unknown, k: string) => (obj as Record<string, unknown>)?.[k],\n item as unknown,\n )\n : item[column.key as keyof T];\n\n const columnType = column.type || 'data';\n const columnWidth =\n column.type === 'icon' ? 'var(--component-size-lg)' : column.width;\n const alignment = column.align || 'left';\n const alignmentClass = `eidos-table-align-${alignment}`;\n const { style: pinnedStyle, className: pinnedClass } =\n getCellPinnedProps(colKey);\n\n return (\n <td\n key={colIndex}\n className={[\n 'eidos-table-cell',\n `eidos-table-cell-${columnType}`,\n alignmentClass,\n pinnedClass,\n ]\n .filter(Boolean)\n .join(' ')}\n style={{ width: columnWidth, ...pinnedStyle }}\n // `type: 'action'` cells exist specifically to hold\n // interactive controls (a row-actions Menu/button,\n // typically) - without this, clicking them bubbles\n // straight into `onRowClick` on the <tr> below,\n // e.g. opening a details drawer at the same time as\n // (or instead of) the action itself. Mirrors the\n // selectable checkbox cell's own stopPropagation\n // above, for the same reason.\n onClick={columnType === 'action' ? (e) => e.stopPropagation() : undefined}\n >\n {column.render ? column.render(value, item) : String(value ?? '')}\n </td>\n );\n })}\n </tr>\n );\n })\n ) : (\n <tr className=\"eidos-table-empty-row\">\n <td\n colSpan={selectable ? visibleColumns.length + 1 : visibleColumns.length}\n className=\"eidos-table-cell eidos-table-empty-cell\"\n >\n {Object.keys(filters).length > 0 ? (\n <EmptyState\n icon={<SearchX />}\n title=\"No results found\"\n description=\"Try adjusting your filters or search terms.\"\n action={\n onFiltersChange ? (\n <Button\n size=\"sm\"\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => onFiltersChange({})}\n >\n Clear filters\n </Button>\n ) : undefined\n }\n size=\"sm\"\n />\n ) : (\n <EmptyState\n icon={<FolderOpen />}\n title={emptyMessage}\n description=\"There are no records to display.\"\n size=\"sm\"\n />\n )}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n\n {/* ── Footer / Pagination ───────────────────────────────────────────── */}\n {showFooter && (\n <div className=\"eidos-table-footer\">\n <div className=\"eidos-table-footer-content\">\n {showPagination && data.length > 0 ? (\n <Pagination\n page={currentPage}\n totalPages={totalPages}\n onChange={handlePageChange}\n totalItems={totalItems ?? data.length}\n pageSize={currentPageSize}\n onPageSizeChange={handlePageSizeChange}\n pageSizeOptions={pageSizeOptions}\n size=\"sm\"\n />\n ) : (\n <span className=\"eidos-table-results-info\">\n Showing {data.length} of {totalItems ?? data.length} results\n </span>\n )}\n </div>\n </div>\n )}\n </div>\n );\n\n // ── Wrap with DnD context when draggableColumns=true ─────────────────────\n if (draggableColumns) {\n return (\n <DndContext sensors={sensors} onDragEnd={handleDragEnd}>\n <SortableContext items={sortableItems} strategy={horizontalListSortingStrategy}>\n {tableContent}\n </SortableContext>\n </DndContext>\n );\n }\n\n return tableContent;\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/FileUpload/FileUpload.component.tsx"],"sourcesContent":["import React, { useState, useRef } from 'react';\nimport { Upload, X, CircleAlert, FileText } from 'lucide-react';\nimport type { FileUploadProps } from './FileUpload.types';\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction isFileTypeAccepted(file: File, acceptedTypes: string[]): boolean {\n return acceptedTypes.some((type) => {\n const trimmed = type.trim();\n // Extension match: \".pdf\", \".docx\"\n if (trimmed.startsWith('.')) {\n return file.name.toLowerCase().endsWith(trimmed.toLowerCase());\n }\n // Wildcard MIME group: \"image/*\", \"video/*\"\n if (trimmed.endsWith('/*')) {\n const baseType = trimmed.slice(0, -2);\n return file.type.startsWith(`${baseType}/`);\n }\n // Exact MIME type: \"application/pdf\"\n return file.type === trimmed;\n });\n}\n\n// ── Component ─────────────────────────────────────────────────────────────────\n\nexport function FileUpload({\n accept,\n multiple = false,\n maxSize,\n maxFiles,\n onFilesAccepted,\n onFilesRejected,\n hint,\n disabled = false,\n className = '',\n}: FileUploadProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [files, setFiles] = useState<File[]>([]);\n const [error, setError] = useState<string | null>(null);\n\n // ── Validation ─────────────────────────────────────────────────────────────\n\n const validateAndAccept = (fileList: FileList | File[]) => {\n const incoming = Array.from(fileList);\n\n if (maxFiles !== undefined && incoming.length > maxFiles) {\n setError(`Maximum ${maxFiles} file${maxFiles === 1 ? '' : 's'} allowed`);\n onFilesRejected?.(incoming, 'count');\n return;\n }\n\n if (accept) {\n const acceptedTypes = accept.split(',').map((t) => t.trim());\n const invalid = incoming.filter((f) => !isFileTypeAccepted(f, acceptedTypes));\n if (invalid.length > 0) {\n setError('One or more files have an unsupported type');\n onFilesRejected?.(incoming, 'type');\n return;\n }\n }\n\n if (maxSize !== undefined) {\n const oversized = incoming.filter((f) => f.size > maxSize);\n if (oversized.length > 0) {\n setError(`File size exceeds the ${formatBytes(maxSize)} limit`);\n onFilesRejected?.(oversized, 'size');\n return;\n }\n }\n\n setError(null);\n setFiles(incoming);\n onFilesAccepted?.(incoming);\n };\n\n // ── Drag handlers ──────────────────────────────────────────────────────────\n\n const handleDragEnter = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n if (!disabled) setIsDragging(true);\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n // Prevent default to allow the drop event to fire\n e.preventDefault();\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n // Only clear the dragging state when leaving the zone entirely,\n // not when moving over a child element inside it.\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n setIsDragging(false);\n }\n };\n\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setIsDragging(false);\n if (disabled) return;\n const { files: dropped } = e.dataTransfer;\n if (dropped.length > 0) validateAndAccept(dropped);\n };\n\n // ── Click / keyboard ───────────────────────────────────────────────────────\n\n const handleZoneClick = () => {\n if (!disabled) inputRef.current?.click();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleZoneClick();\n }\n };\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files && e.target.files.length > 0) {\n validateAndAccept(e.target.files);\n }\n // Reset the input value so the same file(s) can be re-selected\n e.target.value = '';\n };\n\n // ── File list management ───────────────────────────────────────────────────\n\n const handleRemoveFile = (index: number) => {\n const remaining = files.filter((_, i) => i !== index);\n setFiles(remaining);\n onFilesAccepted?.(remaining);\n };\n\n // ── CSS classes ────────────────────────────────────────────────────────────\n\n const rootClasses = ['eidos-file-upload', className].filter(Boolean).join(' ');\n\n const zoneClasses = [\n 'eidos-file-upload-zone',\n isDragging && 'eidos-file-upload-zone--dragging',\n disabled && 'eidos-file-upload-zone--disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n // Build the auto-generated hint from the constraints when no hint is provided\n const autoHint = [\n accept ? `Accepted: ${accept}` : null,\n maxSize ? `Max size: ${formatBytes(maxSize)}` : null,\n maxFiles && multiple ? `Up to ${maxFiles} files` : null,\n ]\n .filter(Boolean)\n .join(' · ');\n\n const displayHint = hint ?? (autoHint.length > 0 ? autoHint : null);\n\n return (\n <div\n className={rootClasses}\n role=\"region\"\n aria-label=\"File upload\"\n aria-disabled={disabled || undefined}\n >\n <div\n className={zoneClasses}\n onClick={handleZoneClick}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label=\"Upload files - click or drag and drop\"\n aria-disabled={disabled || undefined}\n >\n <div className=\"eidos-file-upload-icon\" aria-hidden=\"true\">\n <Upload />\n </div>\n\n <div className=\"eidos-file-upload-text\">\n <p className=\"eidos-file-upload-title\">\n <em>Click to upload</em>\n </p>\n <span style={{ fontWeight: 'normal', fontSize: '0.875rem' }}>or drag and drop</span>\n {displayHint && <p className=\"eidos-file-upload-hint\">{displayHint}</p>}\n </div>\n\n {/* Hidden native input - triggered programmatically via click() */}\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleFileChange}\n className=\"eidos-file-upload-input-hidden\"\n tabIndex={-1}\n aria-hidden=\"true\"\n />\n </div>\n\n {error && (\n <p className=\"eidos-file-upload-error\" role=\"alert\">\n <CircleAlert aria-hidden=\"true\" />\n {error}\n </p>\n )}\n\n {files.length > 0 && (\n <ul className=\"eidos-file-upload-list\" aria-label=\"Selected files\">\n {files.map((file, index) => (\n <li key={`${file.name}-${index}`} className=\"eidos-file-upload-item\">\n <div className=\"eidos-file-upload-item-info\">\n <FileText aria-hidden=\"true\" />\n <span className=\"eidos-file-upload-item-name\">{file.name}</span>\n <span className=\"eidos-file-upload-item-size\">{formatBytes(file.size)}</span>\n </div>\n <button\n type=\"button\"\n className=\"eidos-file-upload-item-remove\"\n onClick={() => handleRemoveFile(index)}\n aria-label={`Remove ${file.name}`}\n >\n <X />\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nFileUpload.displayName = 'FileUpload';\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Progress/Progress.component.tsx"],"sourcesContent":["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"],"mappings":";AAyCI,SASI,KATJ;AArCG,IAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,YAAY;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,EACV;AACF,MAAM;AACJ,QAAM,aACJ,UAAU,SAAY,KAAK,IAAI,KAAK,KAAK,IAAI,GAAI,QAAQ,MAAO,GAAG,CAAC,IAAI;AAE1E,QAAM,kBAAkB,eAAe;AAEvC,QAAM,eACJ,UAAU,eAAe,SAAY,GAAG,KAAK,MAAM,UAAU,CAAC,MAAM;AAEtE,QAAM,UAAU;AAAA,IACd;AAAA,IACA,mBAAmB,KAAK;AAAA,IACxB,mBAAmB,IAAI;AAAA,IACvB,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB;AAAA,EACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,mBAAmB;AAAA,EACrB,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,MACX,MAAK;AAAA,MACL,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,cAAY,UAAU,kBAAkB,kBAAa,GAAG,KAAK,MAAM,UAAW,CAAC;AAAA,MAE/E;AAAA,4BAAC,SAAI,WAAU,wBACb;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,YACX,OAAO,CAAC,kBAAkB,EAAE,OAAO,GAAG,UAAU,IAAI,IAAI;AAAA;AAAA,QAC1D,GACF;AAAA,QACC,aAAa,CAAC,mBACb,oBAAC,UAAK,WAAU,wBAAwB,wBAAa;AAAA;AAAA;AAAA,EAEzD;AAEJ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Skeleton/Skeleton.component.tsx"],"sourcesContent":["import React from 'react';\nimport type { SkeletonProps } from './Skeleton.types';\nimport './Skeleton.scss';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction toCssSize(value: number | string): string {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const Skeleton: React.FC<SkeletonProps> = ({\n variant = 'text',\n width,\n height,\n lines = 1,\n animation = 'wave',\n className,\n}) => {\n const widthStyle = width !== undefined ? toCssSize(width) : undefined;\n const heightStyle = height !== undefined ? toCssSize(height) : undefined;\n\n // Multi-line text variant\n if (variant === 'text' && lines > 1) {\n return (\n <div\n className={['eidos-skeleton-text-group', className].filter(Boolean).join(' ')}\n aria-hidden=\"true\"\n >\n {Array.from({ length: lines }, (_, i) => (\n <span\n key={i}\n className={`eidos-skeleton eidos-skeleton--text eidos-skeleton--${animation}`}\n style={{\n width: i === lines - 1 ? '60%' : (widthStyle ?? '100%'),\n height: heightStyle,\n }}\n />\n ))}\n </div>\n );\n }\n\n // Single element\n return (\n <span\n className={[\n 'eidos-skeleton',\n `eidos-skeleton--${variant}`,\n `eidos-skeleton--${animation}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n style={{ width: widthStyle, height: heightStyle }}\n aria-hidden=\"true\"\n />\n );\n};\n"],"mappings":";AAmCU;AA3BV,SAAS,UAAU,OAAgC;AACjD,SAAO,OAAO,UAAU,WAAW,GAAG,KAAK,OAAO;AACpD;AAMO,IAAM,WAAoC,CAAC;AAAA,EAChD,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ;AACF,MAAM;AACJ,QAAM,aAAa,UAAU,SAAY,UAAU,KAAK,IAAI;AAC5D,QAAM,cAAc,WAAW,SAAY,UAAU,MAAM,IAAI;AAG/D,MAAI,YAAY,UAAU,QAAQ,GAAG;AACnC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,CAAC,6BAA6B,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,QAC5E,eAAY;AAAA,QAEX,gBAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,CAAC,GAAG,MACjC;AAAA,UAAC;AAAA;AAAA,YAEC,WAAW,uDAAuD,SAAS;AAAA,YAC3E,OAAO;AAAA,cACL,OAAO,MAAM,QAAQ,IAAI,QAAS,cAAc;AAAA,cAChD,QAAQ;AAAA,YACV;AAAA;AAAA,UALK;AAAA,QAMP,CACD;AAAA;AAAA,IACH;AAAA,EAEJ;AAGA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,mBAAmB,OAAO;AAAA,QAC1B,mBAAmB,SAAS;AAAA,QAC5B;AAAA,MACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACX,OAAO,EAAE,OAAO,YAAY,QAAQ,YAAY;AAAA,MAChD,eAAY;AAAA;AAAA,EACd;AAEJ;","names":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkGOR642KKcjs = require('./chunk-GOR642KK.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkZ5U4NJTWcjs = require('./chunk-Z5U4NJTW.cjs');
|
|
7
7
|
|
|
8
8
|
// src/components/Chip/Chip.component.tsx
|
|
9
9
|
var _lucidereact = require('lucide-react');
|
|
@@ -62,9 +62,9 @@ var Chip = ({
|
|
|
62
62
|
} : void 0,
|
|
63
63
|
...chipProps,
|
|
64
64
|
children: [
|
|
65
|
-
preIcon &&
|
|
65
|
+
preIcon && _chunkGOR642KKcjs.renderIcon.call(void 0, preIcon, "eidos-chip--pre-icon"),
|
|
66
66
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-chip--copy", children }),
|
|
67
|
-
posIcon &&
|
|
67
|
+
posIcon && _chunkGOR642KKcjs.renderIcon.call(void 0, posIcon, "eidos-chip--pos-icon"),
|
|
68
68
|
isRemovable && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
69
69
|
"button",
|
|
70
70
|
{
|
|
@@ -79,10 +79,10 @@ var Chip = ({
|
|
|
79
79
|
]
|
|
80
80
|
}
|
|
81
81
|
);
|
|
82
|
-
return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
82
|
+
return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ5U4NJTWcjs.Tooltip, { message: tooltip, children: chipContent }) : chipContent;
|
|
83
83
|
};
|
|
84
84
|
|
|
85
85
|
|
|
86
86
|
|
|
87
87
|
exports.Chip = Chip;
|
|
88
|
-
//# sourceMappingURL=chunk-
|
|
88
|
+
//# sourceMappingURL=chunk-OGKD5PLS.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-OGKD5PLS.cjs","../src/components/Chip/Chip.component.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACNA,2CAAkB;AAqDd,+CAAA;AAhDG,IAAM,KAAA,EAA4B,CAAC;AAAA,EACxC,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,KAAA;AAAA,EACX,UAAA,EAAY,KAAA;AAAA,EACZ,OAAA;AAAA,EACA,UAAA,EAAY,EAAA;AAAA,EACZ,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,YAAA,EAAc,CAAC,CAAC,OAAA;AACtB,EAAA,MAAM,YAAA,EAAc,CAAC,CAAC,QAAA;AAGtB,EAAA,MAAM,YAAA,EAAc;AAAA,IAClB,YAAA;AAAA,IACA,CAAA,YAAA,EAAe,OAAO,CAAA,CAAA;AACF,IAAA;AACD,IAAA;AACP,IAAA;AACG,IAAA;AACA,IAAA;AACF,IAAA;AACb,IAAA;AAGM,EAAA;AAEY,EAAA;AACD,IAAA;AACT,IAAA;AACV,EAAA;AAEsB,EAAA;AACF,IAAA;AACD,IAAA;AACR,IAAA;AACX,EAAA;AAGoB,EAAA;AAGlB,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACD,MAAA;AACD,MAAA;AACH,MAAA;AACI,MAAA;AAER,MAAA;AAEqB,QAAA;AACI,UAAA;AACL,UAAA;AACd,QAAA;AAEF,MAAA;AAEF,MAAA;AAEH,MAAA;AAAW,QAAA;AAEZ,wBAAA;AAEY,QAAA;AAGV,QAAA;AAAC,UAAA;AAAA,UAAA;AACW,YAAA;AACD,YAAA;AACT,YAAA;AACW,YAAA;AACN,YAAA;AAEL,YAAA;AAAuC,UAAA;AACzC,QAAA;AAAA,MAAA;AAAA,IAAA;AAEJ,EAAA;AAGe,EAAA;AACnB;ADV2B;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-OGKD5PLS.cjs","sourcesContent":[null,"import React from 'react';\nimport { X } from 'lucide-react';\nimport type { ChipProps } from './Chip.types';\nimport { Tooltip } from '../Tooltip/Tooltip.component';\nimport { renderIcon } from '../../utils';\n\nexport const Chip: React.FC<ChipProps> = ({\n variant = 'filled',\n color = 'primary',\n size = 'md',\n disabled = false,\n fullWidth = false,\n tooltip,\n className = '',\n preIcon,\n posIcon,\n children,\n onClick,\n onRemove,\n ...chipProps\n}) => {\n const isClickable = !!onClick;\n const isRemovable = !!onRemove;\n\n // Build CSS classes\n const chipClasses = [\n 'eidos-chip',\n `eidos-chip--${variant}`,\n `eidos-chip--${color}`,\n `eidos-chip--${size}`,\n disabled && 'eidos-chip--disabled',\n isClickable && 'eidos-chip--clickable',\n isRemovable && 'eidos-chip--removable',\n fullWidth && 'eidos-chip--full-width',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const handleClick = () => {\n if (disabled || !onClick) return;\n onClick();\n };\n\n const handleRemove = (e: React.MouseEvent) => {\n e.stopPropagation(); // Prevent chip click when removing\n if (disabled || !onRemove) return;\n onRemove();\n };\n\n // Use div when removable to avoid nested buttons, button only when clickable without remove\n const ChipElement = isClickable && !isRemovable ? 'button' : 'div';\n\n const chipContent = (\n <ChipElement\n className={chipClasses}\n disabled={ChipElement === 'button' ? disabled : undefined}\n onClick={isClickable ? handleClick : undefined}\n role={ChipElement === 'div' && isClickable ? 'button' : undefined}\n tabIndex={ChipElement === 'div' && isClickable ? 0 : undefined}\n onKeyDown={\n ChipElement === 'div' && isClickable\n ? (e) => {\n if ((e.key === 'Enter' || e.key === ' ') && !disabled) {\n e.preventDefault();\n handleClick();\n }\n }\n : undefined\n }\n {...chipProps}\n >\n {preIcon && renderIcon(preIcon, 'eidos-chip--pre-icon')}\n\n <span className=\"eidos-chip--copy\">{children}</span>\n\n {posIcon && renderIcon(posIcon, 'eidos-chip--pos-icon')}\n\n {isRemovable && (\n <button\n className=\"eidos-chip--remove-button\"\n onClick={handleRemove}\n disabled={disabled}\n aria-label=\"Remove\"\n type=\"button\"\n >\n <X className=\"eidos-chip--remove-icon\" />\n </button>\n )}\n </ChipElement>\n );\n\n return tooltip ? <Tooltip message={tooltip}>{chipContent}</Tooltip> : chipContent;\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-OZZHOEN5.cjs","../src/components/Slider/Slider.component.tsx"],"names":[],"mappings":"AAAA;ACAA,8BAA4C;AA0ElC,+CAAA;AAvEH,IAAM,OAAA,EAAS,+BAAA;AAAA,EACpB,CACE;AAAA,IACE,KAAA;AAAA,IACA,YAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAO,IAAA;AAAA,IACP,SAAA,EAAW,KAAA;AAAA,IACX,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,KAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA,EAAY;AAAA,EACd,CAAA,EACA,GAAA,EAAA,GACG;AACH,IAAA,MAAM,OAAA,mBAAS,GAAA,UAAO,GAAA;AACtB,IAAA,MAAM,OAAA,mBAAS,GAAA,UAAO,KAAA;AAGtB,IAAA,MAAM,MAAA,EAAQ,CAAC,CAAA,EAAA,GAAe,aAAA,GAAgB,EAAA,EAAI,YAAA,CAAa,IAAA,EAAM,YAAA,CAAa,IAAA,EAAM,CAAA;AAExF,IAAA,MAAM,aAAA,EAAe,MAAA,IAAU,KAAA,CAAA;AAC/B,IAAA,MAAM,CAAC,UAAA,EAAY,aAAa,EAAA,EAAI,6BAAA,KAAiB,kBAAM,YAAA,UAAgB,QAAM,CAAC,CAAA;AAClF,IAAA,MAAM,aAAA,EAAe,aAAA,EAAe,KAAA,CAAM,KAAM,EAAA,EAAI,UAAA;AAEpD,IAAA,MAAM,QAAA,EAAA,CAAY,aAAA,EAAe,MAAA,EAAA,EAAA,CAAW,OAAA,EAAS,MAAA,EAAA,EAAW,GAAA;AAChE,IAAA,MAAM,gBAAA,EAAkB,aAAA,EAAA,CAClB,YAAA,CAAa,IAAA,EAAM,MAAA,EAAA,EAAA,CAAW,OAAA,EAAS,MAAA,EAAA,EAAW,IAAA,EACpD,IAAA;AAMJ,IAAA,MAAM,YAAA,EAAmC;AAAA,MACvC,UAAA,EAAY,CAAA,EAAA;AACC,MAAA;AACA,MAAA;AACT,MAAA;AACN,IAAA;AAEM,IAAA;AACE,MAAA;AACD,MAAA;AACM,sBAAA;AACb,IAAA;AAGM,IAAA;AAEO,IAAA;AAEP,IAAA;AACJ,MAAA;AACA,MAAA;AACA,MAAA;AACY,MAAA;AACZ,MAAA;AAEQ,IAAA;AAIR,IAAA;AACa,MAAA;AAEG,QAAA;AACT,QAAA;AACH,MAAA;AAGF,sBAAA;AAAC,QAAA;AAAA,QAAA;AACC,UAAA;AACK,UAAA;AACL,UAAA;AACK,UAAA;AACA,UAAA;AACC,UAAA;AACC,UAAA;AACP,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACO,UAAA;AAAA,QAAA;AACT,MAAA;AAEC,MAAA;AAEG,wBAAA;AACA,wBAAA;AACF,MAAA;AAEJ,IAAA;AAEJ,EAAA;AACF;AAEO;AD3BY;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-OZZHOEN5.cjs","sourcesContent":[null,"import React, { forwardRef, useState } from 'react';\nimport type { SliderProps } from './Slider.types';\n\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(\n (\n {\n value,\n defaultValue,\n min,\n max,\n step,\n onChange,\n color = 'primary',\n size = 'md',\n disabled = false,\n showValue = false,\n showMinMax = false,\n label,\n unit,\n blockedRange,\n className = '',\n },\n ref,\n ) => {\n const minVal = min ?? 0;\n const maxVal = max ?? 100;\n\n // Clamp a raw value against the blocked range boundary.\n const clamp = (v: number) => (blockedRange && v > blockedRange.min ? blockedRange.min : v);\n\n const isControlled = value !== undefined;\n const [localValue, setLocalValue] = useState<number>(clamp(defaultValue ?? minVal));\n const currentValue = isControlled ? clamp(value!) : localValue;\n\n const fillPct = ((currentValue - minVal) / (maxVal - minVal)) * 100;\n const blockedStartPct = blockedRange\n ? ((blockedRange.min - minVal) / (maxVal - minVal)) * 100\n : null;\n\n // CSS custom properties drive the track gradient via the\n // ::-webkit-slider-runnable-track pseudo-element in Slider.scss.\n // --s-block defaults to 100% so the danger segment collapses to zero\n // width when there is no blocked range.\n const sliderStyle: React.CSSProperties = {\n '--s-fill': `${fillPct}%`,\n '--s-color': `var(--${color}-color)`,\n '--s-empty': 'var(--gray-200)',\n ...(blockedStartPct !== null && { '--s-block': `${blockedStartPct}%` }),\n } as React.CSSProperties;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = clamp(Number(e.target.value));\n if (!isControlled) setLocalValue(newValue);\n onChange?.(newValue);\n };\n\n // Effective max for ARIA - the blocked zone is not a valid value.\n const effectiveMax = blockedRange ? blockedRange.min : maxVal;\n\n const fmt = (v: number) => `${v}${unit ?? ''}`;\n\n const rootClasses = [\n 'eidos-slider',\n `eidos-slider--${color}`,\n `eidos-slider--${size}`,\n disabled && 'eidos-slider--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClasses}>\n {(label || showValue) && (\n <div className=\"eidos-slider-top\">\n {label && <span className=\"eidos-slider-label\">{label}</span>}\n {showValue && <span className=\"eidos-slider-value\">{fmt(currentValue)}</span>}\n </div>\n )}\n\n <input\n ref={ref}\n type=\"range\"\n className=\"eidos-slider-input\"\n min={minVal}\n max={maxVal}\n step={step ?? 1}\n value={currentValue}\n disabled={disabled}\n onChange={handleChange}\n aria-label={label ?? 'Slider'}\n aria-valuemin={minVal}\n aria-valuemax={effectiveMax}\n aria-valuenow={currentValue}\n style={sliderStyle}\n />\n\n {showMinMax && (\n <div className=\"eidos-slider-minmax\">\n <span>{fmt(minVal)}</span>\n <span>{fmt(maxVal)}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nSlider.displayName = 'Slider';\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
renderIcon
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-5CLC3FJO.js";
|
|
4
4
|
|
|
5
5
|
// src/components/Tabs/Tabs.component.tsx
|
|
6
6
|
import React, { useState, useRef, useContext, useLayoutEffect } from "react";
|
|
@@ -166,4 +166,4 @@ export {
|
|
|
166
166
|
TabPanel,
|
|
167
167
|
Tabs
|
|
168
168
|
};
|
|
169
|
-
//# sourceMappingURL=chunk-
|
|
169
|
+
//# sourceMappingURL=chunk-P2GCAVUZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Tabs/Tabs.component.tsx"],"sourcesContent":["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"],"mappings":"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","names":[]}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunk2U7UJOOBcjs = require('./chunk-2U7UJOOB.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkHLNKIAE5cjs = require('./chunk-HLNKIAE5.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkG5IGADJIcjs = require('./chunk-G5IGADJI.cjs');
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _chunkFRUOA2QUcjs = require('./chunk-FRUOA2QU.cjs');
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _chunkA7Z2QAFZcjs = require('./chunk-A7Z2QAFZ.cjs');
|
|
16
16
|
|
|
17
17
|
// src/components/Table/TableFiltersDropdown.component.tsx
|
|
18
18
|
var _react = require('react'); var _react2 = _interopRequireDefault(_react);
|
|
@@ -156,7 +156,7 @@ var TableFiltersDropdown = ({
|
|
|
156
156
|
switch (filterType) {
|
|
157
157
|
case "select":
|
|
158
158
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
159
|
-
|
|
159
|
+
_chunkHLNKIAE5cjs.Select,
|
|
160
160
|
{
|
|
161
161
|
value: row.value || "",
|
|
162
162
|
onChange: (value) => updateFilter(row.id, row.columnKey, value),
|
|
@@ -168,7 +168,7 @@ var TableFiltersDropdown = ({
|
|
|
168
168
|
);
|
|
169
169
|
case "boolean":
|
|
170
170
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
171
|
-
|
|
171
|
+
_chunkHLNKIAE5cjs.Select,
|
|
172
172
|
{
|
|
173
173
|
value: row.value === void 0 ? "" : String(row.value),
|
|
174
174
|
onChange: (value) => updateFilter(row.id, row.columnKey, value === "" ? void 0 : value === "true"),
|
|
@@ -228,7 +228,7 @@ var TableFiltersDropdown = ({
|
|
|
228
228
|
}
|
|
229
229
|
};
|
|
230
230
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
231
|
-
|
|
231
|
+
_chunk2U7UJOOBcjs.DatePicker,
|
|
232
232
|
{
|
|
233
233
|
mode: dateMode,
|
|
234
234
|
value: prepareValue(),
|
|
@@ -245,7 +245,7 @@ var TableFiltersDropdown = ({
|
|
|
245
245
|
case "text":
|
|
246
246
|
default:
|
|
247
247
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
248
|
-
|
|
248
|
+
_chunkG5IGADJIcjs.Input,
|
|
249
249
|
{
|
|
250
250
|
value: row.value || "",
|
|
251
251
|
onChange: (e) => updateFilter(row.id, row.columnKey, e.target.value),
|
|
@@ -257,7 +257,7 @@ var TableFiltersDropdown = ({
|
|
|
257
257
|
};
|
|
258
258
|
const canAddMore = filterRows.length < filterableColumns.length;
|
|
259
259
|
const triggerButton = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
260
|
-
|
|
260
|
+
_chunkA7Z2QAFZcjs.Button,
|
|
261
261
|
{
|
|
262
262
|
variant: "text",
|
|
263
263
|
size: "sm",
|
|
@@ -273,7 +273,7 @@ var TableFiltersDropdown = ({
|
|
|
273
273
|
const isTemporaryFilter = row.columnKey.startsWith("__temp_");
|
|
274
274
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "eidos-table-filter-row", children: [
|
|
275
275
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-table-column-select", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
276
|
-
|
|
276
|
+
_chunkHLNKIAE5cjs.Select,
|
|
277
277
|
{
|
|
278
278
|
value: isTemporaryFilter ? "" : row.columnKey,
|
|
279
279
|
onChange: (value) => {
|
|
@@ -289,9 +289,9 @@ var TableFiltersDropdown = ({
|
|
|
289
289
|
fullWidth: true
|
|
290
290
|
}
|
|
291
291
|
) }),
|
|
292
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-table-value-input", children: column && !isTemporaryFilter ? renderFilterInput(row, column) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
292
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-table-value-input", children: column && !isTemporaryFilter ? renderFilterInput(row, column) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkG5IGADJIcjs.Input, { value: "", disabled: true, placeholder: "Select column first", size: "sm" }) }),
|
|
293
293
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
294
|
-
|
|
294
|
+
_chunkA7Z2QAFZcjs.Button,
|
|
295
295
|
{
|
|
296
296
|
variant: "text",
|
|
297
297
|
size: "sm",
|
|
@@ -304,7 +304,7 @@ var TableFiltersDropdown = ({
|
|
|
304
304
|
}) }),
|
|
305
305
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-table-filters-footer", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "eidos-table-filters-actions", children: [
|
|
306
306
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
307
|
-
|
|
307
|
+
_chunkA7Z2QAFZcjs.Button,
|
|
308
308
|
{
|
|
309
309
|
variant: "text",
|
|
310
310
|
size: "sm",
|
|
@@ -314,10 +314,10 @@ var TableFiltersDropdown = ({
|
|
|
314
314
|
children: "Add Filter"
|
|
315
315
|
}
|
|
316
316
|
),
|
|
317
|
-
hasActiveFilters && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
317
|
+
hasActiveFilters && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkA7Z2QAFZcjs.Button, { variant: "text", size: "sm", color: "secondary", onClick: clearAllFilters, children: "Clear All" }),
|
|
318
318
|
hasChanges && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "eidos-table-filters-apply-actions", children: [
|
|
319
319
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
320
|
-
|
|
320
|
+
_chunkA7Z2QAFZcjs.Button,
|
|
321
321
|
{
|
|
322
322
|
variant: "outlined",
|
|
323
323
|
size: "sm",
|
|
@@ -328,7 +328,7 @@ var TableFiltersDropdown = ({
|
|
|
328
328
|
}
|
|
329
329
|
),
|
|
330
330
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
331
|
-
|
|
331
|
+
_chunkA7Z2QAFZcjs.Button,
|
|
332
332
|
{
|
|
333
333
|
variant: "filled",
|
|
334
334
|
size: "sm",
|
|
@@ -342,7 +342,7 @@ var TableFiltersDropdown = ({
|
|
|
342
342
|
] }) })
|
|
343
343
|
] });
|
|
344
344
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
345
|
-
|
|
345
|
+
_chunkFRUOA2QUcjs.Dropdown,
|
|
346
346
|
{
|
|
347
347
|
trigger: triggerButton,
|
|
348
348
|
content: dropdownContent,
|
|
@@ -4415,4 +4415,4 @@ function isAfter(a, b) {
|
|
|
4415
4415
|
|
|
4416
4416
|
|
|
4417
4417
|
exports.CSS = CSS; exports.useSensor = useSensor; exports.useSensors = useSensors; exports.closestCenter = closestCenter; exports.KeyboardSensor = KeyboardSensor; exports.PointerSensor = PointerSensor; exports.DndContext = DndContext; exports.arrayMove = arrayMove; exports.horizontalListSortingStrategy = horizontalListSortingStrategy; exports.verticalListSortingStrategy = verticalListSortingStrategy; exports.SortableContext = SortableContext; exports.useSortable = useSortable; exports.sortableKeyboardCoordinates = sortableKeyboardCoordinates; exports.TableFiltersDropdown = TableFiltersDropdown;
|
|
4418
|
-
//# sourceMappingURL=chunk-
|
|
4418
|
+
//# sourceMappingURL=chunk-PA4IT2XQ.cjs.map
|