eidos-ui 3.1.1 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/Header.types-0XovUp0T.d.ts +79 -0
- package/dist/Header.types-Ce5Cj301.d.cts +79 -0
- package/dist/{Navigation.types-CpS3EYNz.d.ts → Navigation.types-By5HfPTi.d.ts} +8 -0
- package/dist/{Navigation.types-sUO9wqOp.d.cts → Navigation.types-_MrYqqUI.d.cts} +8 -0
- package/dist/{SegmentedControl.types-Dm4SnwCK.d.cts → SegmentedControl.types-BofrEYyd.d.cts} +16 -1
- package/dist/{SegmentedControl.types-CK8EiShd.d.ts → SegmentedControl.types-cjLwwBAm.d.ts} +16 -1
- package/dist/alert/index.cjs +4 -4
- package/dist/alert/index.js +3 -3
- package/dist/button/index.cjs +3 -3
- package/dist/button/index.js +2 -2
- package/dist/chip/index.cjs +3 -3
- package/dist/chip/index.js +2 -2
- package/dist/{chunk-RWOX2NJN.js → chunk-25PSIDPC.js} +2 -2
- package/dist/{chunk-IFVT5UCY.js → chunk-2QEKSRVX.js} +14 -10
- package/dist/chunk-2QEKSRVX.js.map +1 -0
- package/dist/{chunk-4BKTBV2I.js → chunk-2R77XZEP.js} +6 -2
- package/dist/chunk-2R77XZEP.js.map +1 -0
- package/dist/{chunk-SYWSXSHY.js → chunk-2WP27QAN.js} +8 -8
- package/dist/{chunk-EXITZVB2.js → chunk-3RLGH45H.js} +6 -6
- package/dist/{chunk-442U3W6R.cjs → chunk-4MZ7HEQC.cjs} +5 -5
- package/dist/{chunk-442U3W6R.cjs.map → chunk-4MZ7HEQC.cjs.map} +1 -1
- package/dist/{chunk-R4PU2TBM.js → chunk-4ZWAJTNH.js} +3 -3
- package/dist/{chunk-RHOT7AEI.cjs → chunk-55J4LEKT.cjs} +8 -7
- package/dist/chunk-55J4LEKT.cjs.map +1 -0
- package/dist/{chunk-REVK7IGN.js → chunk-5WH3JMR5.js} +8 -7
- package/dist/chunk-5WH3JMR5.js.map +1 -0
- package/dist/{chunk-GT22EGJP.cjs → chunk-65PC3YDT.cjs} +14 -10
- package/dist/chunk-65PC3YDT.cjs.map +1 -0
- package/dist/{chunk-KQD7CQ4Z.cjs → chunk-6CSUUQ5M.cjs} +10 -6
- package/dist/chunk-6CSUUQ5M.cjs.map +1 -0
- package/dist/{chunk-GR2PMCVN.cjs → chunk-75TDY7XF.cjs} +5 -5
- package/dist/{chunk-GR2PMCVN.cjs.map → chunk-75TDY7XF.cjs.map} +1 -1
- package/dist/{chunk-FRUOA2QU.cjs → chunk-75VXB3H2.cjs} +7 -3
- package/dist/chunk-75VXB3H2.cjs.map +1 -0
- package/dist/{chunk-F26VIKNF.js → chunk-ATL7325T.js} +3 -3
- package/dist/{chunk-TEJIPPZR.js → chunk-BC5I2MYB.js} +7 -4
- package/dist/chunk-BC5I2MYB.js.map +1 -0
- package/dist/{chunk-GHQ6SQPI.js → chunk-BHVHM66Z.js} +6 -6
- package/dist/{chunk-N2IGZIEX.cjs → chunk-CJGFRPAS.cjs} +3 -3
- package/dist/{chunk-N2IGZIEX.cjs.map → chunk-CJGFRPAS.cjs.map} +1 -1
- package/dist/{chunk-GEHL4LKK.cjs → chunk-CUJBNRJJ.cjs} +8 -2
- package/dist/chunk-CUJBNRJJ.cjs.map +1 -0
- package/dist/{chunk-DAXZRNNO.cjs → chunk-D2SKXRKP.cjs} +8 -8
- package/dist/{chunk-DAXZRNNO.cjs.map → chunk-D2SKXRKP.cjs.map} +1 -1
- package/dist/{chunk-KBG77JHC.js → chunk-EAJHEYZM.js} +8 -2
- package/dist/chunk-EAJHEYZM.js.map +1 -0
- package/dist/{chunk-G77YR73R.cjs → chunk-EBSKRZXI.cjs} +8 -8
- package/dist/{chunk-G77YR73R.cjs.map → chunk-EBSKRZXI.cjs.map} +1 -1
- package/dist/{chunk-B5G5XVFJ.cjs → chunk-EH42ND5Q.cjs} +5 -5
- package/dist/{chunk-B5G5XVFJ.cjs.map → chunk-EH42ND5Q.cjs.map} +1 -1
- package/dist/{chunk-WUBQJVB7.cjs → chunk-EL3YXTOW.cjs} +9 -6
- package/dist/chunk-EL3YXTOW.cjs.map +1 -0
- package/dist/{chunk-Y53HCLGW.js → chunk-FALDCW2E.js} +2 -2
- package/dist/{chunk-D5IY2HUV.cjs → chunk-FXZJL2AM.cjs} +5 -5
- package/dist/{chunk-D5IY2HUV.cjs.map → chunk-FXZJL2AM.cjs.map} +1 -1
- package/dist/{chunk-KJZUYC4X.cjs → chunk-HI6WCX4T.cjs} +10 -9
- package/dist/chunk-HI6WCX4T.cjs.map +1 -0
- package/dist/{chunk-LFWPQYWX.cjs → chunk-I3CSPYHG.cjs} +3 -3
- package/dist/{chunk-LFWPQYWX.cjs.map → chunk-I3CSPYHG.cjs.map} +1 -1
- package/dist/{chunk-EZME5CLK.cjs → chunk-J5RMLZ4P.cjs} +3 -3
- package/dist/{chunk-EZME5CLK.cjs.map → chunk-J5RMLZ4P.cjs.map} +1 -1
- package/dist/{chunk-VHMOKXUT.js → chunk-JRLUZDKA.js} +8 -7
- package/dist/chunk-JRLUZDKA.js.map +1 -0
- package/dist/{chunk-LIFUHQH5.cjs → chunk-KBGFDHKD.cjs} +19 -19
- package/dist/{chunk-LIFUHQH5.cjs.map → chunk-KBGFDHKD.cjs.map} +1 -1
- package/dist/{chunk-ZHFPV43D.js → chunk-KNQ6NN6L.js} +5 -5
- package/dist/{chunk-GWQEADRJ.js → chunk-KQJ3IAFT.js} +2 -2
- package/dist/{chunk-74MBKLYI.js → chunk-L23WWO3D.js} +9 -5
- package/dist/chunk-L23WWO3D.js.map +1 -0
- package/dist/{chunk-YJXZR7RL.js → chunk-L5Q6UDY3.js} +4 -4
- package/dist/{chunk-5BX4Q76D.cjs → chunk-LVHZBCTA.cjs} +3 -3
- package/dist/{chunk-5BX4Q76D.cjs.map → chunk-LVHZBCTA.cjs.map} +1 -1
- package/dist/{chunk-SENVA467.js → chunk-M7PF4FKQ.js} +6 -2
- package/dist/chunk-M7PF4FKQ.js.map +1 -0
- package/dist/chunk-ND526PMG.cjs +145 -0
- package/dist/chunk-ND526PMG.cjs.map +1 -0
- package/dist/{chunk-TRLBYA5G.cjs → chunk-NEYLNRVG.cjs} +5 -5
- package/dist/{chunk-TRLBYA5G.cjs.map → chunk-NEYLNRVG.cjs.map} +1 -1
- package/dist/{chunk-ZEZK664O.js → chunk-NWJ6NETE.js} +13 -13
- package/dist/{chunk-SEDKUITE.cjs → chunk-NZO2I5AL.cjs} +7 -7
- package/dist/{chunk-SEDKUITE.cjs.map → chunk-NZO2I5AL.cjs.map} +1 -1
- package/dist/{chunk-5ZL6PYU3.js → chunk-O2AACVSF.js} +3 -3
- package/dist/chunk-O3LG7B2J.cjs +186 -0
- package/dist/chunk-O3LG7B2J.cjs.map +1 -0
- package/dist/{chunk-SHYSLWQG.js → chunk-OAK7HFOJ.js} +4 -4
- package/dist/{chunk-QF2RAUPB.cjs → chunk-OAPOGYA5.cjs} +7 -3
- package/dist/chunk-OAPOGYA5.cjs.map +1 -0
- package/dist/{chunk-SKEWTQJ7.cjs → chunk-OMLXP2CK.cjs} +7 -7
- package/dist/{chunk-SKEWTQJ7.cjs.map → chunk-OMLXP2CK.cjs.map} +1 -1
- package/dist/{chunk-VSTQEHVZ.js → chunk-PR7CVQ4R.js} +10 -7
- package/dist/chunk-PR7CVQ4R.js.map +1 -0
- package/dist/{chunk-6HUHH6Y4.cjs → chunk-Q6ICDKQZ.cjs} +22 -19
- package/dist/chunk-Q6ICDKQZ.cjs.map +1 -0
- package/dist/{chunk-NGVOXM7P.js → chunk-QIITXVRG.js} +4 -4
- package/dist/{chunk-GI6VJYOS.js → chunk-QUDVJUZU.js} +3 -3
- package/dist/chunk-QZX3A4FX.js +886 -0
- package/dist/chunk-QZX3A4FX.js.map +1 -0
- package/dist/chunk-R3WPVTGY.cjs +886 -0
- package/dist/chunk-R3WPVTGY.cjs.map +1 -0
- package/dist/{chunk-SN6EWQDJ.js → chunk-RYOQYYDO.js} +3 -3
- package/dist/chunk-S4S4LB63.js +186 -0
- package/dist/chunk-S4S4LB63.js.map +1 -0
- package/dist/{chunk-67RFMV6K.js → chunk-T2KB3DJJ.js} +2 -2
- package/dist/{chunk-5VM2256W.cjs → chunk-TEVZHN5I.cjs} +11 -10
- package/dist/chunk-TEVZHN5I.cjs.map +1 -0
- package/dist/{chunk-RKA2OJRT.js → chunk-TJC7UELT.js} +18 -18
- package/dist/{chunk-SKTDGCWJ.cjs → chunk-UOOGS6N7.cjs} +48 -48
- package/dist/{chunk-SKTDGCWJ.cjs.map → chunk-UOOGS6N7.cjs.map} +1 -1
- package/dist/{chunk-JRYTZ5B2.cjs → chunk-VRQBDTLT.cjs} +32 -32
- package/dist/{chunk-JRYTZ5B2.cjs.map → chunk-VRQBDTLT.cjs.map} +1 -1
- package/dist/{chunk-AXBYJ2OY.cjs → chunk-WFEORBLC.cjs} +8 -8
- package/dist/{chunk-AXBYJ2OY.cjs.map → chunk-WFEORBLC.cjs.map} +1 -1
- package/dist/chunk-WKDT2XFQ.js +145 -0
- package/dist/chunk-WKDT2XFQ.js.map +1 -0
- package/dist/{chunk-APK5OQRV.cjs → chunk-WWYJNWJY.cjs} +6 -6
- package/dist/{chunk-APK5OQRV.cjs.map → chunk-WWYJNWJY.cjs.map} +1 -1
- package/dist/{chunk-A7WQINIG.js → chunk-X3U7SDOZ.js} +7 -6
- package/dist/chunk-X3U7SDOZ.js.map +1 -0
- package/dist/{chunk-LEMCJW57.js → chunk-YDPEHUMH.js} +2 -2
- package/dist/{chunk-GGSII6Y2.cjs → chunk-ZGT4LT5Y.cjs} +33 -33
- package/dist/{chunk-GGSII6Y2.cjs.map → chunk-ZGT4LT5Y.cjs.map} +1 -1
- package/dist/{chunk-LUL6RZ4M.cjs → chunk-ZNWIHUHZ.cjs} +3 -3
- package/dist/{chunk-LUL6RZ4M.cjs.map → chunk-ZNWIHUHZ.cjs.map} +1 -1
- package/dist/{chunk-S3CT536K.js → chunk-ZPDETHQ7.js} +2 -2
- package/dist/color-picker/index.cjs +4 -3
- package/dist/color-picker/index.cjs.map +1 -1
- package/dist/color-picker/index.js +3 -2
- package/dist/combobox/index.cjs +5 -5
- package/dist/combobox/index.js +4 -4
- package/dist/context-menu/index.cjs +5 -5
- package/dist/context-menu/index.js +4 -4
- package/dist/conversation/index.cjs +28 -0
- package/dist/conversation/index.cjs.map +1 -0
- package/dist/conversation/index.d.cts +254 -0
- package/dist/conversation/index.d.ts +254 -0
- package/dist/conversation/index.js +28 -0
- package/dist/conversation/index.js.map +1 -0
- package/dist/data-grid/index.cjs +16 -16
- package/dist/data-grid/index.d.cts +1 -1
- package/dist/data-grid/index.d.ts +1 -1
- package/dist/data-grid/index.js +15 -15
- package/dist/date-picker/index.cjs +7 -7
- package/dist/date-picker/index.js +6 -6
- package/dist/drawer/index.cjs +4 -4
- package/dist/drawer/index.js +3 -3
- package/dist/dropdown/index.cjs +3 -2
- package/dist/dropdown/index.cjs.map +1 -1
- package/dist/dropdown/index.js +2 -1
- package/dist/header/index.cjs +8 -4
- package/dist/header/index.cjs.map +1 -1
- package/dist/header/index.d.cts +35 -4
- package/dist/header/index.d.ts +35 -4
- package/dist/header/index.js +9 -5
- package/dist/index.cjs +66 -56
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1015 -167
- package/dist/index.d.cts +5 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.js +84 -74
- package/dist/inline-edit/index.cjs +4 -4
- package/dist/inline-edit/index.js +3 -3
- package/dist/input/index.cjs +3 -3
- package/dist/input/index.js +2 -2
- package/dist/menu/index.cjs +4 -4
- package/dist/menu/index.js +3 -3
- package/dist/modal/index.cjs +4 -4
- package/dist/modal/index.js +3 -3
- package/dist/navigation/index.cjs +4 -4
- package/dist/navigation/index.d.cts +2 -2
- package/dist/navigation/index.d.ts +2 -2
- package/dist/navigation/index.js +3 -3
- package/dist/number-input/index.cjs +3 -2
- package/dist/number-input/index.cjs.map +1 -1
- package/dist/number-input/index.js +2 -1
- package/dist/page-layout/index.cjs +10 -9
- package/dist/page-layout/index.cjs.map +1 -1
- package/dist/page-layout/index.d.cts +2 -2
- package/dist/page-layout/index.d.ts +2 -2
- package/dist/page-layout/index.js +9 -8
- package/dist/pagination/index.cjs +7 -7
- package/dist/pagination/index.js +6 -6
- package/dist/segmented-control/index.cjs +3 -3
- package/dist/segmented-control/index.d.cts +2 -2
- package/dist/segmented-control/index.d.ts +2 -2
- package/dist/segmented-control/index.js +2 -2
- package/dist/select/index.cjs +5 -5
- package/dist/select/index.js +4 -4
- package/dist/snackbar/index.cjs +4 -4
- package/dist/snackbar/index.js +3 -3
- package/dist/split-button/index.cjs +5 -5
- package/dist/split-button/index.js +4 -4
- package/dist/table/index.cjs +16 -16
- package/dist/table/index.cjs.map +1 -1
- package/dist/table/index.js +15 -15
- package/dist/tabs/index.cjs +3 -3
- package/dist/tabs/index.js +2 -2
- package/dist/tag-input/index.cjs +5 -5
- package/dist/tag-input/index.js +4 -4
- package/dist/textarea/index.cjs +3 -3
- package/dist/textarea/index.js +2 -2
- package/dist/theme-editor/index.cjs +11 -11
- package/dist/theme-editor/index.js +10 -10
- package/dist/theme-provider/index.cjs +3 -3
- package/dist/theme-provider/index.js +2 -2
- package/dist/toolbar/index.cjs +6 -6
- package/dist/toolbar/index.js +5 -5
- package/package.json +1 -1
- package/dist/Header.types-B3QtuiL-.d.cts +0 -21
- package/dist/Header.types-C6w0FBY8.d.ts +0 -21
- package/dist/chunk-4BKTBV2I.js.map +0 -1
- package/dist/chunk-5VM2256W.cjs.map +0 -1
- package/dist/chunk-6HUHH6Y4.cjs.map +0 -1
- package/dist/chunk-74MBKLYI.js.map +0 -1
- package/dist/chunk-A7WQINIG.js.map +0 -1
- package/dist/chunk-AAA6TR5I.cjs +0 -67
- package/dist/chunk-AAA6TR5I.cjs.map +0 -1
- package/dist/chunk-FRUOA2QU.cjs.map +0 -1
- package/dist/chunk-GEHL4LKK.cjs.map +0 -1
- package/dist/chunk-GT22EGJP.cjs.map +0 -1
- package/dist/chunk-IFVT5UCY.js.map +0 -1
- package/dist/chunk-KBG77JHC.js.map +0 -1
- package/dist/chunk-KJZUYC4X.cjs.map +0 -1
- package/dist/chunk-KQD7CQ4Z.cjs.map +0 -1
- package/dist/chunk-O5WEKLNF.js +0 -21
- package/dist/chunk-O5WEKLNF.js.map +0 -1
- package/dist/chunk-P7IQY5YH.js +0 -67
- package/dist/chunk-P7IQY5YH.js.map +0 -1
- package/dist/chunk-QF2RAUPB.cjs.map +0 -1
- package/dist/chunk-REVK7IGN.js.map +0 -1
- package/dist/chunk-RHOT7AEI.cjs.map +0 -1
- package/dist/chunk-SENVA467.js.map +0 -1
- package/dist/chunk-TEJIPPZR.js.map +0 -1
- package/dist/chunk-VHMOKXUT.js.map +0 -1
- package/dist/chunk-VSTQEHVZ.js.map +0 -1
- package/dist/chunk-WUBQJVB7.cjs.map +0 -1
- package/dist/chunk-Z4SLV6WG.cjs +0 -21
- package/dist/chunk-Z4SLV6WG.cjs.map +0 -1
- /package/dist/{chunk-RWOX2NJN.js.map → chunk-25PSIDPC.js.map} +0 -0
- /package/dist/{chunk-SYWSXSHY.js.map → chunk-2WP27QAN.js.map} +0 -0
- /package/dist/{chunk-EXITZVB2.js.map → chunk-3RLGH45H.js.map} +0 -0
- /package/dist/{chunk-R4PU2TBM.js.map → chunk-4ZWAJTNH.js.map} +0 -0
- /package/dist/{chunk-F26VIKNF.js.map → chunk-ATL7325T.js.map} +0 -0
- /package/dist/{chunk-GHQ6SQPI.js.map → chunk-BHVHM66Z.js.map} +0 -0
- /package/dist/{chunk-Y53HCLGW.js.map → chunk-FALDCW2E.js.map} +0 -0
- /package/dist/{chunk-ZHFPV43D.js.map → chunk-KNQ6NN6L.js.map} +0 -0
- /package/dist/{chunk-GWQEADRJ.js.map → chunk-KQJ3IAFT.js.map} +0 -0
- /package/dist/{chunk-YJXZR7RL.js.map → chunk-L5Q6UDY3.js.map} +0 -0
- /package/dist/{chunk-ZEZK664O.js.map → chunk-NWJ6NETE.js.map} +0 -0
- /package/dist/{chunk-5ZL6PYU3.js.map → chunk-O2AACVSF.js.map} +0 -0
- /package/dist/{chunk-SHYSLWQG.js.map → chunk-OAK7HFOJ.js.map} +0 -0
- /package/dist/{chunk-NGVOXM7P.js.map → chunk-QIITXVRG.js.map} +0 -0
- /package/dist/{chunk-GI6VJYOS.js.map → chunk-QUDVJUZU.js.map} +0 -0
- /package/dist/{chunk-SN6EWQDJ.js.map → chunk-RYOQYYDO.js.map} +0 -0
- /package/dist/{chunk-67RFMV6K.js.map → chunk-T2KB3DJJ.js.map} +0 -0
- /package/dist/{chunk-RKA2OJRT.js.map → chunk-TJC7UELT.js.map} +0 -0
- /package/dist/{chunk-LEMCJW57.js.map → chunk-YDPEHUMH.js.map} +0 -0
- /package/dist/{chunk-S3CT536K.js.map → chunk-ZPDETHQ7.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-75VXB3H2.cjs","../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"],"names":["jsx"],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACJA,8BAA8B;AAMvB,IAAM,gBAAA,EAAkB,kCAAA,EAAsC,KAAA,EAAO,EAAE,CAAC,CAAA;ADC/E;AACA;AEDS,+CAAA;AAJF,IAAM,iBAAA,EAA4E,CAAC;AAAA,EACxF,QAAA;AAAA,EACA,MAAA,EAAQ;AACV,CAAA,EAAA,GAAM;AACJ,EAAA,uBAAO,6BAAA,eAAC,CAAgB,QAAA,EAAhB,EAAyB,KAAA,EAAO,EAAE,MAAM,CAAA,EAAI,SAAA,CAAS,CAAA;AAC/D,CAAA;AFQA;AACA;AGjBA;AAGO,IAAM,mBAAA,EAAqB,CAAA,EAAA,GAAM;AACtC,EAAA,OAAO,+BAAA,eAA0B,CAAA;AACnC,CAAA;AHiBA;AACA;AIvBA;AACA,qCAA6B;AAgazB;AA1ZJ,IAAM,iBAAA,EAA4C,CAAC;AAAA,EACjD,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,EAAW,mBAAA,EAAqB,QAAA;AAAA,EAChC,MAAA,EAAQ,OAAA;AAAA,EACR,MAAA,EAAQ,CAAA;AAAA,EACR,SAAA,EAAW,KAAA;AAAA,EACX,YAAA,EAAc,KAAA;AAAA,EACd,iBAAA,EAAmB,EAAA;AAAA,EACnB,iBAAA,EAAmB,EAAA;AAAA,EACnB,oBAAA,EAAsB,IAAA;AAAA,EACtB,cAAA,EAAgB,IAAA;AAAA,EAChB,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA,EAAY,IAAA;AAAA,EACZ,UAAA,EAAY,KAAA;AAAA,EACZ,UAAA,EAAY,kBAAA;AAAA,EACZ,SAAA,EAAW,KAAA;AAAA,EACX,aAAA;AAAA,EACA;AACF,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,QAAA,EAAU,kBAAA,CAAmB,CAAA;AACnC,EAAA,MAAM,YAAA,EAAc,cAAA,IAAkB,KAAA,EAAA,EAAY,cAAA,EAAgB,OAAA,CAAQ,KAAA;AAC1E,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,EAAA,EAAI,6BAAA;AAAwB,IAChE,SAAA,EAAW,WAAA;AAAA,IACX,YAAA,EAAc,KAAA;AAAA,IACd,QAAA,EAAU,EAAE,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,SAAA,EAAW,mBAAmB;AAAA,EAC7D,CAAC,CAAA;AACD,EAAA,MAAM,WAAA,EAAa,2BAAA,IAA2B,CAAA;AAC9C,EAAA,MAAM,WAAA,EAAa,2BAAA,IAA2B,CAAA;AAC9C,EAAA,MAAM,WAAA,EAAa,2BAAA,KAAkD,CAAS,CAAA;AAC9E,EAAA,MAAM,kBAAA,EAAoB,2BAAA,KAA2B,CAAS,CAAA;AAC9D,EAAA,MAAM,eAAA,EAAiB,2BAAA,KAAY,CAAA;AAWnC,EAAA,MAAM,kBAAA,EAAoB,gCAAA;AAAA,IACxB,CAAA,EAAA,oCAA0B,kBAAA,2BAAoB,SAAA,UAAW,UAAA,CAAW,SAAA;AAAA,IACpE,CAAC,kBAAkB;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,uBAAA,EAAyB,gCAAA;AAAA,IAC7B,CAAC,WAAA,EAAA,GAAyB;AAKxB,MAAA,MAAM,OAAA,EAA0C,EAAE,KAAA,EAAO,cAAc,CAAA;AAEvE,MAAA,GAAA,CAAI,UAAA,GAAA,iBAAc,kBAAA,6BAAoB,UAAA,GAAW,UAAA,CAAW,OAAA,CAAA,EAAU;AACpE,QAAA,MAAM,aAAA,EAAe,WAAA,CAAY,KAAA;AACjC,QAAA,MAAA,CAAO,SAAA,EAAW,YAAA;AAAA,MACpB;AAEA,MAAA,GAAA,CAAI,SAAA,IAAa,KAAA,CAAA,EAAW;AAC1B,QAAA,MAAA,CAAO,SAAA,EAAW,OAAO,SAAA,IAAa,SAAA,EAAW,CAAA,EAAA;AACnD,MAAA;AAC4B,MAAA;AACD,QAAA;AACL,UAAA;AACb,QAAA;AACiC,UAAA;AACxC,QAAA;AACF,MAAA;AAC6B,MAAA;AACa,QAAA;AAC1C,MAAA;AAC6B,MAAA;AACD,QAAA;AACL,UAAA;AACd,QAAA;AACmC,UAAA;AAC1C,QAAA;AACF,MAAA;AAEuD,MAAA;AAC9B,MAAA;AACJ,QAAA;AACd,MAAA;AACc,QAAA;AACrB,MAAA;AAEO,MAAA;AACT,IAAA;AACoD,IAAA;AACtD,EAAA;AAEiC,EAAA;AACiB,IAAA;AACjB,MAAA;AACC,MAAA;AAClB,MAAA;AAEyC,MAAA;AAC3C,MAAA;AACC,MAAA;AAGgB,MAAA;AACV,QAAA;AACR,UAAA;AACoC,YAAA;AACpC,UAAA;AACoC,YAAA;AACzC,UAAA;AACqB,YAAA;AACvB,QAAA;AACC,MAAA;AACuB,MAAA;AACT,QAAA;AACR,UAAA;AACqC,YAAA;AACrC,UAAA;AACmC,YAAA;AACxC,UAAA;AACqB,YAAA;AACvB,QAAA;AACC,MAAA;AAEyB,MAAA;AACrB,QAAA;AAC0C,UAAA;AACtC,UAAA;AACP,UAAA;AACG,QAAA;AACwB,UAAA;AACpB,UAAA;AACP,UAAA;AACG,QAAA;AACG,UAAA;AACwC,UAAA;AAC9C,UAAA;AACG,QAAA;AACG,UAAA;AACqB,UAAA;AAC3B,UAAA;AACJ,MAAA;AAEsC,MAAA;AACxB,QAAA;AACe,QAAA;AACc,MAAA;AAC7B,QAAA;AACiC,QAAA;AACA,MAAA;AACjC,QAAA;AACe,QAAA;AACc,MAAA;AAC7B,QAAA;AACkC,QAAA;AAChD,MAAA;AAQmD,MAAA;AAEC,MAAA;AAEtB,MAAA;AAChC,IAAA;AAC0B,IAAA;AAC5B,EAAA;AAEuC,EAAA;AACU,IAAA;AAEtB,IAAA;AAEyB,IAAA;AACP,MAAA;AACC,MAAA;AACL,QAAA;AACI,QAAA;AAEN,QAAA;AAEL,QAAA;AACvB,UAAA;AAC8B,UAAA;AACjC,QAAA;AACJ,MAAA;AAEyB,MAAA;AAC1B,IAAA;AACA,EAAA;AACa,IAAA;AACA,IAAA;AACd,IAAA;AACA,IAAA;AACD,EAAA;AAE4C,EAAA;AAC7B,IAAA;AAEe,IAAA;AACC,MAAA;AACvB,QAAA;AACQ,QAAA;AACG,QAAA;AACd,MAAA;AACG,IAAA;AACc,MAAA;AACiB,QAAA;AACM,UAAA;AACxC,QAAA;AACuC,QAAA;AACb,UAAA;AAEsB,UAAA;AAC/C,QAAA;AACH,MAAA;AAEe,MAAA;AACyB,QAAA;AACR,UAAA;AACvB,YAAA;AACQ,YAAA;AACG,YAAA;AACd,UAAA;AACI,QAAA;AACH,MAAA;AACuB,QAAA;AACvB,UAAA;AACQ,UAAA;AACG,UAAA;AACd,QAAA;AACJ,MAAA;AACF,IAAA;AAC4C,EAAA;AAE9B,EAAA;AACmB,IAAA;AACF,MAAA;AACC,QAAA;AACvB,UAAA;AACQ,UAAA;AACG,UAAA;AACd,QAAA;AACJ,MAAA;AACF,IAAA;AAEqC,IAAA;AACd,IAAA;AAC8B,MAAA;AACrD,IAAA;AAEa,IAAA;AACY,MAAA;AACiB,QAAA;AACxC,MAAA;AACF,IAAA;AAC0B,EAAA;AAED,EAAA;AACF,IAAA;AACsB,MAAA;AAEtB,MAAA;AAEqB,MAAA;AACxC,QAAA;AACF,MAAA;AAE2C,MAAA;AACzC,QAAA;AACF,MAAA;AAE+C,MAAA;AACV,MAAA;AACE,QAAA;AAEN,QAAA;AACA,UAAA;AACgB,YAAA;AAC7C,UAAA;AAEwC,UAAA;AACtC,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA;AAE4B,MAAA;AACvB,QAAA;AACQ,QAAA;AACG,QAAA;AACd,MAAA;AACJ,IAAA;AAC+C,IAAA;AACjD,EAAA;AAEwB,EAAA;AACI,IAAA;AACuB,MAAA;AACjB,QAAA;AACvB,UAAA;AACQ,UAAA;AACG,UAAA;AACd,QAAA;AACJ,MAAA;AACF,IAAA;AACuC,IAAA;AACzC,EAAA;AAEgB,EAAA;AAC2B,IAAA;AAGxB,IAAA;AAIoB,MAAA;AACI,MAAA;AAEN,MAAA;AAEL,MAAA;AACvB,QAAA;AAC8B,QAAA;AACnB,QAAA;AACd,MAAA;AACJ,IAAA;AACC,EAAA;AACa,IAAA;AACA,IAAA;AACd,IAAA;AACA,IAAA;AACD,EAAA;AAEe,EAAA;AACa,IAAA;AACgB,MAAA;AAGzB,MAAA;AAIqB,QAAA;AACI,QAAA;AAEN,QAAA;AAEL,QAAA;AACvB,UAAA;AAC8B,UAAA;AACjC,QAAA;AACJ,MAAA;AACF,IAAA;AAE8C,IAAA;AACI,IAAA;AACjD,EAAA;AACa,IAAA;AACA,IAAA;AACd,IAAA;AACA,IAAA;AACD,EAAA;AAEe,EAAA;AACe,IAAA;AACuB,MAAA;AAET,MAAA;AAC3C,IAAA;AAEa,IAAA;AACsC,MAAA;AACL,MAAA;AAC9C,IAAA;AACwC,EAAA;AAE1B,EAAA;AACe,IAAA;AACY,MAAA;AACa,MAAA;AACtD,IAAA;AAEa,IAAA;AAC+B,MAAA;AACF,MAAA;AAC1C,IAAA;AAC+C,EAAA;AAEjC,EAAA;AACD,IAAA;AACa,MAAA;AACS,QAAA;AACjC,MAAA;AAC+B,MAAA;AACiB,QAAA;AAChD,MAAA;AACF,IAAA;AACG,EAAA;AAID,EAAA;AAAAA,oBAAAA;AAAC,MAAA;AAAA,MAAA;AACM,QAAA;AACI,QAAA;AACwC,QAAA;AAC5C,QAAA;AACK,QAAA;AAET,QAAA;AAAA,MAAA;AACH,IAAA;AAEE,IAAA;AACEA,sBAAAA;AAAC,QAAA;AAAA,QAAA;AACM,UAAA;AACgB,UAAA;AACA,UAAA;AACiB,UAAA;AAC3B,UAAA;AACJ,UAAA;AACuB,YAAA;AACC,YAAA;AAC1B,YAAA;AAC0C,8BAAA;AAC7C,YAAA;AACF,UAAA;AACK,UAAA;AAEJ,UAAA;AAAA,QAAA;AACH,MAAA;AACS,MAAA;AACX,IAAA;AACJ,EAAA;AAEJ;AAE4D;AACvB,EAAA;AACmB,EAAA;AAG3B,EAAA;AAI7B;AAEuB;AJjEmC;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-75VXB3H2.cjs","sourcesContent":[null,"import { createContext } from 'react';\n\nexport interface DropdownContextValue {\n level: number;\n}\n\nexport const DropdownContext = createContext<DropdownContextValue>({ level: 0 });\n","import React from 'react';\nimport { DropdownContext } from './Dropdown.context.types';\n\nexport const DropdownProvider: React.FC<{ children: React.ReactNode; level?: number }> = ({\n children,\n level = 0,\n}) => {\n return <DropdownContext.Provider value={{ level }}>{children}</DropdownContext.Provider>;\n};\n","import { useContext } from 'react';\nimport { DropdownContext } from './Dropdown.context.types';\n\nexport const useDropdownContext = () => {\n return useContext(DropdownContext);\n};\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { fullWidthModifier } from '../../utils';\nimport type { DropdownProps, DropdownState } from './Dropdown.types';\nimport { DropdownProvider } from './Dropdown.context';\nimport { useDropdownContext } from './Dropdown.hooks';\n\nconst DropdownInternal: React.FC<DropdownProps> = ({\n trigger,\n content,\n placement: preferredPlacement = 'bottom',\n align = 'start',\n delay = 0,\n disabled = false,\n defaultOpen = false,\n triggerClassName = '',\n contentClassName = '',\n closeOnClickOutside = true,\n closeOnEscape = true,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n autoWidth = true,\n fullWidth = false,\n triggerRef: externalTriggerRef,\n isNested = false,\n dropdownLevel,\n dropdownGroup,\n}) => {\n const context = useDropdownContext();\n const actualLevel = dropdownLevel !== undefined ? dropdownLevel : context.level;\n const [dropdownState, setDropdownState] = useState<DropdownState>({\n isVisible: defaultOpen,\n isPositioned: false,\n position: { top: 0, left: 0, placement: preferredPlacement },\n });\n const triggerRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const animationFrameRef = useRef<number | undefined>(undefined);\n const isScrollingRef = useRef(false);\n\n // The element to actually measure/anchor against. When a consumer passes\n // `triggerRef`, that's an explicit statement of \"this is what I want the\n // dropdown positioned relative to\" - it must win over the internal wrapper\n // div, not just inform sizing. Consumers occasionally need `trigger` to be\n // a small anchor node (e.g. a 0-height span) sitting inside a larger,\n // variable-content field (chips, wrapped text); anchoring position to the\n // wrapper instead of that field silently drifts as soon as the field's\n // internal layout changes, since the wrapper only ever contains `trigger`\n // itself, never the field around it.\n const getTriggerElement = useCallback(\n (): HTMLElement | null => externalTriggerRef?.current ?? triggerRef.current,\n [externalTriggerRef],\n );\n\n const calculateDynamicSizing = useCallback(\n (triggerRect: DOMRect) => {\n // Shrink the panel to its content by default. This prevents the\n // position:fixed element from expanding to viewport width when children\n // use `width:100%` or `flex:1`. `minWidth` (set below) still wins when\n // the trigger is wider than the content, as CSS min-width overrides width.\n const styles: Record<string, string | number> = { width: 'max-content' };\n\n if (autoWidth && (externalTriggerRef?.current || triggerRef.current)) {\n const triggerWidth = triggerRect.width;\n styles.minWidth = triggerWidth;\n }\n\n if (minWidth !== undefined) {\n styles.minWidth = typeof minWidth === 'number' ? `${minWidth}px` : minWidth;\n }\n if (maxWidth !== undefined) {\n if (maxWidth === 'auto') {\n styles.maxWidth = 'none';\n } else {\n styles.maxWidth = typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth;\n }\n }\n if (minHeight !== undefined) {\n styles.minHeight = typeof minHeight === 'number' ? `${minHeight}px` : minHeight;\n }\n if (maxHeight !== undefined) {\n if (maxHeight === 'auto') {\n styles.maxHeight = 'none';\n } else {\n styles.maxHeight = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n }\n }\n\n const hasHeightConstraint = minHeight !== undefined || maxHeight !== undefined;\n if (hasHeightConstraint) {\n styles.overflowY = 'auto';\n } else {\n styles.overflowY = 'visible';\n }\n\n return styles;\n },\n [autoWidth, externalTriggerRef, minWidth, maxWidth, minHeight, maxHeight],\n );\n\n const calculateOptimalPosition = useCallback(\n (triggerRect: DOMRect, contentRect: DOMRect) => {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const gap = 8;\n\n let placement: 'top' | 'bottom' | 'left' | 'right' = preferredPlacement;\n let top = 0;\n let left = 0;\n\n // Helpers for cross-axis alignment\n const alignedLeft = (() => {\n switch (align) {\n case 'end':\n return triggerRect.right - contentRect.width;\n case 'center':\n return triggerRect.left + (triggerRect.width - contentRect.width) / 2;\n default:\n return triggerRect.left; // \"start\"\n }\n })();\n const alignedTop = (() => {\n switch (align) {\n case 'end':\n return triggerRect.bottom - contentRect.height;\n case 'center':\n return triggerRect.top + (triggerRect.height - contentRect.height) / 2;\n default:\n return triggerRect.top; // \"start\"\n }\n })();\n\n switch (preferredPlacement) {\n case 'top':\n top = triggerRect.top - contentRect.height - gap;\n left = alignedLeft;\n break;\n case 'bottom':\n top = triggerRect.bottom + gap;\n left = alignedLeft;\n break;\n case 'left':\n top = alignedTop;\n left = triggerRect.left - contentRect.width - gap;\n break;\n case 'right':\n top = alignedTop;\n left = triggerRect.right + gap;\n break;\n }\n\n if (placement === 'top' && top < gap) {\n placement = 'bottom';\n top = triggerRect.bottom + gap;\n } else if (placement === 'bottom' && top + contentRect.height > viewportHeight - gap) {\n placement = 'top';\n top = triggerRect.top - contentRect.height - gap;\n } else if (placement === 'left' && left < gap) {\n placement = 'right';\n left = triggerRect.right + gap;\n } else if (placement === 'right' && left + contentRect.width > viewportWidth - gap) {\n placement = 'left';\n left = triggerRect.left - contentRect.width - gap;\n }\n\n // Always clamp to both viewport edges - not just the near one - regardless\n // of whether an explicit min/max size was passed. `autoWidth` consumers\n // (Combobox, Select, TagInput suggestions, Menu, ...) never set\n // minWidth/maxWidth, so gating this on those props left the far edge\n // (right/bottom) completely unclamped and let content overflow the\n // viewport whenever it rendered wider/taller than its trigger.\n top = Math.max(gap, Math.min(top, viewportHeight - contentRect.height - gap));\n\n left = Math.max(gap, Math.min(left, viewportWidth - contentRect.width - gap));\n\n return { top, left, placement };\n },\n [preferredPlacement, align],\n );\n\n const handleScroll = useCallback(() => {\n if (!dropdownState.isVisible || !dropdownState.isPositioned || isScrollingRef.current) return;\n\n isScrollingRef.current = true;\n\n animationFrameRef.current = requestAnimationFrame(() => {\n const triggerElement = getTriggerElement();\n if (triggerElement && contentRef.current) {\n const triggerRect = triggerElement.getBoundingClientRect();\n const contentRect = contentRef.current.getBoundingClientRect();\n\n const { top, left, placement } = calculateOptimalPosition(triggerRect, contentRect);\n\n setDropdownState((prev) => ({\n ...prev,\n position: { top, left, placement },\n }));\n }\n\n isScrollingRef.current = false;\n });\n }, [\n dropdownState.isVisible,\n dropdownState.isPositioned,\n calculateOptimalPosition,\n getTriggerElement,\n ]);\n\n const handleTriggerClick = useCallback(() => {\n if (disabled) return;\n\n if (dropdownState.isVisible) {\n setDropdownState((prev) => ({\n ...prev,\n isVisible: false,\n isPositioned: false,\n }));\n } else {\n if (dropdownGroup) {\n const siblingDropdowns = document.querySelectorAll(\n `[data-dropdown-group=\"${dropdownGroup}\"][data-dropdown-content]`,\n );\n siblingDropdowns.forEach((dropdown) => {\n const dropdownElement = dropdown as HTMLElement;\n\n dropdownElement.dispatchEvent(new CustomEvent('closeSibling'));\n });\n }\n\n if (delay > 0) {\n timeoutRef.current = setTimeout(() => {\n setDropdownState((prev) => ({\n ...prev,\n isVisible: true,\n isPositioned: false,\n }));\n }, delay);\n } else {\n setDropdownState((prev) => ({\n ...prev,\n isVisible: true,\n isPositioned: false,\n }));\n }\n }\n }, [disabled, dropdownState.isVisible, delay, dropdownGroup]);\n\n useEffect(() => {\n const handleCloseSibling = () => {\n if (dropdownState.isVisible) {\n setDropdownState((prev) => ({\n ...prev,\n isVisible: false,\n isPositioned: false,\n }));\n }\n };\n\n const currentContentRef = contentRef.current;\n if (currentContentRef) {\n currentContentRef.addEventListener('closeSibling', handleCloseSibling);\n }\n\n return () => {\n if (currentContentRef) {\n currentContentRef.removeEventListener('closeSibling', handleCloseSibling);\n }\n };\n }, [dropdownState.isVisible]);\n\n const handleClickOutside = useCallback(\n (event: MouseEvent) => {\n if (!closeOnClickOutside || !dropdownState.isVisible) return;\n\n const target = event.target as Node;\n\n if (contentRef.current?.contains(target)) {\n return;\n }\n\n if (getTriggerElement()?.contains(target)) {\n return;\n }\n\n const allDropdowns = document.querySelectorAll('[data-dropdown-content]');\n for (const dropdown of allDropdowns) {\n if (dropdown === contentRef.current) continue;\n\n if (dropdown.contains(target)) {\n const clickedDropdownLevel = parseInt(\n dropdown.getAttribute('data-dropdown-level') || '0',\n );\n\n if (clickedDropdownLevel > actualLevel) {\n return;\n }\n }\n }\n\n setDropdownState((prev) => ({\n ...prev,\n isVisible: false,\n isPositioned: false,\n }));\n },\n [closeOnClickOutside, dropdownState.isVisible, actualLevel, getTriggerElement],\n );\n\n const handleEscapeKey = useCallback(\n (event: KeyboardEvent) => {\n if (closeOnEscape && event.key === 'Escape' && dropdownState.isVisible) {\n setDropdownState((prev) => ({\n ...prev,\n isVisible: false,\n isPositioned: false,\n }));\n }\n },\n [closeOnEscape, dropdownState.isVisible],\n );\n\n useEffect(() => {\n const triggerElement = getTriggerElement();\n if (\n dropdownState.isVisible &&\n !dropdownState.isPositioned &&\n contentRef.current &&\n triggerElement\n ) {\n const triggerRect = triggerElement.getBoundingClientRect();\n const contentRect = contentRef.current.getBoundingClientRect();\n\n const { top, left, placement } = calculateOptimalPosition(triggerRect, contentRect);\n\n setDropdownState((prev) => ({\n ...prev,\n position: { top, left, placement },\n isPositioned: true,\n }));\n }\n }, [\n dropdownState.isVisible,\n dropdownState.isPositioned,\n calculateOptimalPosition,\n getTriggerElement,\n ]);\n\n useEffect(() => {\n const handleResize = () => {\n const triggerElement = getTriggerElement();\n if (\n dropdownState.isVisible &&\n dropdownState.isPositioned &&\n contentRef.current &&\n triggerElement\n ) {\n const triggerRect = triggerElement.getBoundingClientRect();\n const contentRect = contentRef.current.getBoundingClientRect();\n\n const { top, left, placement } = calculateOptimalPosition(triggerRect, contentRect);\n\n setDropdownState((prev) => ({\n ...prev,\n position: { top, left, placement },\n }));\n }\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [\n dropdownState.isVisible,\n dropdownState.isPositioned,\n calculateOptimalPosition,\n getTriggerElement,\n ]);\n\n useEffect(() => {\n if (dropdownState.isVisible) {\n window.addEventListener('scroll', handleScroll, { passive: true });\n\n document.body.addEventListener('scroll', handleScroll, { passive: true });\n }\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n document.body.removeEventListener('scroll', handleScroll);\n };\n }, [dropdownState.isVisible, handleScroll]);\n\n useEffect(() => {\n if (dropdownState.isVisible) {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscapeKey);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscapeKey);\n };\n }, [dropdownState.isVisible, handleClickOutside, handleEscapeKey]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n };\n }, []);\n\n return (\n <>\n <div\n ref={triggerRef}\n onClick={handleTriggerClick}\n className={`eidos-dropdown-trigger ${fullWidth ? fullWidthModifier('eidos-dropdown-trigger') : ''} ${triggerClassName}`}\n role=\"button\"\n tabIndex={-1}\n >\n {trigger}\n </div>\n {dropdownState.isVisible &&\n createPortal(\n <div\n ref={contentRef}\n data-dropdown-content\n data-dropdown-level={actualLevel}\n data-dropdown-group={dropdownGroup || ''}\n className={`eidos-dropdown-content eidos-dropdown-content--${dropdownState.position.placement} ${isNested ? 'eidos-dropdown-content--nested' : ''} ${dropdownState.isPositioned ? 'eidos-dropdown-content--positioned' : ''} ${contentClassName || ''}`}\n style={{\n top: dropdownState.position.top,\n left: dropdownState.position.left,\n ...calculateDynamicSizing(\n getTriggerElement()?.getBoundingClientRect() || new DOMRect(),\n ),\n }}\n role=\"menu\"\n >\n {content}\n </div>,\n document.body,\n )}\n </>\n );\n};\n\nexport const Dropdown: React.FC<DropdownProps> = (props) => {\n const context = useDropdownContext();\n const nextLevel = props.dropdownLevel !== undefined ? props.dropdownLevel : context.level + 1;\n\n return (\n <DropdownProvider level={nextLevel}>\n <DropdownInternal {...props} />\n </DropdownProvider>\n );\n};\n\nDropdown.displayName = 'Dropdown';\n"]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-PY2376XI.js";
|
|
4
4
|
import {
|
|
5
5
|
Menu
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-KNQ6NN6L.js";
|
|
7
7
|
import {
|
|
8
8
|
Avatar
|
|
9
9
|
} from "./chunk-XJBWFDDE.js";
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
} from "./chunk-DRXPTACG.js";
|
|
13
13
|
import {
|
|
14
14
|
IconButton
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-L5Q6UDY3.js";
|
|
16
16
|
|
|
17
17
|
// src/components/Toolbar/Toolbar.component.tsx
|
|
18
18
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -42,4 +42,4 @@ var Toolbar = ({
|
|
|
42
42
|
export {
|
|
43
43
|
Toolbar
|
|
44
44
|
};
|
|
45
|
-
//# sourceMappingURL=chunk-
|
|
45
|
+
//# sourceMappingURL=chunk-ATL7325T.js.map
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Input
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JRLUZDKA.js";
|
|
4
4
|
import {
|
|
5
5
|
Dropdown
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2R77XZEP.js";
|
|
7
|
+
import {
|
|
8
|
+
fullWidthModifier
|
|
9
|
+
} from "./chunk-EAJHEYZM.js";
|
|
7
10
|
|
|
8
11
|
// src/components/Combobox/Combobox.component.tsx
|
|
9
12
|
import { useState, useCallback, useRef, useEffect, useMemo, useId } from "react";
|
|
@@ -367,7 +370,7 @@ var Combobox = ({
|
|
|
367
370
|
const posIconClick = hasClearableValue ? handleClearClick : handleChevronClick;
|
|
368
371
|
const containerClasses = [
|
|
369
372
|
"eidos-combobox",
|
|
370
|
-
fullWidth && "eidos-combobox
|
|
373
|
+
fullWidth && fullWidthModifier("eidos-combobox"),
|
|
371
374
|
error && "eidos-combobox--error",
|
|
372
375
|
disabled && "eidos-combobox--disabled",
|
|
373
376
|
className
|
|
@@ -451,4 +454,4 @@ Combobox.displayName = "Combobox";
|
|
|
451
454
|
export {
|
|
452
455
|
Combobox
|
|
453
456
|
};
|
|
454
|
-
//# sourceMappingURL=chunk-
|
|
457
|
+
//# sourceMappingURL=chunk-BC5I2MYB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Combobox/Combobox.component.tsx"],"sourcesContent":["import React, { useState, useCallback, useRef, useEffect, useMemo, useId } from 'react';\nimport { Check, ChevronDown, X, Loader2, CircleAlert } from 'lucide-react';\nimport { Input } from '../Input/Input.component';\nimport { Dropdown } from '../Dropdown/Dropdown.component';\nimport { fullWidthModifier } from '../../utils';\nimport type { ComboboxProps, ComboboxOption } from './Combobox.types';\nimport './Combobox.scss';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\ntype OptionEntry =\n | { type: 'group'; group: string; key: string }\n | { type: 'option'; option: ComboboxOption; index: number; key: string };\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\nexport const Combobox: React.FC<ComboboxProps> = ({\n options = [],\n value,\n defaultValue,\n onChange,\n onSearch,\n placeholder = 'Search or select…',\n loading = false,\n loadingText = 'Searching…',\n emptyText = 'No results found',\n allowFreeText = false,\n clearable = true,\n disabled = false,\n size = 'md',\n label,\n error,\n hint,\n fullWidth = false,\n className = '',\n maxHeight = '300px',\n renderOption,\n}) => {\n const uid = useId();\n\n // ─── Refs ─────────────────────────────────────────────────────────────────\n\n /** Entire combobox wrapper - used for click-outside detection */\n const containerRef = useRef<HTMLDivElement>(null);\n\n /** The trigger wrapper div - passed to Dropdown as externalTriggerRef for width */\n const comboboxTriggerRef = useRef<HTMLDivElement>(null);\n\n /** The 0-height span that IS the Dropdown trigger element - programmatically clicked to open */\n const dropdownSpanRef = useRef<HTMLSpanElement>(null);\n\n /** Native input element */\n const inputRef = useRef<HTMLInputElement>(null);\n\n /** Focusable option divs for scroll-into-view */\n const optionRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n /**\n * Synchronous open-state flag.\n * React state updates are async; reading this ref inside event handlers\n * gives us the true current value without waiting for a re-render.\n */\n const isOpenRef = useRef(false);\n\n // ─── State ────────────────────────────────────────────────────────────────\n\n const isControlled = value !== undefined;\n\n const getInitialInputValue = (): string => {\n const seed = isControlled ? value : defaultValue;\n if (!seed) return '';\n const match = options.find((o) => o.value === seed);\n return match ? match.label : allowFreeText ? seed : '';\n };\n\n const getInitialCommittedValue = (): string => {\n return isControlled ? (value ?? '') : (defaultValue ?? '');\n };\n\n const [inputValue, _setInputValue] = useState<string>(getInitialInputValue);\n const inputValueRef = useRef<string>(inputValue);\n const setInputValue = useCallback((v: string) => {\n inputValueRef.current = v;\n _setInputValue(v);\n }, []);\n\n const [committedValue, _setCommittedValue] = useState<string>(getInitialCommittedValue);\n const committedValueRef = useRef<string>(committedValue);\n const setCommittedValue = useCallback((v: string) => {\n committedValueRef.current = v;\n _setCommittedValue(v);\n }, []);\n\n const [isOpen, setIsOpen] = useState(false);\n const [menuKey, setMenuKey] = useState(0);\n const [focusedIndex, setFocusedIndex] = useState(-1);\n\n // ─── Sync controlled value ────────────────────────────────────────────────\n\n useEffect(() => {\n if (!isControlled) return;\n const v = value ?? '';\n const match = options.find((o) => o.value === v);\n const label = match ? match.label : allowFreeText ? v : '';\n setInputValue(label);\n setCommittedValue(v);\n }, [value, isControlled, options, allowFreeText, setInputValue, setCommittedValue]);\n\n // ─── Derived: filtered options ────────────────────────────────────────────\n\n const filteredOptions = useMemo<ComboboxOption[]>(() => {\n const q = inputValue.toLowerCase();\n if (!q) return options;\n return options.filter((o) => o.label.toLowerCase().includes(q));\n }, [options, inputValue]);\n\n // Reset focused index when the filtered set changes\n useEffect(() => {\n setFocusedIndex(-1);\n }, [filteredOptions]);\n\n // Keep optionRefs array in sync with filteredOptions length\n useEffect(() => {\n optionRefs.current = optionRefs.current.slice(0, filteredOptions.length);\n }, [filteredOptions.length]);\n\n // ─── Derived: option entries (with group headers) ─────────────────────────\n\n const optionEntries = useMemo<OptionEntry[]>(() => {\n const entries: OptionEntry[] = [];\n const hasGroups = filteredOptions.some((o) => o.group);\n\n if (!hasGroups) {\n filteredOptions.forEach((option, index) => {\n entries.push({ type: 'option', option, index, key: option.id });\n });\n return entries;\n }\n\n // Build ordered group map while preserving insertion order\n const groupMap = new Map<string | null, ComboboxOption[]>();\n for (const option of filteredOptions) {\n const g = option.group ?? null;\n if (!groupMap.has(g)) groupMap.set(g, []);\n groupMap.get(g)!.push(option);\n }\n\n let optionIndex = 0;\n for (const [group, opts] of groupMap.entries()) {\n if (group !== null) {\n entries.push({ type: 'group', group, key: `group-${group}` });\n }\n for (const option of opts) {\n entries.push({ type: 'option', option, index: optionIndex++, key: option.id });\n }\n }\n\n return entries;\n }, [filteredOptions]);\n\n // ─── Open / Close helpers ─────────────────────────────────────────────────\n\n /**\n * Open the dropdown by programmatically clicking the 0-height span trigger.\n * The click bubbles to div.eidos-dropdown-trigger → Dropdown.handleTriggerClick → opens.\n *\n * We set isOpenRef AFTER the synthetic click so that the Dropdown's toggle\n * handler fires while isOpenRef is still false (allowing it to open).\n */\n const openDropdown = useCallback(() => {\n if (isOpenRef.current || disabled) return;\n dropdownSpanRef.current?.click(); // opens the Dropdown (bubbles to trigger)\n isOpenRef.current = true;\n setIsOpen(true);\n }, [disabled]);\n\n /**\n * Close the dropdown by remounting it (menuKey increment resets internal state).\n * Optionally revert inputValue to the last committed value.\n */\n const closeDropdown = useCallback(\n (revertInput = false) => {\n isOpenRef.current = false;\n setIsOpen(false);\n setFocusedIndex(-1);\n setMenuKey((prev) => prev + 1);\n\n if (revertInput) {\n const match = options.find((o) => o.value === committedValueRef.current);\n setInputValue(match ? match.label : allowFreeText ? committedValueRef.current : '');\n }\n },\n [options, allowFreeText, setInputValue],\n );\n\n // ─── Click-outside detection ──────────────────────────────────────────────\n\n useEffect(() => {\n const handleMouseDown = (e: MouseEvent) => {\n if (!isOpenRef.current) return;\n // defaultPrevented is set by the listbox's onMouseDown - means the user\n // clicked an option in the portal, not truly outside the combobox.\n if (e.defaultPrevented) return;\n if (containerRef.current?.contains(e.target as Node)) return;\n\n // Focus leaving to a non-focusable target: validate and close\n isOpenRef.current = false;\n setIsOpen(false);\n setFocusedIndex(-1);\n setMenuKey((prev) => prev + 1);\n\n const current = inputValueRef.current;\n const committed = committedValueRef.current;\n\n if (!allowFreeText) {\n const match = options.find((o) => o.label.toLowerCase() === current.toLowerCase());\n if (match) {\n if (match.value !== committed) {\n setCommittedValue(match.value);\n onChange?.(match.value);\n setInputValue(match.label);\n }\n } else {\n const revertMatch = options.find((o) => o.value === committed);\n setInputValue(revertMatch ? revertMatch.label : '');\n }\n } else {\n if (current !== committed) {\n setCommittedValue(current);\n onChange?.(current);\n }\n }\n };\n\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [allowFreeText, options, onChange, setCommittedValue, setInputValue]);\n\n // ─── Input handlers ───────────────────────────────────────────────────────\n\n const handleFocus = useCallback(() => {\n openDropdown();\n }, [openDropdown]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const query = e.target.value;\n setInputValue(query);\n onSearch?.(query);\n if (!isOpenRef.current) openDropdown();\n },\n [setInputValue, onSearch, openDropdown],\n );\n\n /**\n * On blur, validate the typed value against options.\n * A 0ms defer ensures a click on a posIcon button (X / chevron) inside the\n * Input completes its onClick before we run close logic, so we can check\n * document.activeElement reliably.\n */\n const handleBlur = useCallback(() => {\n setTimeout(() => {\n // If focus came back inside the container (e.g., posIcon button clicked),\n // don't close or validate yet.\n if (containerRef.current?.contains(document.activeElement)) return;\n\n // Read both refs *inside* the deferred callback, never captured at blur\n // time - that's the whole reason they're kept in sync by the setters.\n // Anything can run in the gap this 0ms defer opens, including the click\n // that caused the blur: a controlled consumer clearing `value` from\n // another control (e.g. DataGrid's \"Clear filters\", which resets every\n // quick filter at once) updates the refs via the sync effect, and stale\n // captured values would then resurrect the label that was just cleared.\n const current = inputValueRef.current;\n const committed = committedValueRef.current;\n\n // Close\n isOpenRef.current = false;\n setIsOpen(false);\n setFocusedIndex(-1);\n setMenuKey((prev) => prev + 1);\n\n // Validate\n if (!allowFreeText) {\n const match = options.find((o) => o.label.toLowerCase() === current.toLowerCase());\n if (match) {\n if (match.value !== committed) {\n setCommittedValue(match.value);\n onChange?.(match.value);\n setInputValue(match.label);\n } else {\n // Normalize the display label (fix casing)\n setInputValue(match.label);\n }\n } else {\n // No match - revert to last committed value\n const revertMatch = options.find((o) => o.value === committed);\n setInputValue(revertMatch ? revertMatch.label : '');\n }\n } else {\n // allowFreeText: commit whatever the user typed\n if (current !== committed) {\n setCommittedValue(current);\n onChange?.(current);\n }\n }\n }, 0);\n }, [allowFreeText, options, onChange, setCommittedValue, setInputValue]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpenRef.current) {\n openDropdown();\n setFocusedIndex(0);\n } else {\n setFocusedIndex((prev) => {\n const next = prev < filteredOptions.length - 1 ? prev + 1 : 0;\n setTimeout(\n () =>\n optionRefs.current[next]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n }),\n 0,\n );\n return next;\n });\n }\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpenRef.current) {\n openDropdown();\n setFocusedIndex(filteredOptions.length - 1);\n } else {\n setFocusedIndex((prev) => {\n const next = prev > 0 ? prev - 1 : filteredOptions.length - 1;\n setTimeout(\n () =>\n optionRefs.current[next]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n }),\n 0,\n );\n return next;\n });\n }\n break;\n\n case 'Enter':\n e.preventDefault();\n if (isOpenRef.current && focusedIndex >= 0 && focusedIndex < filteredOptions.length) {\n handleOptionSelect(filteredOptions[focusedIndex]);\n } else if (allowFreeText && inputValue.trim()) {\n const trimmed = inputValue.trim();\n setCommittedValue(trimmed);\n onChange?.(trimmed);\n closeDropdown();\n }\n break;\n\n case 'Escape':\n e.preventDefault();\n if (isOpenRef.current) {\n closeDropdown(true /* revert */);\n }\n break;\n\n default:\n break;\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n disabled,\n filteredOptions,\n focusedIndex,\n allowFreeText,\n inputValue,\n onChange,\n openDropdown,\n closeDropdown,\n setCommittedValue,\n ],\n );\n\n // ─── Option selection ─────────────────────────────────────────────────────\n\n const handleOptionSelect = useCallback(\n (option: ComboboxOption) => {\n if (option.disabled) return;\n setInputValue(option.label);\n setCommittedValue(option.value);\n onChange?.(option.value);\n closeDropdown();\n // Return focus to the input so the user can continue interacting\n inputRef.current?.focus();\n },\n [onChange, closeDropdown, setInputValue, setCommittedValue],\n );\n\n // ─── Clear ────────────────────────────────────────────────────────────────\n\n const handleClearClick = useCallback(() => {\n setInputValue('');\n setCommittedValue('');\n onChange?.('');\n // Re-focus input so the user can immediately start typing again\n inputRef.current?.focus();\n }, [onChange, setInputValue, setCommittedValue]);\n\n // ─── Chevron toggle ───────────────────────────────────────────────────────\n\n const handleChevronClick = useCallback(() => {\n if (isOpenRef.current) {\n closeDropdown();\n } else {\n openDropdown();\n }\n }, [closeDropdown, openDropdown]);\n\n // ─── Render: individual option ────────────────────────────────────────────\n\n const renderOptionItem = useCallback(\n (option: ComboboxOption, index: number): React.ReactNode => {\n const isSelected = option.value === committedValue;\n const isFocused = index === focusedIndex;\n\n const classes = [\n 'eidos-combobox-option',\n isSelected && 'eidos-combobox-option--selected',\n isFocused && 'eidos-combobox-option--focused',\n option.disabled && 'eidos-combobox-option--disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n key={option.id}\n ref={(el) => {\n optionRefs.current[index] = el;\n }}\n className={classes}\n onClick={() => handleOptionSelect(option)}\n onMouseEnter={() => !option.disabled && setFocusedIndex(index)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n id={`${uid}-option-${index}`}\n >\n {renderOption ? (\n renderOption(option)\n ) : (\n <>\n <Check\n className={`eidos-combobox-option-icon${\n !isSelected ? ' eidos-combobox-option-icon--hidden' : ''\n }`}\n />\n <span className=\"eidos-combobox-option-label\">{option.label}</span>\n {option.description && (\n <span className=\"eidos-combobox-option-description\">{option.description}</span>\n )}\n </>\n )}\n </div>\n );\n },\n [committedValue, focusedIndex, handleOptionSelect, renderOption, uid],\n );\n\n // ─── Render: dropdown content ─────────────────────────────────────────────\n\n const dropdownContent = useMemo(() => {\n if (loading) {\n return (\n <div className=\"eidos-combobox-loading\">\n <Loader2 className=\"eidos-combobox-loading-icon\" />\n <span>{loadingText}</span>\n </div>\n );\n }\n\n if (filteredOptions.length === 0) {\n return <div className=\"eidos-combobox-empty\">{emptyText}</div>;\n }\n\n return optionEntries.map((entry) => {\n if (entry.type === 'group') {\n return (\n <div key={entry.key} className=\"eidos-combobox-option-group-label\">\n {entry.group}\n </div>\n );\n }\n return renderOptionItem(entry.option, entry.index);\n });\n }, [loading, loadingText, filteredOptions.length, emptyText, optionEntries, renderOptionItem]);\n\n // ─── posIcon / posIconButton wiring ───────────────────────────────────────\n\n const hasClearableValue = clearable && !!inputValue;\n const posIcon = hasClearableValue ? X : ChevronDown;\n const posIconClick = hasClearableValue ? handleClearClick : handleChevronClick;\n\n // ─── CSS classes ──────────────────────────────────────────────────────────\n\n const containerClasses = [\n 'eidos-combobox',\n fullWidth && fullWidthModifier('eidos-combobox'),\n error && 'eidos-combobox--error',\n disabled && 'eidos-combobox--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const maxHeightValue = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n\n // ─── Render ───────────────────────────────────────────────────────────────\n\n return (\n <div\n ref={containerRef}\n className={containerClasses}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n >\n <div ref={comboboxTriggerRef} className=\"eidos-combobox-trigger\">\n {/*\n The Input is a direct child of eidos-combobox-trigger.\n It is NOT inside the Dropdown trigger div, so clicking it\n never bubbles to Dropdown.handleTriggerClick and never\n accidentally toggles the dropdown closed mid-edit.\n */}\n <Input\n ref={inputRef}\n value={inputValue}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n size={size}\n fullWidth\n label={label}\n clearable={false} // we render our own clear via posIcon\n isSelect={false}\n posIcon={posIcon}\n posIconButton\n onPosIconClick={posIconClick}\n aria-autocomplete=\"list\"\n aria-controls={`${uid}-listbox`}\n aria-activedescendant={focusedIndex >= 0 ? `${uid}-option-${focusedIndex}` : undefined}\n />\n\n {/*\n The Dropdown trigger is a 0-height span placed AFTER the Input\n in the normal document flow. Its getBoundingClientRect sits at\n exactly the bottom edge of the Input, giving the Dropdown correct\n placement without any click-toggle collision with the Input above.\n closeOnClickOutside and closeOnEscape are disabled because we own\n those interactions in our mousedown listener and onKeyDown handler.\n */}\n <Dropdown\n key={menuKey}\n trigger={\n <span\n ref={dropdownSpanRef}\n className=\"eidos-combobox-dropdown-anchor\"\n aria-hidden=\"true\"\n />\n }\n content={\n <div\n id={`${uid}-listbox`}\n className=\"eidos-combobox-options\"\n role=\"listbox\"\n aria-label={label ?? 'Options'}\n // Prevent the input from blurring when the user clicks an option,\n // and mark this event so the click-outside handler ignores it.\n onMouseDown={(e) => e.preventDefault()}\n >\n {dropdownContent}\n </div>\n }\n triggerRef={comboboxTriggerRef as React.RefObject<HTMLElement | null>}\n maxHeight={maxHeightValue}\n autoWidth\n closeOnClickOutside={false}\n closeOnEscape={false}\n />\n </div>\n\n {hint && !error && <span className=\"eidos-combobox-hint\">{hint}</span>}\n {error && (\n <span className=\"eidos-combobox-error-message\">\n <CircleAlert className=\"eidos-combobox-error-icon\" />\n {error}\n </span>\n )}\n </div>\n );\n};\n\nCombobox.displayName = 'Combobox';\n"],"mappings":"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","names":["label"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Toolbar
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ATL7325T.js";
|
|
4
|
+
import {
|
|
5
|
+
Header
|
|
6
|
+
} from "./chunk-WKDT2XFQ.js";
|
|
4
7
|
import {
|
|
5
8
|
Navigation
|
|
6
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-2QEKSRVX.js";
|
|
7
10
|
import {
|
|
8
11
|
Footer
|
|
9
12
|
} from "./chunk-W2F6WDUX.js";
|
|
10
|
-
import {
|
|
11
|
-
Header
|
|
12
|
-
} from "./chunk-O5WEKLNF.js";
|
|
13
13
|
|
|
14
14
|
// src/components/PageLayout/PageLayout.component.tsx
|
|
15
15
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -56,4 +56,4 @@ var PageLayout = ({
|
|
|
56
56
|
export {
|
|
57
57
|
PageLayout
|
|
58
58
|
};
|
|
59
|
-
//# sourceMappingURL=chunk-
|
|
59
|
+
//# sourceMappingURL=chunk-BHVHM66Z.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkTEVZHN5Icjs = require('./chunk-TEVZHN5I.cjs');
|
|
4
4
|
|
|
5
5
|
// src/components/InlineEdit/InlineEdit.component.tsx
|
|
6
6
|
var _react = require('react');
|
|
@@ -72,7 +72,7 @@ var InlineEdit = ({
|
|
|
72
72
|
const displayTriggerProps = trigger === "doubleClick" ? { onDoubleClick: openEdit } : { onClick: openEdit };
|
|
73
73
|
if (editing) {
|
|
74
74
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
75
|
-
|
|
75
|
+
_chunkTEVZHN5Icjs.Input,
|
|
76
76
|
{
|
|
77
77
|
type,
|
|
78
78
|
variant: inputVariant,
|
|
@@ -122,4 +122,4 @@ var InlineEdit = ({
|
|
|
122
122
|
|
|
123
123
|
|
|
124
124
|
exports.InlineEdit = InlineEdit;
|
|
125
|
-
//# sourceMappingURL=chunk-
|
|
125
|
+
//# sourceMappingURL=chunk-CJGFRPAS.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-CJGFRPAS.cjs","../src/components/InlineEdit/InlineEdit.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-CJGFRPAS.cjs","sourcesContent":[null,"import React, { useState, useRef, useCallback } from 'react';\nimport { Pencil } from 'lucide-react';\nimport { Input } from '../Input/Input.component';\nimport type { InlineEditProps } from './InlineEdit.types';\nimport './InlineEdit.scss';\n\nexport const InlineEdit: React.FC<InlineEditProps> = ({\n value,\n onChange,\n onConfirm,\n onCancel,\n editing: editingProp,\n onEditingChange,\n type = 'text',\n placeholder,\n trigger = 'click',\n size = 'md',\n fullWidth = false,\n disabled = false,\n confirmOnBlur = true,\n renderDisplay,\n showEditIcon = true,\n inputVariant = 'outlined',\n className = '',\n}) => {\n const isControlled = editingProp !== undefined;\n const [internalEditing, setInternalEditing] = useState(false);\n const editing = isControlled ? editingProp : internalEditing;\n\n // Track the value at the moment editing begins so Esc can revert to it.\n const valueAtEditStart = useRef(value);\n\n // Local draft while editing - keeps Input value in sync without forcing the\n // parent to wire `onChange` just to see live keystrokes.\n const [draft, setDraft] = useState(value);\n\n // ------------------------------------------------------------------\n // Editing state helpers\n // ------------------------------------------------------------------\n\n const openEdit = useCallback(() => {\n if (disabled) return;\n valueAtEditStart.current = value;\n setDraft(value);\n if (!isControlled) setInternalEditing(true);\n onEditingChange?.(true);\n }, [disabled, isControlled, onEditingChange, value]);\n\n const closeEdit = useCallback(() => {\n if (!isControlled) setInternalEditing(false);\n onEditingChange?.(false);\n }, [isControlled, onEditingChange]);\n\n const confirm = useCallback(() => {\n closeEdit();\n onConfirm?.(draft);\n }, [closeEdit, draft, onConfirm]);\n\n const cancel = useCallback(() => {\n // Revert the draft AND propagate the original value so the parent stays in\n // sync when `onChange` is used to maintain external state.\n setDraft(valueAtEditStart.current);\n onChange?.(valueAtEditStart.current);\n closeEdit();\n onCancel?.();\n }, [closeEdit, onChange, onCancel]);\n\n // ------------------------------------------------------------------\n // Input handlers\n // ------------------------------------------------------------------\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setDraft(e.target.value);\n onChange?.(e.target.value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n // Stop propagation so parent grids/tables don't double-handle Enter.\n e.stopPropagation();\n confirm();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n cancel();\n }\n // Tab and Arrow keys intentionally bubble - consumers like DataGrid own\n // Tab-to-next-cell and arrow-key navigation at the container level.\n };\n\n const handleBlur = () => {\n if (confirmOnBlur) confirm();\n };\n\n // ------------------------------------------------------------------\n // Trigger props for display mode\n // ------------------------------------------------------------------\n\n const displayTriggerProps =\n trigger === 'doubleClick' ? { onDoubleClick: openEdit } : { onClick: openEdit };\n\n // ------------------------------------------------------------------\n // Render: edit mode\n // ------------------------------------------------------------------\n\n if (editing) {\n return (\n <Input\n type={type}\n variant={inputVariant}\n size={size}\n value={draft}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n placeholder={placeholder}\n fullWidth={fullWidth}\n clearable={false}\n autoFocus\n className={`eidos-inline-edit eidos-inline-edit--editing ${className}`}\n />\n );\n }\n\n // ------------------------------------------------------------------\n // Render: display mode\n // ------------------------------------------------------------------\n\n const isEmpty = !value;\n\n return (\n <span\n role=\"button\"\n tabIndex={disabled ? undefined : 0}\n aria-label={disabled ? undefined : 'Click to edit'}\n className={[\n 'eidos-inline-edit',\n `eidos-inline-edit--${size}`,\n fullWidth ? 'eidos-inline-edit--full-width' : '',\n disabled ? 'eidos-inline-edit--disabled' : '',\n isEmpty ? 'eidos-inline-edit--empty' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...(disabled ? {} : displayTriggerProps)}\n onKeyDown={\n disabled\n ? undefined\n : (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n openEdit();\n }\n }\n }\n >\n <span className=\"eidos-inline-edit__text\">\n {renderDisplay\n ? renderDisplay(value)\n : value || <span className=\"eidos-inline-edit__placeholder\">{placeholder}</span>}\n </span>\n {!disabled && showEditIcon && (\n <span className=\"eidos-inline-edit__icon\" aria-hidden>\n <Pencil />\n </span>\n )}\n </span>\n );\n};\n"]}
|
|
@@ -25,8 +25,14 @@ function devWarn(key, message) {
|
|
|
25
25
|
console.warn(`[eidos-ui] ${message}`);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
// src/utils/dualModifier.ts
|
|
29
|
+
var dualModifier = (block, canonical, legacy) => `${block}--${canonical} ${block}--${legacy}`;
|
|
30
|
+
var fullWidthModifier = (block) => dualModifier(block, "full-width", "fullWidth");
|
|
28
31
|
|
|
29
32
|
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
exports.renderIcon = renderIcon; exports.devWarn = devWarn; exports.dualModifier = dualModifier; exports.fullWidthModifier = fullWidthModifier;
|
|
38
|
+
//# sourceMappingURL=chunk-CUJBNRJJ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-CUJBNRJJ.cjs","../src/utils/renderIcon.tsx","../src/utils/devWarn.ts","../src/utils/dualModifier.ts"],"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;AEFnB;AAE6B;AAEtD,EAAA;AAC0B,EAAA;AACT,EAAA;AACP,EAAA;AACsB,EAAA;AACtC;AFEkD;AACA;AGEhD;AAIa;AHHmC;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-CUJBNRJJ.cjs","sourcesContent":[null,"import React from 'react';\nimport { icons } from 'lucide-react';\n\nexport type IconType = React.ComponentType<{ className?: string }> | string;\n\n/**\n * Helper function to render icons dynamically\n * Supports both React components (Lucide, MUI, etc.) and string-based icon names\n *\n * @param icon - Icon component or string name (e.g., \"heart\" or \"arrow-right\")\n * @param className - Optional CSS class name to apply to the icon\n * @returns React node representing the icon, or null if no icon provided\n *\n * @example\n * // Component-based icon\n * import { Heart } from 'lucide-react';\n * renderIcon(Heart, 'my-icon-class');\n *\n * @example\n * // String-based Lucide icon (kebab-case converted to PascalCase)\n * renderIcon('heart', 'my-icon-class');\n * renderIcon('arrow-right', 'my-icon-class');\n *\n * @example\n * // String-based CSS class (for Font Awesome, Remixicon, etc.)\n * renderIcon('fas fa-heart', 'my-icon-class');\n */\nexport const renderIcon = (icon: IconType | undefined, className?: string): React.ReactNode => {\n if (!icon) return null;\n\n if (typeof icon === 'string') {\n // Convert kebab-case to PascalCase for Lucide icons\n const iconName = icon\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n\n // Try to find the icon in lucide-react\n const LucideIcon = icons[iconName as keyof typeof icons] as\n React.ComponentType<{ className?: string }> | undefined;\n\n if (LucideIcon) {\n return <LucideIcon className={className} aria-hidden=\"true\" />;\n }\n\n // Fallback: render as a CSS class (for Font Awesome, Remixicon, etc.)\n return <i className={`${icon} ${className || ''}`} aria-hidden=\"true\" />;\n }\n\n // It's a React component\n const IconComponent = icon;\n return <IconComponent className={className} aria-hidden=\"true\" />;\n};\n","/**\n * Logs a misconfiguration warning, once per `key`, and never in production.\n *\n * Deliberately reads `process.env.NODE_ENV` off `globalThis` behind a cast\n * rather than referencing `process` directly: this is a browser library, and\n * a bare `process` reference fails the `tsup` dts build (its worker resolves\n * without node types, so `npm run typecheck` passing is not enough) as well\n * as throwing at runtime anywhere a bundler hasn't substituted it. The\n * optional chaining covers every case - no `process`, no `env`, no value.\n *\n * Because the check is dynamic rather than a statically replaceable\n * `process.env.NODE_ENV` expression, the message text stays in production\n * bundles; only the logging is skipped. That is the trade for not shipping a\n * `process` reference at all, and these strings are small.\n */\nconst warned = new Set<string>();\n\nexport function devWarn(key: string, message: string): void {\n const nodeEnv = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV;\n if (nodeEnv === 'production') return;\n if (warned.has(key)) return;\n warned.add(key);\n console.warn(`[eidos-ui] ${message}`);\n}\n","/**\n * Emits a BEM modifier in both its canonical kebab-case spelling and a legacy\n * camelCase one.\n *\n * The library shipped two conventions for the same idea: eight components\n * used `--fullWidth` while four used `--full-width`, and `Tabs` had\n * `--hideScrollbar`. Kebab-case is the canonical form - every block name\n * (`eidos-date-picker-trigger`) and every design token (`--font-size-sm`) is\n * already kebab, so a camelCase modifier was inconsistent with the very\n * selector it hung off.\n *\n * Renaming outright would be a **breaking** change: `README.md` presents the\n * `eidos-*` class names as things consumers may target, so a stylesheet out\n * there is matching the old spelling. Emitting both keeps every existing\n * selector working while new code has one spelling to learn.\n *\n * Deliberately a helper rather than a duplicated string literal at each call\n * site: two near-identical classes in a `className` read as a copy-paste slip\n * and invite exactly the \"tidy up\" that would silently break those consumer\n * stylesheets. It also makes dropping the aliases at the next major a change\n * to this one file rather than an edit in every component.\n *\n * Internal only - deliberately not re-exported from `src/index.ts`.\n *\n * @example\n * dualModifier('eidos-input', 'full-width', 'fullWidth');\n * // 'eidos-input--full-width eidos-input--fullWidth'\n */\nexport const dualModifier = (block: string, canonical: string, legacy: string): string =>\n `${block}--${canonical} ${block}--${legacy}`;\n\n/** `dualModifier` preset for the library's most widespread split modifier. */\nexport const fullWidthModifier = (block: string): string =>\n dualModifier(block, 'full-width', 'fullWidth');\n"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunk75VXB3H2cjs = require('./chunk-75VXB3H2.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
var _chunkKVIL4EP4cjs = require('./chunk-KVIL4EP4.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkZ5U4NJTWcjs = require('./chunk-Z5U4NJTW.cjs');
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _chunkCUJBNRJJcjs = require('./chunk-CUJBNRJJ.cjs');
|
|
13
13
|
|
|
14
14
|
// src/components/Menu/Menu.component.tsx
|
|
15
15
|
var _react = require('react');
|
|
@@ -41,7 +41,7 @@ var MenuPanel = ({ items, className = "", onItemClick }) => {
|
|
|
41
41
|
].filter(Boolean).join(" "),
|
|
42
42
|
onClick: () => handleItemClick(item),
|
|
43
43
|
children: [
|
|
44
|
-
item.icon &&
|
|
44
|
+
item.icon && _chunkCUJBNRJJcjs.renderIcon.call(void 0, item.icon, "eidos-menu-icon"),
|
|
45
45
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-menu-label`, children: item.label }),
|
|
46
46
|
item.shortcut && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKVIL4EP4cjs.Kbd, { size: "sm", className: "eidos-menu-shortcut", children: item.shortcut })
|
|
47
47
|
]
|
|
@@ -54,12 +54,12 @@ var MenuPanel = ({ items, className = "", onItemClick }) => {
|
|
|
54
54
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { className: `eidos-menu-separator` }, item.id);
|
|
55
55
|
case "nested": {
|
|
56
56
|
const triggerElement = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: `eidos-menu-nested-trigger`, children: [
|
|
57
|
-
item.icon &&
|
|
57
|
+
item.icon && _chunkCUJBNRJJcjs.renderIcon.call(void 0, item.icon, "eidos-menu-icon"),
|
|
58
58
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-menu-label`, children: item.label }),
|
|
59
59
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronRight, { className: `eidos-menu-nested-arrow` })
|
|
60
60
|
] });
|
|
61
61
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { className: `eidos-menu-nested-item`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
62
|
-
|
|
62
|
+
_chunk75VXB3H2cjs.Dropdown,
|
|
63
63
|
{
|
|
64
64
|
trigger: triggerElement,
|
|
65
65
|
content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MenuPanel, { items: item.items, onItemClick }),
|
|
@@ -103,7 +103,7 @@ var Menu = ({
|
|
|
103
103
|
[closeOnItemClick]
|
|
104
104
|
);
|
|
105
105
|
const dropdown = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
106
|
-
|
|
106
|
+
_chunk75VXB3H2cjs.Dropdown,
|
|
107
107
|
{
|
|
108
108
|
trigger,
|
|
109
109
|
content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MenuPanel, { items, onItemClick: handleItemClick }),
|
|
@@ -122,4 +122,4 @@ var Menu = ({
|
|
|
122
122
|
|
|
123
123
|
|
|
124
124
|
exports.MenuPanel = MenuPanel; exports.Menu = Menu;
|
|
125
|
-
//# sourceMappingURL=chunk-
|
|
125
|
+
//# sourceMappingURL=chunk-D2SKXRKP.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-D2SKXRKP.cjs","../src/components/Menu/Menu.component.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACbA,8BAAmC;AACnC,2CAA6B;AAoCnB,+CAAA;AAxBH,IAAM,UAAA,EAAiC,CAAC,EAAE,KAAA,EAAO,UAAA,EAAY,EAAA,EAAI,YAAY,CAAA,EAAA,GAAM;AAExF,EAAA,MAAM,gBAAA,EAAkB,gCAAA;AAAA,IACtB,CAAC,IAAA,EAAA,GAAmB;AAClB,MAAA,GAAA,CAAI,IAAA,CAAK,QAAA,EAAU,MAAA;AAGnB,MAAA,GAAA,CAAI,IAAA,CAAK,OAAA,EAAS;AAChB,QAAA,IAAA,CAAK,OAAA,CAAQ,CAAA;AAAA,MACf;AAGA,MAAA,GAAA,CAAI,WAAA,EAAa;AACf,QAAA,WAAA,CAAY,IAAI,CAAA;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,WAAW;AAAA,EACd,CAAA;AAGA,EAAA,MAAM,eAAA,EAAiB,CAAC,IAAA,EAAA,GAAwC;AAC9D,IAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM;AAAA,MACjB,KAAK,MAAA;AACH,QAAA,uBACE,8BAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAW;AAAA,cACT,iBAAA;AAAA,cACA,IAAA,CAAK,SAAA,EAAW,4BAAA,EAA8B,EAAA;AAAA,cAC9C,IAAA,CAAK,MAAA,EAAQ,CAAA,iBAAA,EAAoB,IAAA,CAAK,KAAK,CAAA,EAAA;AAGlC,YAAA;AACwB,YAAA;AAElC,YAAA;AAAmC,cAAA;AACnB,8BAAA;AAEV,cAAA;AAEL,YAAA;AAAA,UAAA;AAfQ,UAAA;AAiBZ,QAAA;AAGC,MAAA;AAE4B,QAAA;AAK5B,MAAA;AACiC,QAAA;AAEvB,MAAA;AAEV,QAAA;AACqC,UAAA;AACnB,0BAAA;AACQ,0BAAA;AAC3B,QAAA;AAI6B,QAAA;AAC1B,UAAA;AAAA,UAAA;AACU,YAAA;AACW,YAAA;AACV,YAAA;AACA,YAAA;AACD,YAAA;AAAA,UAAA;AAEb,QAAA;AAEJ,MAAA;AAEA,MAAA;AACS,QAAA;AACX,IAAA;AACF,EAAA;AAEsB,EAAA;AACxB;AAEiD;AAC/C,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACY,EAAA;AACZ,EAAA;AACmB,EAAA;AACnB,EAAA;AACI;AACoB,EAAA;AACD,IAAA;AAIG,MAAA;AAEH,QAAA;AAE2B,UAAA;AAC/B,YAAA;AACG,YAAA;AACN,YAAA;AACP,UAAA;AAC2B,UAAA;AACzB,QAAA;AACP,MAAA;AACF,IAAA;AACiB,IAAA;AACnB,EAAA;AAGE,EAAA;AAAC,IAAA;AAAA,IAAA;AACC,MAAA;AACkC,MAAA;AAClC,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AAAA,IAAA;AACF,EAAA;AAGwB,EAAA;AAC5B;AD1B0D;AACA;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-D2SKXRKP.cjs","sourcesContent":[null,"import React, { useCallback } from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport type { MenuProps, MenuItemType, MenuItem, MenuWrapperProps } from './Menu.types';\nimport { Dropdown } from '../Dropdown/Dropdown.component';\nimport { Tooltip } from '../Tooltip/Tooltip.component';\nimport { Kbd } from '../Kbd/Kbd.component';\nimport { renderIcon } from '../../utils';\n\n/**\n * MenuPanel - the bare menu list, without any trigger or dropdown wrapper.\n * Exported for use in SplitButton, ContextMenu, and other consumers that need\n * to render the menu content inside their own Dropdown / portal.\n */\nexport const MenuPanel: React.FC<MenuProps> = ({ items, className = '', onItemClick }) => {\n // Handle menu item click\n const handleItemClick = useCallback(\n (item: MenuItem) => {\n if (item.disabled) return;\n\n // Execute the item's onClick handler first\n if (item.onClick) {\n item.onClick();\n }\n\n // Then call the onItemClick callback (which will close the dropdown)\n if (onItemClick) {\n onItemClick(item);\n }\n },\n [onItemClick],\n );\n\n // Render individual menu item\n const renderMenuItem = (item: MenuItemType): React.ReactNode => {\n switch (item.type) {\n case 'item':\n return (\n <li\n key={item.id}\n className={[\n 'eidos-menu-item',\n item.disabled ? 'eidos-menu-item--disabled' : '',\n item.color ? `eidos-menu-item--${item.color}` : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => handleItemClick(item)}\n >\n {item.icon && renderIcon(item.icon, 'eidos-menu-icon')}\n <span className={`eidos-menu-label`}>{item.label}</span>\n {item.shortcut && (\n <Kbd size=\"sm\" className=\"eidos-menu-shortcut\">\n {item.shortcut}\n </Kbd>\n )}\n </li>\n );\n\n case 'component':\n return (\n <li key={item.id} className={`eidos-menu-component-item`}>\n {item.component}\n </li>\n );\n\n case 'separator':\n return <li key={item.id} className={`eidos-menu-separator`} />;\n\n case 'nested': {\n const triggerElement = (\n <div className={`eidos-menu-nested-trigger`}>\n {item.icon && renderIcon(item.icon, 'eidos-menu-icon')}\n <span className={`eidos-menu-label`}>{item.label}</span>\n <ChevronRight className={`eidos-menu-nested-arrow`} />\n </div>\n );\n\n return (\n <li key={item.id} className={`eidos-menu-nested-item`}>\n <Dropdown\n trigger={triggerElement}\n content={<MenuPanel items={item.items} onItemClick={onItemClick} />}\n placement=\"right\"\n isNested={true}\n fullWidth\n />\n </li>\n );\n }\n\n default:\n return null;\n }\n };\n\n return <ul className={`eidos-menu ${className}`}>{items.map(renderMenuItem)}</ul>;\n};\n\nexport const Menu: React.FC<MenuWrapperProps> = ({\n trigger,\n items,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n autoWidth = true,\n triggerRef,\n closeOnItemClick = true,\n tooltip,\n}) => {\n const handleItemClick = useCallback(\n (_item: MenuItem) => {\n // Note: item.onClick is already called in MenuPanel's handleItemClick\n // Here we only handle closing the dropdown if needed\n\n if (closeOnItemClick) {\n // Use a small delay to ensure the onClick handler completes\n setTimeout(() => {\n // Create a synthetic click event outside the dropdown to close it\n const event = new MouseEvent('mousedown', {\n bubbles: true,\n cancelable: true,\n view: window,\n });\n document.dispatchEvent(event);\n }, 10);\n }\n },\n [closeOnItemClick],\n );\n\n const dropdown = (\n <Dropdown\n trigger={trigger}\n content={<MenuPanel items={items} onItemClick={handleItemClick} />}\n minWidth={minWidth}\n maxWidth={maxWidth}\n minHeight={minHeight}\n maxHeight={maxHeight}\n autoWidth={autoWidth}\n triggerRef={triggerRef}\n />\n );\n\n return tooltip ? <Tooltip message={tooltip}>{dropdown}</Tooltip> : dropdown;\n};\n"]}
|
|
@@ -25,8 +25,14 @@ function devWarn(key, message) {
|
|
|
25
25
|
console.warn(`[eidos-ui] ${message}`);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
// src/utils/dualModifier.ts
|
|
29
|
+
var dualModifier = (block, canonical, legacy) => `${block}--${canonical} ${block}--${legacy}`;
|
|
30
|
+
var fullWidthModifier = (block) => dualModifier(block, "full-width", "fullWidth");
|
|
31
|
+
|
|
28
32
|
export {
|
|
29
33
|
renderIcon,
|
|
30
|
-
devWarn
|
|
34
|
+
devWarn,
|
|
35
|
+
dualModifier,
|
|
36
|
+
fullWidthModifier
|
|
31
37
|
};
|
|
32
|
-
//# sourceMappingURL=chunk-
|
|
38
|
+
//# sourceMappingURL=chunk-EAJHEYZM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/renderIcon.tsx","../src/utils/devWarn.ts","../src/utils/dualModifier.ts"],"sourcesContent":["import React from 'react';\nimport { icons } from 'lucide-react';\n\nexport type IconType = React.ComponentType<{ className?: string }> | string;\n\n/**\n * Helper function to render icons dynamically\n * Supports both React components (Lucide, MUI, etc.) and string-based icon names\n *\n * @param icon - Icon component or string name (e.g., \"heart\" or \"arrow-right\")\n * @param className - Optional CSS class name to apply to the icon\n * @returns React node representing the icon, or null if no icon provided\n *\n * @example\n * // Component-based icon\n * import { Heart } from 'lucide-react';\n * renderIcon(Heart, 'my-icon-class');\n *\n * @example\n * // String-based Lucide icon (kebab-case converted to PascalCase)\n * renderIcon('heart', 'my-icon-class');\n * renderIcon('arrow-right', 'my-icon-class');\n *\n * @example\n * // String-based CSS class (for Font Awesome, Remixicon, etc.)\n * renderIcon('fas fa-heart', 'my-icon-class');\n */\nexport const renderIcon = (icon: IconType | undefined, className?: string): React.ReactNode => {\n if (!icon) return null;\n\n if (typeof icon === 'string') {\n // Convert kebab-case to PascalCase for Lucide icons\n const iconName = icon\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n\n // Try to find the icon in lucide-react\n const LucideIcon = icons[iconName as keyof typeof icons] as\n React.ComponentType<{ className?: string }> | undefined;\n\n if (LucideIcon) {\n return <LucideIcon className={className} aria-hidden=\"true\" />;\n }\n\n // Fallback: render as a CSS class (for Font Awesome, Remixicon, etc.)\n return <i className={`${icon} ${className || ''}`} aria-hidden=\"true\" />;\n }\n\n // It's a React component\n const IconComponent = icon;\n return <IconComponent className={className} aria-hidden=\"true\" />;\n};\n","/**\n * Logs a misconfiguration warning, once per `key`, and never in production.\n *\n * Deliberately reads `process.env.NODE_ENV` off `globalThis` behind a cast\n * rather than referencing `process` directly: this is a browser library, and\n * a bare `process` reference fails the `tsup` dts build (its worker resolves\n * without node types, so `npm run typecheck` passing is not enough) as well\n * as throwing at runtime anywhere a bundler hasn't substituted it. The\n * optional chaining covers every case - no `process`, no `env`, no value.\n *\n * Because the check is dynamic rather than a statically replaceable\n * `process.env.NODE_ENV` expression, the message text stays in production\n * bundles; only the logging is skipped. That is the trade for not shipping a\n * `process` reference at all, and these strings are small.\n */\nconst warned = new Set<string>();\n\nexport function devWarn(key: string, message: string): void {\n const nodeEnv = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV;\n if (nodeEnv === 'production') return;\n if (warned.has(key)) return;\n warned.add(key);\n console.warn(`[eidos-ui] ${message}`);\n}\n","/**\n * Emits a BEM modifier in both its canonical kebab-case spelling and a legacy\n * camelCase one.\n *\n * The library shipped two conventions for the same idea: eight components\n * used `--fullWidth` while four used `--full-width`, and `Tabs` had\n * `--hideScrollbar`. Kebab-case is the canonical form - every block name\n * (`eidos-date-picker-trigger`) and every design token (`--font-size-sm`) is\n * already kebab, so a camelCase modifier was inconsistent with the very\n * selector it hung off.\n *\n * Renaming outright would be a **breaking** change: `README.md` presents the\n * `eidos-*` class names as things consumers may target, so a stylesheet out\n * there is matching the old spelling. Emitting both keeps every existing\n * selector working while new code has one spelling to learn.\n *\n * Deliberately a helper rather than a duplicated string literal at each call\n * site: two near-identical classes in a `className` read as a copy-paste slip\n * and invite exactly the \"tidy up\" that would silently break those consumer\n * stylesheets. It also makes dropping the aliases at the next major a change\n * to this one file rather than an edit in every component.\n *\n * Internal only - deliberately not re-exported from `src/index.ts`.\n *\n * @example\n * dualModifier('eidos-input', 'full-width', 'fullWidth');\n * // 'eidos-input--full-width eidos-input--fullWidth'\n */\nexport const dualModifier = (block: string, canonical: string, legacy: string): string =>\n `${block}--${canonical} ${block}--${legacy}`;\n\n/** `dualModifier` preset for the library's most widespread split modifier. */\nexport const fullWidthModifier = (block: string): string =>\n dualModifier(block, 'full-width', 'fullWidth');\n"],"mappings":";AACA,SAAS,aAAa;AAyCT;AAfN,IAAM,aAAa,CAAC,MAA4B,cAAwC;AAC7F,MAAI,CAAC,KAAM,QAAO;AAElB,MAAI,OAAO,SAAS,UAAU;AAE5B,UAAM,WAAW,KACd,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,EAAE;AAGV,UAAM,aAAa,MAAM,QAA8B;AAGvD,QAAI,YAAY;AACd,aAAO,oBAAC,cAAW,WAAsB,eAAY,QAAO;AAAA,IAC9D;AAGA,WAAO,oBAAC,OAAE,WAAW,GAAG,IAAI,IAAI,aAAa,EAAE,IAAI,eAAY,QAAO;AAAA,EACxE;AAGA,QAAM,gBAAgB;AACtB,SAAO,oBAAC,iBAAc,WAAsB,eAAY,QAAO;AACjE;;;ACrCA,IAAM,SAAS,oBAAI,IAAY;AAExB,SAAS,QAAQ,KAAa,SAAuB;AAC1D,QAAM,UAAW,WAA6D,SAAS,KACnF;AACJ,MAAI,YAAY,aAAc;AAC9B,MAAI,OAAO,IAAI,GAAG,EAAG;AACrB,SAAO,IAAI,GAAG;AACd,UAAQ,KAAK,cAAc,OAAO,EAAE;AACtC;;;ACIO,IAAM,eAAe,CAAC,OAAe,WAAmB,WAC7D,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM;AAGrC,IAAM,oBAAoB,CAAC,UAChC,aAAa,OAAO,cAAc,WAAW;","names":[]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunk75TDY7XFcjs = require('./chunk-75TDY7XF.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkND526PMGcjs = require('./chunk-ND526PMG.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunk65PC3YDTcjs = require('./chunk-65PC3YDT.cjs');
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _chunkPTBBY4ZXcjs = require('./chunk-PTBBY4ZX.cjs');
|
|
13
13
|
|
|
14
14
|
// src/components/PageLayout/PageLayout.component.tsx
|
|
15
15
|
var _jsxruntime = require('react/jsx-runtime');
|
|
@@ -26,16 +26,16 @@ var PageLayout = ({
|
|
|
26
26
|
const classes = ["eidos-pagelayout", className].filter(Boolean).join(" ");
|
|
27
27
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: classes, ...rest, children: [
|
|
28
28
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
29
|
-
|
|
29
|
+
_chunk75TDY7XFcjs.Toolbar,
|
|
30
30
|
{
|
|
31
31
|
...toolbar,
|
|
32
32
|
className: ["eidos-pagelayout__toolbar", _optionalChain([toolbar, 'optionalAccess', _ => _.className])].filter(Boolean).join(" ")
|
|
33
33
|
}
|
|
34
34
|
),
|
|
35
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-pagelayout__navigation", children: navigation && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
35
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-pagelayout__navigation", children: navigation && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk65PC3YDTcjs.Navigation, { ...navigation }) }),
|
|
36
36
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "main", { className: "eidos-pagelayout__content", children: [
|
|
37
37
|
header && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
38
|
-
|
|
38
|
+
_chunkND526PMGcjs.Header,
|
|
39
39
|
{
|
|
40
40
|
...header,
|
|
41
41
|
className: ["eidos-pagelayout__header", header.className].filter(Boolean).join(" ")
|
|
@@ -56,4 +56,4 @@ var PageLayout = ({
|
|
|
56
56
|
|
|
57
57
|
|
|
58
58
|
exports.PageLayout = PageLayout;
|
|
59
|
-
//# sourceMappingURL=chunk-
|
|
59
|
+
//# sourceMappingURL=chunk-EBSKRZXI.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-EBSKRZXI.cjs","../src/components/PageLayout/PageLayout.component.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACgBM,+CAAA;AApBN,IAAM,cAAA,EAA6B,EAAE,SAAA,EAAW,CAAA,KAAA,EAAA,iBAAK,IAAI,IAAA,CAAK,CAAA,CAAA,CAAE,WAAA,CAAY,CAAC,CAAA,SAAA,EAAY,CAAA;AAElF,IAAM,WAAA,EAAwC,CAAC;AAAA,EACpD,OAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA,EAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,QAAA,EAAU,CAAC,kBAAA,EAAoB,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAExE,EAAA,uBACE,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAW,OAAA,EAAU,GAAG,IAAA,EAM3B,QAAA,EAAA;AAAA,oBAAA,6BAAA;AAAA,MAAC,yBAAA;AAAA,MAAA;AAAA,QACE,GAAG,OAAA;AAAA,QACJ,SAAA,EAAW,CAAC,2BAAA,kBAA6B,OAAA,2BAAS,WAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG;AAAA,MAAA;AAAA,IACvF,CAAA;AAAA,oBACA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,8BAAA,EACZ,QAAA,EAAA,WAAA,mBAAc,6BAAA,4BAAC,EAAA,EAAY,GAAG,WAAA,CAAY,EAAA,CAC7C,CAAA;AAAA,oBACA,8BAAA,MAAC,EAAA,EAAK,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,MAAA,OAAA,mBACC,6BAAA;AAAA,QAAC,wBAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,SAAA,EAAW,CAAC,0BAAA,EAA4B,MAAA,CAAO,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG;AAAA,QAAA;AAAA,MACpF,CAAA;AAAA,sBAEF,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,wBAAA,EAA0B,SAAA,CAAS,CAAA;AAAA,sBAClD,6BAAA;AAAA,QAAC,wBAAA;AAAA,QAAA;AAAA,UACE,oBAAI,MAAA,UAAU,eAAA;AAAA,UACf,SAAA,EAAW,CAAC,0BAAA,kBAA4B,MAAA,6BAAQ,WAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG;AAAA,QAAA;AAAA,MACrF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,CAAA;AAEJ,CAAA;ADGA;AACA;AACE;AACF,gCAAC","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-EBSKRZXI.cjs","sourcesContent":[null,"import React from 'react';\nimport type { PageLayoutProps } from './PageLayout.types';\nimport './PageLayout.scss';\nimport { Toolbar } from '../Toolbar';\nimport { Header } from '../Header';\nimport { Footer } from '../Footer';\nimport type { FooterProps } from '../Footer';\nimport { Navigation } from '../Navigation';\n\nconst defaultFooter: FooterProps = { copyright: `© ${new Date().getFullYear()} Eidos UI` };\n\nexport const PageLayout: React.FC<PageLayoutProps> = ({\n toolbar,\n navigation,\n header,\n footer,\n children,\n className = '',\n ...rest\n}) => {\n const classes = ['eidos-pagelayout', className].filter(Boolean).join(' ');\n\n return (\n <div className={classes} {...rest}>\n {/* Spread rather than forwarded field by field, so a prop added to\n `Toolbar` reaches `PageLayout` consumers without a second edit\n here - the previous per-field list silently dropped anything it\n didn't know about. `className` is merged last so the layout's own\n grid-area class can't be overwritten by the caller's. */}\n <Toolbar\n {...toolbar}\n className={['eidos-pagelayout__toolbar', toolbar?.className].filter(Boolean).join(' ')}\n />\n <div className=\"eidos-pagelayout__navigation\">\n {navigation && <Navigation {...navigation} />}\n </div>\n <main className=\"eidos-pagelayout__content\">\n {header && (\n <Header\n {...header}\n className={['eidos-pagelayout__header', header.className].filter(Boolean).join(' ')}\n />\n )}\n <div className=\"eidos-pagelayout__body\">{children}</div>\n <Footer\n {...(footer ?? defaultFooter)}\n className={['eidos-pagelayout__footer', footer?.className].filter(Boolean).join(' ')}\n />\n </main>\n </div>\n );\n};\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkWWYJNWJYcjs = require('./chunk-WWYJNWJY.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkCUJBNRJJcjs = require('./chunk-CUJBNRJJ.cjs');
|
|
7
7
|
|
|
8
8
|
// src/components/Alert/Alert.component.tsx
|
|
9
9
|
var _lucidereact = require('lucide-react');
|
|
@@ -40,7 +40,7 @@ var Alert = ({
|
|
|
40
40
|
const DefaultIcon = DEFAULT_ICONS[variant];
|
|
41
41
|
iconNode = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DefaultIcon, { className: "eidos-alert-icon", "aria-hidden": "true" });
|
|
42
42
|
} else if (isIconType(icon)) {
|
|
43
|
-
iconNode =
|
|
43
|
+
iconNode = _chunkCUJBNRJJcjs.renderIcon.call(void 0, icon, "eidos-alert-icon");
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
const buttonColor = VARIANT_TO_BUTTON_COLOR[variant];
|
|
@@ -50,7 +50,7 @@ var Alert = ({
|
|
|
50
50
|
title && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "eidos-alert-title", children: title }),
|
|
51
51
|
children && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-alert-content", children }),
|
|
52
52
|
action && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-alert-action", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
53
|
-
|
|
53
|
+
_chunkWWYJNWJYcjs.Button,
|
|
54
54
|
{
|
|
55
55
|
variant: action.variant === "filled" ? "filled" : "text",
|
|
56
56
|
size: "sm",
|
|
@@ -76,4 +76,4 @@ var Alert = ({
|
|
|
76
76
|
|
|
77
77
|
|
|
78
78
|
exports.Alert = Alert;
|
|
79
|
-
//# sourceMappingURL=chunk-
|
|
79
|
+
//# sourceMappingURL=chunk-EH42ND5Q.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-EH42ND5Q.cjs","../src/components/Alert/Alert.component.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACNA,2CAA6D;AA6D5C,+CAAA;AAhDjB,IAAM,cAAA,EAA8E;AAAA,EAClF,IAAA,EAAM,iBAAA;AAAA,EACN,OAAA,EAAS,wBAAA;AAAA,EACT,OAAA,EAAS,0BAAA;AAAA,EACT,MAAA,EAAQ;AACV,CAAA;AAMA,IAAM,wBAAA,EAA6E;AAAA,EACjF,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ;AACV,CAAA;AAMA,SAAS,UAAA,CAAW,KAAA,EAA8C;AAChE,EAAA,OAAO,OAAO,MAAA,IAAU,SAAA;AAC1B;AAMO,IAAM,MAAA,EAA8B,CAAC;AAAA,EAC1C,QAAA,EAAU,MAAA;AAAA,EACV,KAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA,EAAY;AACd,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,QAAA,EAAU,CAAC,aAAA,EAAe,CAAA,aAAA,EAAgB,OAAO,CAAA,CAAA;AAG7B,EAAA;AACM,EAAA;AAElB,EAAA;AAC6B,IAAA;AACE,MAAA;AACjB,MAAA;AACG,IAAA;AACmB,MAAA;AAChD,IAAA;AACF,EAAA;AAEmD,EAAA;AAGjC,EAAA;AACe,IAAA;AAEd,oBAAA;AACU,MAAA;AACK,MAAA;AAEX,MAAA;AACZ,QAAA;AAAA,QAAA;AACwC,UAAA;AAClC,UAAA;AACE,UAAA;AACS,UAAA;AAER,UAAA;AAAA,QAAA;AAEZ,MAAA;AAEJ,IAAA;AAGE,IAAA;AAAC,MAAA;AAAA,MAAA;AACW,QAAA;AACD,QAAA;AACJ,QAAA;AACM,QAAA;AAEI,QAAA;AAAO,MAAA;AACxB,IAAA;AAEJ,EAAA;AAEJ;AD7B0D;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-EH42ND5Q.cjs","sourcesContent":[null,"import React from 'react';\nimport { Info, CircleCheck, TriangleAlert, CircleX, X } from 'lucide-react';\nimport type { AlertProps } from './Alert.types';\nimport type { IconType } from '../../utils';\nimport { renderIcon } from '../../utils';\nimport { Button } from '../Button/Button.component';\nimport './Alert.scss';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\ntype Variant = NonNullable<AlertProps['variant']>;\n\nconst DEFAULT_ICONS: Record<Variant, React.ComponentType<{ className?: string }>> = {\n info: Info,\n success: CircleCheck,\n warning: TriangleAlert,\n danger: CircleX,\n};\n\n/**\n * Button only ships primary | secondary | success | danger.\n * Warning maps to primary (closest neutral-positive colour available).\n */\nconst VARIANT_TO_BUTTON_COLOR: Record<Variant, 'primary' | 'success' | 'danger'> = {\n info: 'primary',\n success: 'success',\n warning: 'primary',\n danger: 'danger',\n};\n\n// ============================================================================\n// Type guard\n// ============================================================================\n\nfunction isIconType(value: boolean | IconType): value is IconType {\n return typeof value !== 'boolean';\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const Alert: React.FC<AlertProps> = ({\n variant = 'info',\n title,\n children,\n icon,\n onDismiss,\n action,\n className = '',\n}) => {\n const classes = ['eidos-alert', `eidos-alert--${variant}`, className].filter(Boolean).join(' ');\n\n // Determine icon rendering\n const showIcon = icon !== false;\n let iconNode: React.ReactNode = null;\n\n if (showIcon) {\n if (icon === true || icon === undefined) {\n const DefaultIcon = DEFAULT_ICONS[variant];\n iconNode = <DefaultIcon className=\"eidos-alert-icon\" aria-hidden=\"true\" />;\n } else if (isIconType(icon)) {\n iconNode = renderIcon(icon, 'eidos-alert-icon');\n }\n }\n\n const buttonColor = VARIANT_TO_BUTTON_COLOR[variant];\n\n return (\n <div className={classes} role=\"alert\">\n {showIcon && <span className=\"eidos-alert-icon-wrapper\">{iconNode}</span>}\n\n <div className=\"eidos-alert-body\">\n {title && <p className=\"eidos-alert-title\">{title}</p>}\n {children && <div className=\"eidos-alert-content\">{children}</div>}\n {action && (\n <div className=\"eidos-alert-action\">\n <Button\n variant={action.variant === 'filled' ? 'filled' : 'text'}\n size=\"sm\"\n color={buttonColor}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n </div>\n )}\n </div>\n\n {onDismiss && (\n <button\n className=\"eidos-alert-dismiss\"\n onClick={onDismiss}\n type=\"button\"\n aria-label=\"Dismiss\"\n >\n <X aria-hidden=\"true\" />\n </button>\n )}\n </div>\n );\n};\n"]}
|