eidos-ui 2.0.0 → 3.0.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 +66 -16
- package/dist/Avatar.types-BY-C09Ke.d.cts +23 -0
- package/dist/Avatar.types-BY-C09Ke.d.ts +23 -0
- package/dist/{Header.types-BZi80bWz.d.cts → Header.types-B3QtuiL-.d.cts} +7 -3
- package/dist/{Header.types-DJt-q01P.d.ts → Header.types-C6w0FBY8.d.ts} +7 -3
- package/dist/{Table.types-Cl5gR8r9.d.cts → Table.types-CPj-udMc.d.cts} +95 -0
- package/dist/{Table.types-jhPb7JNU.d.ts → Table.types-CZZ7QWAI.d.ts} +95 -0
- package/dist/ThemeProvider.types-DgXN0gEH.d.cts +88 -0
- package/dist/ThemeProvider.types-DgXN0gEH.d.ts +88 -0
- package/dist/Toolbar.types-DSk8z2iy.d.cts +38 -0
- package/dist/Toolbar.types-RN0klQzu.d.ts +38 -0
- package/dist/alert/index.cjs +4 -4
- package/dist/alert/index.d.cts +2 -1
- package/dist/alert/index.d.ts +2 -1
- package/dist/alert/index.js +3 -3
- package/dist/avatar/index.d.cts +3 -21
- package/dist/avatar/index.d.ts +3 -21
- 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-2ZY7M72Q.js +521 -0
- package/dist/chunk-2ZY7M72Q.js.map +1 -0
- package/dist/{chunk-KIXFSXIN.cjs → chunk-3E7TKBQI.cjs} +5 -3
- package/dist/chunk-3E7TKBQI.cjs.map +1 -0
- package/dist/{chunk-ZBKJ3EMK.cjs → chunk-442U3W6R.cjs} +3 -3
- package/dist/{chunk-ZBKJ3EMK.cjs.map → chunk-442U3W6R.cjs.map} +1 -1
- package/dist/{chunk-W6IKHJ76.cjs → chunk-5BX4Q76D.cjs} +134 -126
- package/dist/chunk-5BX4Q76D.cjs.map +1 -0
- package/dist/{chunk-YQLCPKGV.js → chunk-5HUZYY54.js} +6 -4
- package/dist/chunk-5HUZYY54.js.map +1 -0
- package/dist/{chunk-G5IGADJI.cjs → chunk-5VM2256W.cjs} +7 -11
- package/dist/chunk-5VM2256W.cjs.map +1 -0
- package/dist/{chunk-Z4ZY7L7W.js → chunk-5ZL6PYU3.js} +3 -3
- package/dist/{chunk-A3NE2C7C.js → chunk-67RFMV6K.js} +2 -2
- package/dist/{chunk-2U7UJOOB.cjs → chunk-6HUHH6Y4.cjs} +17 -15
- package/dist/chunk-6HUHH6Y4.cjs.map +1 -0
- package/dist/{chunk-5WROPW7Z.js → chunk-A7WQINIG.js} +3 -3
- package/dist/{chunk-DKZTDYH5.cjs → chunk-AAA6TR5I.cjs} +3 -3
- package/dist/{chunk-DKZTDYH5.cjs.map → chunk-AAA6TR5I.cjs.map} +1 -1
- package/dist/{chunk-A7Z2QAFZ.cjs → chunk-APK5OQRV.cjs} +5 -5
- package/dist/{chunk-A7Z2QAFZ.cjs.map → chunk-APK5OQRV.cjs.map} +1 -1
- package/dist/{chunk-ISABZ2VX.cjs → chunk-AXBYJ2OY.cjs} +9 -9
- package/dist/{chunk-ISABZ2VX.cjs.map → chunk-AXBYJ2OY.cjs.map} +1 -1
- package/dist/{chunk-6RGJAQCU.cjs → chunk-B5G5XVFJ.cjs} +5 -5
- package/dist/{chunk-6RGJAQCU.cjs.map → chunk-B5G5XVFJ.cjs.map} +1 -1
- package/dist/{chunk-MW2S7PZ7.cjs → chunk-D5IY2HUV.cjs} +5 -5
- package/dist/{chunk-MW2S7PZ7.cjs.map → chunk-D5IY2HUV.cjs.map} +1 -1
- package/dist/{chunk-FMPXSF3H.cjs → chunk-DAXZRNNO.cjs} +4 -4
- package/dist/{chunk-FMPXSF3H.cjs.map → chunk-DAXZRNNO.cjs.map} +1 -1
- package/dist/{chunk-AJZTVCST.js → chunk-EXITZVB2.js} +24 -9
- package/dist/chunk-EXITZVB2.js.map +1 -0
- package/dist/{chunk-AYMD4D4M.cjs → chunk-EZME5CLK.cjs} +3 -3
- package/dist/{chunk-AYMD4D4M.cjs.map → chunk-EZME5CLK.cjs.map} +1 -1
- package/dist/{chunk-IV4LM3MB.js → chunk-F26VIKNF.js} +9 -11
- package/dist/chunk-F26VIKNF.js.map +1 -0
- package/dist/{chunk-WPTMMOA6.cjs → chunk-G77YR73R.cjs} +10 -13
- package/dist/chunk-G77YR73R.cjs.map +1 -0
- package/dist/chunk-GEHL4LKK.cjs +32 -0
- package/dist/chunk-GEHL4LKK.cjs.map +1 -0
- package/dist/chunk-GGSII6Y2.cjs +921 -0
- package/dist/chunk-GGSII6Y2.cjs.map +1 -0
- package/dist/{chunk-3VRMTWUS.js → chunk-GHQ6SQPI.js} +7 -10
- package/dist/chunk-GHQ6SQPI.js.map +1 -0
- package/dist/{chunk-56B6RLOE.js → chunk-GI6VJYOS.js} +4 -4
- package/dist/{chunk-56B6RLOE.js.map → chunk-GI6VJYOS.js.map} +1 -1
- package/dist/{chunk-UGMONQGH.cjs → chunk-GR2PMCVN.cjs} +10 -12
- package/dist/chunk-GR2PMCVN.cjs.map +1 -0
- package/dist/{chunk-7AHZTHXR.cjs → chunk-GT22EGJP.cjs} +5 -5
- package/dist/{chunk-7AHZTHXR.cjs.map → chunk-GT22EGJP.cjs.map} +1 -1
- package/dist/chunk-H5HWFOWZ.js +390 -0
- package/dist/chunk-H5HWFOWZ.js.map +1 -0
- package/dist/{chunk-ALGX5X4N.js → chunk-IFVT5UCY.js} +3 -3
- package/dist/{chunk-5CLC3FJO.js → chunk-KBG77JHC.js} +13 -2
- package/dist/chunk-KBG77JHC.js.map +1 -0
- package/dist/{chunk-HLNKIAE5.cjs → chunk-KJZUYC4X.cjs} +5 -5
- package/dist/{chunk-HLNKIAE5.cjs.map → chunk-KJZUYC4X.cjs.map} +1 -1
- package/dist/{chunk-JV7Z3D3U.js → chunk-LEMCJW57.js} +134 -126
- package/dist/chunk-LEMCJW57.js.map +1 -0
- package/dist/{chunk-4BQM5F76.cjs → chunk-LFWPQYWX.cjs} +3 -3
- package/dist/{chunk-4BQM5F76.cjs.map → chunk-LFWPQYWX.cjs.map} +1 -1
- package/dist/{chunk-XVSODE4K.cjs → chunk-LIFUHQH5.cjs} +35 -20
- package/dist/chunk-LIFUHQH5.cjs.map +1 -0
- package/dist/{chunk-PJC7NZUV.cjs → chunk-LUL6RZ4M.cjs} +3 -3
- package/dist/{chunk-PJC7NZUV.cjs.map → chunk-LUL6RZ4M.cjs.map} +1 -1
- package/dist/{chunk-4UJ7LG4W.cjs → chunk-N2IGZIEX.cjs} +3 -3
- package/dist/{chunk-4UJ7LG4W.cjs.map → chunk-N2IGZIEX.cjs.map} +1 -1
- package/dist/{chunk-3LHQUOGP.js → chunk-NGVOXM7P.js} +3 -3
- package/dist/{chunk-WTXASLBB.js → chunk-O5WEKLNF.js} +2 -2
- package/dist/{chunk-BOB5JJ7F.js → chunk-P7IQY5YH.js} +2 -2
- package/dist/{chunk-VZYLJSV5.js → chunk-R4PU2TBM.js} +2 -2
- package/dist/{chunk-P2GCAVUZ.js → chunk-RAZRQ57B.js} +2 -2
- package/dist/{chunk-K7IFNKMN.js → chunk-REVK7IGN.js} +2 -2
- package/dist/{chunk-6U2H26A4.cjs → chunk-RHOT7AEI.cjs} +3 -3
- package/dist/{chunk-6U2H26A4.cjs.map → chunk-RHOT7AEI.cjs.map} +1 -1
- package/dist/{chunk-MH2CD2QT.js → chunk-RKA2OJRT.js} +207 -102
- package/dist/chunk-RKA2OJRT.js.map +1 -0
- package/dist/{chunk-JC4WLVBG.js → chunk-RWOX2NJN.js} +2 -2
- package/dist/{chunk-4LM33LDV.js → chunk-S3CT536K.js} +2 -2
- package/dist/chunk-SE7MWOC7.cjs +390 -0
- package/dist/chunk-SE7MWOC7.cjs.map +1 -0
- package/dist/{chunk-4M3LZLOH.js → chunk-SHYSLWQG.js} +2 -2
- package/dist/{chunk-EQEV7GPT.cjs → chunk-SKEWTQJ7.cjs} +5 -5
- package/dist/{chunk-EQEV7GPT.cjs.map → chunk-SKEWTQJ7.cjs.map} +1 -1
- package/dist/{chunk-2ZENLZEQ.cjs → chunk-SKTDGCWJ.cjs} +232 -127
- package/dist/chunk-SKTDGCWJ.cjs.map +1 -0
- package/dist/{chunk-2BXCIWL7.js → chunk-SN6EWQDJ.js} +3 -3
- package/dist/{chunk-DW2YDWGN.js → chunk-TEJIPPZR.js} +2 -2
- package/dist/{chunk-OGKD5PLS.cjs → chunk-TRLBYA5G.cjs} +4 -4
- package/dist/{chunk-OGKD5PLS.cjs.map → chunk-TRLBYA5G.cjs.map} +1 -1
- package/dist/chunk-U5FHQ73U.cjs +521 -0
- package/dist/chunk-U5FHQ73U.cjs.map +1 -0
- package/dist/{chunk-WE5FTQGD.js → chunk-VHMOKXUT.js} +3 -7
- package/dist/chunk-VHMOKXUT.js.map +1 -0
- package/dist/{chunk-S77GR5YQ.cjs → chunk-VHQTDITV.cjs} +3 -3
- package/dist/{chunk-S77GR5YQ.cjs.map → chunk-VHQTDITV.cjs.map} +1 -1
- package/dist/{chunk-3HMKE2GJ.js → chunk-VSTQEHVZ.js} +6 -4
- package/dist/chunk-VSTQEHVZ.js.map +1 -0
- package/dist/{chunk-HNUTV3HR.cjs → chunk-WUBQJVB7.cjs} +3 -3
- package/dist/{chunk-HNUTV3HR.cjs.map → chunk-WUBQJVB7.cjs.map} +1 -1
- package/dist/{chunk-S7TWEVC3.js → chunk-Y53HCLGW.js} +2 -2
- package/dist/{chunk-WIE7HDIM.js → chunk-YJXZR7RL.js} +2 -2
- package/dist/{chunk-IJYYHBZC.cjs → chunk-Z4SLV6WG.cjs} +3 -3
- package/dist/{chunk-IJYYHBZC.cjs.map → chunk-Z4SLV6WG.cjs.map} +1 -1
- package/dist/chunk-ZEZK664O.js +921 -0
- package/dist/chunk-ZEZK664O.js.map +1 -0
- package/dist/{chunk-JMD3P4CY.js → chunk-ZHFPV43D.js} +2 -2
- package/dist/color-picker/index.cjs +2 -2
- package/dist/color-picker/index.js +1 -1
- package/dist/combobox/index.cjs +4 -4
- package/dist/combobox/index.js +3 -3
- package/dist/context-menu/index.cjs +4 -4
- package/dist/context-menu/index.js +3 -3
- package/dist/data-grid/index.cjs +13 -13
- package/dist/data-grid/index.d.cts +49 -3
- package/dist/data-grid/index.d.ts +49 -3
- package/dist/data-grid/index.js +12 -12
- package/dist/date-picker/index.cjs +6 -6
- package/dist/date-picker/index.js +5 -5
- package/dist/drawer/index.cjs +4 -4
- package/dist/drawer/index.d.cts +2 -1
- package/dist/drawer/index.d.ts +2 -1
- package/dist/drawer/index.js +3 -3
- package/dist/empty-state/index.d.cts +2 -2
- package/dist/empty-state/index.d.ts +2 -2
- package/dist/fonts/JetBrains-Mono-OFL.txt +93 -0
- package/dist/fonts/Plus-Jakarta-Sans-OFL.txt +93 -0
- package/dist/fonts/jetbrains-mono-latin-ext-wght-normal.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-latin-wght-normal.woff2 +0 -0
- package/dist/fonts/plus-jakarta-sans-latin-ext-wght-normal.woff2 +0 -0
- package/dist/fonts/plus-jakarta-sans-latin-wght-normal.woff2 +0 -0
- package/dist/fonts.css +32 -0
- package/dist/fonts.css.d.ts +2 -0
- package/dist/header/index.cjs +4 -4
- package/dist/header/index.d.cts +2 -2
- package/dist/header/index.d.ts +2 -2
- package/dist/header/index.js +3 -3
- package/dist/index.cjs +59 -33
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +625 -174
- package/dist/index.d.cts +8 -4
- package/dist/index.d.ts +8 -4
- package/dist/index.js +62 -36
- 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 +3 -3
- package/dist/menu/index.js +2 -2
- package/dist/modal/index.cjs +4 -4
- package/dist/modal/index.d.cts +2 -1
- package/dist/modal/index.d.ts +2 -1
- package/dist/modal/index.js +3 -3
- package/dist/navigation/index.cjs +4 -4
- package/dist/navigation/index.js +3 -3
- package/dist/page-layout/index.cjs +8 -8
- package/dist/page-layout/index.d.cts +3 -2
- package/dist/page-layout/index.d.ts +3 -2
- package/dist/page-layout/index.js +7 -7
- package/dist/pagination/index.cjs +6 -6
- package/dist/pagination/index.js +5 -5
- package/dist/popover/index.cjs +2 -2
- package/dist/popover/index.d.cts +2 -2
- package/dist/popover/index.d.ts +2 -2
- package/dist/popover/index.js +1 -1
- package/dist/segmented-control/index.cjs +3 -3
- package/dist/segmented-control/index.js +2 -2
- package/dist/select/index.cjs +4 -4
- package/dist/select/index.js +3 -3
- package/dist/snackbar/index.cjs +4 -4
- package/dist/snackbar/index.js +3 -3
- package/dist/split-button/index.cjs +4 -4
- package/dist/split-button/index.js +3 -3
- package/dist/table/index.cjs +11 -11
- package/dist/table/index.d.cts +3 -3
- package/dist/table/index.d.ts +3 -3
- package/dist/table/index.js +10 -10
- package/dist/tabs/index.cjs +3 -3
- package/dist/tabs/index.js +2 -2
- package/dist/tag-input/index.cjs +4 -4
- package/dist/tag-input/index.js +3 -3
- package/dist/textarea/index.cjs +3 -3
- package/dist/textarea/index.js +2 -2
- package/dist/theme-editor/index.cjs +22 -0
- package/dist/theme-editor/index.cjs.map +1 -0
- package/dist/theme-editor/index.d.cts +65 -0
- package/dist/theme-editor/index.d.ts +65 -0
- package/dist/theme-editor/index.js +22 -0
- package/dist/theme-editor/index.js.map +1 -0
- package/dist/theme-provider/index.cjs +27 -0
- package/dist/theme-provider/index.cjs.map +1 -0
- package/dist/theme-provider/index.d.cts +123 -0
- package/dist/theme-provider/index.d.ts +123 -0
- package/dist/theme-provider/index.js +27 -0
- package/dist/theme-provider/index.js.map +1 -0
- package/dist/toolbar/index.cjs +5 -5
- package/dist/toolbar/index.d.cts +3 -2
- package/dist/toolbar/index.d.ts +3 -2
- package/dist/toolbar/index.js +4 -4
- package/package.json +17 -6
- package/dist/Toolbar.types-BGD57Uhm.d.ts +0 -22
- package/dist/Toolbar.types-tQkLmPIu.d.cts +0 -22
- package/dist/chunk-2U7UJOOB.cjs.map +0 -1
- package/dist/chunk-2ZENLZEQ.cjs.map +0 -1
- package/dist/chunk-3HMKE2GJ.js.map +0 -1
- package/dist/chunk-3VRMTWUS.js.map +0 -1
- package/dist/chunk-5CLC3FJO.js.map +0 -1
- package/dist/chunk-AJZTVCST.js.map +0 -1
- package/dist/chunk-G5IGADJI.cjs.map +0 -1
- package/dist/chunk-GOR642KK.cjs +0 -21
- package/dist/chunk-GOR642KK.cjs.map +0 -1
- package/dist/chunk-IV4LM3MB.js.map +0 -1
- package/dist/chunk-JV7Z3D3U.js.map +0 -1
- package/dist/chunk-KIXFSXIN.cjs.map +0 -1
- package/dist/chunk-MH2CD2QT.js.map +0 -1
- package/dist/chunk-QONDJ5VM.cjs +0 -744
- package/dist/chunk-QONDJ5VM.cjs.map +0 -1
- package/dist/chunk-UGMONQGH.cjs.map +0 -1
- package/dist/chunk-VSFKM7FE.js +0 -744
- package/dist/chunk-VSFKM7FE.js.map +0 -1
- package/dist/chunk-W6IKHJ76.cjs.map +0 -1
- package/dist/chunk-WE5FTQGD.js.map +0 -1
- package/dist/chunk-WPTMMOA6.cjs.map +0 -1
- package/dist/chunk-XVSODE4K.cjs.map +0 -1
- package/dist/chunk-YQLCPKGV.js.map +0 -1
- /package/dist/{chunk-Z4ZY7L7W.js.map → chunk-5ZL6PYU3.js.map} +0 -0
- /package/dist/{chunk-A3NE2C7C.js.map → chunk-67RFMV6K.js.map} +0 -0
- /package/dist/{chunk-5WROPW7Z.js.map → chunk-A7WQINIG.js.map} +0 -0
- /package/dist/{chunk-ALGX5X4N.js.map → chunk-IFVT5UCY.js.map} +0 -0
- /package/dist/{chunk-3LHQUOGP.js.map → chunk-NGVOXM7P.js.map} +0 -0
- /package/dist/{chunk-WTXASLBB.js.map → chunk-O5WEKLNF.js.map} +0 -0
- /package/dist/{chunk-BOB5JJ7F.js.map → chunk-P7IQY5YH.js.map} +0 -0
- /package/dist/{chunk-VZYLJSV5.js.map → chunk-R4PU2TBM.js.map} +0 -0
- /package/dist/{chunk-P2GCAVUZ.js.map → chunk-RAZRQ57B.js.map} +0 -0
- /package/dist/{chunk-K7IFNKMN.js.map → chunk-REVK7IGN.js.map} +0 -0
- /package/dist/{chunk-JC4WLVBG.js.map → chunk-RWOX2NJN.js.map} +0 -0
- /package/dist/{chunk-4LM33LDV.js.map → chunk-S3CT536K.js.map} +0 -0
- /package/dist/{chunk-4M3LZLOH.js.map → chunk-SHYSLWQG.js.map} +0 -0
- /package/dist/{chunk-2BXCIWL7.js.map → chunk-SN6EWQDJ.js.map} +0 -0
- /package/dist/{chunk-DW2YDWGN.js.map → chunk-TEJIPPZR.js.map} +0 -0
- /package/dist/{chunk-S7TWEVC3.js.map → chunk-Y53HCLGW.js.map} +0 -0
- /package/dist/{chunk-WIE7HDIM.js.map → chunk-YJXZR7RL.js.map} +0 -0
- /package/dist/{chunk-JMD3P4CY.js.map → chunk-ZHFPV43D.js.map} +0 -0
|
@@ -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 _chunkAPK5OQRVcjs = require('./chunk-APK5OQRV.cjs');
|
|
4
4
|
|
|
5
5
|
// src/components/Snackbar/Snackbar.context.tsx
|
|
6
6
|
var _react = require('react');
|
|
@@ -116,7 +116,7 @@ var SnackbarComponent = ({ snackbar, onClose }) => {
|
|
|
116
116
|
children: [
|
|
117
117
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-snackbar-content", children: renderContent() }),
|
|
118
118
|
action && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-snackbar-actions", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
119
|
-
|
|
119
|
+
_chunkAPK5OQRVcjs.Button,
|
|
120
120
|
{
|
|
121
121
|
variant: action.variant === "primary" ? "filled" : "text",
|
|
122
122
|
size: "sm",
|
|
@@ -235,4 +235,4 @@ var useSnackbar = () => {
|
|
|
235
235
|
|
|
236
236
|
|
|
237
237
|
exports.useSnackbarContext = useSnackbarContext; exports.SnackbarProvider = SnackbarProvider; exports.SnackbarContainer = SnackbarContainer; exports.useSnackbar = useSnackbar;
|
|
238
|
-
//# sourceMappingURL=chunk-
|
|
238
|
+
//# sourceMappingURL=chunk-EZME5CLK.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-AYMD4D4M.cjs","../src/components/Snackbar/Snackbar.context.tsx","../src/components/Snackbar/SnackbarContainer.component.tsx","../src/components/Snackbar/Snackbar.component.tsx","../src/components/Snackbar/Snackbar.hooks.ts"],"names":["jsx","useCallback"],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-AYMD4D4M.cjs","sourcesContent":[null,"import React, { createContext, useContext, useState, useCallback, useRef } from 'react';\nimport type { SnackbarContextValue, SnackbarItem, SnackbarProps } from './Snackbar.types';\n\nconst SnackbarContext = createContext<SnackbarContextValue | undefined>(undefined);\n\nexport const useSnackbarContext = (): SnackbarContextValue => {\n const context = useContext(SnackbarContext);\n if (!context) {\n throw new Error('useSnackbarContext must be used within a SnackbarProvider');\n }\n return context;\n};\n\ninterface SnackbarProviderProps {\n children: React.ReactNode;\n}\n\nexport const SnackbarProvider: React.FC<SnackbarProviderProps> = ({ children }) => {\n const [snackbars, setSnackbars] = useState<SnackbarItem[]>([]);\n // Mirror state in a ref so removeSnackbar can read current items synchronously\n // without placing side-effects inside a setState updater (which StrictMode calls twice).\n const snackbarsRef = useRef<SnackbarItem[]>([]);\n snackbarsRef.current = snackbars;\n\n const generateId = useCallback((): string => {\n return `snackbar-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }, []);\n\n const removeSnackbar = useCallback((id: string): void => {\n // Read from ref - safe to call outside a setState updater.\n // Calling side-effects inside a setState updater is wrong: React StrictMode\n // deliberately invokes updaters twice, which would fire onClose 2× from here\n // plus 1× from SnackbarComponent.handleClose = 3× total.\n const snackbar = snackbarsRef.current.find((item) => item.id === id);\n if (snackbar?.onClose) {\n snackbar.onClose(id);\n }\n\n // Transition to exiting state, then remove after the CSS animation (300ms).\n setSnackbars((prev) =>\n prev.map((item) => (item.id === id ? { ...item, state: 'exiting' } : item)),\n );\n\n setTimeout(() => {\n setSnackbars((prev) => prev.filter((item) => item.id !== id));\n }, 300);\n }, []);\n\n const addSnackbar = useCallback(\n (snackbar: Omit<SnackbarProps, 'id'>): string => {\n const id = generateId();\n const newSnackbar: SnackbarItem = {\n ...snackbar,\n id,\n state: 'entering',\n createdAt: Date.now(),\n };\n\n setSnackbars((prev) => [newSnackbar, ...prev]); // Add to beginning (newest on top)\n\n // Use requestAnimationFrame to ensure DOM is rendered before animation\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setSnackbars((prev) =>\n prev.map((item) => (item.id === id ? { ...item, state: 'entered' } : item)),\n );\n });\n });\n\n // Auto-close if duration is set\n if (snackbar.duration && snackbar.duration > 0) {\n setTimeout(() => {\n removeSnackbar(id);\n }, snackbar.duration);\n }\n\n return id;\n },\n [generateId, removeSnackbar],\n );\n\n const clearAllSnackbars = useCallback((): void => {\n // Transition all to exiting state\n setSnackbars((prev) => prev.map((item) => ({ ...item, state: 'exiting' })));\n\n // Remove all after animation completes (300ms to match CSS animation)\n setTimeout(() => {\n setSnackbars([]);\n }, 300);\n }, []);\n\n const contextValue: SnackbarContextValue = {\n snackbars,\n addSnackbar,\n removeSnackbar,\n clearAllSnackbars,\n };\n\n return <SnackbarContext.Provider value={contextValue}>{children}</SnackbarContext.Provider>;\n};\n\nSnackbarProvider.displayName = 'SnackbarProvider';\n","import React from 'react';\nimport { createPortal } from 'react-dom';\nimport { useSnackbarContext } from './Snackbar.context';\nimport { SnackbarComponent } from './Snackbar.component';\n\nexport const SnackbarContainer: React.FC = () => {\n const { snackbars, removeSnackbar } = useSnackbarContext();\n\n if (snackbars.length === 0) {\n return null;\n }\n\n return createPortal(\n <div className={'eidos-snackbar-container'}>\n {snackbars.map((snackbar) => (\n <div key={snackbar.id} className={'eidos-snackbar-wrapper'}>\n <SnackbarComponent snackbar={snackbar} onClose={removeSnackbar} />\n </div>\n ))}\n </div>,\n document.body,\n );\n};\n\nSnackbarContainer.displayName = 'SnackbarContainer';\n","import React from 'react';\nimport { X } from 'lucide-react';\nimport { Button } from '../Button/Button.component';\nimport type { SnackbarItem } from './Snackbar.types';\n\ninterface SnackbarComponentProps {\n snackbar: SnackbarItem;\n onClose: (id: string) => void;\n}\n\nexport const SnackbarComponent: React.FC<SnackbarComponentProps> = ({ snackbar, onClose }) => {\n const {\n id,\n variant = 'info',\n message,\n component: Component,\n componentProps,\n action,\n state,\n } = snackbar;\n\n const handleClose = () => {\n // onClose callback is fired by removeSnackbar (context) to cover both\n // manual and auto-close paths without duplication.\n onClose(id);\n };\n\n const handleActionClick = () => {\n if (action?.onClick) {\n action.onClick();\n }\n };\n\n // Render content based on type\n const renderContent = () => {\n if (message) {\n return <span className={'eidos-snackbar-message'}>{message}</span>;\n }\n if (Component) {\n return <Component {...(componentProps || {})} />;\n }\n return null;\n };\n\n return (\n <div\n className={`eidos-snackbar eidos-snackbar--${variant} eidos-snackbar--${state} ${snackbar.className || ''}`}\n role=\"alert\"\n aria-live=\"polite\"\n >\n <div className={'eidos-snackbar-content'}>{renderContent()}</div>\n\n {action && (\n <div className={'eidos-snackbar-actions'}>\n <Button\n variant={action.variant === 'primary' ? 'filled' : 'text'}\n size=\"sm\"\n onClick={handleActionClick}\n className={'eidos-snackbar-action-button'}\n >\n {action.label}\n </Button>\n </div>\n )}\n\n <button\n className={'eidos-snackbar-close-button'}\n onClick={handleClose}\n aria-label=\"Close notification\"\n type=\"button\"\n >\n <X className={'eidos-snackbar-close-icon'} />\n </button>\n </div>\n );\n};\n\nSnackbarComponent.displayName = 'SnackbarComponent';\n","import { useCallback } from 'react';\nimport { useSnackbarContext } from './Snackbar.context';\nimport type { UseSnackbarReturn, SnackbarProps } from './Snackbar.types';\n\nexport const useSnackbar = (): UseSnackbarReturn => {\n const { addSnackbar, removeSnackbar, clearAllSnackbars } = useSnackbarContext();\n\n const showSnackbar = useCallback(\n (snackbar: Omit<SnackbarProps, 'id'>): string => {\n return addSnackbar(snackbar);\n },\n [addSnackbar],\n );\n\n const hideSnackbar = useCallback(\n (id: string): void => {\n removeSnackbar(id);\n },\n [removeSnackbar],\n );\n\n const clearAll = useCallback((): void => {\n clearAllSnackbars();\n }, [clearAllSnackbars]);\n\n const showSuccess = useCallback(\n (message: string, options?: Partial<Omit<SnackbarProps, 'id' | 'message' | 'variant'>>) => {\n return showSnackbar({\n message,\n variant: 'success',\n duration: 5000,\n ...options,\n });\n },\n [showSnackbar],\n );\n\n const showError = useCallback(\n (message: string, options?: Partial<Omit<SnackbarProps, 'id' | 'message' | 'variant'>>) => {\n return showSnackbar({\n message,\n variant: 'danger',\n duration: 5000,\n ...options,\n });\n },\n [showSnackbar],\n );\n\n const showWarning = useCallback(\n (message: string, options?: Partial<Omit<SnackbarProps, 'id' | 'message' | 'variant'>>) => {\n return showSnackbar({\n message,\n variant: 'warning',\n duration: 5000,\n ...options,\n });\n },\n [showSnackbar],\n );\n\n const showInfo = useCallback(\n (message: string, options?: Partial<Omit<SnackbarProps, 'id' | 'message' | 'variant'>>) => {\n return showSnackbar({\n message,\n variant: 'info',\n duration: 5000,\n ...options,\n });\n },\n [showSnackbar],\n );\n\n return {\n showSnackbar,\n hideSnackbar,\n clearAll,\n showSuccess,\n showError,\n showWarning,\n showInfo,\n };\n};\n\nexport default useSnackbar;\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-EZME5CLK.cjs","../src/components/Snackbar/Snackbar.context.tsx","../src/components/Snackbar/SnackbarContainer.component.tsx","../src/components/Snackbar/Snackbar.component.tsx","../src/components/Snackbar/Snackbar.hooks.ts"],"names":["jsx","useCallback"],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-EZME5CLK.cjs","sourcesContent":[null,"import React, { createContext, useContext, useState, useCallback, useRef } from 'react';\nimport type { SnackbarContextValue, SnackbarItem, SnackbarProps } from './Snackbar.types';\n\nconst SnackbarContext = createContext<SnackbarContextValue | undefined>(undefined);\n\nexport const useSnackbarContext = (): SnackbarContextValue => {\n const context = useContext(SnackbarContext);\n if (!context) {\n throw new Error('useSnackbarContext must be used within a SnackbarProvider');\n }\n return context;\n};\n\ninterface SnackbarProviderProps {\n children: React.ReactNode;\n}\n\nexport const SnackbarProvider: React.FC<SnackbarProviderProps> = ({ children }) => {\n const [snackbars, setSnackbars] = useState<SnackbarItem[]>([]);\n // Mirror state in a ref so removeSnackbar can read current items synchronously\n // without placing side-effects inside a setState updater (which StrictMode calls twice).\n const snackbarsRef = useRef<SnackbarItem[]>([]);\n snackbarsRef.current = snackbars;\n\n const generateId = useCallback((): string => {\n return `snackbar-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }, []);\n\n const removeSnackbar = useCallback((id: string): void => {\n // Read from ref - safe to call outside a setState updater.\n // Calling side-effects inside a setState updater is wrong: React StrictMode\n // deliberately invokes updaters twice, which would fire onClose 2× from here\n // plus 1× from SnackbarComponent.handleClose = 3× total.\n const snackbar = snackbarsRef.current.find((item) => item.id === id);\n if (snackbar?.onClose) {\n snackbar.onClose(id);\n }\n\n // Transition to exiting state, then remove after the CSS animation (300ms).\n setSnackbars((prev) =>\n prev.map((item) => (item.id === id ? { ...item, state: 'exiting' } : item)),\n );\n\n setTimeout(() => {\n setSnackbars((prev) => prev.filter((item) => item.id !== id));\n }, 300);\n }, []);\n\n const addSnackbar = useCallback(\n (snackbar: Omit<SnackbarProps, 'id'>): string => {\n const id = generateId();\n const newSnackbar: SnackbarItem = {\n ...snackbar,\n id,\n state: 'entering',\n createdAt: Date.now(),\n };\n\n setSnackbars((prev) => [newSnackbar, ...prev]); // Add to beginning (newest on top)\n\n // Use requestAnimationFrame to ensure DOM is rendered before animation\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setSnackbars((prev) =>\n prev.map((item) => (item.id === id ? { ...item, state: 'entered' } : item)),\n );\n });\n });\n\n // Auto-close if duration is set\n if (snackbar.duration && snackbar.duration > 0) {\n setTimeout(() => {\n removeSnackbar(id);\n }, snackbar.duration);\n }\n\n return id;\n },\n [generateId, removeSnackbar],\n );\n\n const clearAllSnackbars = useCallback((): void => {\n // Transition all to exiting state\n setSnackbars((prev) => prev.map((item) => ({ ...item, state: 'exiting' })));\n\n // Remove all after animation completes (300ms to match CSS animation)\n setTimeout(() => {\n setSnackbars([]);\n }, 300);\n }, []);\n\n const contextValue: SnackbarContextValue = {\n snackbars,\n addSnackbar,\n removeSnackbar,\n clearAllSnackbars,\n };\n\n return <SnackbarContext.Provider value={contextValue}>{children}</SnackbarContext.Provider>;\n};\n\nSnackbarProvider.displayName = 'SnackbarProvider';\n","import React from 'react';\nimport { createPortal } from 'react-dom';\nimport { useSnackbarContext } from './Snackbar.context';\nimport { SnackbarComponent } from './Snackbar.component';\n\nexport const SnackbarContainer: React.FC = () => {\n const { snackbars, removeSnackbar } = useSnackbarContext();\n\n if (snackbars.length === 0) {\n return null;\n }\n\n return createPortal(\n <div className={'eidos-snackbar-container'}>\n {snackbars.map((snackbar) => (\n <div key={snackbar.id} className={'eidos-snackbar-wrapper'}>\n <SnackbarComponent snackbar={snackbar} onClose={removeSnackbar} />\n </div>\n ))}\n </div>,\n document.body,\n );\n};\n\nSnackbarContainer.displayName = 'SnackbarContainer';\n","import React from 'react';\nimport { X } from 'lucide-react';\nimport { Button } from '../Button/Button.component';\nimport type { SnackbarItem } from './Snackbar.types';\n\ninterface SnackbarComponentProps {\n snackbar: SnackbarItem;\n onClose: (id: string) => void;\n}\n\nexport const SnackbarComponent: React.FC<SnackbarComponentProps> = ({ snackbar, onClose }) => {\n const {\n id,\n variant = 'info',\n message,\n component: Component,\n componentProps,\n action,\n state,\n } = snackbar;\n\n const handleClose = () => {\n // onClose callback is fired by removeSnackbar (context) to cover both\n // manual and auto-close paths without duplication.\n onClose(id);\n };\n\n const handleActionClick = () => {\n if (action?.onClick) {\n action.onClick();\n }\n };\n\n // Render content based on type\n const renderContent = () => {\n if (message) {\n return <span className={'eidos-snackbar-message'}>{message}</span>;\n }\n if (Component) {\n return <Component {...(componentProps || {})} />;\n }\n return null;\n };\n\n return (\n <div\n className={`eidos-snackbar eidos-snackbar--${variant} eidos-snackbar--${state} ${snackbar.className || ''}`}\n role=\"alert\"\n aria-live=\"polite\"\n >\n <div className={'eidos-snackbar-content'}>{renderContent()}</div>\n\n {action && (\n <div className={'eidos-snackbar-actions'}>\n <Button\n variant={action.variant === 'primary' ? 'filled' : 'text'}\n size=\"sm\"\n onClick={handleActionClick}\n className={'eidos-snackbar-action-button'}\n >\n {action.label}\n </Button>\n </div>\n )}\n\n <button\n className={'eidos-snackbar-close-button'}\n onClick={handleClose}\n aria-label=\"Close notification\"\n type=\"button\"\n >\n <X className={'eidos-snackbar-close-icon'} />\n </button>\n </div>\n );\n};\n\nSnackbarComponent.displayName = 'SnackbarComponent';\n","import { useCallback } from 'react';\nimport { useSnackbarContext } from './Snackbar.context';\nimport type { UseSnackbarReturn, SnackbarProps } from './Snackbar.types';\n\nexport const useSnackbar = (): UseSnackbarReturn => {\n const { addSnackbar, removeSnackbar, clearAllSnackbars } = useSnackbarContext();\n\n const showSnackbar = useCallback(\n (snackbar: Omit<SnackbarProps, 'id'>): string => {\n return addSnackbar(snackbar);\n },\n [addSnackbar],\n );\n\n const hideSnackbar = useCallback(\n (id: string): void => {\n removeSnackbar(id);\n },\n [removeSnackbar],\n );\n\n const clearAll = useCallback((): void => {\n clearAllSnackbars();\n }, [clearAllSnackbars]);\n\n const showSuccess = useCallback(\n (message: string, options?: Partial<Omit<SnackbarProps, 'id' | 'message' | 'variant'>>) => {\n return showSnackbar({\n message,\n variant: 'success',\n duration: 5000,\n ...options,\n });\n },\n [showSnackbar],\n );\n\n const showError = useCallback(\n (message: string, options?: Partial<Omit<SnackbarProps, 'id' | 'message' | 'variant'>>) => {\n return showSnackbar({\n message,\n variant: 'danger',\n duration: 5000,\n ...options,\n });\n },\n [showSnackbar],\n );\n\n const showWarning = useCallback(\n (message: string, options?: Partial<Omit<SnackbarProps, 'id' | 'message' | 'variant'>>) => {\n return showSnackbar({\n message,\n variant: 'warning',\n duration: 5000,\n ...options,\n });\n },\n [showSnackbar],\n );\n\n const showInfo = useCallback(\n (message: string, options?: Partial<Omit<SnackbarProps, 'id' | 'message' | 'variant'>>) => {\n return showSnackbar({\n message,\n variant: 'info',\n duration: 5000,\n ...options,\n });\n },\n [showSnackbar],\n );\n\n return {\n showSnackbar,\n hideSnackbar,\n clearAll,\n showSuccess,\n showError,\n showWarning,\n showInfo,\n };\n};\n\nexport default useSnackbar;\n"]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-PY2376XI.js";
|
|
4
4
|
import {
|
|
5
5
|
Menu
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ZHFPV43D.js";
|
|
7
7
|
import {
|
|
8
8
|
Avatar
|
|
9
9
|
} from "./chunk-XJBWFDDE.js";
|
|
@@ -12,31 +12,29 @@ import {
|
|
|
12
12
|
} from "./chunk-DRXPTACG.js";
|
|
13
13
|
import {
|
|
14
14
|
IconButton
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-YJXZR7RL.js";
|
|
16
16
|
|
|
17
17
|
// src/components/Toolbar/Toolbar.component.tsx
|
|
18
18
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
19
19
|
var Toolbar = ({
|
|
20
20
|
breadcrumbs,
|
|
21
21
|
actions,
|
|
22
|
+
user,
|
|
22
23
|
userMenu,
|
|
23
24
|
cmdPaletteItems,
|
|
25
|
+
content,
|
|
24
26
|
className = ""
|
|
25
27
|
}) => {
|
|
26
28
|
const classes = ["eidos-toolbar", className].filter(Boolean).join(" ");
|
|
29
|
+
const hasMenu = userMenu !== void 0 && userMenu.length > 0;
|
|
30
|
+
const avatar = user || hasMenu ? /* @__PURE__ */ jsx(Avatar, { ...user, size: "sm" }) : null;
|
|
27
31
|
return /* @__PURE__ */ jsxs("div", { className: classes, children: [
|
|
28
32
|
breadcrumbs && /* @__PURE__ */ jsx(Breadcrumb, { ...breadcrumbs }),
|
|
29
33
|
/* @__PURE__ */ jsxs("div", { className: "eidos-toolbar__content", children: [
|
|
34
|
+
content && /* @__PURE__ */ jsx("div", { className: "eidos-toolbar__slot", children: content }),
|
|
30
35
|
cmdPaletteItems && cmdPaletteItems.length > 0 && /* @__PURE__ */ jsx(CommandPalette, { trigger: true, triggerLabel: "Search", items: cmdPaletteItems }),
|
|
31
36
|
actions && actions.length > 0 && /* @__PURE__ */ jsx("div", { className: "eidos-toolbar__actions", children: actions.map((action, index) => /* @__PURE__ */ jsx(IconButton, { variant: "text", size: "sm", ...action }, index)) }),
|
|
32
|
-
/* @__PURE__ */ jsx(
|
|
33
|
-
Menu,
|
|
34
|
-
{
|
|
35
|
-
trigger: /* @__PURE__ */ jsx(Avatar, { name: "John Doe", size: "sm", color: "primary" }),
|
|
36
|
-
items: userMenu,
|
|
37
|
-
minWidth: 220
|
|
38
|
-
}
|
|
39
|
-
)
|
|
37
|
+
hasMenu ? /* @__PURE__ */ jsx(Menu, { trigger: avatar, items: userMenu, minWidth: 220 }) : avatar
|
|
40
38
|
] })
|
|
41
39
|
] });
|
|
42
40
|
};
|
|
@@ -44,4 +42,4 @@ var Toolbar = ({
|
|
|
44
42
|
export {
|
|
45
43
|
Toolbar
|
|
46
44
|
};
|
|
47
|
-
//# sourceMappingURL=chunk-
|
|
45
|
+
//# sourceMappingURL=chunk-F26VIKNF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Toolbar/Toolbar.component.tsx"],"sourcesContent":["import React from 'react';\nimport type { ToolbarProps } from './Toolbar.types';\nimport './Toolbar.scss';\nimport { IconButton } from '../Button';\nimport { Breadcrumb } from '../Breadcrumb';\nimport { Avatar } from '../Avatar';\nimport { Menu } from '../Menu';\nimport { CommandPalette } from '../CommandPalette';\n\nexport const Toolbar: React.FC<ToolbarProps> = ({\n breadcrumbs,\n actions,\n user,\n userMenu,\n cmdPaletteItems,\n content,\n className = '',\n}) => {\n const classes = ['eidos-toolbar', className].filter(Boolean).join(' ');\n\n // The avatar is the menu's trigger when there are items to open, and a\n // plain mark when there aren't - `Menu` with an empty `items` array would\n // render an interactive, focusable trigger that opens nothing. A menu\n // given without a `user` still needs a trigger, and `Avatar` already\n // falls back to a generic user icon when it has neither `name` nor `src`.\n const hasMenu = userMenu !== undefined && userMenu.length > 0;\n const avatar = user || hasMenu ? <Avatar {...user} size=\"sm\" /> : null;\n\n return (\n <div className={classes}>\n {breadcrumbs && <Breadcrumb {...breadcrumbs} />}\n <div className=\"eidos-toolbar__content\">\n {content && <div className=\"eidos-toolbar__slot\">{content}</div>}\n {cmdPaletteItems && cmdPaletteItems.length > 0 && (\n <CommandPalette trigger triggerLabel=\"Search\" items={cmdPaletteItems} />\n )}\n {actions && actions.length > 0 && (\n <div className=\"eidos-toolbar__actions\">\n {actions.map((action, index) => (\n <IconButton key={index} variant=\"text\" size=\"sm\" {...action} />\n ))}\n </div>\n )}\n {hasMenu ? <Menu trigger={avatar} items={userMenu} minWidth={220} /> : avatar}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AA0BmC,cAK7B,YAL6B;AAjB5B,IAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AACd,MAAM;AACJ,QAAM,UAAU,CAAC,iBAAiB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAOrE,QAAM,UAAU,aAAa,UAAa,SAAS,SAAS;AAC5D,QAAM,SAAS,QAAQ,UAAU,oBAAC,UAAQ,GAAG,MAAM,MAAK,MAAK,IAAK;AAElE,SACE,qBAAC,SAAI,WAAW,SACb;AAAA,mBAAe,oBAAC,cAAY,GAAG,aAAa;AAAA,IAC7C,qBAAC,SAAI,WAAU,0BACZ;AAAA,iBAAW,oBAAC,SAAI,WAAU,uBAAuB,mBAAQ;AAAA,MACzD,mBAAmB,gBAAgB,SAAS,KAC3C,oBAAC,kBAAe,SAAO,MAAC,cAAa,UAAS,OAAO,iBAAiB;AAAA,MAEvE,WAAW,QAAQ,SAAS,KAC3B,oBAAC,SAAI,WAAU,0BACZ,kBAAQ,IAAI,CAAC,QAAQ,UACpB,oBAAC,cAAuB,SAAQ,QAAO,MAAK,MAAM,GAAG,UAApC,KAA4C,CAC9D,GACH;AAAA,MAED,UAAU,oBAAC,QAAK,SAAS,QAAQ,OAAO,UAAU,UAAU,KAAK,IAAK;AAAA,OACzE;AAAA,KACF;AAEJ;","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 _chunkGR2PMCVNcjs = require('./chunk-GR2PMCVN.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkGT22EGJPcjs = require('./chunk-GT22EGJP.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
var _chunkPTBBY4ZXcjs = require('./chunk-PTBBY4ZX.cjs');
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _chunkZ4SLV6WGcjs = require('./chunk-Z4SLV6WG.cjs');
|
|
13
13
|
|
|
14
14
|
// src/components/PageLayout/PageLayout.component.tsx
|
|
15
15
|
var _jsxruntime = require('react/jsx-runtime');
|
|
@@ -26,19 +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
|
+
_chunkGR2PMCVNcjs.Toolbar,
|
|
30
30
|
{
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
actions: _optionalChain([toolbar, 'optionalAccess', _3 => _3.actions]) || [],
|
|
34
|
-
userMenu: _optionalChain([toolbar, 'optionalAccess', _4 => _4.userMenu]) || [],
|
|
35
|
-
className: "eidos-pagelayout__toolbar"
|
|
31
|
+
...toolbar,
|
|
32
|
+
className: ["eidos-pagelayout__toolbar", _optionalChain([toolbar, 'optionalAccess', _ => _.className])].filter(Boolean).join(" ")
|
|
36
33
|
}
|
|
37
34
|
),
|
|
38
|
-
/* @__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, _chunkGT22EGJPcjs.Navigation, { ...navigation }) }),
|
|
39
36
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "main", { className: "eidos-pagelayout__content", children: [
|
|
40
37
|
header && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
41
|
-
|
|
38
|
+
_chunkZ4SLV6WGcjs.Header,
|
|
42
39
|
{
|
|
43
40
|
...header,
|
|
44
41
|
className: ["eidos-pagelayout__header", header.className].filter(Boolean).join(" ")
|
|
@@ -49,7 +46,7 @@ var PageLayout = ({
|
|
|
49
46
|
_chunkPTBBY4ZXcjs.Footer,
|
|
50
47
|
{
|
|
51
48
|
..._nullishCoalesce(footer, () => ( defaultFooter)),
|
|
52
|
-
className: ["eidos-pagelayout__footer", _optionalChain([footer, 'optionalAccess',
|
|
49
|
+
className: ["eidos-pagelayout__footer", _optionalChain([footer, 'optionalAccess', _2 => _2.className])].filter(Boolean).join(" ")
|
|
53
50
|
}
|
|
54
51
|
)
|
|
55
52
|
] })
|
|
@@ -59,4 +56,4 @@ var PageLayout = ({
|
|
|
59
56
|
|
|
60
57
|
|
|
61
58
|
exports.PageLayout = PageLayout;
|
|
62
|
-
//# sourceMappingURL=chunk-
|
|
59
|
+
//# sourceMappingURL=chunk-G77YR73R.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-G77YR73R.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-G77YR73R.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"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
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; }// src/utils/renderIcon.tsx
|
|
2
|
+
var _lucidereact = require('lucide-react');
|
|
3
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
4
|
+
var renderIcon = (icon, className) => {
|
|
5
|
+
if (!icon) return null;
|
|
6
|
+
if (typeof icon === "string") {
|
|
7
|
+
const iconName = icon.split("-").map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("");
|
|
8
|
+
const LucideIcon = _lucidereact.icons[iconName];
|
|
9
|
+
if (LucideIcon) {
|
|
10
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LucideIcon, { className, "aria-hidden": "true" });
|
|
11
|
+
}
|
|
12
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "i", { className: `${icon} ${className || ""}`, "aria-hidden": "true" });
|
|
13
|
+
}
|
|
14
|
+
const IconComponent = icon;
|
|
15
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, IconComponent, { className, "aria-hidden": "true" });
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
// src/utils/devWarn.ts
|
|
19
|
+
var warned = /* @__PURE__ */ new Set();
|
|
20
|
+
function devWarn(key, message) {
|
|
21
|
+
const nodeEnv = _optionalChain([globalThis, 'access', _ => _.process, 'optionalAccess', _2 => _2.env, 'optionalAccess', _3 => _3.NODE_ENV]);
|
|
22
|
+
if (nodeEnv === "production") return;
|
|
23
|
+
if (warned.has(key)) return;
|
|
24
|
+
warned.add(key);
|
|
25
|
+
console.warn(`[eidos-ui] ${message}`);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
exports.renderIcon = renderIcon; exports.devWarn = devWarn;
|
|
32
|
+
//# sourceMappingURL=chunk-GEHL4LKK.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-GEHL4LKK.cjs","../src/utils/renderIcon.tsx","../src/utils/devWarn.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;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-GEHL4LKK.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"]}
|