eidos-ui 1.0.1 → 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 -225
- 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 -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 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-POX6JZLO.cjs","../src/components/SegmentedControl/SegmentedControl.component.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACPA,4EAAgC;AAgFtB,+CAAA;AA3CH,IAAM,iBAAA,EAAoD,CAAC;AAAA,EAChE,OAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,EAAO,IAAA;AAAA,EACP,MAAA,EAAQ,SAAA;AAAA,EACR,SAAA,EAAW,KAAA;AAAA,EACX,UAAA,EAAY,KAAA;AAAA,EACZ,UAAA,EAAY;AACd,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,aAAA,EAAe,MAAA,IAAU,KAAA,CAAA;AAC/B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,EAAA,EAAI,6BAAA;AAAA,sCACxC,YAAA,0BAAgB,OAAA,mBAAQ,CAAC,CAAA,6BAAG,SAAA,UAAS;AAAA,EACvC,CAAA;AAEA,EAAA,MAAM,YAAA,EAAc,aAAA,EAAe,MAAA,EAAQ,aAAA;AAE3C,EAAA,MAAM,aAAA,EAAe,CAAC,QAAA,EAAA,GAAqB;AACzC,IAAA,GAAA,CAAI,QAAA,EAAU,MAAA;AACd,IAAA,GAAA,CAAI,SAAA,IAAa,WAAA,EAAa,MAAA;AAC9B,IAAA,GAAA,CAAI,CAAC,YAAA,EAAc,gBAAA,CAAiB,QAAQ,CAAA;AAC5C,oBAAA,QAAA,0BAAA,CAAW,QAAQ,GAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,iBAAA,EAAmB;AAAA,IACvB,iBAAA;AAAA,IACA,CAAA,iBAAA,EAAoB,IAAI,CAAA,CAAA;AACC,IAAA;AACb,IAAA;AACC,IAAA;AACb,IAAA;AAGS,EAAA;AAGR,EAAA;AAEoB,IAAA;AACE,IAAA;AAGjB,IAAA;AAAC,MAAA;AAAA,MAAA;AAEM,QAAA;AACA,QAAA;AACS,QAAA;AACJ,QAAA;AACE,QAAA;AAGI,QAAA;AAEf,QAAA;AAAY,UAAA;AACC,UAAA;AAAmD,QAAA;AAAA,MAAA;AAXxD,MAAA;AAYX,IAAA;AAIA,IAAA;AAON,EAAA;AAEJ;AD5C6B;AACA;AACA;AACA","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-POX6JZLO.cjs","sourcesContent":[null,"import React, { useState } from 'react';\r\nimport { Tooltip } from '../Tooltip';\r\nimport { renderIcon } from '../../utils';\r\nimport type { SegmentedControlProps } from './SegmentedControl.types';\r\n\r\n/**\r\n * SegmentedControl - a compact, single-select toggle group rendered as a pill.\r\n *\r\n * Semantics: `role=\"radiogroup\"` on the container, `role=\"radio\"` on each\r\n * segment. Supports controlled and uncontrolled usage.\r\n *\r\n * @example\r\n * ```tsx\r\n * // Controlled\r\n * const [view, setView] = useState('list');\r\n * <SegmentedControl\r\n * options={[\r\n * { value: 'list', icon: List, tooltip: 'List view' },\r\n * { value: 'grid', icon: LayoutGrid, tooltip: 'Grid view' },\r\n * { value: 'table', icon: Table2, tooltip: 'Table view' },\r\n * ]}\r\n * value={view}\r\n * onChange={setView}\r\n * />\r\n *\r\n * // With labels\r\n * <SegmentedControl\r\n * options={[\r\n * { value: 'day', label: 'Day' },\r\n * { value: 'week', label: 'Week' },\r\n * { value: 'month', label: 'Month' },\r\n * ]}\r\n * defaultValue=\"week\"\r\n * onChange={console.log}\r\n * />\r\n * ```\r\n */\r\nexport const SegmentedControl: React.FC<SegmentedControlProps> = ({\r\n options,\r\n value,\r\n defaultValue,\r\n onChange,\r\n size = 'md',\r\n color = 'primary',\r\n disabled = false,\r\n fullWidth = false,\r\n className = '',\r\n}) => {\r\n const isControlled = value !== undefined;\r\n const [internalValue, setInternalValue] = useState<string>(\r\n defaultValue ?? options[0]?.value ?? '',\r\n );\r\n\r\n const activeValue = isControlled ? value : internalValue;\r\n\r\n const handleSelect = (optValue: string) => {\r\n if (disabled) return;\r\n if (optValue === activeValue) return; // already selected\r\n if (!isControlled) setInternalValue(optValue);\r\n onChange?.(optValue);\r\n };\r\n\r\n const containerClasses = [\r\n 'eidos-segmented',\r\n `eidos-segmented--${size}`,\r\n `eidos-segmented--${color}`,\r\n disabled && 'eidos-segmented--disabled',\r\n fullWidth && 'eidos-segmented--full-width',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <div className={containerClasses} role=\"radiogroup\">\r\n {options.map((opt) => {\r\n const isActive = activeValue === opt.value;\r\n const isDisabled = disabled || !!opt.disabled;\r\n\r\n const segment = (\r\n <button\r\n key={opt.value}\r\n type=\"button\"\r\n role=\"radio\"\r\n aria-checked={isActive}\r\n disabled={isDisabled}\r\n className={['eidos-segmented-item', isActive && 'eidos-segmented-item--active']\r\n .filter(Boolean)\r\n .join(' ')}\r\n onClick={() => !isDisabled && handleSelect(opt.value)}\r\n >\r\n {opt.icon && renderIcon(opt.icon, 'eidos-segmented-icon')}\r\n {opt.label && <span className=\"eidos-segmented-label\">{opt.label}</span>}\r\n </button>\r\n );\r\n\r\n return opt.tooltip ? (\r\n <Tooltip key={opt.value} message={opt.tooltip}>\r\n {segment}\r\n </Tooltip>\r\n ) : (\r\n React.cloneElement(segment, { key: opt.value })\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/TreeView/TreeView.component.tsx"],"sourcesContent":["import React, { useState, useCallback, useMemo, useRef, useContext, createContext } from 'react';\r\nimport { ChevronRight, Folder, FolderOpen, File } from 'lucide-react';\r\nimport type { TreeViewProps, TreeNode } from './TreeView.types';\r\nimport './TreeView.scss';\r\n\r\n// ============================================================================\r\n// HELPERS\r\n// ============================================================================\r\n\r\n/** Collect all branch node IDs by recursively traversing the tree. */\r\nfunction collectAllBranchIds(nodes: TreeNode[]): string[] {\r\n const ids: string[] = [];\r\n function traverse(items: TreeNode[]): void {\r\n for (const node of items) {\r\n if (node.children && node.children.length > 0) {\r\n ids.push(node.id);\r\n traverse(node.children);\r\n }\r\n }\r\n }\r\n traverse(nodes);\r\n return ids;\r\n}\r\n\r\n/** Build a flat Map of id → node for O(1) lookups. */\r\nfunction buildNodeMap(nodes: TreeNode[]): Map<string, TreeNode> {\r\n const map = new Map<string, TreeNode>();\r\n function traverse(items: TreeNode[]): void {\r\n for (const node of items) {\r\n map.set(node.id, node);\r\n if (node.children) traverse(node.children);\r\n }\r\n }\r\n traverse(nodes);\r\n return map;\r\n}\r\n\r\n/** Build a Map of id → parentId (null for root nodes). */\r\nfunction buildParentMap(nodes: TreeNode[]): Map<string, string | null> {\r\n const map = new Map<string, string | null>();\r\n function traverse(items: TreeNode[], parentId: string | null): void {\r\n for (const node of items) {\r\n map.set(node.id, parentId);\r\n if (node.children) traverse(node.children, node.id);\r\n }\r\n }\r\n traverse(nodes, null);\r\n return map;\r\n}\r\n\r\n/**\r\n * Return an ordered list of all node IDs that are currently visible -\r\n * i.e. not hidden because an ancestor is collapsed.\r\n */\r\nfunction computeVisibleIds(nodes: TreeNode[], expandedIds: Set<string>): string[] {\r\n const result: string[] = [];\r\n function traverse(items: TreeNode[]): void {\r\n for (const node of items) {\r\n result.push(node.id);\r\n if (node.children && node.children.length > 0 && expandedIds.has(node.id)) {\r\n traverse(node.children);\r\n }\r\n }\r\n }\r\n traverse(nodes);\r\n return result;\r\n}\r\n\r\n// ============================================================================\r\n// CONTEXT\r\n// ============================================================================\r\n\r\ninterface TreeContextValue {\r\n selectedIds: Set<string>;\r\n expandedIds: Set<string>;\r\n /** ID of the node that currently owns tabIndex=0 (roving tabindex). */\r\n tabFocusId: string | null;\r\n multiSelect: boolean;\r\n size: NonNullable<TreeViewProps['size']>;\r\n showLines: boolean;\r\n renderLabel: TreeViewProps['renderLabel'];\r\n onNodeClick: (node: TreeNode) => void;\r\n onToggleExpand: (id: string) => void;\r\n onNodeFocus: (id: string) => void;\r\n onNodeKeyDown: (e: React.KeyboardEvent<HTMLLIElement>, node: TreeNode, isBranch: boolean) => void;\r\n /** Map of node id → li element, populated by TreeNodeItem via callback ref. */\r\n nodeRefs: React.MutableRefObject<Map<string, HTMLLIElement>>;\r\n}\r\n\r\nconst TreeContext = createContext<TreeContextValue | null>(null);\r\n\r\nfunction useTreeContext(): TreeContextValue {\r\n const ctx = useContext(TreeContext);\r\n if (!ctx) throw new Error('TreeNodeItem must be rendered inside <TreeView>');\r\n return ctx;\r\n}\r\n\r\n// ============================================================================\r\n// INTERNAL TREE NODE ITEM - renders itself and its children recursively\r\n// ============================================================================\r\n\r\ninterface TreeNodeItemProps {\r\n node: TreeNode;\r\n /** 1-based nesting depth for aria-level. */\r\n depth: number;\r\n}\r\n\r\nconst TreeNodeItem: React.FC<TreeNodeItemProps> = ({ node, depth }) => {\r\n const ctx = useTreeContext();\r\n const { nodeRefs } = ctx;\r\n\r\n const isBranch = Boolean(node.children && node.children.length > 0);\r\n const isExpanded = isBranch && ctx.expandedIds.has(node.id);\r\n const isSelected = ctx.selectedIds.has(node.id);\r\n const isDisabled = node.disabled === true;\r\n\r\n // Register/unregister this li element so the root can programmatically focus it.\r\n const liRef = useCallback(\r\n (el: HTMLLIElement | null) => {\r\n if (el) nodeRefs.current.set(node.id, el);\r\n else nodeRefs.current.delete(node.id);\r\n },\r\n [node.id, nodeRefs],\r\n );\r\n\r\n const handleRowClick = () => {\r\n if (!isDisabled) ctx.onNodeClick(node);\r\n };\r\n\r\n const handleToggleClick = (e: React.MouseEvent) => {\r\n // stopPropagation prevents the row's onClick from firing (no accidental selection).\r\n e.stopPropagation();\r\n if (!isDisabled && isBranch) ctx.onToggleExpand(node.id);\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLLIElement>) => {\r\n ctx.onNodeKeyDown(e, node, isBranch);\r\n };\r\n\r\n // Default icon: folder (open/closed) for branches, file for leaves.\r\n const DefaultIcon = isBranch ? (isExpanded ? FolderOpen : Folder) : File;\r\n const NodeIcon = (node.icon ?? DefaultIcon) as React.FC<{ className?: string; size?: number }>;\r\n const iconSize = ctx.size === 'sm' ? 14 : ctx.size === 'lg' ? 18 : 16;\r\n\r\n const rowClasses = [\r\n 'eidos-tree-node-row',\r\n isSelected && 'eidos-tree-node-row--selected',\r\n isDisabled && 'eidos-tree-node-row--disabled',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n const toggleClasses = [\r\n 'eidos-tree-toggle',\r\n isExpanded && 'eidos-tree-toggle--expanded',\r\n !isBranch && 'eidos-tree-toggle--leaf',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n const childrenClasses = ['eidos-tree-children', ctx.showLines && 'eidos-tree-children--lines']\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <li\r\n ref={liRef}\r\n role=\"treeitem\"\r\n aria-expanded={isBranch ? isExpanded : undefined}\r\n aria-selected={isSelected}\r\n aria-disabled={isDisabled || undefined}\r\n aria-level={depth}\r\n tabIndex={ctx.tabFocusId === node.id ? 0 : -1}\r\n className=\"eidos-tree-node\"\r\n onFocus={() => ctx.onNodeFocus(node.id)}\r\n onKeyDown={handleKeyDown}\r\n >\r\n {/* ── Clickable row: toggle + icon + label ─────────────────────────────── */}\r\n <div className={rowClasses} onClick={handleRowClick}>\r\n {/*\r\n Toggle chevron: always rendered for visual alignment.\r\n tabIndex -1 removes it from tab order; aria-hidden hides it from AT\r\n since expand/collapse is handled via the treeitem's keyboard events.\r\n */}\r\n <button\r\n type=\"button\"\r\n className={toggleClasses}\r\n onClick={handleToggleClick}\r\n tabIndex={-1}\r\n aria-hidden=\"true\"\r\n >\r\n {isBranch && <ChevronRight aria-hidden=\"true\" />}\r\n </button>\r\n\r\n <span className=\"eidos-tree-icon\" aria-hidden=\"true\">\r\n <NodeIcon size={iconSize} />\r\n </span>\r\n\r\n <span className=\"eidos-tree-label\">\r\n {ctx.renderLabel ? ctx.renderLabel(node, isSelected, isExpanded) : node.label}\r\n </span>\r\n </div>\r\n\r\n {/* ── Children (only when branch is expanded) ───────────────────────────── */}\r\n {isBranch && isExpanded && (\r\n <ul role=\"group\" className={childrenClasses}>\r\n {node.children!.map((child) => (\r\n <TreeNodeItem key={child.id} node={child} depth={depth + 1} />\r\n ))}\r\n </ul>\r\n )}\r\n </li>\r\n );\r\n};\r\n\r\nTreeNodeItem.displayName = 'TreeNodeItem';\r\n\r\n// ============================================================================\r\n// TREE VIEW ROOT\r\n// ============================================================================\r\n\r\nexport const TreeView: React.FC<TreeViewProps> = ({\r\n data,\r\n // Single selection\r\n selectedId,\r\n defaultSelectedId,\r\n onSelect,\r\n // Multi selection\r\n multiSelect = false,\r\n selectedIds: selectedIdsProp,\r\n defaultSelectedIds,\r\n onSelectMulti,\r\n // Expansion\r\n expandedIds: expandedIdsProp,\r\n defaultExpandedIds,\r\n onExpand,\r\n defaultExpandAll = false,\r\n // Appearance\r\n size = 'md',\r\n showLines = false,\r\n className,\r\n // Rendering\r\n renderLabel,\r\n}) => {\r\n // ── Node maps (stable across renders until data changes) ────────────────────\r\n const nodeMap = useMemo(() => buildNodeMap(data), [data]);\r\n const parentMap = useMemo(() => buildParentMap(data), [data]);\r\n\r\n // ── Single-selection state ──────────────────────────────────────────────────\r\n const isSingleControlled = selectedId !== undefined;\r\n const [localSingleId, setLocalSingleId] = useState<string | undefined>(defaultSelectedId);\r\n const effectiveSingleId = isSingleControlled ? selectedId : localSingleId;\r\n\r\n // ── Multi-selection state ───────────────────────────────────────────────────\r\n const isMultiControlled = selectedIdsProp !== undefined;\r\n const [localMultiIds, setLocalMultiIds] = useState<string[]>(defaultSelectedIds ?? []);\r\n const effectiveMultiIds = isMultiControlled ? selectedIdsProp! : localMultiIds;\r\n\r\n // ── Derived selected set ────────────────────────────────────────────────────\r\n const selectedSet = useMemo<Set<string>>(() => {\r\n if (multiSelect) return new Set(effectiveMultiIds);\r\n return effectiveSingleId !== undefined ? new Set([effectiveSingleId]) : new Set();\r\n }, [multiSelect, effectiveMultiIds, effectiveSingleId]);\r\n\r\n // ── Expansion state ─────────────────────────────────────────────────────────\r\n const isExpansionControlled = expandedIdsProp !== undefined;\r\n const [localExpandedIds, setLocalExpandedIds] = useState<string[]>(() => {\r\n // defaultExpandAll wins over defaultExpandedIds.\r\n if (defaultExpandAll) return collectAllBranchIds(data);\r\n return defaultExpandedIds ?? [];\r\n });\r\n const effectiveExpandedIds = isExpansionControlled ? expandedIdsProp! : localExpandedIds;\r\n const expandedSet = useMemo(() => new Set(effectiveExpandedIds), [effectiveExpandedIds]);\r\n\r\n // ── Roving tabindex focus tracking ──────────────────────────────────────────\r\n const [tabFocusId, setTabFocusId] = useState<string | null>(() => data[0]?.id ?? null);\r\n\r\n /** Map of node id → li DOM element. Populated by TreeNodeItem callback refs. */\r\n const nodeRefs = useRef<Map<string, HTMLLIElement>>(new Map());\r\n\r\n // ── Expand / collapse ───────────────────────────────────────────────────────\r\n const handleToggleExpand = useCallback(\r\n (id: string) => {\r\n const willExpand = !expandedSet.has(id);\r\n if (!isExpansionControlled) {\r\n setLocalExpandedIds((prev) =>\r\n willExpand ? [...prev, id] : prev.filter((eid) => eid !== id),\r\n );\r\n }\r\n onExpand?.(id, willExpand);\r\n },\r\n [expandedSet, isExpansionControlled, onExpand],\r\n );\r\n\r\n // ── Select ──────────────────────────────────────────────────────────────────\r\n const handleNodeClick = useCallback(\r\n (node: TreeNode) => {\r\n if (node.disabled) return;\r\n\r\n if (multiSelect) {\r\n const isCurrentlySelected = selectedSet.has(node.id);\r\n const nextIds = isCurrentlySelected\r\n ? effectiveMultiIds.filter((id) => id !== node.id)\r\n : [...effectiveMultiIds, node.id];\r\n\r\n if (!isMultiControlled) setLocalMultiIds(nextIds);\r\n\r\n const nextNodes = nextIds\r\n .map((id) => nodeMap.get(id))\r\n .filter((n): n is TreeNode => n !== undefined);\r\n onSelectMulti?.(nextNodes);\r\n } else {\r\n if (!isSingleControlled) setLocalSingleId(node.id);\r\n onSelect?.(node);\r\n }\r\n\r\n // Move roving tabindex to the interacted node.\r\n setTabFocusId(node.id);\r\n },\r\n [\r\n multiSelect,\r\n selectedSet,\r\n effectiveMultiIds,\r\n isMultiControlled,\r\n isSingleControlled,\r\n nodeMap,\r\n onSelect,\r\n onSelectMulti,\r\n ],\r\n );\r\n\r\n // ── Focus ───────────────────────────────────────────────────────────────────\r\n const handleNodeFocus = useCallback((id: string) => {\r\n setTabFocusId(id);\r\n }, []);\r\n\r\n // ── Keyboard navigation (ARIA tree pattern) ─────────────────────────────────\r\n const handleNodeKeyDown = useCallback(\r\n (e: React.KeyboardEvent<HTMLLIElement>, node: TreeNode, isBranch: boolean) => {\r\n const visibleIds = computeVisibleIds(data, expandedSet);\r\n const currentIndex = visibleIds.indexOf(node.id);\r\n\r\n /** Move roving tabindex to id and immediately focus the li element. */\r\n const focusNode = (id: string): void => {\r\n setTabFocusId(id);\r\n nodeRefs.current.get(id)?.focus();\r\n };\r\n\r\n switch (e.key) {\r\n case 'ArrowDown': {\r\n e.preventDefault();\r\n const nextId = visibleIds[currentIndex + 1];\r\n if (nextId !== undefined) focusNode(nextId);\r\n break;\r\n }\r\n\r\n case 'ArrowUp': {\r\n e.preventDefault();\r\n const prevId = visibleIds[currentIndex - 1];\r\n if (prevId !== undefined) focusNode(prevId);\r\n break;\r\n }\r\n\r\n case 'ArrowRight': {\r\n e.preventDefault();\r\n if (!isBranch) break;\r\n if (!expandedSet.has(node.id)) {\r\n // Expand; per ARIA APG focus stays on current node after opening.\r\n handleToggleExpand(node.id);\r\n } else {\r\n // Already expanded - move into first child.\r\n const firstChildId = visibleIds[currentIndex + 1];\r\n if (firstChildId !== undefined) focusNode(firstChildId);\r\n }\r\n break;\r\n }\r\n\r\n case 'ArrowLeft': {\r\n e.preventDefault();\r\n if (isBranch && expandedSet.has(node.id)) {\r\n // Collapse this branch; focus stays on it.\r\n handleToggleExpand(node.id);\r\n } else {\r\n // Move to parent (no-op for root nodes).\r\n const parentId = parentMap.get(node.id);\r\n if (parentId !== undefined && parentId !== null) focusNode(parentId);\r\n }\r\n break;\r\n }\r\n\r\n case 'Enter':\r\n case ' ': {\r\n e.preventDefault();\r\n if (!node.disabled) handleNodeClick(node);\r\n break;\r\n }\r\n\r\n case 'Home': {\r\n e.preventDefault();\r\n const firstId = visibleIds[0];\r\n if (firstId !== undefined) focusNode(firstId);\r\n break;\r\n }\r\n\r\n case 'End': {\r\n e.preventDefault();\r\n const lastId = visibleIds[visibleIds.length - 1];\r\n if (lastId !== undefined) focusNode(lastId);\r\n break;\r\n }\r\n\r\n default:\r\n break;\r\n }\r\n },\r\n [data, expandedSet, parentMap, handleToggleExpand, handleNodeClick],\r\n );\r\n\r\n // ── Context ─────────────────────────────────────────────────────────────────\r\n const contextValue = useMemo<TreeContextValue>(\r\n () => ({\r\n selectedIds: selectedSet,\r\n expandedIds: expandedSet,\r\n tabFocusId,\r\n multiSelect,\r\n size,\r\n showLines,\r\n renderLabel,\r\n onNodeClick: handleNodeClick,\r\n onToggleExpand: handleToggleExpand,\r\n onNodeFocus: handleNodeFocus,\r\n onNodeKeyDown: handleNodeKeyDown,\r\n nodeRefs,\r\n }),\r\n [\r\n selectedSet,\r\n expandedSet,\r\n tabFocusId,\r\n multiSelect,\r\n size,\r\n showLines,\r\n renderLabel,\r\n handleNodeClick,\r\n handleToggleExpand,\r\n handleNodeFocus,\r\n handleNodeKeyDown,\r\n ],\r\n );\r\n\r\n const rootClasses = ['eidos-tree', `eidos-tree--${size}`, className].filter(Boolean).join(' ');\r\n\r\n return (\r\n <TreeContext.Provider value={contextValue}>\r\n <ul role=\"tree\" aria-multiselectable={multiSelect || undefined} className={rootClasses}>\r\n {data.map((node) => (\r\n <TreeNodeItem key={node.id} node={node} depth={1} />\r\n ))}\r\n </ul>\r\n </TreeContext.Provider>\r\n );\r\n};\r\n\r\nTreeView.displayName = 'TreeView';\r\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-QGZF5MOS.cjs","../src/components/Select/Select.component.tsx"],"names":[],"mappings":"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","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-QGZF5MOS.cjs","sourcesContent":[null,"import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';\r\nimport { X, Check } from 'lucide-react';\r\nimport { Input } from '../Input/Input.component';\r\nimport { Dropdown } from '../Dropdown/Dropdown.component';\r\nimport type { SelectProps, SelectOption } from './Select.types';\r\nimport { renderIcon } from '../../utils';\r\n\r\nexport const Select = React.forwardRef<HTMLDivElement, SelectProps>(\r\n (\r\n {\r\n options = [],\r\n value,\r\n defaultValue,\r\n onChange,\r\n className = '',\r\n multiple = false,\r\n placeholder = 'Select an option...',\r\n disabled = false,\r\n inputProps = {},\r\n name,\r\n id,\r\n required = false,\r\n fullWidth = false,\r\n minWidth,\r\n maxWidth,\r\n minHeight,\r\n maxHeight = '300px',\r\n autoWidth = true,\r\n clearable = true,\r\n autoOpen = false,\r\n dropdownProps = {},\r\n },\r\n ref,\r\n ) => {\r\n const isControlled = value !== undefined;\r\n\r\n // Lazy initializer: seed from defaultValue in uncontrolled mode.\r\n const [selectedValues, setSelectedValues] = useState<Set<string>>(() => {\r\n if (defaultValue !== undefined) {\r\n const vals = Array.isArray(defaultValue) ? defaultValue : [defaultValue];\r\n return new Set(vals.filter((v) => v !== ''));\r\n }\r\n return new Set();\r\n });\r\n const [menuKey, setMenuKey] = useState(0);\r\n const [focusedIndex, setFocusedIndex] = useState(-1);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const triggerRef = useRef<HTMLDivElement>(null);\r\n const optionRefs = useRef<(HTMLDivElement | null)[]>([]);\r\n\r\n // Kept in sync every render so the mount-only callback ref below can\r\n // read the latest values without needing them in its dependency array\r\n // (see `handleOptionsMount`).\r\n const optionsRef = useRef(options);\r\n optionsRef.current = options;\r\n const selectedValuesRef = useRef(selectedValues);\r\n selectedValuesRef.current = selectedValues;\r\n\r\n useEffect(() => {\r\n if (value !== undefined) {\r\n const values = Array.isArray(value) ? value : [value];\r\n\r\n const validValues = values.filter((v) => v !== '');\r\n setSelectedValues(new Set(validValues));\r\n }\r\n }, [value]);\r\n\r\n useEffect(() => {\r\n setFocusedIndex(-1);\r\n }, [options]);\r\n\r\n useEffect(() => {\r\n optionRefs.current = optionRefs.current.slice(0, options.length);\r\n }, [options.length]);\r\n\r\n const handleOptionSelect = useCallback(\r\n (option: SelectOption) => {\r\n if (option.disabled) return;\r\n\r\n const newSelectedValues = new Set(selectedValues);\r\n\r\n if (multiple) {\r\n if (newSelectedValues.has(option.value)) {\r\n newSelectedValues.delete(option.value);\r\n } else {\r\n newSelectedValues.add(option.value);\r\n }\r\n } else {\r\n if (newSelectedValues.has(option.value)) {\r\n newSelectedValues.clear();\r\n } else {\r\n newSelectedValues.clear();\r\n newSelectedValues.add(option.value);\r\n }\r\n }\r\n\r\n // In uncontrolled mode, own the state directly.\r\n // In controlled mode, let the parent drive via value prop + useEffect sync.\r\n if (!isControlled) {\r\n setSelectedValues(newSelectedValues);\r\n }\r\n\r\n if (onChange) {\r\n const newValue = multiple\r\n ? Array.from(newSelectedValues)\r\n : Array.from(newSelectedValues)[0] || '';\r\n onChange(newValue);\r\n }\r\n\r\n if (!multiple) {\r\n setIsOpen(false);\r\n setMenuKey((prev) => prev + 1);\r\n }\r\n },\r\n [multiple, onChange, selectedValues, isControlled],\r\n );\r\n\r\n const handleClear = useCallback(\r\n (e?: React.MouseEvent) => {\r\n if (e) {\r\n e.stopPropagation();\r\n }\r\n if (!isControlled) {\r\n setSelectedValues(new Set());\r\n }\r\n\r\n setIsOpen(false);\r\n setMenuKey((prev) => prev + 1);\r\n if (onChange) {\r\n onChange(multiple ? [] : '');\r\n }\r\n },\r\n [multiple, onChange, isControlled],\r\n );\r\n\r\n const handleKeyDown = useCallback(\r\n (e: React.KeyboardEvent) => {\r\n if (disabled) return;\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n e.preventDefault();\r\n if (!isOpen) {\r\n setIsOpen(true);\r\n setFocusedIndex(0);\r\n } else {\r\n setFocusedIndex((prev) => {\r\n const nextIndex = prev < options.length - 1 ? prev + 1 : 0;\r\n\r\n setTimeout(() => {\r\n optionRefs.current[nextIndex]?.scrollIntoView({\r\n block: 'nearest',\r\n behavior: 'smooth',\r\n });\r\n }, 0);\r\n return nextIndex;\r\n });\r\n }\r\n break;\r\n\r\n case 'ArrowUp':\r\n e.preventDefault();\r\n if (!isOpen) {\r\n setIsOpen(true);\r\n setFocusedIndex(options.length - 1);\r\n } else {\r\n setFocusedIndex((prev) => {\r\n const nextIndex = prev > 0 ? prev - 1 : options.length - 1;\r\n\r\n setTimeout(() => {\r\n optionRefs.current[nextIndex]?.scrollIntoView({\r\n block: 'nearest',\r\n behavior: 'smooth',\r\n });\r\n }, 0);\r\n return nextIndex;\r\n });\r\n }\r\n break;\r\n\r\n case 'Enter':\r\n case ' ':\r\n e.preventDefault();\r\n if (!isOpen) {\r\n setIsOpen(true);\r\n setFocusedIndex(0);\r\n } else if (focusedIndex >= 0 && focusedIndex < options.length) {\r\n const focusedOption = options[focusedIndex];\r\n handleOptionSelect(focusedOption);\r\n }\r\n break;\r\n\r\n case 'Escape':\r\n e.preventDefault();\r\n if (isOpen) {\r\n setIsOpen(false);\r\n setFocusedIndex(-1);\r\n setMenuKey((prev) => prev + 1);\r\n }\r\n break;\r\n\r\n case 'Home':\r\n e.preventDefault();\r\n if (isOpen) {\r\n setFocusedIndex(0);\r\n optionRefs.current[0]?.scrollIntoView({\r\n block: 'nearest',\r\n behavior: 'smooth',\r\n });\r\n }\r\n break;\r\n\r\n case 'End':\r\n e.preventDefault();\r\n if (isOpen) {\r\n const lastIndex = options.length - 1;\r\n setFocusedIndex(lastIndex);\r\n optionRefs.current[lastIndex]?.scrollIntoView({\r\n block: 'nearest',\r\n behavior: 'smooth',\r\n });\r\n }\r\n break;\r\n\r\n default:\r\n if (isOpen && e.key.length === 1 && /[a-zA-Z0-9]/.test(e.key)) {\r\n const searchChar = e.key.toLowerCase();\r\n const foundIndex = options.findIndex(\r\n (option, index) =>\r\n index > focusedIndex && option.label.toLowerCase().startsWith(searchChar),\r\n );\r\n\r\n if (foundIndex !== -1) {\r\n setFocusedIndex(foundIndex);\r\n optionRefs.current[foundIndex]?.scrollIntoView({\r\n block: 'nearest',\r\n behavior: 'smooth',\r\n });\r\n } else {\r\n const foundFromStart = options.findIndex((option) =>\r\n option.label.toLowerCase().startsWith(searchChar),\r\n );\r\n if (foundFromStart !== -1) {\r\n setFocusedIndex(foundFromStart);\r\n optionRefs.current[foundFromStart]?.scrollIntoView({\r\n block: 'nearest',\r\n behavior: 'smooth',\r\n });\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n },\r\n [disabled, isOpen, options, focusedIndex, handleOptionSelect],\r\n );\r\n\r\n // Scrolls the first selected option into view. Attached as the options\r\n // list's own ref below with an empty dependency array, so its identity\r\n // never changes and React only invokes it on genuine DOM mount/unmount -\r\n // i.e. exactly when the dropdown opens/closes (Dropdown unmounts its\r\n // `content` entirely while closed), not on every re-render while open.\r\n const handleOptionsMount = useCallback((el: HTMLDivElement | null) => {\r\n if (!el) return;\r\n const idx = optionsRef.current.findIndex((option) =>\r\n selectedValuesRef.current.has(option.value),\r\n );\r\n if (idx === -1) return;\r\n optionRefs.current[idx]?.scrollIntoView({ block: 'nearest' });\r\n }, []);\r\n\r\n // Past this many selections the full comma-joined label list becomes\r\n // unreadable in the trigger, so we switch to a compact \"N selected\" label.\r\n const COMPACT_LABEL_THRESHOLD = 2;\r\n\r\n const displayValue = useMemo(() => {\r\n if (selectedValues.size === 0) return '';\r\n\r\n if (multiple && selectedValues.size > COMPACT_LABEL_THRESHOLD) {\r\n return `${selectedValues.size} selected`;\r\n }\r\n\r\n const selectedOptions = options.filter((option) => selectedValues.has(option.value));\r\n const text = selectedOptions.map((option) => option.label).join(', ');\r\n return text;\r\n }, [options, selectedValues, multiple]);\r\n\r\n const selectContent = useMemo(\r\n () => (\r\n <div className={'eidos-select-options'} ref={handleOptionsMount}>\r\n {options.map((option, index) => {\r\n const isSelected = selectedValues.has(option.value);\r\n const isFocused = index === focusedIndex;\r\n return (\r\n <div\r\n key={option.id}\r\n ref={(el) => {\r\n optionRefs.current[index] = el;\r\n }}\r\n className={`\r\n\t\t\t\t\t\t\t\t\t\t${'eidos-select-option'}\r\n\t\t\t\t\t\t\t\t\t\t${isSelected ? 'eidos-select-option--selected' : ''}\r\n\t\t\t\t\t\t\t\t\t\t${option.disabled ? 'eidos-select-option--disabled' : ''}\r\n\t\t\t\t\t\t\t\t\t\t${isFocused ? 'eidos-select-option--focused' : ''}\r\n\t\t\t\t\t\t\t\t\t`.trim()}\r\n onClick={() => handleOptionSelect(option)}\r\n onMouseEnter={() => setFocusedIndex(index)}\r\n role=\"option\"\r\n aria-selected={isSelected}\r\n aria-disabled={option.disabled}\r\n >\r\n {option.icon && renderIcon(option.icon, 'eidos-select-option-icon')}\r\n <span className={'eidos-select-option-label'}>{option.label}</span>\r\n {isSelected && <Check className={'eidos-select-option-check-icon'} />}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n ),\r\n [options, selectedValues, focusedIndex, handleOptionSelect, handleOptionsMount],\r\n );\r\n\r\n const triggerElement = (\r\n <div\r\n ref={triggerRef}\r\n className={`eidos-select-trigger ${fullWidth ? 'eidos-select-trigger--fullWidth' : ''}`}\r\n onKeyDown={handleKeyDown}\r\n tabIndex={disabled ? -1 : undefined}\r\n role=\"combobox\"\r\n aria-expanded={isOpen}\r\n aria-haspopup=\"listbox\"\r\n aria-controls={`${id || 'select'}-options`}\r\n aria-activedescendant={\r\n focusedIndex >= 0 ? `${id || 'select'}-option-${focusedIndex}` : undefined\r\n }\r\n >\r\n <Input\r\n ref={inputRef}\r\n value={selectedValues.size > 0 ? displayValue : ''}\r\n placeholder={selectedValues.size === 0 ? placeholder : ''}\r\n posIcon={selectedValues.size > 0 && clearable ? X : undefined}\r\n posIconButton={selectedValues.size > 0 && clearable}\r\n onPosIconClick={selectedValues.size > 0 && clearable ? handleClear : undefined}\r\n disabled={disabled}\r\n readOnly={true}\r\n isSelect={true}\r\n name={name}\r\n id={id}\r\n required={required}\r\n fullWidth={fullWidth}\r\n {...inputProps}\r\n />\r\n </div>\r\n );\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={`${'eidos-select-container'} ${\r\n fullWidth ? 'eidos-select-container--fullWidth' : ''\r\n } ${className}`}\r\n >\r\n <Dropdown\r\n key={menuKey}\r\n defaultOpen={autoOpen}\r\n trigger={triggerElement}\r\n content={\r\n <div id={`${id || 'select'}-options`} role=\"listbox\" aria-multiselectable={multiple}>\r\n {selectContent}\r\n </div>\r\n }\r\n minWidth={minWidth}\r\n maxWidth={maxWidth}\r\n minHeight={minHeight}\r\n maxHeight={maxHeight}\r\n autoWidth={autoWidth}\r\n fullWidth={fullWidth}\r\n triggerRef={triggerRef as React.RefObject<HTMLElement | null>}\r\n {...dropdownProps}\r\n />\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nSelect.displayName = 'Select';\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-QP2A5ZMK.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":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-QP2A5ZMK.cjs","sourcesContent":[null,"import React from 'react';\r\nimport type { FooterProps } from './Footer.types';\r\nimport './Footer.scss';\r\n\r\nexport const Footer: React.FC<FooterProps> = (props) => {\r\n const { className = '' } = props;\r\n const isCopyright = 'copyright' in props && props.copyright !== undefined;\r\n\r\n const classes = [\r\n 'eidos-footer',\r\n isCopyright ? 'eidos-footer--copyright' : 'eidos-footer--component',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return <footer className={classes}>{isCopyright ? props.copyright : props.component}</footer>;\r\n};\r\n\r\nFooter.displayName = 'Footer';\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Stepper/Stepper.component.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Check, X } from 'lucide-react';\r\nimport type { StepperProps, StepStatus } from './Stepper.types';\r\n\r\nexport const Stepper: React.FC<StepperProps> = ({\r\n steps,\r\n activeStep = 0,\r\n orientation = 'horizontal',\r\n color = 'primary',\r\n showNumbers = true,\r\n extendStart = false,\r\n extendEnd = false,\r\n className = '',\r\n}) => {\r\n const getStatus = (index: number, explicitStatus?: StepStatus): StepStatus => {\r\n if (explicitStatus) return explicitStatus;\r\n if (index < activeStep) return 'completed';\r\n if (index === activeStep) return 'active';\r\n return 'pending';\r\n };\r\n\r\n // `extendStart`'s connector has no real preceding step to take its color\r\n // from, so it mirrors the first step's own status instead - colored only\r\n // once that step is actually completed. `extendEnd`'s connector *does*\r\n // have a real preceding step (the last one) and colors via the adjacent-\r\n // sibling rule in Stepper.scss, same as a between-step connector.\r\n const isFirstStepCompleted = steps.length > 0 && getStatus(0, steps[0].status) === 'completed';\r\n\r\n return (\r\n <div\r\n className={['eidos-stepper', `eidos-stepper--${orientation}`, className]\r\n .filter(Boolean)\r\n .join(' ')}\r\n aria-label=\"Progress steps\"\r\n >\r\n {/*\r\n `extendStart`/`extendEnd` render as standalone connectors, siblings\r\n of the steps rather than nested inside one - nesting one inside (say)\r\n the first step's own dot-row would make it share that step's fixed\r\n flex slot with its regular trailing connector, silently shrinking\r\n the real Account-Profile gap to make room. As an extra sibling, it\r\n gets its own independent share of the row instead, so every existing\r\n gap shrinks by the same small, uniform amount rather than one\r\n specific connector taking the whole hit.\r\n */}\r\n {extendStart && (\r\n <div\r\n className={[\r\n 'eidos-stepper-connector',\r\n 'eidos-stepper-connector--extend',\r\n isFirstStepCompleted && `eidos-stepper-connector--${color}`,\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n aria-hidden=\"true\"\r\n />\r\n )}\r\n {steps.map((step, index) => {\r\n const status = getStatus(index, step.status);\r\n // The last step only skips its own trailing connector when there's\r\n // truly nothing after it - if `extendEnd` adds a connector past it,\r\n // it needs one too, exactly like every other step, so there's no\r\n // blank gap between its dot and the extend connector.\r\n const isLast = index === steps.length - 1 && !extendEnd;\r\n // That trailing connector and the standalone extend connector right\r\n // after it both carry the usual margin meant for the gap before a\r\n // *dot* - stacked together with no dot between them, that reads as\r\n // an unwanted extra gap. Only the extend connector's own side of\r\n // that junction is zeroed in Stepper.scss; this is the other side.\r\n const joinsExtendEnd = index === steps.length - 1 && extendEnd;\r\n\r\n const dotContent = step.icon ? (\r\n step.icon\r\n ) : status === 'completed' ? (\r\n <Check aria-hidden=\"true\" />\r\n ) : status === 'error' ? (\r\n <X aria-hidden=\"true\" />\r\n ) : showNumbers ? (\r\n <span>{index + 1}</span>\r\n ) : null;\r\n\r\n return (\r\n <div\r\n key={index}\r\n className={[\r\n 'eidos-stepper-step',\r\n `eidos-stepper-step--${status}`,\r\n `eidos-stepper-step--${color}`,\r\n !isLast && 'eidos-stepper-step--has-connector',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n aria-current={status === 'active' ? 'step' : undefined}\r\n >\r\n {/* Dot + connector wrapper */}\r\n <div className=\"eidos-stepper-dot-row\">\r\n <div className=\"eidos-stepper-dot\" aria-hidden=\"true\">\r\n {dotContent}\r\n </div>\r\n {!isLast && (\r\n <div\r\n className={[\r\n 'eidos-stepper-connector',\r\n joinsExtendEnd && 'eidos-stepper-connector--joins-extend',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n aria-hidden=\"true\"\r\n />\r\n )}\r\n </div>\r\n\r\n {/* Labels */}\r\n <div className=\"eidos-stepper-label-group\">\r\n <span className=\"eidos-stepper-label\">{step.label}</span>\r\n {step.description && (\r\n <span className=\"eidos-stepper-description\">{step.description}</span>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n {extendEnd && (\r\n <div\r\n className=\"eidos-stepper-connector eidos-stepper-connector--extend\"\r\n aria-hidden=\"true\"\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nStepper.displayName = 'Stepper';\r\n"],"mappings":";AACA,SAAS,OAAO,SAAS;AA6CjB,cAiDI,YAjDJ;AA1CD,IAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA,aAAa;AAAA,EACb,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,YAAY;AACd,MAAM;AACJ,QAAM,YAAY,CAAC,OAAe,mBAA4C;AAC5E,QAAI,eAAgB,QAAO;AAC3B,QAAI,QAAQ,WAAY,QAAO;AAC/B,QAAI,UAAU,WAAY,QAAO;AACjC,WAAO;AAAA,EACT;AAOA,QAAM,uBAAuB,MAAM,SAAS,KAAK,UAAU,GAAG,MAAM,CAAC,EAAE,MAAM,MAAM;AAEnF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,CAAC,iBAAiB,kBAAkB,WAAW,IAAI,SAAS,EACpE,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACX,cAAW;AAAA,MAYV;AAAA,uBACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA,wBAAwB,4BAA4B,KAAK;AAAA,YAC3D,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,YACX,eAAY;AAAA;AAAA,QACd;AAAA,QAED,MAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,gBAAM,SAAS,UAAU,OAAO,KAAK,MAAM;AAK3C,gBAAM,SAAS,UAAU,MAAM,SAAS,KAAK,CAAC;AAM9C,gBAAM,iBAAiB,UAAU,MAAM,SAAS,KAAK;AAErD,gBAAM,aAAa,KAAK,OACtB,KAAK,OACH,WAAW,cACb,oBAAC,SAAM,eAAY,QAAO,IACxB,WAAW,UACb,oBAAC,KAAE,eAAY,QAAO,IACpB,cACF,oBAAC,UAAM,kBAAQ,GAAE,IACf;AAEJ,iBACE;AAAA,YAAC;AAAA;AAAA,cAEC,WAAW;AAAA,gBACT;AAAA,gBACA,uBAAuB,MAAM;AAAA,gBAC7B,uBAAuB,KAAK;AAAA,gBAC5B,CAAC,UAAU;AAAA,cACb,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,cACX,gBAAc,WAAW,WAAW,SAAS;AAAA,cAG7C;AAAA,qCAAC,SAAI,WAAU,yBACb;AAAA,sCAAC,SAAI,WAAU,qBAAoB,eAAY,QAC5C,sBACH;AAAA,kBACC,CAAC,UACA;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAW;AAAA,wBACT;AAAA,wBACA,kBAAkB;AAAA,sBACpB,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,sBACX,eAAY;AAAA;AAAA,kBACd;AAAA,mBAEJ;AAAA,gBAGA,qBAAC,SAAI,WAAU,6BACb;AAAA,sCAAC,UAAK,WAAU,uBAAuB,eAAK,OAAM;AAAA,kBACjD,KAAK,eACJ,oBAAC,UAAK,WAAU,6BAA6B,eAAK,aAAY;AAAA,mBAElE;AAAA;AAAA;AAAA,YAnCK;AAAA,UAoCP;AAAA,QAEJ,CAAC;AAAA,QACA,aACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAY;AAAA;AAAA,QACd;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,QAAQ,cAAc;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Switch/Switch.component.tsx"],"sourcesContent":["import React, { forwardRef, useState, useId } from 'react';\r\nimport type { SwitchProps } from './Switch.types';\r\n\r\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(\r\n (\r\n {\r\n label,\r\n labelPosition = 'right',\r\n color = 'primary',\r\n size = 'md',\r\n disabled = false,\r\n className = '',\r\n checked,\r\n defaultChecked,\r\n onChange,\r\n id,\r\n ...inputProps\r\n },\r\n ref,\r\n ) => {\r\n const generatedId = useId();\r\n const switchId = id || `switch-${generatedId}`;\r\n\r\n // Determine if using controlled or uncontrolled mode\r\n const isControlled = checked !== undefined;\r\n const [localChecked, setLocalChecked] = useState(defaultChecked ?? false);\r\n\r\n const isChecked = isControlled ? checked : localChecked;\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (!isControlled) {\r\n setLocalChecked(e.target.checked);\r\n }\r\n onChange?.(e);\r\n };\r\n\r\n const wrapperClasses = [\r\n 'eidos-switch-wrapper',\r\n `eidos-switch-wrapper--${color}`,\r\n `eidos-switch-wrapper--${size}`,\r\n `eidos-switch-wrapper--label-${labelPosition}`,\r\n disabled && 'eidos-switch-wrapper--disabled',\r\n isChecked && 'eidos-switch-wrapper--checked',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n const trackClasses = [\r\n 'eidos-switch-track',\r\n isChecked && 'eidos-switch-track--checked',\r\n disabled && 'eidos-switch-track--disabled',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <label className={wrapperClasses} htmlFor={switchId}>\r\n {labelPosition === 'left' && label && <span className=\"eidos-switch-label\">{label}</span>}\r\n\r\n {/*\r\n * The input is visually hidden via .eidos-switch-input but remains\r\n * focusable and keyboard-operable. We always render it as controlled\r\n * (checked={isChecked}) so the transition from uncontrolled → controlled\r\n * never fires, avoiding the React mixed-mode warning.\r\n * Note: `defaultChecked` is intentionally NOT spread - we consumed it\r\n * to seed localChecked, and we never want React to see it alongside\r\n * our explicit `checked` prop.\r\n */}\r\n <input\r\n ref={ref}\r\n type=\"checkbox\"\r\n role=\"switch\"\r\n id={switchId}\r\n className=\"eidos-switch-input\"\r\n disabled={disabled}\r\n {...inputProps}\r\n checked={isChecked}\r\n onChange={handleChange}\r\n />\r\n\r\n <span className={trackClasses}>\r\n <span className=\"eidos-switch-thumb\" />\r\n </span>\r\n\r\n {labelPosition !== 'left' && label && <span className=\"eidos-switch-label\">{label}</span>}\r\n </label>\r\n );\r\n },\r\n);\r\n\r\nSwitch.displayName = 'Switch';\r\n"],"mappings":";AAAA,SAAgB,YAAY,UAAU,aAAa;AAyD7C,SACwC,KADxC;AAtDC,IAAM,SAAS;AAAA,EACpB,CACE;AAAA,IACE;AAAA,IACA,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,cAAc,MAAM;AAC1B,UAAM,WAAW,MAAM,UAAU,WAAW;AAG5C,UAAM,eAAe,YAAY;AACjC,UAAM,CAAC,cAAc,eAAe,IAAI,SAAS,kBAAkB,KAAK;AAExE,UAAM,YAAY,eAAe,UAAU;AAE3C,UAAM,eAAe,CAAC,MAA2C;AAC/D,UAAI,CAAC,cAAc;AACjB,wBAAgB,EAAE,OAAO,OAAO;AAAA,MAClC;AACA,iBAAW,CAAC;AAAA,IACd;AAEA,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA,yBAAyB,KAAK;AAAA,MAC9B,yBAAyB,IAAI;AAAA,MAC7B,+BAA+B,aAAa;AAAA,MAC5C,YAAY;AAAA,MACZ,aAAa;AAAA,MACb;AAAA,IACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,UAAM,eAAe;AAAA,MACnB;AAAA,MACA,aAAa;AAAA,MACb,YAAY;AAAA,IACd,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WACE,qBAAC,WAAM,WAAW,gBAAgB,SAAS,UACxC;AAAA,wBAAkB,UAAU,SAAS,oBAAC,UAAK,WAAU,sBAAsB,iBAAM;AAAA,MAWlF;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,MAAK;AAAA,UACL,MAAK;AAAA,UACL,IAAI;AAAA,UACJ,WAAU;AAAA,UACV;AAAA,UACC,GAAG;AAAA,UACJ,SAAS;AAAA,UACT,UAAU;AAAA;AAAA,MACZ;AAAA,MAEA,oBAAC,UAAK,WAAW,cACf,8BAAC,UAAK,WAAU,sBAAqB,GACvC;AAAA,MAEC,kBAAkB,UAAU,SAAS,oBAAC,UAAK,WAAU,sBAAsB,iBAAM;AAAA,OACpF;AAAA,EAEJ;AACF;AAEA,OAAO,cAAc;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-R36SGSJX.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":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-R36SGSJX.cjs","sourcesContent":[null,"import React from 'react';\r\nimport { LoaderCircle } from 'lucide-react';\r\nimport type { ComponentSizeProps } from '../../utils';\r\n\r\nexport type SpinnerColorProps = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info';\r\n\r\nexport interface SpinnerProps {\r\n size?: ComponentSizeProps;\r\n color?: SpinnerColorProps;\r\n className?: string;\r\n}\r\n\r\nexport const Spinner: React.FC<SpinnerProps> = ({\r\n size = 'md',\r\n color = 'primary',\r\n className = '',\r\n}) => (\r\n <div\r\n role=\"status\"\r\n aria-label=\"Loading\"\r\n className={[\r\n 'eidos-spinner-wrapper',\r\n `eidos-spinner-wrapper--${size}`,\r\n `eidos-spinner-wrapper--${color}`,\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n >\r\n <LoaderCircle className=\"eidos-spinner\" aria-hidden=\"true\" />\r\n </div>\r\n);\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-R5QPUQSI.cjs","../src/components/Tooltip/Tooltip.component.tsx"],"names":[],"mappings":"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","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-R5QPUQSI.cjs","sourcesContent":[null,"import React, { useState, useRef, useCallback, useEffect } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport type { TooltipProps, TooltipState } from './Tooltip.types';\r\n\r\nexport const Tooltip: React.FC<TooltipProps> = ({\r\n children,\r\n message,\r\n component: Component,\r\n componentProps,\r\n placement: preferredPlacement = 'top',\r\n delay = 100,\r\n disabled = false,\r\n className = '',\r\n triggerType = 'hover',\r\n closeOnClickOutside = true,\r\n closeOnEscape = true,\r\n}) => {\r\n const [tooltipState, setTooltipState] = useState<TooltipState>({\r\n isVisible: false,\r\n position: { top: 0, left: 0, placement: 'top' },\r\n isPositioned: false,\r\n });\r\n\r\n const triggerRef = useRef<HTMLDivElement>(null);\r\n const tooltipRef = useRef<HTMLDivElement>(null);\r\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\r\n const animationFrameRef = useRef<number | undefined>(undefined);\r\n const isScrollingRef = useRef(false);\r\n\r\n const calculateOptimalPosition = useCallback(\r\n (triggerRect: DOMRect, tooltipRect: DOMRect) => {\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n const gap = 8;\r\n\r\n let placement: 'top' | 'bottom' | 'left' | 'right' = preferredPlacement;\r\n let top = 0;\r\n let left = 0;\r\n\r\n switch (preferredPlacement) {\r\n case 'top':\r\n top = triggerRect.top - tooltipRect.height - gap;\r\n left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;\r\n break;\r\n case 'bottom':\r\n top = triggerRect.bottom + gap;\r\n left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;\r\n break;\r\n case 'left':\r\n top = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2;\r\n left = triggerRect.left - tooltipRect.width - gap;\r\n break;\r\n case 'right':\r\n top = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2;\r\n left = triggerRect.right + gap;\r\n break;\r\n }\r\n\r\n if (placement === 'top' && top < gap) {\r\n placement = 'bottom';\r\n top = triggerRect.bottom + gap;\r\n left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;\r\n } else if (placement === 'bottom' && top + tooltipRect.height > viewportHeight - gap) {\r\n placement = 'top';\r\n top = triggerRect.top - tooltipRect.height - gap;\r\n left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;\r\n } else if (placement === 'left' && left < gap) {\r\n placement = 'right';\r\n top = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2;\r\n left = triggerRect.right + gap;\r\n } else if (placement === 'right' && left + tooltipRect.width > viewportWidth - gap) {\r\n placement = 'left';\r\n top = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2;\r\n left = triggerRect.left - tooltipRect.width - gap;\r\n }\r\n\r\n top = Math.max(gap, Math.min(top, viewportHeight - tooltipRect.height - gap));\r\n left = Math.max(gap, Math.min(left, viewportWidth - tooltipRect.width - gap));\r\n\r\n return { top, left, placement };\r\n },\r\n [preferredPlacement],\r\n );\r\n\r\n const handleScroll = useCallback(() => {\r\n if (!tooltipState.isVisible || !tooltipState.isPositioned || isScrollingRef.current) return;\r\n\r\n isScrollingRef.current = true;\r\n\r\n animationFrameRef.current = requestAnimationFrame(() => {\r\n if (triggerRef.current && tooltipRef.current) {\r\n const triggerRect = triggerRef.current.getBoundingClientRect();\r\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\r\n\r\n const { top, left, placement } = calculateOptimalPosition(triggerRect, tooltipRect);\r\n\r\n setTooltipState((prev) => ({\r\n ...prev,\r\n position: { top, left, placement },\r\n }));\r\n }\r\n\r\n isScrollingRef.current = false;\r\n });\r\n }, [tooltipState.isVisible, tooltipState.isPositioned, calculateOptimalPosition]);\r\n\r\n const handleMouseEnter = useCallback(() => {\r\n if (disabled || triggerType !== 'hover') return;\r\n\r\n timeoutRef.current = setTimeout(() => {\r\n setTooltipState((prev) => ({\r\n ...prev,\r\n isVisible: true,\r\n isPositioned: false,\r\n }));\r\n }, delay);\r\n }, [disabled, delay, triggerType]);\r\n\r\n const handleMouseLeave = useCallback(() => {\r\n if (triggerType !== 'hover') return;\r\n\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current);\r\n }\r\n setTooltipState((prev) => ({\r\n ...prev,\r\n isVisible: false,\r\n isPositioned: false,\r\n }));\r\n }, [triggerType]);\r\n\r\n const handleClick = useCallback(() => {\r\n if (disabled || triggerType !== 'click') return;\r\n\r\n if (tooltipState.isVisible) {\r\n setTooltipState((prev) => ({\r\n ...prev,\r\n isVisible: false,\r\n isPositioned: false,\r\n }));\r\n } else {\r\n if (delay > 0) {\r\n timeoutRef.current = setTimeout(() => {\r\n setTooltipState((prev) => ({\r\n ...prev,\r\n isVisible: true,\r\n isPositioned: false,\r\n }));\r\n }, delay);\r\n } else {\r\n setTooltipState((prev) => ({\r\n ...prev,\r\n isVisible: true,\r\n isPositioned: false,\r\n }));\r\n }\r\n }\r\n }, [disabled, triggerType, tooltipState.isVisible, delay]);\r\n\r\n const handleFocus = useCallback(() => {\r\n if (disabled || triggerType !== 'focus') return;\r\n\r\n timeoutRef.current = setTimeout(() => {\r\n setTooltipState((prev) => ({\r\n ...prev,\r\n isVisible: true,\r\n isPositioned: false,\r\n }));\r\n }, delay);\r\n }, [disabled, triggerType, delay]);\r\n\r\n const handleBlur = useCallback(() => {\r\n if (triggerType !== 'focus') return;\r\n\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current);\r\n }\r\n setTooltipState((prev) => ({\r\n ...prev,\r\n isVisible: false,\r\n isPositioned: false,\r\n }));\r\n }, [triggerType]);\r\n\r\n const handleClickOutside = useCallback(\r\n (event: MouseEvent) => {\r\n if (!closeOnClickOutside || !tooltipState.isVisible || triggerType !== 'click') return;\r\n\r\n const target = event.target as Node;\r\n\r\n if (tooltipRef.current?.contains(target) || triggerRef.current?.contains(target)) {\r\n return;\r\n }\r\n\r\n setTooltipState((prev) => ({\r\n ...prev,\r\n isVisible: false,\r\n isPositioned: false,\r\n }));\r\n },\r\n [closeOnClickOutside, tooltipState.isVisible, triggerType],\r\n );\r\n\r\n const handleEscapeKey = useCallback(\r\n (event: KeyboardEvent) => {\r\n if (\r\n closeOnEscape &&\r\n event.key === 'Escape' &&\r\n tooltipState.isVisible &&\r\n triggerType === 'click'\r\n ) {\r\n setTooltipState((prev) => ({\r\n ...prev,\r\n isVisible: false,\r\n isPositioned: false,\r\n }));\r\n }\r\n },\r\n [closeOnEscape, tooltipState.isVisible, triggerType],\r\n );\r\n\r\n useEffect(() => {\r\n if (\r\n tooltipState.isVisible &&\r\n !tooltipState.isPositioned &&\r\n tooltipRef.current &&\r\n triggerRef.current\r\n ) {\r\n const triggerRect = triggerRef.current.getBoundingClientRect();\r\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\r\n\r\n const { top, left, placement } = calculateOptimalPosition(triggerRect, tooltipRect);\r\n\r\n setTooltipState((prev) => ({\r\n ...prev,\r\n position: { top, left, placement },\r\n isPositioned: true,\r\n }));\r\n }\r\n }, [tooltipState.isVisible, tooltipState.isPositioned, calculateOptimalPosition]);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n if (\r\n tooltipState.isVisible &&\r\n tooltipState.isPositioned &&\r\n tooltipRef.current &&\r\n triggerRef.current\r\n ) {\r\n const triggerRect = triggerRef.current.getBoundingClientRect();\r\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\r\n\r\n const { top, left, placement } = calculateOptimalPosition(triggerRect, tooltipRect);\r\n\r\n setTooltipState((prev) => ({\r\n ...prev,\r\n position: { top, left, placement },\r\n }));\r\n }\r\n };\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, [tooltipState.isVisible, tooltipState.isPositioned, calculateOptimalPosition]);\r\n\r\n useEffect(() => {\r\n if (tooltipState.isVisible) {\r\n window.addEventListener('scroll', handleScroll, { passive: true });\r\n\r\n document.body.addEventListener('scroll', handleScroll, { passive: true });\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('scroll', handleScroll);\r\n document.body.removeEventListener('scroll', handleScroll);\r\n };\r\n }, [tooltipState.isVisible, handleScroll]);\r\n\r\n useEffect(() => {\r\n if (tooltipState.isVisible && triggerType === 'click') {\r\n document.addEventListener('mousedown', handleClickOutside);\r\n document.addEventListener('keydown', handleEscapeKey);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n document.removeEventListener('keydown', handleEscapeKey);\r\n };\r\n }, [tooltipState.isVisible, triggerType, handleClickOutside, handleEscapeKey]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current);\r\n }\r\n if (animationFrameRef.current) {\r\n cancelAnimationFrame(animationFrameRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n const renderTooltipContent = () => {\r\n if (message) {\r\n return <span className=\"eidos-tooltip-message\">{message}</span>;\r\n }\r\n if (Component) {\r\n return <Component {...(componentProps || {})} />;\r\n }\r\n return null;\r\n };\r\n\r\n const getTriggerProps = () => {\r\n const props: Record<string, unknown> = {\r\n ref: triggerRef,\r\n className: 'eidos-tooltip-trigger',\r\n };\r\n\r\n switch (triggerType) {\r\n case 'hover':\r\n props.onMouseEnter = handleMouseEnter;\r\n props.onMouseLeave = handleMouseLeave;\r\n break;\r\n case 'click':\r\n props.onClick = handleClick;\r\n props.role = 'button';\r\n props.tabIndex = 0;\r\n break;\r\n case 'focus':\r\n props.onFocus = handleFocus;\r\n props.onBlur = handleBlur;\r\n props.tabIndex = 0;\r\n break;\r\n }\r\n\r\n return props;\r\n };\r\n\r\n return (\r\n <>\r\n <div {...getTriggerProps()}>{children}</div>\r\n {tooltipState.isVisible &&\r\n createPortal(\r\n <div\r\n ref={tooltipRef}\r\n className={`eidos-tooltip eidos-tooltip--${tooltipState.position.placement} ${className}`}\r\n style={{\r\n top: tooltipState.position.top,\r\n left: tooltipState.position.left,\r\n }}\r\n data-state={tooltipState.isPositioned ? 'entered' : 'entering'}\r\n role=\"tooltip\"\r\n >\r\n {renderTooltipContent()}\r\n </div>,\r\n document.body,\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nTooltip.displayName = 'Tooltip';\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-R5UNLPQZ.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":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-R5UNLPQZ.cjs","sourcesContent":[null,"import React, { useState } from 'react';\r\nimport { User } from 'lucide-react';\r\nimport type { AvatarProps, AvatarGroupProps, AvatarColor } from './Avatar.types';\r\nimport './Avatar.scss';\r\n\r\n// ============================================================================\r\n// Constants\r\n// ============================================================================\r\n\r\nconst AVATAR_COLORS: AvatarColor[] = [\r\n 'primary',\r\n 'secondary',\r\n 'success',\r\n 'danger',\r\n 'warning',\r\n 'info',\r\n];\r\n\r\n// ============================================================================\r\n// Helpers\r\n// ============================================================================\r\n\r\nfunction getInitials(name: string): string {\r\n const parts = name.trim().split(/\\s+/);\r\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase();\r\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();\r\n}\r\n\r\nfunction getAutoColor(name: string): AvatarColor {\r\n const sum = name.split('').reduce((acc, c) => acc + c.charCodeAt(0), 0);\r\n return AVATAR_COLORS[sum % AVATAR_COLORS.length];\r\n}\r\n\r\n// ============================================================================\r\n// Avatar\r\n// ============================================================================\r\n\r\nexport const Avatar: React.FC<AvatarProps> = ({\r\n src,\r\n alt,\r\n name,\r\n size = 'md',\r\n color,\r\n shape = 'circle',\r\n fallback,\r\n className,\r\n onClick,\r\n}) => {\r\n const [imgError, setImgError] = useState(false);\r\n\r\n const showImage = !!src && !imgError;\r\n const showInitials = !showImage && !!name;\r\n const showFallback = !showImage && !showInitials;\r\n\r\n const resolvedColor: AvatarColor = color ?? (name ? getAutoColor(name) : 'gray');\r\n\r\n const classes = [\r\n 'eidos-avatar',\r\n `eidos-avatar--${size}`,\r\n `eidos-avatar--${shape}`,\r\n showInitials && `eidos-avatar--${resolvedColor}`,\r\n onClick && 'eidos-avatar--clickable',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <div\r\n className={classes}\r\n onClick={onClick}\r\n role={onClick ? 'button' : undefined}\r\n tabIndex={onClick ? 0 : undefined}\r\n onKeyDown={\r\n onClick\r\n ? (e) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n onClick();\r\n }\r\n }\r\n : undefined\r\n }\r\n >\r\n {showImage && (\r\n <img\r\n src={src}\r\n alt={alt ?? name ?? 'Avatar'}\r\n className=\"eidos-avatar-image\"\r\n onError={() => setImgError(true)}\r\n />\r\n )}\r\n {showInitials && <span className=\"eidos-avatar-initials\">{getInitials(name!)}</span>}\r\n {showFallback &&\r\n (fallback ?? <User className=\"eidos-avatar-fallback-icon\" aria-hidden=\"true\" />)}\r\n </div>\r\n );\r\n};\r\n\r\n// ============================================================================\r\n// AvatarGroup\r\n// ============================================================================\r\n\r\nexport const AvatarGroup: React.FC<AvatarGroupProps> = ({ children, max, size, className }) => {\r\n const childArray = React.Children.toArray(children) as React.ReactElement<AvatarProps>[];\r\n const visibleAvatars = max !== undefined ? childArray.slice(0, max) : childArray;\r\n const overflow = childArray.length - visibleAvatars.length;\r\n\r\n return (\r\n <div className={['eidos-avatar-group', className].filter(Boolean).join(' ')}>\r\n {visibleAvatars.map((child, i) => (\r\n <div key={i} className=\"eidos-avatar-group-item\">\r\n {React.cloneElement(child, { size: size ?? child.props.size })}\r\n </div>\r\n ))}\r\n {overflow > 0 && (\r\n <div\r\n className={[\r\n 'eidos-avatar',\r\n `eidos-avatar--${size ?? 'md'}`,\r\n 'eidos-avatar--circle',\r\n 'eidos-avatar--overflow',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n >\r\n <span className=\"eidos-avatar-initials\">+{overflow}</span>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/NumberInput/NumberInput.component.tsx"],"sourcesContent":["import React, { forwardRef, useState, useEffect, useId } from 'react';\r\nimport { Minus, Plus } from 'lucide-react';\r\nimport type { NumberInputProps } from './NumberInput.types';\r\n\r\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\r\n (\r\n {\r\n value,\r\n defaultValue = 0,\r\n onChange,\r\n min,\r\n max,\r\n step = 1,\r\n precision = 0,\r\n placeholder,\r\n disabled = false,\r\n readOnly = false,\r\n label,\r\n helperText,\r\n error = false,\r\n errorMessage,\r\n size = 'md',\r\n fullWidth = false,\r\n allowTyping = true,\r\n className = '',\r\n id,\r\n name,\r\n },\r\n ref,\r\n ) => {\r\n const generatedId = useId();\r\n const inputId = id || `number-input-${generatedId}`;\r\n\r\n // Controlled / uncontrolled bridge\r\n const isControlled = value !== undefined;\r\n const [localValue, setLocalValue] = useState<number>(defaultValue);\r\n\r\n // Intermediate text while the user is actively typing\r\n const [inputText, setInputText] = useState<string>(defaultValue.toFixed(precision));\r\n const [isFocused, setIsFocused] = useState(false);\r\n\r\n const currentValue = isControlled ? value! : localValue;\r\n\r\n // When min/max props change (e.g. via Storybook controls), clamp the\r\n // uncontrolled localValue so the display never shows an out-of-range value.\r\n useEffect(() => {\r\n if (isControlled) return;\r\n setLocalValue((prev) => {\r\n let result = prev;\r\n if (min !== undefined) result = Math.max(min, result);\r\n if (max !== undefined) result = Math.min(max, result);\r\n return parseFloat(result.toFixed(precision));\r\n });\r\n }, [min, max, precision, isControlled]);\r\n\r\n // Clamp to [min, max] and apply precision rounding\r\n const clampValue = (raw: number): number => {\r\n let result = raw;\r\n if (min !== undefined) result = Math.max(min, result);\r\n if (max !== undefined) result = Math.min(max, result);\r\n return parseFloat(result.toFixed(precision));\r\n };\r\n\r\n const commitValue = (newVal: number) => {\r\n const clamped = clampValue(newVal);\r\n if (!isControlled) setLocalValue(clamped);\r\n onChange?.(clamped);\r\n };\r\n\r\n // ── Stepper buttons ────────────────────────────────────────────────────\r\n const handleDecrement = () => {\r\n if (disabled || readOnly) return;\r\n commitValue(currentValue - step);\r\n };\r\n\r\n const handleIncrement = () => {\r\n if (disabled || readOnly) return;\r\n commitValue(currentValue + step);\r\n };\r\n\r\n // ── Typing mode handlers ───────────────────────────────────────────────\r\n const handleTextFocus = () => {\r\n setInputText(currentValue.toFixed(precision));\r\n setIsFocused(true);\r\n };\r\n\r\n const handleTextChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setInputText(e.target.value);\r\n };\r\n\r\n const handleTextBlur = () => {\r\n setIsFocused(false);\r\n const parsed = parseFloat(inputText);\r\n if (!isNaN(parsed)) {\r\n const clamped = clampValue(parsed);\r\n if (!isControlled) setLocalValue(clamped);\r\n onChange?.(clamped);\r\n setInputText(clamped.toFixed(precision));\r\n } else {\r\n // Revert to the last known-good value\r\n setInputText(currentValue.toFixed(precision));\r\n }\r\n };\r\n\r\n // ArrowUp / ArrowDown keyboard support for both display modes\r\n const handleDisplayKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n handleIncrement();\r\n } else if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n handleDecrement();\r\n }\r\n };\r\n\r\n // ── Display value ──────────────────────────────────────────────────────\r\n // Show intermediate inputText while focused in typing mode;\r\n // otherwise always derive from the real (controlled/uncontrolled) value.\r\n const formattedValue = currentValue.toFixed(precision);\r\n const displayedText = allowTyping && isFocused ? inputText : formattedValue;\r\n\r\n // ── Disabled states for buttons ────────────────────────────────────────\r\n const isDecrementDisabled = disabled || readOnly || (min !== undefined && currentValue <= min);\r\n const isIncrementDisabled = disabled || readOnly || (max !== undefined && currentValue >= max);\r\n\r\n // ── CSS classes ────────────────────────────────────────────────────────\r\n const rootClasses = [\r\n 'eidos-number-input',\r\n `eidos-number-input--${size}`,\r\n fullWidth && 'eidos-number-input--fullWidth',\r\n error && 'eidos-number-input--error',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n const controlClasses = [\r\n 'eidos-number-input-control',\r\n disabled && 'eidos-number-input-control--disabled',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <div className={rootClasses}>\r\n {label && (\r\n <label htmlFor={allowTyping ? inputId : undefined} className=\"eidos-number-input-label\">\r\n {label}\r\n </label>\r\n )}\r\n\r\n <div\r\n className={controlClasses}\r\n role={allowTyping ? undefined : 'spinbutton'}\r\n aria-valuemin={allowTyping ? undefined : min}\r\n aria-valuemax={allowTyping ? undefined : max}\r\n aria-valuenow={allowTyping ? undefined : currentValue}\r\n aria-label={allowTyping ? undefined : (label ?? 'Number input')}\r\n aria-disabled={disabled || undefined}\r\n tabIndex={!allowTyping && !disabled ? 0 : undefined}\r\n onKeyDown={!allowTyping ? handleDisplayKeyDown : undefined}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"eidos-number-input-btn\"\r\n onClick={handleDecrement}\r\n disabled={isDecrementDisabled}\r\n aria-label=\"Decrease\"\r\n >\r\n <Minus />\r\n </button>\r\n\r\n <div className=\"eidos-number-input-divider\" aria-hidden=\"true\" />\r\n\r\n {allowTyping ? (\r\n <input\r\n id={inputId}\r\n type=\"text\"\r\n className=\"eidos-number-input-display\"\r\n value={displayedText}\r\n onChange={handleTextChange}\r\n onFocus={handleTextFocus}\r\n onBlur={handleTextBlur}\r\n onKeyDown={handleDisplayKeyDown}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n readOnly={readOnly}\r\n inputMode=\"decimal\"\r\n role=\"spinbutton\"\r\n aria-valuemin={min}\r\n aria-valuemax={max}\r\n aria-valuenow={currentValue}\r\n aria-label={label ?? 'Number input'}\r\n />\r\n ) : (\r\n <span className=\"eidos-number-input-display\" aria-hidden=\"true\">\r\n {placeholder && formattedValue === (0).toFixed(precision) && !isFocused\r\n ? placeholder\r\n : formattedValue}\r\n </span>\r\n )}\r\n\r\n <div className=\"eidos-number-input-divider\" aria-hidden=\"true\" />\r\n\r\n <button\r\n type=\"button\"\r\n className=\"eidos-number-input-btn\"\r\n onClick={handleIncrement}\r\n disabled={isIncrementDisabled}\r\n aria-label=\"Increase\"\r\n >\r\n <Plus />\r\n </button>\r\n </div>\r\n\r\n {/* Hidden native <input type=\"number\"> for form integration */}\r\n <input\r\n ref={ref}\r\n type=\"number\"\r\n name={name}\r\n value={currentValue}\r\n onChange={() => {}}\r\n className=\"eidos-number-input-hidden\"\r\n tabIndex={-1}\r\n aria-hidden=\"true\"\r\n disabled={disabled}\r\n readOnly={readOnly}\r\n min={min}\r\n max={max}\r\n step={step}\r\n />\r\n\r\n {helperText && !error && <span className=\"eidos-number-input-helper\">{helperText}</span>}\r\n\r\n {error && errorMessage && (\r\n <span className=\"eidos-number-input-error\" role=\"alert\">\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nNumberInput.displayName = 'NumberInput';\r\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Breadcrumb/Breadcrumb.component.tsx"],"sourcesContent":["import React from 'react';\r\nimport type { BreadcrumbProps } from './Breadcrumb.types';\r\n\r\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\r\n items,\r\n separator = '/',\r\n className = '',\r\n}) => (\r\n <nav\r\n aria-label=\"Breadcrumb\"\r\n className={['eidos-breadcrumb-nav', className].filter(Boolean).join(' ')}\r\n >\r\n <ol className=\"eidos-breadcrumb\">\r\n {items.map((item, index) => {\r\n const isLast = index === items.length - 1;\r\n\r\n return (\r\n <li\r\n key={index}\r\n className={['eidos-breadcrumb-item', isLast && 'eidos-breadcrumb-item--current']\r\n .filter(Boolean)\r\n .join(' ')}\r\n >\r\n {isLast ? (\r\n <span aria-current=\"page\" className=\"eidos-breadcrumb-current\">\r\n {item.icon && <span className=\"eidos-breadcrumb-icon\">{item.icon}</span>}\r\n {item.label}\r\n </span>\r\n ) : item.href ? (\r\n <a href={item.href} onClick={item.onClick} className=\"eidos-breadcrumb-link\">\r\n {item.icon && <span className=\"eidos-breadcrumb-icon\">{item.icon}</span>}\r\n {item.label}\r\n </a>\r\n ) : (\r\n <button\r\n type=\"button\"\r\n onClick={item.onClick}\r\n className=\"eidos-breadcrumb-link eidos-breadcrumb-link--button\"\r\n >\r\n {item.icon && <span className=\"eidos-breadcrumb-icon\">{item.icon}</span>}\r\n {item.label}\r\n </button>\r\n )}\r\n\r\n {!isLast && (\r\n <span aria-hidden=\"true\" className=\"eidos-breadcrumb-separator\">\r\n {separator}\r\n </span>\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ol>\r\n </nav>\r\n);\r\n\r\nBreadcrumb.displayName = 'Breadcrumb';\r\n"],"mappings":";AAwBc,SACgB,KADhB;AArBP,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA,YAAY;AAAA,EACZ,YAAY;AACd,MACE;AAAA,EAAC;AAAA;AAAA,IACC,cAAW;AAAA,IACX,WAAW,CAAC,wBAAwB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IAEvE,8BAAC,QAAG,WAAU,oBACX,gBAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,YAAM,SAAS,UAAU,MAAM,SAAS;AAExC,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,WAAW,CAAC,yBAAyB,UAAU,gCAAgC,EAC5E,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,UAEV;AAAA,qBACC,qBAAC,UAAK,gBAAa,QAAO,WAAU,4BACjC;AAAA,mBAAK,QAAQ,oBAAC,UAAK,WAAU,yBAAyB,eAAK,MAAK;AAAA,cAChE,KAAK;AAAA,eACR,IACE,KAAK,OACP,qBAAC,OAAE,MAAM,KAAK,MAAM,SAAS,KAAK,SAAS,WAAU,yBAClD;AAAA,mBAAK,QAAQ,oBAAC,UAAK,WAAU,yBAAyB,eAAK,MAAK;AAAA,cAChE,KAAK;AAAA,eACR,IAEA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,KAAK;AAAA,gBACd,WAAU;AAAA,gBAET;AAAA,uBAAK,QAAQ,oBAAC,UAAK,WAAU,yBAAyB,eAAK,MAAK;AAAA,kBAChE,KAAK;AAAA;AAAA;AAAA,YACR;AAAA,YAGD,CAAC,UACA,oBAAC,UAAK,eAAY,QAAO,WAAU,8BAChC,qBACH;AAAA;AAAA;AAAA,QA7BG;AAAA,MA+BP;AAAA,IAEJ,CAAC,GACH;AAAA;AACF;AAGF,WAAW,cAAc;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-SAFSEXMU.cjs","../src/components/Pagination/Pagination.component.tsx"],"names":[],"mappings":"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","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-SAFSEXMU.cjs","sourcesContent":[null,"import React, { useState, useEffect } from 'react';\r\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react';\r\nimport { Button } from '../Button';\r\nimport { Select } from '../Select';\r\nimport type { PaginationProps } from './Pagination.types';\r\n\r\n// ── Ellipsis range helper ─────────────────────────────────────────────────────\r\n\r\nconst ELLIPSIS = 'ellipsis' as const;\r\ntype PageItem = number | typeof ELLIPSIS;\r\n\r\nfunction usePaginationRange(page: number, totalPages: number, siblingCount: number): PageItem[] {\r\n const totalShown = siblingCount * 2 + 5;\r\n\r\n if (totalPages <= totalShown) {\r\n return Array.from({ length: totalPages }, (_, i) => i + 1);\r\n }\r\n\r\n const leftSibling = Math.max(page - siblingCount, 1);\r\n const rightSibling = Math.min(page + siblingCount, totalPages);\r\n\r\n const showLeftEllipsis = leftSibling > 2;\r\n const showRightEllipsis = rightSibling < totalPages - 1;\r\n\r\n const items: PageItem[] = [1];\r\n\r\n if (showLeftEllipsis) {\r\n items.push(ELLIPSIS);\r\n } else {\r\n for (let i = 2; i < leftSibling; i++) items.push(i);\r\n }\r\n\r\n for (let i = leftSibling; i <= rightSibling; i++) {\r\n if (i !== 1 && i !== totalPages) items.push(i);\r\n }\r\n\r\n if (showRightEllipsis) {\r\n items.push(ELLIPSIS);\r\n } else {\r\n for (let i = rightSibling + 1; i < totalPages; i++) items.push(i);\r\n }\r\n\r\n items.push(totalPages);\r\n\r\n return items;\r\n}\r\n\r\n// ── Component ─────────────────────────────────────────────────────────────────\r\n\r\nexport const Pagination: React.FC<PaginationProps> = ({\r\n page,\r\n totalPages,\r\n onChange,\r\n siblingCount = 1,\r\n showFirstLast = false,\r\n color = 'primary',\r\n size = 'sm',\r\n disabled = false,\r\n className = '',\r\n // Table-footer mode\r\n totalItems,\r\n pageSize,\r\n onPageSizeChange,\r\n pageSizeOptions = [10, 25, 50, 100],\r\n}) => {\r\n const items = usePaginationRange(page, totalPages, siblingCount);\r\n\r\n // ── Active-page editable input ─────────────────────────────────────────────\r\n const [inputValue, setInputValue] = useState(String(page));\r\n useEffect(() => {\r\n setInputValue(String(page));\r\n }, [page]);\r\n\r\n const commitInput = (raw: string) => {\r\n const val = parseInt(raw, 10);\r\n if (!isNaN(val) && val >= 1 && val <= totalPages && val !== page) {\r\n onChange(val);\r\n } else {\r\n setInputValue(String(page)); // revert on invalid or same-page\r\n }\r\n };\r\n\r\n // ── Layout flags ───────────────────────────────────────────────────────────\r\n const hasResults = totalItems !== undefined && pageSize !== undefined;\r\n const hasPageSize = !!onPageSizeChange && pageSize !== undefined;\r\n const tableMode = hasResults || hasPageSize;\r\n\r\n const startItem = hasResults ? (totalItems === 0 ? 0 : (page - 1) * pageSize! + 1) : undefined;\r\n const endItem = hasResults ? Math.min(page * pageSize!, totalItems!) : undefined;\r\n\r\n const rootClasses = [\r\n 'eidos-pagination',\r\n `eidos-pagination--${size}`,\r\n tableMode && 'eidos-pagination--table',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n // ── Navigation block ───────────────────────────────────────────────────────\r\n const nav = (\r\n <nav aria-label=\"Pagination\" className=\"eidos-pagination-nav\">\r\n {showFirstLast && (\r\n <Button\r\n variant=\"text\"\r\n size={size}\r\n icon={ChevronsLeft}\r\n disabled={page === 1 || disabled}\r\n onClick={() => onChange(1)}\r\n aria-label=\"First page\"\r\n />\r\n )}\r\n\r\n <Button\r\n variant=\"text\"\r\n size={size}\r\n icon={ChevronLeft}\r\n disabled={page === 1 || disabled}\r\n onClick={() => onChange(page - 1)}\r\n aria-label=\"Previous page\"\r\n />\r\n\r\n {items.map((item, i) =>\r\n item === ELLIPSIS ? (\r\n <span key={`ellipsis-${i}`} className=\"eidos-pagination-ellipsis\" aria-hidden=\"true\">\r\n …\r\n </span>\r\n ) : item === page ? (\r\n // Active page - styled as filled chip, editable via keyboard/click\r\n <input\r\n key=\"active-page\"\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n className={[\r\n 'eidos-pagination-page',\r\n 'eidos-pagination-page--active',\r\n `eidos-pagination-page--${color}`,\r\n ].join(' ')}\r\n value={inputValue}\r\n onChange={(e) => setInputValue(e.target.value)}\r\n onFocus={(e) => e.target.select()}\r\n onBlur={() => commitInput(inputValue)}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') {\r\n commitInput(inputValue);\r\n e.currentTarget.blur();\r\n } else if (e.key === 'Escape') {\r\n setInputValue(String(page));\r\n e.currentTarget.blur();\r\n }\r\n }}\r\n aria-label={`Page ${page} of ${totalPages}, editable`}\r\n aria-current=\"page\"\r\n disabled={disabled}\r\n />\r\n ) : (\r\n <button\r\n key={item}\r\n type=\"button\"\r\n className=\"eidos-pagination-page\"\r\n onClick={() => onChange(item)}\r\n disabled={disabled}\r\n aria-label={`Page ${item}`}\r\n >\r\n {item}\r\n </button>\r\n ),\r\n )}\r\n\r\n <Button\r\n variant=\"text\"\r\n size={size}\r\n icon={ChevronRight}\r\n disabled={page === totalPages || disabled}\r\n onClick={() => onChange(page + 1)}\r\n aria-label=\"Next page\"\r\n />\r\n\r\n {showFirstLast && (\r\n <Button\r\n variant=\"text\"\r\n size={size}\r\n icon={ChevronsRight}\r\n disabled={page === totalPages || disabled}\r\n onClick={() => onChange(totalPages)}\r\n aria-label=\"Last page\"\r\n />\r\n )}\r\n </nav>\r\n );\r\n\r\n // ── Standalone mode ────────────────────────────────────────────────────────\r\n if (!tableMode) {\r\n return <div className={rootClasses}>{nav}</div>;\r\n }\r\n\r\n // ── Table-footer mode ──────────────────────────────────────────────────────\r\n return (\r\n <div className={rootClasses}>\r\n {hasResults && (\r\n <span className=\"eidos-pagination-info\">\r\n Showing {startItem}-{endItem} of {totalItems} results\r\n </span>\r\n )}\r\n\r\n <div className=\"eidos-pagination-controls\">\r\n {hasPageSize && (\r\n <div className=\"eidos-pagination-size\">\r\n <label className=\"eidos-pagination-size-label\">Show:</label>\r\n <Select\r\n value={String(pageSize)}\r\n onChange={(val) => onPageSizeChange(Number(val))}\r\n options={pageSizeOptions.map((n) => ({\r\n id: String(n),\r\n value: String(n),\r\n label: String(n),\r\n }))}\r\n clearable={false}\r\n disabled={disabled}\r\n inputProps={{ size: 'sm', width: '3ch' }}\r\n />\r\n </div>\r\n )}\r\n\r\n {totalPages > 1 && nav}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nPagination.displayName = 'Pagination';\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-SOGUWOSQ.cjs","../src/components/Header/Header.component.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACOQ,+CAAA;AAND,IAAM,OAAA,EAAgC,CAAC,EAAE,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,UAAA,EAAY,GAAG,CAAA,EAAA,GAAM;AAC7F,EAAA,MAAM,QAAA,EAAU,CAAC,cAAA,EAAgB,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAEpE,EAAA,uBACE,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAW,OAAA,EACd,QAAA,kBAAA,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,uBAAA,EACb,QAAA,EAAA;AAAA,oBAAA,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,sBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,6BAAA,IAAC,EAAA,EAAG,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,MAAA,CAAM,CAAA;AAAA,MAC1C,SAAA,mBAAY,6BAAA,MAAC,EAAA,EAAK,SAAA,EAAU,wBAAA,EAA0B,QAAA,EAAA,SAAA,CAAS;AAAA,IAAA,EAAA,CAClE,CAAA;AAAA,oBACA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,uBAAA,EACZ,QAAA,kBAAA,OAAA,2BAAS,GAAA,mBAAI,CAAC,MAAA,EAAQ,KAAA,EAAA,mBACrB,6BAAA,wBAAC,EAAA,EAAmB,IAAA,EAAK,IAAA,EAAM,GAAG,OAAA,CAAA,EAArB,KAA6B,CAC3C,IAAA,CACH;AAAA,EAAA,EAAA,CACF,EAAA,CACF,CAAA;AAEJ,CAAA;ADPA;AACA;AACE;AACF,wBAAC","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-SOGUWOSQ.cjs","sourcesContent":[null,"import React from 'react';\r\nimport type { HeaderProps } from './Header.types';\r\nimport './Header.scss';\r\nimport { Button } from '../Button';\r\n\r\nexport const Header: React.FC<HeaderProps> = ({ title, subtitle, actions, className = '' }) => {\r\n const classes = ['eidos-header', className].filter(Boolean).join(' ');\r\n\r\n return (\r\n <div className={classes}>\r\n <div className=\"eidos-header__content\">\r\n <div className=\"eidos-header__titles\">\r\n <h1 className=\"eidos-header__title\">{title}</h1>\r\n {subtitle && <span className=\"eidos-header__subtitle\">{subtitle}</span>}\r\n </div>\r\n <div className=\"eidos-header__actions\">\r\n {actions?.map((action, index) => (\r\n <Button key={index} size=\"md\" {...action} />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Dropdown/Dropdown.context.types.ts","../src/components/Dropdown/Dropdown.context.tsx","../src/components/Dropdown/Dropdown.hooks.ts","../src/components/Dropdown/Dropdown.component.tsx"],"sourcesContent":["import { createContext } from 'react';\r\n\r\nexport interface DropdownContextValue {\r\n level: number;\r\n}\r\n\r\nexport const DropdownContext = createContext<DropdownContextValue>({ level: 0 });\r\n","import React from 'react';\r\nimport { DropdownContext } from './Dropdown.context.types';\r\n\r\nexport const DropdownProvider: React.FC<{ children: React.ReactNode; level?: number }> = ({\r\n children,\r\n level = 0,\r\n}) => {\r\n return <DropdownContext.Provider value={{ level }}>{children}</DropdownContext.Provider>;\r\n};\r\n","import { useContext } from 'react';\r\nimport { DropdownContext } from './Dropdown.context.types';\r\n\r\nexport const useDropdownContext = () => {\r\n return useContext(DropdownContext);\r\n};\r\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport type { DropdownProps, DropdownState } from './Dropdown.types';\r\nimport { DropdownProvider } from './Dropdown.context';\r\nimport { useDropdownContext } from './Dropdown.hooks';\r\n\r\nconst DropdownInternal: React.FC<DropdownProps> = ({\r\n trigger,\r\n content,\r\n placement: preferredPlacement = 'bottom',\r\n align = 'start',\r\n delay = 0,\r\n disabled = false,\r\n defaultOpen = false,\r\n triggerClassName = '',\r\n contentClassName = '',\r\n closeOnClickOutside = true,\r\n closeOnEscape = true,\r\n minWidth,\r\n maxWidth,\r\n minHeight,\r\n maxHeight,\r\n autoWidth = true,\r\n fullWidth = false,\r\n triggerRef: externalTriggerRef,\r\n isNested = false,\r\n dropdownLevel,\r\n dropdownGroup,\r\n}) => {\r\n const context = useDropdownContext();\r\n const actualLevel = dropdownLevel !== undefined ? dropdownLevel : context.level;\r\n const [dropdownState, setDropdownState] = useState<DropdownState>({\r\n isVisible: defaultOpen,\r\n isPositioned: false,\r\n position: { top: 0, left: 0, placement: preferredPlacement },\r\n });\r\n const triggerRef = useRef<HTMLDivElement>(null);\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\r\n const animationFrameRef = useRef<number | undefined>(undefined);\r\n const isScrollingRef = useRef(false);\r\n\r\n // The element to actually measure/anchor against. When a consumer passes\r\n // `triggerRef`, that's an explicit statement of \"this is what I want the\r\n // dropdown positioned relative to\" - it must win over the internal wrapper\r\n // div, not just inform sizing. Consumers occasionally need `trigger` to be\r\n // a small anchor node (e.g. a 0-height span) sitting inside a larger,\r\n // variable-content field (chips, wrapped text); anchoring position to the\r\n // wrapper instead of that field silently drifts as soon as the field's\r\n // internal layout changes, since the wrapper only ever contains `trigger`\r\n // itself, never the field around it.\r\n const getTriggerElement = useCallback(\r\n (): HTMLElement | null => externalTriggerRef?.current ?? triggerRef.current,\r\n [externalTriggerRef],\r\n );\r\n\r\n const calculateDynamicSizing = useCallback(\r\n (triggerRect: DOMRect) => {\r\n // Shrink the panel to its content by default. This prevents the\r\n // position:fixed element from expanding to viewport width when children\r\n // use `width:100%` or `flex:1`. `minWidth` (set below) still wins when\r\n // the trigger is wider than the content, as CSS min-width overrides width.\r\n const styles: Record<string, string | number> = { width: 'max-content' };\r\n\r\n if (autoWidth && (externalTriggerRef?.current || triggerRef.current)) {\r\n const triggerWidth = triggerRect.width;\r\n styles.minWidth = triggerWidth;\r\n }\r\n\r\n if (minWidth !== undefined) {\r\n styles.minWidth = typeof minWidth === 'number' ? `${minWidth}px` : minWidth;\r\n }\r\n if (maxWidth !== undefined) {\r\n if (maxWidth === 'auto') {\r\n styles.maxWidth = 'none';\r\n } else {\r\n styles.maxWidth = typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth;\r\n }\r\n }\r\n if (minHeight !== undefined) {\r\n styles.minHeight = typeof minHeight === 'number' ? `${minHeight}px` : minHeight;\r\n }\r\n if (maxHeight !== undefined) {\r\n if (maxHeight === 'auto') {\r\n styles.maxHeight = 'none';\r\n } else {\r\n styles.maxHeight = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\r\n }\r\n }\r\n\r\n const hasHeightConstraint = minHeight !== undefined || maxHeight !== undefined;\r\n if (hasHeightConstraint) {\r\n styles.overflowY = 'auto';\r\n } else {\r\n styles.overflowY = 'visible';\r\n }\r\n\r\n return styles;\r\n },\r\n [autoWidth, externalTriggerRef, minWidth, maxWidth, minHeight, maxHeight],\r\n );\r\n\r\n const calculateOptimalPosition = useCallback(\r\n (triggerRect: DOMRect, contentRect: DOMRect) => {\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n const gap = 8;\r\n\r\n let placement: 'top' | 'bottom' | 'left' | 'right' = preferredPlacement;\r\n let top = 0;\r\n let left = 0;\r\n\r\n // Helpers for cross-axis alignment\r\n const alignedLeft = (() => {\r\n switch (align) {\r\n case 'end':\r\n return triggerRect.right - contentRect.width;\r\n case 'center':\r\n return triggerRect.left + (triggerRect.width - contentRect.width) / 2;\r\n default:\r\n return triggerRect.left; // \"start\"\r\n }\r\n })();\r\n const alignedTop = (() => {\r\n switch (align) {\r\n case 'end':\r\n return triggerRect.bottom - contentRect.height;\r\n case 'center':\r\n return triggerRect.top + (triggerRect.height - contentRect.height) / 2;\r\n default:\r\n return triggerRect.top; // \"start\"\r\n }\r\n })();\r\n\r\n switch (preferredPlacement) {\r\n case 'top':\r\n top = triggerRect.top - contentRect.height - gap;\r\n left = alignedLeft;\r\n break;\r\n case 'bottom':\r\n top = triggerRect.bottom + gap;\r\n left = alignedLeft;\r\n break;\r\n case 'left':\r\n top = alignedTop;\r\n left = triggerRect.left - contentRect.width - gap;\r\n break;\r\n case 'right':\r\n top = alignedTop;\r\n left = triggerRect.right + gap;\r\n break;\r\n }\r\n\r\n if (placement === 'top' && top < gap) {\r\n placement = 'bottom';\r\n top = triggerRect.bottom + gap;\r\n } else if (placement === 'bottom' && top + contentRect.height > viewportHeight - gap) {\r\n placement = 'top';\r\n top = triggerRect.top - contentRect.height - gap;\r\n } else if (placement === 'left' && left < gap) {\r\n placement = 'right';\r\n left = triggerRect.right + gap;\r\n } else if (placement === 'right' && left + contentRect.width > viewportWidth - gap) {\r\n placement = 'left';\r\n left = triggerRect.left - contentRect.width - gap;\r\n }\r\n\r\n // Always clamp to both viewport edges - not just the near one - regardless\r\n // of whether an explicit min/max size was passed. `autoWidth` consumers\r\n // (Combobox, Select, TagInput suggestions, Menu, ...) never set\r\n // minWidth/maxWidth, so gating this on those props left the far edge\r\n // (right/bottom) completely unclamped and let content overflow the\r\n // viewport whenever it rendered wider/taller than its trigger.\r\n top = Math.max(gap, Math.min(top, viewportHeight - contentRect.height - gap));\r\n\r\n left = Math.max(gap, Math.min(left, viewportWidth - contentRect.width - gap));\r\n\r\n return { top, left, placement };\r\n },\r\n [preferredPlacement, align],\r\n );\r\n\r\n const handleScroll = useCallback(() => {\r\n if (!dropdownState.isVisible || !dropdownState.isPositioned || isScrollingRef.current) return;\r\n\r\n isScrollingRef.current = true;\r\n\r\n animationFrameRef.current = requestAnimationFrame(() => {\r\n const triggerElement = getTriggerElement();\r\n if (triggerElement && contentRef.current) {\r\n const triggerRect = triggerElement.getBoundingClientRect();\r\n const contentRect = contentRef.current.getBoundingClientRect();\r\n\r\n const { top, left, placement } = calculateOptimalPosition(triggerRect, contentRect);\r\n\r\n setDropdownState((prev) => ({\r\n ...prev,\r\n position: { top, left, placement },\r\n }));\r\n }\r\n\r\n isScrollingRef.current = false;\r\n });\r\n }, [\r\n dropdownState.isVisible,\r\n dropdownState.isPositioned,\r\n calculateOptimalPosition,\r\n getTriggerElement,\r\n ]);\r\n\r\n const handleTriggerClick = useCallback(() => {\r\n if (disabled) return;\r\n\r\n if (dropdownState.isVisible) {\r\n setDropdownState((prev) => ({\r\n ...prev,\r\n isVisible: false,\r\n isPositioned: false,\r\n }));\r\n } else {\r\n if (dropdownGroup) {\r\n const siblingDropdowns = document.querySelectorAll(\r\n `[data-dropdown-group=\"${dropdownGroup}\"][data-dropdown-content]`,\r\n );\r\n siblingDropdowns.forEach((dropdown) => {\r\n const dropdownElement = dropdown as HTMLElement;\r\n\r\n dropdownElement.dispatchEvent(new CustomEvent('closeSibling'));\r\n });\r\n }\r\n\r\n if (delay > 0) {\r\n timeoutRef.current = setTimeout(() => {\r\n setDropdownState((prev) => ({\r\n ...prev,\r\n isVisible: true,\r\n isPositioned: false,\r\n }));\r\n }, delay);\r\n } else {\r\n setDropdownState((prev) => ({\r\n ...prev,\r\n isVisible: true,\r\n isPositioned: false,\r\n }));\r\n }\r\n }\r\n }, [disabled, dropdownState.isVisible, delay, dropdownGroup]);\r\n\r\n useEffect(() => {\r\n const handleCloseSibling = () => {\r\n if (dropdownState.isVisible) {\r\n setDropdownState((prev) => ({\r\n ...prev,\r\n isVisible: false,\r\n isPositioned: false,\r\n }));\r\n }\r\n };\r\n\r\n const currentContentRef = contentRef.current;\r\n if (currentContentRef) {\r\n currentContentRef.addEventListener('closeSibling', handleCloseSibling);\r\n }\r\n\r\n return () => {\r\n if (currentContentRef) {\r\n currentContentRef.removeEventListener('closeSibling', handleCloseSibling);\r\n }\r\n };\r\n }, [dropdownState.isVisible]);\r\n\r\n const handleClickOutside = useCallback(\r\n (event: MouseEvent) => {\r\n if (!closeOnClickOutside || !dropdownState.isVisible) return;\r\n\r\n const target = event.target as Node;\r\n\r\n if (contentRef.current?.contains(target)) {\r\n return;\r\n }\r\n\r\n if (getTriggerElement()?.contains(target)) {\r\n return;\r\n }\r\n\r\n const allDropdowns = document.querySelectorAll('[data-dropdown-content]');\r\n for (const dropdown of allDropdowns) {\r\n if (dropdown === contentRef.current) continue;\r\n\r\n if (dropdown.contains(target)) {\r\n const clickedDropdownLevel = parseInt(\r\n dropdown.getAttribute('data-dropdown-level') || '0',\r\n );\r\n\r\n if (clickedDropdownLevel > actualLevel) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n setDropdownState((prev) => ({\r\n ...prev,\r\n isVisible: false,\r\n isPositioned: false,\r\n }));\r\n },\r\n [closeOnClickOutside, dropdownState.isVisible, actualLevel, getTriggerElement],\r\n );\r\n\r\n const handleEscapeKey = useCallback(\r\n (event: KeyboardEvent) => {\r\n if (closeOnEscape && event.key === 'Escape' && dropdownState.isVisible) {\r\n setDropdownState((prev) => ({\r\n ...prev,\r\n isVisible: false,\r\n isPositioned: false,\r\n }));\r\n }\r\n },\r\n [closeOnEscape, dropdownState.isVisible],\r\n );\r\n\r\n useEffect(() => {\r\n const triggerElement = getTriggerElement();\r\n if (\r\n dropdownState.isVisible &&\r\n !dropdownState.isPositioned &&\r\n contentRef.current &&\r\n triggerElement\r\n ) {\r\n const triggerRect = triggerElement.getBoundingClientRect();\r\n const contentRect = contentRef.current.getBoundingClientRect();\r\n\r\n const { top, left, placement } = calculateOptimalPosition(triggerRect, contentRect);\r\n\r\n setDropdownState((prev) => ({\r\n ...prev,\r\n position: { top, left, placement },\r\n isPositioned: true,\r\n }));\r\n }\r\n }, [\r\n dropdownState.isVisible,\r\n dropdownState.isPositioned,\r\n calculateOptimalPosition,\r\n getTriggerElement,\r\n ]);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n const triggerElement = getTriggerElement();\r\n if (\r\n dropdownState.isVisible &&\r\n dropdownState.isPositioned &&\r\n contentRef.current &&\r\n triggerElement\r\n ) {\r\n const triggerRect = triggerElement.getBoundingClientRect();\r\n const contentRect = contentRef.current.getBoundingClientRect();\r\n\r\n const { top, left, placement } = calculateOptimalPosition(triggerRect, contentRect);\r\n\r\n setDropdownState((prev) => ({\r\n ...prev,\r\n position: { top, left, placement },\r\n }));\r\n }\r\n };\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, [\r\n dropdownState.isVisible,\r\n dropdownState.isPositioned,\r\n calculateOptimalPosition,\r\n getTriggerElement,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (dropdownState.isVisible) {\r\n window.addEventListener('scroll', handleScroll, { passive: true });\r\n\r\n document.body.addEventListener('scroll', handleScroll, { passive: true });\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('scroll', handleScroll);\r\n document.body.removeEventListener('scroll', handleScroll);\r\n };\r\n }, [dropdownState.isVisible, handleScroll]);\r\n\r\n useEffect(() => {\r\n if (dropdownState.isVisible) {\r\n document.addEventListener('mousedown', handleClickOutside);\r\n document.addEventListener('keydown', handleEscapeKey);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n document.removeEventListener('keydown', handleEscapeKey);\r\n };\r\n }, [dropdownState.isVisible, handleClickOutside, handleEscapeKey]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current);\r\n }\r\n if (animationFrameRef.current) {\r\n cancelAnimationFrame(animationFrameRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n return (\r\n <>\r\n <div\r\n ref={triggerRef}\r\n onClick={handleTriggerClick}\r\n className={`eidos-dropdown-trigger ${fullWidth ? 'eidos-dropdown-trigger--fullWidth' : ''} ${triggerClassName}`}\r\n role=\"button\"\r\n tabIndex={-1}\r\n >\r\n {trigger}\r\n </div>\r\n {dropdownState.isVisible &&\r\n createPortal(\r\n <div\r\n ref={contentRef}\r\n data-dropdown-content\r\n data-dropdown-level={actualLevel}\r\n data-dropdown-group={dropdownGroup || ''}\r\n className={`eidos-dropdown-content eidos-dropdown-content--${dropdownState.position.placement} ${isNested ? 'eidos-dropdown-content--nested' : ''} ${dropdownState.isPositioned ? 'eidos-dropdown-content--positioned' : ''} ${contentClassName || ''}`}\r\n style={{\r\n top: dropdownState.position.top,\r\n left: dropdownState.position.left,\r\n ...calculateDynamicSizing(\r\n getTriggerElement()?.getBoundingClientRect() || new DOMRect(),\r\n ),\r\n }}\r\n role=\"menu\"\r\n >\r\n {content}\r\n </div>,\r\n document.body,\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport const Dropdown: React.FC<DropdownProps> = (props) => {\r\n const context = useDropdownContext();\r\n const nextLevel = props.dropdownLevel !== undefined ? props.dropdownLevel : context.level + 1;\r\n\r\n return (\r\n <DropdownProvider level={nextLevel}>\r\n <DropdownInternal {...props} />\r\n </DropdownProvider>\r\n );\r\n};\r\n\r\nDropdown.displayName = 'Dropdown';\r\n"],"mappings":"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","names":["jsx"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ColorPicker/ColorPicker.component.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useCallback } from 'react';\r\nimport { Copy, Check } from 'lucide-react';\r\nimport { Dropdown } from '../Dropdown/Dropdown.component';\r\nimport type {\r\n ColorPickerProps,\r\n HSVColor,\r\n RGBColor,\r\n HSLColor,\r\n ColorFormat,\r\n} from './ColorPicker.types';\r\n\r\n// ============================================================================\r\n// Constants\r\n// ============================================================================\r\n\r\nconst DEFAULT_SWATCHES: string[] = [\r\n '#ef4444',\r\n '#f97316',\r\n '#f59e0b',\r\n '#10b981',\r\n '#06b6d4',\r\n '#6366f1',\r\n '#8b5cf6',\r\n '#ec4899',\r\n '#64748b',\r\n '#1e293b',\r\n];\r\n\r\n// ============================================================================\r\n// Pure colour-utility functions\r\n// ============================================================================\r\n\r\nfunction hsvToRgb(h: number, s: number, v: number): RGBColor {\r\n // h: 0–360, s: 0–100, v: 0–100 → r,g,b: 0–255\r\n const sn = s / 100;\r\n const vn = v / 100;\r\n const c = vn * sn;\r\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\r\n const m = vn - c;\r\n\r\n let r: number, g: number, b: number;\r\n if (h < 60) {\r\n r = c;\r\n g = x;\r\n b = 0;\r\n } else if (h < 120) {\r\n r = x;\r\n g = c;\r\n b = 0;\r\n } else if (h < 180) {\r\n r = 0;\r\n g = c;\r\n b = x;\r\n } else if (h < 240) {\r\n r = 0;\r\n g = x;\r\n b = c;\r\n } else if (h < 300) {\r\n r = x;\r\n g = 0;\r\n b = c;\r\n } else {\r\n r = c;\r\n g = 0;\r\n b = x;\r\n }\r\n\r\n return {\r\n r: Math.round((r + m) * 255),\r\n g: Math.round((g + m) * 255),\r\n b: Math.round((b + m) * 255),\r\n };\r\n}\r\n\r\nfunction rgbToHsv(r: number, g: number, b: number): HSVColor {\r\n // r,g,b: 0–255 → h: 0–360, s: 0–100, v: 0–100\r\n const rn = r / 255;\r\n const gn = g / 255;\r\n const bn = b / 255;\r\n\r\n const max = Math.max(rn, gn, bn);\r\n const min = Math.min(rn, gn, bn);\r\n const delta = max - min;\r\n\r\n const v = max * 100;\r\n const s = max === 0 ? 0 : (delta / max) * 100;\r\n\r\n let h = 0;\r\n if (delta !== 0) {\r\n if (max === rn) h = ((gn - bn) / delta) % 6;\r\n else if (max === gn) h = (bn - rn) / delta + 2;\r\n else h = (rn - gn) / delta + 4;\r\n h = h * 60;\r\n if (h < 0) h += 360;\r\n }\r\n\r\n return { h: Math.round(h), s: Math.round(s), v: Math.round(v) };\r\n}\r\n\r\nfunction rgbToHex(r: number, g: number, b: number): string {\r\n const ch = (n: number) =>\r\n Math.round(Math.max(0, Math.min(255, n)))\r\n .toString(16)\r\n .padStart(2, '0');\r\n return `#${ch(r)}${ch(g)}${ch(b)}`;\r\n}\r\n\r\nfunction hexToRgb(hex: string): RGBColor | null {\r\n const c = hex.trim().replace(/^#/, '');\r\n let r: number, g: number, b: number;\r\n\r\n if (c.length === 3) {\r\n r = parseInt(c[0] + c[0], 16);\r\n g = parseInt(c[1] + c[1], 16);\r\n b = parseInt(c[2] + c[2], 16);\r\n } else if (c.length === 6) {\r\n r = parseInt(c.slice(0, 2), 16);\r\n g = parseInt(c.slice(2, 4), 16);\r\n b = parseInt(c.slice(4, 6), 16);\r\n } else {\r\n return null;\r\n }\r\n\r\n if (isNaN(r) || isNaN(g) || isNaN(b)) return null;\r\n return { r, g, b };\r\n}\r\n\r\nfunction rgbToHsl(r: number, g: number, b: number): HSLColor {\r\n // r,g,b: 0–255 → h: 0–360, s: 0–100, l: 0–100\r\n const rn = r / 255;\r\n const gn = g / 255;\r\n const bn = b / 255;\r\n\r\n const max = Math.max(rn, gn, bn);\r\n const min = Math.min(rn, gn, bn);\r\n const delta = max - min;\r\n const l = (max + min) / 2;\r\n\r\n let h = 0;\r\n let s = 0;\r\n\r\n if (delta !== 0) {\r\n s = delta / (1 - Math.abs(2 * l - 1));\r\n if (max === rn) h = ((gn - bn) / delta) % 6;\r\n else if (max === gn) h = (bn - rn) / delta + 2;\r\n else h = (rn - gn) / delta + 4;\r\n h = h * 60;\r\n if (h < 0) h += 360;\r\n }\r\n\r\n return { h: Math.round(h), s: Math.round(s * 100), l: Math.round(l * 100) };\r\n}\r\n\r\nfunction hslToRgb(h: number, s: number, l: number): RGBColor {\r\n // h: 0–360, s: 0–100, l: 0–100 → r,g,b: 0–255\r\n const sn = s / 100;\r\n const ln = l / 100;\r\n const c = (1 - Math.abs(2 * ln - 1)) * sn;\r\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\r\n const m = ln - c / 2;\r\n\r\n let r: number, g: number, b: number;\r\n if (h < 60) {\r\n r = c;\r\n g = x;\r\n b = 0;\r\n } else if (h < 120) {\r\n r = x;\r\n g = c;\r\n b = 0;\r\n } else if (h < 180) {\r\n r = 0;\r\n g = c;\r\n b = x;\r\n } else if (h < 240) {\r\n r = 0;\r\n g = x;\r\n b = c;\r\n } else if (h < 300) {\r\n r = x;\r\n g = 0;\r\n b = c;\r\n } else {\r\n r = c;\r\n g = 0;\r\n b = x;\r\n }\r\n\r\n return {\r\n r: Math.round((r + m) * 255),\r\n g: Math.round((g + m) * 255),\r\n b: Math.round((b + m) * 255),\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Format helpers\r\n// ============================================================================\r\n\r\nfunction colorToText(hsv: HSVColor, alpha: number, fmt: ColorFormat): string {\r\n const rgb = hsvToRgb(hsv.h, hsv.s, hsv.v);\r\n\r\n switch (fmt) {\r\n case 'hex':\r\n return rgbToHex(rgb.r, rgb.g, rgb.b);\r\n case 'rgb':\r\n return alpha < 1\r\n ? `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha.toFixed(2)})`\r\n : `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\r\n case 'hsl': {\r\n const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\r\n return alpha < 1\r\n ? `hsla(${hsl.h}, ${hsl.s}%, ${hsl.l}%, ${alpha.toFixed(2)})`\r\n : `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\r\n }\r\n }\r\n}\r\n\r\nfunction parseColorText(text: string): RGBColor | null {\r\n const t = text.trim();\r\n\r\n // Try hex (with or without leading #)\r\n const hexCandidate = t.startsWith('#') ? t : /^[0-9a-f]{3,6}$/i.test(t) ? `#${t}` : null;\r\n if (hexCandidate) return hexToRgb(hexCandidate);\r\n\r\n // Try rgb() / rgba()\r\n const rgbMatch = t.match(/rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i);\r\n if (rgbMatch) {\r\n return {\r\n r: parseInt(rgbMatch[1], 10),\r\n g: parseInt(rgbMatch[2], 10),\r\n b: parseInt(rgbMatch[3], 10),\r\n };\r\n }\r\n\r\n // Try hsl() / hsla()\r\n const hslMatch = t.match(/hsla?\\(\\s*(\\d+)\\s*,\\s*(\\d+)%?\\s*,\\s*(\\d+)%?/i);\r\n if (hslMatch) {\r\n return hslToRgb(\r\n parseInt(hslMatch[1], 10),\r\n parseInt(hslMatch[2], 10),\r\n parseInt(hslMatch[3], 10),\r\n );\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/** Parse a hex string to HSVColor, falling back to red on failure. */\r\nfunction hexToHsv(hex: string): HSVColor {\r\n const rgb = hexToRgb(hex);\r\n return rgb ? rgbToHsv(rgb.r, rgb.g, rgb.b) : { h: 0, s: 100, v: 100 };\r\n}\r\n\r\n// ============================================================================\r\n// Component\r\n// ============================================================================\r\n\r\nexport const ColorPicker: React.FC<ColorPickerProps> = ({\r\n value,\r\n defaultValue,\r\n onChange,\r\n format = 'hex',\r\n showAlpha = false,\r\n showSwatches = true,\r\n swatches = DEFAULT_SWATCHES,\r\n disabled = false,\r\n size = 'md',\r\n inline = false,\r\n label,\r\n className = '',\r\n}) => {\r\n // ── Initial hex (only used on first render by useState) ──────────────────\r\n const initialHex = value ?? defaultValue ?? '#6366f1';\r\n\r\n // ── State ─────────────────────────────────────────────────────────────────\r\n const [hsv, setHsv] = useState<HSVColor>(() => hexToHsv(initialHex));\r\n const [alpha, setAlpha] = useState<number>(1);\r\n const [activeFormat, setActiveFormat] = useState<ColorFormat>(format);\r\n const [inputText, setInputText] = useState<string>(() =>\r\n colorToText(hexToHsv(initialHex), 1, format),\r\n );\r\n const [copied, setCopied] = useState(false);\r\n\r\n // ── Refs - give event handlers always-fresh values without stale closures ──\r\n const hsvRef = useRef<HSVColor>(hsv);\r\n hsvRef.current = hsv;\r\n\r\n const alphaRef = useRef<number>(alpha);\r\n alphaRef.current = alpha;\r\n\r\n const activeFormatRef = useRef<ColorFormat>(activeFormat);\r\n activeFormatRef.current = activeFormat;\r\n\r\n // onChange is stored in a ref so applyColor never becomes stale\r\n const onChangeRef = useRef<ColorPickerProps['onChange']>(onChange);\r\n onChangeRef.current = onChange;\r\n\r\n const inputFocusedRef = useRef(false);\r\n const canvasRef = useRef<HTMLDivElement>(null);\r\n\r\n // Refs for in-flight drag listeners - cleaned up on mouseup and on unmount\r\n const dragHandlersRef = useRef<{\r\n move: (e: MouseEvent) => void;\r\n up: () => void;\r\n } | null>(null);\r\n\r\n const copiedTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n // ── Derived ───────────────────────────────────────────────────────────────\r\n const currentRgb = hsvToRgb(hsv.h, hsv.s, hsv.v);\r\n const currentHex = rgbToHex(currentRgb.r, currentRgb.g, currentRgb.b);\r\n\r\n // ── Sync from controlled `value` prop ─────────────────────────────────────\r\n // Runs only when `value` changes. We normalize both sides to the same\r\n // hex format before comparing so that round-trip conversions don't trigger\r\n // spurious updates (which would overwrite the preserved hue when s/v = 0).\r\n useEffect(() => {\r\n if (value === undefined) return;\r\n const rgb = hexToRgb(value);\r\n if (!rgb) return;\r\n const newHsv = rgbToHsv(rgb.r, rgb.g, rgb.b);\r\n const newNormalised = rgbToHex(\r\n ...(Object.values(hsvToRgb(newHsv.h, newHsv.s, newHsv.v)) as [number, number, number]),\r\n );\r\n // currentHex is captured from this render - guards against echo loops\r\n // when the parent echoes back our own onChange emission\r\n if (newNormalised === currentHex) return;\r\n setHsv(newHsv);\r\n if (!inputFocusedRef.current) {\r\n setInputText(colorToText(newHsv, alphaRef.current, activeFormatRef.current));\r\n }\r\n }, [value, currentHex]);\r\n\r\n // ── Cleanup drag listeners and timers on unmount ──────────────────────────\r\n useEffect(() => {\r\n return () => {\r\n if (dragHandlersRef.current) {\r\n document.removeEventListener('mousemove', dragHandlersRef.current.move);\r\n document.removeEventListener('mouseup', dragHandlersRef.current.up);\r\n }\r\n if (copiedTimerRef.current) clearTimeout(copiedTimerRef.current);\r\n };\r\n }, []);\r\n\r\n // ── Core: apply a new HSV + alpha, emit onChange ───────────────────────────\r\n // Stable (empty dep array) - reads live values exclusively via refs.\r\n const applyColor = useCallback((newHsv: HSVColor, newAlpha: number) => {\r\n setHsv(newHsv);\r\n setAlpha(newAlpha);\r\n\r\n if (!inputFocusedRef.current) {\r\n setInputText(colorToText(newHsv, newAlpha, activeFormatRef.current));\r\n }\r\n\r\n const rgb = hsvToRgb(newHsv.h, newHsv.s, newHsv.v);\r\n const hex = rgbToHex(rgb.r, rgb.g, rgb.b);\r\n onChangeRef.current?.(hex);\r\n }, []);\r\n\r\n // ── 2-D saturation / brightness canvas ────────────────────────────────────\r\n const handleCanvasMouseDown = useCallback(\r\n (e: React.MouseEvent<HTMLDivElement>) => {\r\n if (disabled) return;\r\n e.preventDefault();\r\n\r\n const pick = (clientX: number, clientY: number) => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const rect = canvas.getBoundingClientRect();\r\n const s = Math.max(0, Math.min(100, ((clientX - rect.left) / rect.width) * 100));\r\n const v = Math.max(0, Math.min(100, 100 - ((clientY - rect.top) / rect.height) * 100));\r\n applyColor({ h: hsvRef.current.h, s, v }, alphaRef.current);\r\n };\r\n\r\n pick(e.clientX, e.clientY);\r\n\r\n const handleMouseMove = (me: MouseEvent) => pick(me.clientX, me.clientY);\r\n const handleMouseUp = () => {\r\n document.removeEventListener('mousemove', handleMouseMove);\r\n document.removeEventListener('mouseup', handleMouseUp);\r\n dragHandlersRef.current = null;\r\n };\r\n\r\n dragHandlersRef.current = { move: handleMouseMove, up: handleMouseUp };\r\n document.addEventListener('mousemove', handleMouseMove);\r\n document.addEventListener('mouseup', handleMouseUp);\r\n },\r\n [disabled, applyColor],\r\n );\r\n\r\n // ── Hue slider ────────────────────────────────────────────────────────────\r\n const handleHueChange = useCallback(\r\n (e: React.ChangeEvent<HTMLInputElement>) => {\r\n applyColor({ ...hsvRef.current, h: Number(e.target.value) }, alphaRef.current);\r\n },\r\n [applyColor],\r\n );\r\n\r\n // ── Alpha slider ──────────────────────────────────────────────────────────\r\n const handleAlphaChange = useCallback(\r\n (e: React.ChangeEvent<HTMLInputElement>) => {\r\n applyColor(hsvRef.current, Number(e.target.value) / 100);\r\n },\r\n [applyColor],\r\n );\r\n\r\n // ── Format toggle ─────────────────────────────────────────────────────────\r\n const handleFormatChange = useCallback((fmt: ColorFormat) => {\r\n setActiveFormat(fmt);\r\n setInputText(colorToText(hsvRef.current, alphaRef.current, fmt));\r\n }, []);\r\n\r\n // ── Text-input commit (Enter / blur) ──────────────────────────────────────\r\n const handleInputCommit = useCallback(() => {\r\n const rgb = parseColorText(inputText);\r\n if (!rgb) {\r\n // Invalid - reset to the current valid colour\r\n setInputText(colorToText(hsvRef.current, alphaRef.current, activeFormatRef.current));\r\n return;\r\n }\r\n const newHsv = rgbToHsv(rgb.r, rgb.g, rgb.b);\r\n applyColor(newHsv, alphaRef.current);\r\n // Always normalise the text after a commit (even if the input still has focus)\r\n setInputText(colorToText(newHsv, alphaRef.current, activeFormatRef.current));\r\n }, [inputText, applyColor]);\r\n\r\n // ── Swatch click ──────────────────────────────────────────────────────────\r\n const handleSwatchClick = useCallback(\r\n (hex: string) => {\r\n const rgb = hexToRgb(hex);\r\n if (!rgb) return;\r\n applyColor(rgbToHsv(rgb.r, rgb.g, rgb.b), alphaRef.current);\r\n },\r\n [applyColor],\r\n );\r\n\r\n // ── Copy to clipboard ─────────────────────────────────────────────────────\r\n const handleCopy = useCallback(() => {\r\n const text = colorToText(hsvRef.current, alphaRef.current, activeFormatRef.current);\r\n navigator.clipboard\r\n .writeText(text)\r\n .then(() => {\r\n setCopied(true);\r\n if (copiedTimerRef.current) clearTimeout(copiedTimerRef.current);\r\n copiedTimerRef.current = setTimeout(() => setCopied(false), 2000);\r\n })\r\n .catch(() => {\r\n // Clipboard access denied - silently ignore\r\n });\r\n }, []);\r\n\r\n // ── Alpha-slider background gradient ─────────────────────────────────────\r\n // We use a transparent-to-current-colour gradient layered over a checkerboard\r\n // so the alpha slider always shows the correct colour transition.\r\n const transparentColor = `rgba(${currentRgb.r}, ${currentRgb.g}, ${currentRgb.b}, 0)`;\r\n\r\n const alphaTrackBg = {\r\n backgroundImage: [\r\n `linear-gradient(to right, ${transparentColor}, ${currentHex})`,\r\n 'linear-gradient(45deg, #e2e8f0 25%, transparent 25%)',\r\n 'linear-gradient(-45deg, #e2e8f0 25%, transparent 25%)',\r\n 'linear-gradient(45deg, transparent 75%, #e2e8f0 75%)',\r\n 'linear-gradient(-45deg, transparent 75%, #e2e8f0 75%)',\r\n ].join(', '),\r\n backgroundSize: '100%, 8px 8px, 8px 8px, 8px 8px, 8px 8px',\r\n backgroundPosition: '0 0, 0 0, 0 4px, 4px -4px, -4px 0',\r\n };\r\n\r\n // ── Picker panel (shared between inline and popover modes) ────────────────\r\n const panel = (\r\n <div className={`eidos-color-picker-panel${inline ? ' eidos-color-picker-panel--inline' : ''}`}>\r\n {/* 2-D sat / brightness canvas */}\r\n <div\r\n ref={canvasRef}\r\n className=\"eidos-color-picker-canvas\"\r\n style={{\r\n background: [\r\n 'linear-gradient(to top, #000, transparent)',\r\n `linear-gradient(to right, #fff, hsl(${hsv.h}, 100%, 50%))`,\r\n ].join(', '),\r\n }}\r\n onMouseDown={handleCanvasMouseDown}\r\n role=\"presentation\"\r\n >\r\n <div\r\n className=\"eidos-color-picker-thumb\"\r\n style={{\r\n left: `${hsv.s}%`,\r\n top: `${100 - hsv.v}%`,\r\n background: currentHex,\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Sliders */}\r\n <div className=\"eidos-color-picker-sliders\">\r\n {/* Hue */}\r\n <input\r\n type=\"range\"\r\n className=\"eidos-color-picker-hue\"\r\n min={0}\r\n max={360}\r\n step={1}\r\n value={hsv.h}\r\n disabled={disabled}\r\n onChange={handleHueChange}\r\n aria-label=\"Hue\"\r\n />\r\n\r\n {/* Alpha */}\r\n {showAlpha && (\r\n <div className=\"eidos-color-picker-alpha-wrapper\">\r\n <div className=\"eidos-color-picker-alpha-bg\" style={alphaTrackBg} />\r\n <input\r\n type=\"range\"\r\n className=\"eidos-color-picker-alpha\"\r\n min={0}\r\n max={100}\r\n step={1}\r\n value={Math.round(alpha * 100)}\r\n disabled={disabled}\r\n onChange={handleAlphaChange}\r\n aria-label=\"Opacity\"\r\n />\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Text input + format toggles + copy */}\r\n <div className=\"eidos-color-picker-inputs\">\r\n <div className=\"eidos-color-picker-format-btns\" role=\"group\" aria-label=\"Colour format\">\r\n {(['hex', 'rgb', 'hsl'] as ColorFormat[]).map((fmt) => (\r\n <button\r\n key={fmt}\r\n type=\"button\"\r\n className={[\r\n 'eidos-color-picker-format-btn',\r\n activeFormat === fmt && 'eidos-color-picker-format-btn--active',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n onClick={() => handleFormatChange(fmt)}\r\n disabled={disabled}\r\n aria-pressed={activeFormat === fmt}\r\n >\r\n {fmt.toUpperCase()}\r\n </button>\r\n ))}\r\n </div>\r\n\r\n <input\r\n type=\"text\"\r\n className=\"eidos-color-picker-input\"\r\n value={inputText}\r\n disabled={disabled}\r\n spellCheck={false}\r\n aria-label=\"Colour value\"\r\n onChange={(e) => setInputText(e.target.value)}\r\n onFocus={() => {\r\n inputFocusedRef.current = true;\r\n }}\r\n onBlur={() => {\r\n inputFocusedRef.current = false;\r\n handleInputCommit();\r\n }}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') handleInputCommit();\r\n if (e.key === 'Escape') {\r\n setInputText(colorToText(hsvRef.current, alphaRef.current, activeFormatRef.current));\r\n }\r\n }}\r\n />\r\n\r\n <button\r\n type=\"button\"\r\n className={['eidos-color-picker-copy', copied && 'eidos-color-picker-copy--copied']\r\n .filter(Boolean)\r\n .join(' ')}\r\n onClick={handleCopy}\r\n disabled={disabled}\r\n aria-label=\"Copy colour value\"\r\n title=\"Copy colour value\"\r\n >\r\n {copied ? <Check size={14} /> : <Copy size={14} />}\r\n </button>\r\n </div>\r\n\r\n {/* Swatches */}\r\n {showSwatches && (\r\n <div className=\"eidos-color-picker-swatches\" role=\"group\" aria-label=\"Colour presets\">\r\n {swatches.map((swatchHex) => (\r\n <button\r\n key={swatchHex}\r\n type=\"button\"\r\n className={[\r\n 'eidos-color-picker-swatch',\r\n currentHex === swatchHex && 'eidos-color-picker-swatch--active',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n style={{ background: swatchHex }}\r\n onClick={() => handleSwatchClick(swatchHex)}\r\n disabled={disabled}\r\n aria-label={`Select ${swatchHex}`}\r\n title={swatchHex}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n\r\n // ── Root element classes ───────────────────────────────────────────────────\r\n const rootClasses = [\r\n 'eidos-color-picker',\r\n `eidos-color-picker--${size}`,\r\n disabled && 'eidos-color-picker--disabled',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n // ── Inline mode ───────────────────────────────────────────────────────────\r\n if (inline) {\r\n return (\r\n <div className={rootClasses}>\r\n {label && <span className=\"eidos-color-picker-label\">{label}</span>}\r\n {panel}\r\n </div>\r\n );\r\n }\r\n\r\n // ── Popover (trigger + Dropdown) ──────────────────────────────────────────\r\n return (\r\n <div className={rootClasses}>\r\n {label && <span className=\"eidos-color-picker-label\">{label}</span>}\r\n <Dropdown\r\n trigger={\r\n <button\r\n type=\"button\"\r\n className=\"eidos-color-picker-trigger\"\r\n disabled={disabled}\r\n aria-label={label ?? 'Open colour picker'}\r\n >\r\n <span\r\n className=\"eidos-color-picker-trigger-swatch\"\r\n style={{ background: currentHex }}\r\n />\r\n <span className=\"eidos-color-picker-trigger-value\">{currentHex}</span>\r\n </button>\r\n }\r\n content={panel}\r\n placement=\"bottom\"\r\n autoWidth={false}\r\n minWidth={260}\r\n disabled={disabled}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nColorPicker.displayName = 'ColorPicker';\r\n"],"mappings":";;;;;AAAA,SAAgB,UAAU,QAAQ,WAAW,mBAAmB;AAChE,SAAS,MAAM,aAAa;AAoepB,cA2BE,YA3BF;AAtdR,IAAM,mBAA6B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMA,SAAS,SAAS,GAAW,GAAW,GAAqB;AAE3D,QAAM,KAAK,IAAI;AACf,QAAM,KAAK,IAAI;AACf,QAAM,IAAI,KAAK;AACf,QAAM,IAAI,KAAK,IAAI,KAAK,IAAM,IAAI,KAAM,IAAK,CAAC;AAC9C,QAAM,IAAI,KAAK;AAEf,MAAI,GAAW,GAAW;AAC1B,MAAI,IAAI,IAAI;AACV,QAAI;AACJ,QAAI;AACJ,QAAI;AAAA,EACN,WAAW,IAAI,KAAK;AAClB,QAAI;AACJ,QAAI;AACJ,QAAI;AAAA,EACN,WAAW,IAAI,KAAK;AAClB,QAAI;AACJ,QAAI;AACJ,QAAI;AAAA,EACN,WAAW,IAAI,KAAK;AAClB,QAAI;AACJ,QAAI;AACJ,QAAI;AAAA,EACN,WAAW,IAAI,KAAK;AAClB,QAAI;AACJ,QAAI;AACJ,QAAI;AAAA,EACN,OAAO;AACL,QAAI;AACJ,QAAI;AACJ,QAAI;AAAA,EACN;AAEA,SAAO;AAAA,IACL,GAAG,KAAK,OAAO,IAAI,KAAK,GAAG;AAAA,IAC3B,GAAG,KAAK,OAAO,IAAI,KAAK,GAAG;AAAA,IAC3B,GAAG,KAAK,OAAO,IAAI,KAAK,GAAG;AAAA,EAC7B;AACF;AAEA,SAAS,SAAS,GAAW,GAAW,GAAqB;AAE3D,QAAM,KAAK,IAAI;AACf,QAAM,KAAK,IAAI;AACf,QAAM,KAAK,IAAI;AAEf,QAAM,MAAM,KAAK,IAAI,IAAI,IAAI,EAAE;AAC/B,QAAM,MAAM,KAAK,IAAI,IAAI,IAAI,EAAE;AAC/B,QAAM,QAAQ,MAAM;AAEpB,QAAM,IAAI,MAAM;AAChB,QAAM,IAAI,QAAQ,IAAI,IAAK,QAAQ,MAAO;AAE1C,MAAI,IAAI;AACR,MAAI,UAAU,GAAG;AACf,QAAI,QAAQ,GAAI,MAAM,KAAK,MAAM,QAAS;AAAA,aACjC,QAAQ,GAAI,MAAK,KAAK,MAAM,QAAQ;AAAA,QACxC,MAAK,KAAK,MAAM,QAAQ;AAC7B,QAAI,IAAI;AACR,QAAI,IAAI,EAAG,MAAK;AAAA,EAClB;AAEA,SAAO,EAAE,GAAG,KAAK,MAAM,CAAC,GAAG,GAAG,KAAK,MAAM,CAAC,GAAG,GAAG,KAAK,MAAM,CAAC,EAAE;AAChE;AAEA,SAAS,SAAS,GAAW,GAAW,GAAmB;AACzD,QAAM,KAAK,CAAC,MACV,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EACrC,SAAS,EAAE,EACX,SAAS,GAAG,GAAG;AACpB,SAAO,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAClC;AAEA,SAAS,SAAS,KAA8B;AAC9C,QAAM,IAAI,IAAI,KAAK,EAAE,QAAQ,MAAM,EAAE;AACrC,MAAI,GAAW,GAAW;AAE1B,MAAI,EAAE,WAAW,GAAG;AAClB,QAAI,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE;AAC5B,QAAI,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE;AAC5B,QAAI,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE;AAAA,EAC9B,WAAW,EAAE,WAAW,GAAG;AACzB,QAAI,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;AAC9B,QAAI,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;AAC9B,QAAI,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;AAAA,EAChC,OAAO;AACL,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK,MAAM,CAAC,EAAG,QAAO;AAC7C,SAAO,EAAE,GAAG,GAAG,EAAE;AACnB;AAEA,SAAS,SAAS,GAAW,GAAW,GAAqB;AAE3D,QAAM,KAAK,IAAI;AACf,QAAM,KAAK,IAAI;AACf,QAAM,KAAK,IAAI;AAEf,QAAM,MAAM,KAAK,IAAI,IAAI,IAAI,EAAE;AAC/B,QAAM,MAAM,KAAK,IAAI,IAAI,IAAI,EAAE;AAC/B,QAAM,QAAQ,MAAM;AACpB,QAAM,KAAK,MAAM,OAAO;AAExB,MAAI,IAAI;AACR,MAAI,IAAI;AAER,MAAI,UAAU,GAAG;AACf,QAAI,SAAS,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC;AACnC,QAAI,QAAQ,GAAI,MAAM,KAAK,MAAM,QAAS;AAAA,aACjC,QAAQ,GAAI,MAAK,KAAK,MAAM,QAAQ;AAAA,QACxC,MAAK,KAAK,MAAM,QAAQ;AAC7B,QAAI,IAAI;AACR,QAAI,IAAI,EAAG,MAAK;AAAA,EAClB;AAEA,SAAO,EAAE,GAAG,KAAK,MAAM,CAAC,GAAG,GAAG,KAAK,MAAM,IAAI,GAAG,GAAG,GAAG,KAAK,MAAM,IAAI,GAAG,EAAE;AAC5E;AAEA,SAAS,SAAS,GAAW,GAAW,GAAqB;AAE3D,QAAM,KAAK,IAAI;AACf,QAAM,KAAK,IAAI;AACf,QAAM,KAAK,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK;AACvC,QAAM,IAAI,KAAK,IAAI,KAAK,IAAM,IAAI,KAAM,IAAK,CAAC;AAC9C,QAAM,IAAI,KAAK,IAAI;AAEnB,MAAI,GAAW,GAAW;AAC1B,MAAI,IAAI,IAAI;AACV,QAAI;AACJ,QAAI;AACJ,QAAI;AAAA,EACN,WAAW,IAAI,KAAK;AAClB,QAAI;AACJ,QAAI;AACJ,QAAI;AAAA,EACN,WAAW,IAAI,KAAK;AAClB,QAAI;AACJ,QAAI;AACJ,QAAI;AAAA,EACN,WAAW,IAAI,KAAK;AAClB,QAAI;AACJ,QAAI;AACJ,QAAI;AAAA,EACN,WAAW,IAAI,KAAK;AAClB,QAAI;AACJ,QAAI;AACJ,QAAI;AAAA,EACN,OAAO;AACL,QAAI;AACJ,QAAI;AACJ,QAAI;AAAA,EACN;AAEA,SAAO;AAAA,IACL,GAAG,KAAK,OAAO,IAAI,KAAK,GAAG;AAAA,IAC3B,GAAG,KAAK,OAAO,IAAI,KAAK,GAAG;AAAA,IAC3B,GAAG,KAAK,OAAO,IAAI,KAAK,GAAG;AAAA,EAC7B;AACF;AAMA,SAAS,YAAY,KAAe,OAAe,KAA0B;AAC3E,QAAM,MAAM,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,UAAQ,KAAK;AAAA,IACX,KAAK;AACH,aAAO,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAAA,IACrC,KAAK;AACH,aAAO,QAAQ,IACX,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,MAAM,QAAQ,CAAC,CAAC,MACtD,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC;AAAA,IACtC,KAAK,OAAO;AACV,YAAM,MAAM,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACxC,aAAO,QAAQ,IACX,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,MAAM,QAAQ,CAAC,CAAC,MACxD,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC;AAAA,IACvC;AAAA,EACF;AACF;AAEA,SAAS,eAAe,MAA+B;AACrD,QAAM,IAAI,KAAK,KAAK;AAGpB,QAAM,eAAe,EAAE,WAAW,GAAG,IAAI,IAAI,mBAAmB,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK;AACpF,MAAI,aAAc,QAAO,SAAS,YAAY;AAG9C,QAAM,WAAW,EAAE,MAAM,0CAA0C;AACnE,MAAI,UAAU;AACZ,WAAO;AAAA,MACL,GAAG,SAAS,SAAS,CAAC,GAAG,EAAE;AAAA,MAC3B,GAAG,SAAS,SAAS,CAAC,GAAG,EAAE;AAAA,MAC3B,GAAG,SAAS,SAAS,CAAC,GAAG,EAAE;AAAA,IAC7B;AAAA,EACF;AAGA,QAAM,WAAW,EAAE,MAAM,8CAA8C;AACvE,MAAI,UAAU;AACZ,WAAO;AAAA,MACL,SAAS,SAAS,CAAC,GAAG,EAAE;AAAA,MACxB,SAAS,SAAS,CAAC,GAAG,EAAE;AAAA,MACxB,SAAS,SAAS,CAAC,GAAG,EAAE;AAAA,IAC1B;AAAA,EACF;AAEA,SAAO;AACT;AAGA,SAAS,SAAS,KAAuB;AACvC,QAAM,MAAM,SAAS,GAAG;AACxB,SAAO,MAAM,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI;AACtE;AAMO,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,WAAW;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AAAA,EACP,SAAS;AAAA,EACT;AAAA,EACA,YAAY;AACd,MAAM;AAEJ,QAAM,aAAa,SAAS,gBAAgB;AAG5C,QAAM,CAAC,KAAK,MAAM,IAAI,SAAmB,MAAM,SAAS,UAAU,CAAC;AACnE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAiB,CAAC;AAC5C,QAAM,CAAC,cAAc,eAAe,IAAI,SAAsB,MAAM;AACpE,QAAM,CAAC,WAAW,YAAY,IAAI;AAAA,IAAiB,MACjD,YAAY,SAAS,UAAU,GAAG,GAAG,MAAM;AAAA,EAC7C;AACA,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAG1C,QAAM,SAAS,OAAiB,GAAG;AACnC,SAAO,UAAU;AAEjB,QAAM,WAAW,OAAe,KAAK;AACrC,WAAS,UAAU;AAEnB,QAAM,kBAAkB,OAAoB,YAAY;AACxD,kBAAgB,UAAU;AAG1B,QAAM,cAAc,OAAqC,QAAQ;AACjE,cAAY,UAAU;AAEtB,QAAM,kBAAkB,OAAO,KAAK;AACpC,QAAM,YAAY,OAAuB,IAAI;AAG7C,QAAM,kBAAkB,OAGd,IAAI;AAEd,QAAM,iBAAiB,OAA6C,IAAI;AAGxE,QAAM,aAAa,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/C,QAAM,aAAa,SAAS,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAMpE,YAAU,MAAM;AACd,QAAI,UAAU,OAAW;AACzB,UAAM,MAAM,SAAS,KAAK;AAC1B,QAAI,CAAC,IAAK;AACV,UAAM,SAAS,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3C,UAAM,gBAAgB;AAAA,MACpB,GAAI,OAAO,OAAO,SAAS,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;AAAA,IAC1D;AAGA,QAAI,kBAAkB,WAAY;AAClC,WAAO,MAAM;AACb,QAAI,CAAC,gBAAgB,SAAS;AAC5B,mBAAa,YAAY,QAAQ,SAAS,SAAS,gBAAgB,OAAO,CAAC;AAAA,IAC7E;AAAA,EACF,GAAG,CAAC,OAAO,UAAU,CAAC;AAGtB,YAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,gBAAgB,SAAS;AAC3B,iBAAS,oBAAoB,aAAa,gBAAgB,QAAQ,IAAI;AACtE,iBAAS,oBAAoB,WAAW,gBAAgB,QAAQ,EAAE;AAAA,MACpE;AACA,UAAI,eAAe,QAAS,cAAa,eAAe,OAAO;AAAA,IACjE;AAAA,EACF,GAAG,CAAC,CAAC;AAIL,QAAM,aAAa,YAAY,CAAC,QAAkB,aAAqB;AACrE,WAAO,MAAM;AACb,aAAS,QAAQ;AAEjB,QAAI,CAAC,gBAAgB,SAAS;AAC5B,mBAAa,YAAY,QAAQ,UAAU,gBAAgB,OAAO,CAAC;AAAA,IACrE;AAEA,UAAM,MAAM,SAAS,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AACjD,UAAM,MAAM,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACxC,gBAAY,UAAU,GAAG;AAAA,EAC3B,GAAG,CAAC,CAAC;AAGL,QAAM,wBAAwB;AAAA,IAC5B,CAAC,MAAwC;AACvC,UAAI,SAAU;AACd,QAAE,eAAe;AAEjB,YAAM,OAAO,CAAC,SAAiB,YAAoB;AACjD,cAAM,SAAS,UAAU;AACzB,YAAI,CAAC,OAAQ;AACb,cAAM,OAAO,OAAO,sBAAsB;AAC1C,cAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,MAAO,UAAU,KAAK,QAAQ,KAAK,QAAS,GAAG,CAAC;AAC/E,cAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,OAAQ,UAAU,KAAK,OAAO,KAAK,SAAU,GAAG,CAAC;AACrF,mBAAW,EAAE,GAAG,OAAO,QAAQ,GAAG,GAAG,EAAE,GAAG,SAAS,OAAO;AAAA,MAC5D;AAEA,WAAK,EAAE,SAAS,EAAE,OAAO;AAEzB,YAAM,kBAAkB,CAAC,OAAmB,KAAK,GAAG,SAAS,GAAG,OAAO;AACvE,YAAM,gBAAgB,MAAM;AAC1B,iBAAS,oBAAoB,aAAa,eAAe;AACzD,iBAAS,oBAAoB,WAAW,aAAa;AACrD,wBAAgB,UAAU;AAAA,MAC5B;AAEA,sBAAgB,UAAU,EAAE,MAAM,iBAAiB,IAAI,cAAc;AACrE,eAAS,iBAAiB,aAAa,eAAe;AACtD,eAAS,iBAAiB,WAAW,aAAa;AAAA,IACpD;AAAA,IACA,CAAC,UAAU,UAAU;AAAA,EACvB;AAGA,QAAM,kBAAkB;AAAA,IACtB,CAAC,MAA2C;AAC1C,iBAAW,EAAE,GAAG,OAAO,SAAS,GAAG,OAAO,EAAE,OAAO,KAAK,EAAE,GAAG,SAAS,OAAO;AAAA,IAC/E;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAGA,QAAM,oBAAoB;AAAA,IACxB,CAAC,MAA2C;AAC1C,iBAAW,OAAO,SAAS,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG;AAAA,IACzD;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAGA,QAAM,qBAAqB,YAAY,CAAC,QAAqB;AAC3D,oBAAgB,GAAG;AACnB,iBAAa,YAAY,OAAO,SAAS,SAAS,SAAS,GAAG,CAAC;AAAA,EACjE,GAAG,CAAC,CAAC;AAGL,QAAM,oBAAoB,YAAY,MAAM;AAC1C,UAAM,MAAM,eAAe,SAAS;AACpC,QAAI,CAAC,KAAK;AAER,mBAAa,YAAY,OAAO,SAAS,SAAS,SAAS,gBAAgB,OAAO,CAAC;AACnF;AAAA,IACF;AACA,UAAM,SAAS,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3C,eAAW,QAAQ,SAAS,OAAO;AAEnC,iBAAa,YAAY,QAAQ,SAAS,SAAS,gBAAgB,OAAO,CAAC;AAAA,EAC7E,GAAG,CAAC,WAAW,UAAU,CAAC;AAG1B,QAAM,oBAAoB;AAAA,IACxB,CAAC,QAAgB;AACf,YAAM,MAAM,SAAS,GAAG;AACxB,UAAI,CAAC,IAAK;AACV,iBAAW,SAAS,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,SAAS,OAAO;AAAA,IAC5D;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAGA,QAAM,aAAa,YAAY,MAAM;AACnC,UAAM,OAAO,YAAY,OAAO,SAAS,SAAS,SAAS,gBAAgB,OAAO;AAClF,cAAU,UACP,UAAU,IAAI,EACd,KAAK,MAAM;AACV,gBAAU,IAAI;AACd,UAAI,eAAe,QAAS,cAAa,eAAe,OAAO;AAC/D,qBAAe,UAAU,WAAW,MAAM,UAAU,KAAK,GAAG,GAAI;AAAA,IAClE,CAAC,EACA,MAAM,MAAM;AAAA,IAEb,CAAC;AAAA,EACL,GAAG,CAAC,CAAC;AAKL,QAAM,mBAAmB,QAAQ,WAAW,CAAC,KAAK,WAAW,CAAC,KAAK,WAAW,CAAC;AAE/E,QAAM,eAAe;AAAA,IACnB,iBAAiB;AAAA,MACf,6BAA6B,gBAAgB,KAAK,UAAU;AAAA,MAC5D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,IACX,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,EACtB;AAGA,QAAM,QACJ,qBAAC,SAAI,WAAW,2BAA2B,SAAS,sCAAsC,EAAE,IAE1F;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,WAAU;AAAA,QACV,OAAO;AAAA,UACL,YAAY;AAAA,YACV;AAAA,YACA,uCAAuC,IAAI,CAAC;AAAA,UAC9C,EAAE,KAAK,IAAI;AAAA,QACb;AAAA,QACA,aAAa;AAAA,QACb,MAAK;AAAA,QAEL;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,MAAM,GAAG,IAAI,CAAC;AAAA,cACd,KAAK,GAAG,MAAM,IAAI,CAAC;AAAA,cACnB,YAAY;AAAA,YACd;AAAA;AAAA,QACF;AAAA;AAAA,IACF;AAAA,IAGA,qBAAC,SAAI,WAAU,8BAEb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,KAAK;AAAA,UACL,KAAK;AAAA,UACL,MAAM;AAAA,UACN,OAAO,IAAI;AAAA,UACX;AAAA,UACA,UAAU;AAAA,UACV,cAAW;AAAA;AAAA,MACb;AAAA,MAGC,aACC,qBAAC,SAAI,WAAU,oCACb;AAAA,4BAAC,SAAI,WAAU,+BAA8B,OAAO,cAAc;AAAA,QAClE;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YACV,KAAK;AAAA,YACL,KAAK;AAAA,YACL,MAAM;AAAA,YACN,OAAO,KAAK,MAAM,QAAQ,GAAG;AAAA,YAC7B;AAAA,YACA,UAAU;AAAA,YACV,cAAW;AAAA;AAAA,QACb;AAAA,SACF;AAAA,OAEJ;AAAA,IAGA,qBAAC,SAAI,WAAU,6BACb;AAAA,0BAAC,SAAI,WAAU,kCAAiC,MAAK,SAAQ,cAAW,iBACpE,WAAC,OAAO,OAAO,KAAK,EAAoB,IAAI,CAAC,QAC7C;AAAA,QAAC;AAAA;AAAA,UAEC,MAAK;AAAA,UACL,WAAW;AAAA,YACT;AAAA,YACA,iBAAiB,OAAO;AAAA,UAC1B,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,UACX,SAAS,MAAM,mBAAmB,GAAG;AAAA,UACrC;AAAA,UACA,gBAAc,iBAAiB;AAAA,UAE9B,cAAI,YAAY;AAAA;AAAA,QAZZ;AAAA,MAaP,CACD,GACH;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,OAAO;AAAA,UACP;AAAA,UACA,YAAY;AAAA,UACZ,cAAW;AAAA,UACX,UAAU,CAAC,MAAM,aAAa,EAAE,OAAO,KAAK;AAAA,UAC5C,SAAS,MAAM;AACb,4BAAgB,UAAU;AAAA,UAC5B;AAAA,UACA,QAAQ,MAAM;AACZ,4BAAgB,UAAU;AAC1B,8BAAkB;AAAA,UACpB;AAAA,UACA,WAAW,CAAC,MAAM;AAChB,gBAAI,EAAE,QAAQ,QAAS,mBAAkB;AACzC,gBAAI,EAAE,QAAQ,UAAU;AACtB,2BAAa,YAAY,OAAO,SAAS,SAAS,SAAS,gBAAgB,OAAO,CAAC;AAAA,YACrF;AAAA,UACF;AAAA;AAAA,MACF;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAW,CAAC,2BAA2B,UAAU,iCAAiC,EAC/E,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,UACX,SAAS;AAAA,UACT;AAAA,UACA,cAAW;AAAA,UACX,OAAM;AAAA,UAEL,mBAAS,oBAAC,SAAM,MAAM,IAAI,IAAK,oBAAC,QAAK,MAAM,IAAI;AAAA;AAAA,MAClD;AAAA,OACF;AAAA,IAGC,gBACC,oBAAC,SAAI,WAAU,+BAA8B,MAAK,SAAQ,cAAW,kBAClE,mBAAS,IAAI,CAAC,cACb;AAAA,MAAC;AAAA;AAAA,QAEC,MAAK;AAAA,QACL,WAAW;AAAA,UACT;AAAA,UACA,eAAe,aAAa;AAAA,QAC9B,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QACX,OAAO,EAAE,YAAY,UAAU;AAAA,QAC/B,SAAS,MAAM,kBAAkB,SAAS;AAAA,QAC1C;AAAA,QACA,cAAY,UAAU,SAAS;AAAA,QAC/B,OAAO;AAAA;AAAA,MAZF;AAAA,IAaP,CACD,GACH;AAAA,KAEJ;AAIF,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,uBAAuB,IAAI;AAAA,IAC3B,YAAY;AAAA,IACZ;AAAA,EACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAGX,MAAI,QAAQ;AACV,WACE,qBAAC,SAAI,WAAW,aACb;AAAA,eAAS,oBAAC,UAAK,WAAU,4BAA4B,iBAAM;AAAA,MAC3D;AAAA,OACH;AAAA,EAEJ;AAGA,SACE,qBAAC,SAAI,WAAW,aACb;AAAA,aAAS,oBAAC,UAAK,WAAU,4BAA4B,iBAAM;AAAA,IAC5D;AAAA,MAAC;AAAA;AAAA,QACC,SACE;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YACV;AAAA,YACA,cAAY,SAAS;AAAA,YAErB;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,EAAE,YAAY,WAAW;AAAA;AAAA,cAClC;AAAA,cACA,oBAAC,UAAK,WAAU,oCAAoC,sBAAW;AAAA;AAAA;AAAA,QACjE;AAAA,QAEF,SAAS;AAAA,QACT,WAAU;AAAA,QACV,WAAW;AAAA,QACX,UAAU;AAAA,QACV;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,YAAY,cAAc;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-TBMVUI7S.cjs","../src/utils/renderIcon.tsx"],"names":[],"mappings":"AAAA;ACCA,2CAAsB;AAyCT,+CAAA;AAfN,IAAM,WAAA,EAAa,CAAC,IAAA,EAA4B,SAAA,EAAA,GAAwC;AAC7F,EAAA,GAAA,CAAI,CAAC,IAAA,EAAM,OAAO,IAAA;AAElB,EAAA,GAAA,CAAI,OAAO,KAAA,IAAS,QAAA,EAAU;AAE5B,IAAA,MAAM,SAAA,EAAW,IAAA,CACd,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,EAAA,GAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,CAAY,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAC1D,IAAA,CAAK,EAAE,CAAA;AAGV,IAAA,MAAM,WAAA,EAAa,kBAAA,CAAM,QAA8B,CAAA;AAGvD,IAAA,GAAA,CAAI,UAAA,EAAY;AACd,MAAA,uBAAO,6BAAA,UAAC,EAAA,EAAW,SAAA,EAAsB,aAAA,EAAY,OAAA,CAAO,CAAA;AAAA,IAC9D;AAGA,IAAA,uBAAO,6BAAA,GAAC,EAAA,EAAE,SAAA,EAAW,CAAA,EAAA;AACvB,EAAA;AAGsB,EAAA;AACA,EAAA;AACxB;ADpCkD;AACA;AACA;AACA","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-TBMVUI7S.cjs","sourcesContent":[null,"import React from 'react';\r\nimport { icons } from 'lucide-react';\r\n\r\nexport type IconType = React.ComponentType<{ className?: string }> | string;\r\n\r\n/**\r\n * Helper function to render icons dynamically\r\n * Supports both React components (Lucide, MUI, etc.) and string-based icon names\r\n *\r\n * @param icon - Icon component or string name (e.g., \"heart\" or \"arrow-right\")\r\n * @param className - Optional CSS class name to apply to the icon\r\n * @returns React node representing the icon, or null if no icon provided\r\n *\r\n * @example\r\n * // Component-based icon\r\n * import { Heart } from 'lucide-react';\r\n * renderIcon(Heart, 'my-icon-class');\r\n *\r\n * @example\r\n * // String-based Lucide icon (kebab-case converted to PascalCase)\r\n * renderIcon('heart', 'my-icon-class');\r\n * renderIcon('arrow-right', 'my-icon-class');\r\n *\r\n * @example\r\n * // String-based CSS class (for Font Awesome, Remixicon, etc.)\r\n * renderIcon('fas fa-heart', 'my-icon-class');\r\n */\r\nexport const renderIcon = (icon: IconType | undefined, className?: string): React.ReactNode => {\r\n if (!icon) return null;\r\n\r\n if (typeof icon === 'string') {\r\n // Convert kebab-case to PascalCase for Lucide icons\r\n const iconName = icon\r\n .split('-')\r\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\r\n .join('');\r\n\r\n // Try to find the icon in lucide-react\r\n const LucideIcon = icons[iconName as keyof typeof icons] as\r\n React.ComponentType<{ className?: string }> | undefined;\r\n\r\n if (LucideIcon) {\r\n return <LucideIcon className={className} aria-hidden=\"true\" />;\r\n }\r\n\r\n // Fallback: render as a CSS class (for Font Awesome, Remixicon, etc.)\r\n return <i className={`${icon} ${className || ''}`} aria-hidden=\"true\" />;\r\n }\r\n\r\n // It's a React component\r\n const IconComponent = icon;\r\n return <IconComponent className={className} aria-hidden=\"true\" />;\r\n};\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Avatar/Avatar.component.tsx"],"sourcesContent":["import React, { useState } from 'react';\r\nimport { User } from 'lucide-react';\r\nimport type { AvatarProps, AvatarGroupProps, AvatarColor } from './Avatar.types';\r\nimport './Avatar.scss';\r\n\r\n// ============================================================================\r\n// Constants\r\n// ============================================================================\r\n\r\nconst AVATAR_COLORS: AvatarColor[] = [\r\n 'primary',\r\n 'secondary',\r\n 'success',\r\n 'danger',\r\n 'warning',\r\n 'info',\r\n];\r\n\r\n// ============================================================================\r\n// Helpers\r\n// ============================================================================\r\n\r\nfunction getInitials(name: string): string {\r\n const parts = name.trim().split(/\\s+/);\r\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase();\r\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();\r\n}\r\n\r\nfunction getAutoColor(name: string): AvatarColor {\r\n const sum = name.split('').reduce((acc, c) => acc + c.charCodeAt(0), 0);\r\n return AVATAR_COLORS[sum % AVATAR_COLORS.length];\r\n}\r\n\r\n// ============================================================================\r\n// Avatar\r\n// ============================================================================\r\n\r\nexport const Avatar: React.FC<AvatarProps> = ({\r\n src,\r\n alt,\r\n name,\r\n size = 'md',\r\n color,\r\n shape = 'circle',\r\n fallback,\r\n className,\r\n onClick,\r\n}) => {\r\n const [imgError, setImgError] = useState(false);\r\n\r\n const showImage = !!src && !imgError;\r\n const showInitials = !showImage && !!name;\r\n const showFallback = !showImage && !showInitials;\r\n\r\n const resolvedColor: AvatarColor = color ?? (name ? getAutoColor(name) : 'gray');\r\n\r\n const classes = [\r\n 'eidos-avatar',\r\n `eidos-avatar--${size}`,\r\n `eidos-avatar--${shape}`,\r\n showInitials && `eidos-avatar--${resolvedColor}`,\r\n onClick && 'eidos-avatar--clickable',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <div\r\n className={classes}\r\n onClick={onClick}\r\n role={onClick ? 'button' : undefined}\r\n tabIndex={onClick ? 0 : undefined}\r\n onKeyDown={\r\n onClick\r\n ? (e) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n onClick();\r\n }\r\n }\r\n : undefined\r\n }\r\n >\r\n {showImage && (\r\n <img\r\n src={src}\r\n alt={alt ?? name ?? 'Avatar'}\r\n className=\"eidos-avatar-image\"\r\n onError={() => setImgError(true)}\r\n />\r\n )}\r\n {showInitials && <span className=\"eidos-avatar-initials\">{getInitials(name!)}</span>}\r\n {showFallback &&\r\n (fallback ?? <User className=\"eidos-avatar-fallback-icon\" aria-hidden=\"true\" />)}\r\n </div>\r\n );\r\n};\r\n\r\n// ============================================================================\r\n// AvatarGroup\r\n// ============================================================================\r\n\r\nexport const AvatarGroup: React.FC<AvatarGroupProps> = ({ children, max, size, className }) => {\r\n const childArray = React.Children.toArray(children) as React.ReactElement<AvatarProps>[];\r\n const visibleAvatars = max !== undefined ? childArray.slice(0, max) : childArray;\r\n const overflow = childArray.length - visibleAvatars.length;\r\n\r\n return (\r\n <div className={['eidos-avatar-group', className].filter(Boolean).join(' ')}>\r\n {visibleAvatars.map((child, i) => (\r\n <div key={i} className=\"eidos-avatar-group-item\">\r\n {React.cloneElement(child, { size: size ?? child.props.size })}\r\n </div>\r\n ))}\r\n {overflow > 0 && (\r\n <div\r\n className={[\r\n 'eidos-avatar',\r\n `eidos-avatar--${size ?? 'md'}`,\r\n 'eidos-avatar--circle',\r\n 'eidos-avatar--overflow',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n >\r\n <span className=\"eidos-avatar-initials\">+{overflow}</span>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-TQCNQKWF.cjs","../src/components/FileUpload/FileUpload.component.tsx"],"names":[],"mappings":"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","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-TQCNQKWF.cjs","sourcesContent":[null,"import React, { useState, useRef } from 'react';\r\nimport { Upload, X, CircleAlert, FileText } from 'lucide-react';\r\nimport type { FileUploadProps } from './FileUpload.types';\r\n\r\n// ── Helpers ──────────────────────────────────────────────────────────────────\r\n\r\nfunction formatBytes(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\nfunction isFileTypeAccepted(file: File, acceptedTypes: string[]): boolean {\r\n return acceptedTypes.some((type) => {\r\n const trimmed = type.trim();\r\n // Extension match: \".pdf\", \".docx\"\r\n if (trimmed.startsWith('.')) {\r\n return file.name.toLowerCase().endsWith(trimmed.toLowerCase());\r\n }\r\n // Wildcard MIME group: \"image/*\", \"video/*\"\r\n if (trimmed.endsWith('/*')) {\r\n const baseType = trimmed.slice(0, -2);\r\n return file.type.startsWith(`${baseType}/`);\r\n }\r\n // Exact MIME type: \"application/pdf\"\r\n return file.type === trimmed;\r\n });\r\n}\r\n\r\n// ── Component ─────────────────────────────────────────────────────────────────\r\n\r\nexport function FileUpload({\r\n accept,\r\n multiple = false,\r\n maxSize,\r\n maxFiles,\r\n onFilesAccepted,\r\n onFilesRejected,\r\n hint,\r\n disabled = false,\r\n className = '',\r\n}: FileUploadProps) {\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [files, setFiles] = useState<File[]>([]);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n // ── Validation ─────────────────────────────────────────────────────────────\r\n\r\n const validateAndAccept = (fileList: FileList | File[]) => {\r\n const incoming = Array.from(fileList);\r\n\r\n if (maxFiles !== undefined && incoming.length > maxFiles) {\r\n setError(`Maximum ${maxFiles} file${maxFiles === 1 ? '' : 's'} allowed`);\r\n onFilesRejected?.(incoming, 'count');\r\n return;\r\n }\r\n\r\n if (accept) {\r\n const acceptedTypes = accept.split(',').map((t) => t.trim());\r\n const invalid = incoming.filter((f) => !isFileTypeAccepted(f, acceptedTypes));\r\n if (invalid.length > 0) {\r\n setError('One or more files have an unsupported type');\r\n onFilesRejected?.(incoming, 'type');\r\n return;\r\n }\r\n }\r\n\r\n if (maxSize !== undefined) {\r\n const oversized = incoming.filter((f) => f.size > maxSize);\r\n if (oversized.length > 0) {\r\n setError(`File size exceeds the ${formatBytes(maxSize)} limit`);\r\n onFilesRejected?.(oversized, 'size');\r\n return;\r\n }\r\n }\r\n\r\n setError(null);\r\n setFiles(incoming);\r\n onFilesAccepted?.(incoming);\r\n };\r\n\r\n // ── Drag handlers ──────────────────────────────────────────────────────────\r\n\r\n const handleDragEnter = (e: React.DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n if (!disabled) setIsDragging(true);\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\r\n // Prevent default to allow the drop event to fire\r\n e.preventDefault();\r\n };\r\n\r\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n // Only clear the dragging state when leaving the zone entirely,\r\n // not when moving over a child element inside it.\r\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\r\n setIsDragging(false);\r\n }\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n setIsDragging(false);\r\n if (disabled) return;\r\n const { files: dropped } = e.dataTransfer;\r\n if (dropped.length > 0) validateAndAccept(dropped);\r\n };\r\n\r\n // ── Click / keyboard ───────────────────────────────────────────────────────\r\n\r\n const handleZoneClick = () => {\r\n if (!disabled) inputRef.current?.click();\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n handleZoneClick();\r\n }\r\n };\r\n\r\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (e.target.files && e.target.files.length > 0) {\r\n validateAndAccept(e.target.files);\r\n }\r\n // Reset the input value so the same file(s) can be re-selected\r\n e.target.value = '';\r\n };\r\n\r\n // ── File list management ───────────────────────────────────────────────────\r\n\r\n const handleRemoveFile = (index: number) => {\r\n const remaining = files.filter((_, i) => i !== index);\r\n setFiles(remaining);\r\n onFilesAccepted?.(remaining);\r\n };\r\n\r\n // ── CSS classes ────────────────────────────────────────────────────────────\r\n\r\n const rootClasses = ['eidos-file-upload', className].filter(Boolean).join(' ');\r\n\r\n const zoneClasses = [\r\n 'eidos-file-upload-zone',\r\n isDragging && 'eidos-file-upload-zone--dragging',\r\n disabled && 'eidos-file-upload-zone--disabled',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n // Build the auto-generated hint from the constraints when no hint is provided\r\n const autoHint = [\r\n accept ? `Accepted: ${accept}` : null,\r\n maxSize ? `Max size: ${formatBytes(maxSize)}` : null,\r\n maxFiles && multiple ? `Up to ${maxFiles} files` : null,\r\n ]\r\n .filter(Boolean)\r\n .join(' · ');\r\n\r\n const displayHint = hint ?? (autoHint.length > 0 ? autoHint : null);\r\n\r\n return (\r\n <div\r\n className={rootClasses}\r\n role=\"region\"\r\n aria-label=\"File upload\"\r\n aria-disabled={disabled || undefined}\r\n >\r\n <div\r\n className={zoneClasses}\r\n onClick={handleZoneClick}\r\n onDragEnter={handleDragEnter}\r\n onDragOver={handleDragOver}\r\n onDragLeave={handleDragLeave}\r\n onDrop={handleDrop}\r\n onKeyDown={handleKeyDown}\r\n role=\"button\"\r\n tabIndex={disabled ? -1 : 0}\r\n aria-label=\"Upload files - click or drag and drop\"\r\n aria-disabled={disabled || undefined}\r\n >\r\n <div className=\"eidos-file-upload-icon\" aria-hidden=\"true\">\r\n <Upload />\r\n </div>\r\n\r\n <div className=\"eidos-file-upload-text\">\r\n <p className=\"eidos-file-upload-title\">\r\n <em>Click to upload</em>\r\n </p>\r\n <span style={{ fontWeight: 'normal', fontSize: '0.875rem' }}>or drag and drop</span>\r\n {displayHint && <p className=\"eidos-file-upload-hint\">{displayHint}</p>}\r\n </div>\r\n\r\n {/* Hidden native input - triggered programmatically via click() */}\r\n <input\r\n ref={inputRef}\r\n type=\"file\"\r\n accept={accept}\r\n multiple={multiple}\r\n disabled={disabled}\r\n onChange={handleFileChange}\r\n className=\"eidos-file-upload-input-hidden\"\r\n tabIndex={-1}\r\n aria-hidden=\"true\"\r\n />\r\n </div>\r\n\r\n {error && (\r\n <p className=\"eidos-file-upload-error\" role=\"alert\">\r\n <CircleAlert aria-hidden=\"true\" />\r\n {error}\r\n </p>\r\n )}\r\n\r\n {files.length > 0 && (\r\n <ul className=\"eidos-file-upload-list\" aria-label=\"Selected files\">\r\n {files.map((file, index) => (\r\n <li key={`${file.name}-${index}`} className=\"eidos-file-upload-item\">\r\n <div className=\"eidos-file-upload-item-info\">\r\n <FileText aria-hidden=\"true\" />\r\n <span className=\"eidos-file-upload-item-name\">{file.name}</span>\r\n <span className=\"eidos-file-upload-item-size\">{formatBytes(file.size)}</span>\r\n </div>\r\n <button\r\n type=\"button\"\r\n className=\"eidos-file-upload-item-remove\"\r\n onClick={() => handleRemoveFile(index)}\r\n aria-label={`Remove ${file.name}`}\r\n >\r\n <X />\r\n </button>\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nFileUpload.displayName = 'FileUpload';\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-UTENJWSE.cjs","../src/components/Divider/Divider.component.tsx"],"names":[],"mappings":"AAAA;ACSI,+CAAA;AANG,IAAM,QAAA,EAAkC,CAAC;AAAA,EAC9C,UAAA,EAAY,YAAA;AAAA,EACZ,UAAA,EAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,EAAA,GAAM;AACJ,EAAA,uBACE,6BAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,WAAA;AAAA,MACJ,GAAG,IAAA;AAAA,MACJ,SAAA,EAAW,CAAC,eAAA,EAAiB,CAAA,eAAA,EAAkB,SAAS,CAAA,CAAA;AAE7C,IAAA;AACb,EAAA;AAEJ;ADD+D;AACA;AACA;AACA","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-UTENJWSE.cjs","sourcesContent":[null,"import React from 'react';\r\nimport type { DividerProps } from './Divider.types';\r\n\r\nexport const Divider: React.FC<DividerProps> = ({\r\n direction = 'horizontal',\r\n className = '',\r\n ...rest\r\n}) => {\r\n return (\r\n <div\r\n role=\"separator\"\r\n {...rest}\r\n className={['eidos-divider', `eidos-divider--${direction}`, className]\r\n .filter(Boolean)\r\n .join(' ')}\r\n />\r\n );\r\n};\r\n"]}
|