@banzamel/mineralui 1.8.0 → 1.9.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 +1 -1
- package/dist/{MAvatar-BcayQCnp.js → MAvatar-D_dVAPaR.js} +3 -3
- package/dist/{MAvatar-BcayQCnp.js.map → MAvatar-D_dVAPaR.js.map} +1 -1
- package/dist/{MAvatar-BgevCYi3.cjs → MAvatar-DzZPRbot.cjs} +2 -2
- package/dist/{MAvatar-BgevCYi3.cjs.map → MAvatar-DzZPRbot.cjs.map} +1 -1
- package/dist/MAvatarStack-CrhkO_SO.js +330 -0
- package/dist/MAvatarStack-CrhkO_SO.js.map +1 -0
- package/dist/MAvatarStack-DN79aJo1.cjs +2 -0
- package/dist/MAvatarStack-DN79aJo1.cjs.map +1 -0
- package/dist/{MButton-DZLLrtQb.js → MButton-C1pnL4_j.js} +2 -2
- package/dist/{MButton-DZLLrtQb.js.map → MButton-C1pnL4_j.js.map} +1 -1
- package/dist/{MButton-8UCydOik.cjs → MButton-DFRHWHzh.cjs} +2 -2
- package/dist/{MButton-8UCydOik.cjs.map → MButton-DFRHWHzh.cjs.map} +1 -1
- package/dist/{MDataTable-95_Mb6jE.cjs → MDataTable-7nJuwzJR.cjs} +2 -2
- package/dist/{MDataTable-95_Mb6jE.cjs.map → MDataTable-7nJuwzJR.cjs.map} +1 -1
- package/dist/{MDataTable-DxDS5auV.js → MDataTable-CQt_pINO.js} +4 -4
- package/dist/{MDataTable-DxDS5auV.js.map → MDataTable-CQt_pINO.js.map} +1 -1
- package/dist/{MDrawer-CXNHYwPO.js → MDrawer-B83--EVv.js} +2 -2
- package/dist/{MDrawer-CXNHYwPO.js.map → MDrawer-B83--EVv.js.map} +1 -1
- package/dist/{MDrawer-DzqtHVeA.cjs → MDrawer-D6cy9K7J.cjs} +2 -2
- package/dist/{MDrawer-DzqtHVeA.cjs.map → MDrawer-D6cy9K7J.cjs.map} +1 -1
- package/dist/MGrid-B-fP4GME.cjs +2 -0
- package/dist/MGrid-B-fP4GME.cjs.map +1 -0
- package/dist/{MGrid-DR0fHItF.js → MGrid-DVluuula.js} +56 -56
- package/dist/MGrid-DVluuula.js.map +1 -0
- package/dist/{MHeading-MPh8Qm9q.js → MHeading-B7KgSP4T.js} +3 -3
- package/dist/{MHeading-MPh8Qm9q.js.map → MHeading-B7KgSP4T.js.map} +1 -1
- package/dist/{MHeading-CKe5lcM_.cjs → MHeading-f3hwkW3r.cjs} +2 -2
- package/dist/{MHeading-CKe5lcM_.cjs.map → MHeading-f3hwkW3r.cjs.map} +1 -1
- package/dist/{MInput-D_zaoWwX.cjs → MInput-BLGduKL_.cjs} +2 -2
- package/dist/{MInput-D_zaoWwX.cjs.map → MInput-BLGduKL_.cjs.map} +1 -1
- package/dist/{MInput-7i0Dy1t4.js → MInput-IsUELgN2.js} +2 -2
- package/dist/{MInput-7i0Dy1t4.js.map → MInput-IsUELgN2.js.map} +1 -1
- package/dist/{MInputExpDate-DhO5zN7L.js → MInputExpDate-CeCmw6fj.js} +2 -2
- package/dist/{MInputExpDate-DhO5zN7L.js.map → MInputExpDate-CeCmw6fj.js.map} +1 -1
- package/dist/{MInputExpDate-DWWwjMYK.cjs → MInputExpDate-DZ8JtSjs.cjs} +2 -2
- package/dist/{MInputExpDate-DWWwjMYK.cjs.map → MInputExpDate-DZ8JtSjs.cjs.map} +1 -1
- package/dist/{MInputSearch-CmzHPnmC.js → MInputSearch-BBxUF5pw.js} +2 -2
- package/dist/{MInputSearch-CmzHPnmC.js.map → MInputSearch-BBxUF5pw.js.map} +1 -1
- package/dist/{MInputSearch-DpHSVpmL.cjs → MInputSearch-_7jfFGr1.cjs} +2 -2
- package/dist/{MInputSearch-DpHSVpmL.cjs.map → MInputSearch-_7jfFGr1.cjs.map} +1 -1
- package/dist/{MLink-rFKN1mcM.js → MLink-Bd8fLH1N.js} +2 -2
- package/dist/{MLink-rFKN1mcM.js.map → MLink-Bd8fLH1N.js.map} +1 -1
- package/dist/{MLink-B3ImjkJV.cjs → MLink-CRK8YvR4.cjs} +2 -2
- package/dist/{MLink-B3ImjkJV.cjs.map → MLink-CRK8YvR4.cjs.map} +1 -1
- package/dist/{MModal-DGmeQlWo.js → MModal-DiTjBO8B.js} +2 -2
- package/dist/{MModal-DGmeQlWo.js.map → MModal-DiTjBO8B.js.map} +1 -1
- package/dist/{MModal-CP0e31pv.cjs → MModal-eJDG6riB.cjs} +2 -2
- package/dist/{MModal-CP0e31pv.cjs.map → MModal-eJDG6riB.cjs.map} +1 -1
- package/dist/{MPagination-CS62B9kZ.cjs → MPagination-D1hYqLDb.cjs} +2 -2
- package/dist/{MPagination-CS62B9kZ.cjs.map → MPagination-D1hYqLDb.cjs.map} +1 -1
- package/dist/{MPagination-Dr110are.js → MPagination-DvToi2cs.js} +2 -2
- package/dist/{MPagination-Dr110are.js.map → MPagination-DvToi2cs.js.map} +1 -1
- package/dist/{MQrCode-B0-Np-N3.cjs → MQrCode-HO2YIC7e.cjs} +2 -2
- package/dist/{MQrCode-B0-Np-N3.cjs.map → MQrCode-HO2YIC7e.cjs.map} +1 -1
- package/dist/{MQrCode-6ANDcExA.js → MQrCode-Kb997gaE.js} +5 -5
- package/dist/{MQrCode-6ANDcExA.js.map → MQrCode-Kb997gaE.js.map} +1 -1
- package/dist/{MSkeleton-BvXgnYs_.js → MSkeleton-CVofhuDp.js} +3 -3
- package/dist/{MSkeleton-BvXgnYs_.js.map → MSkeleton-CVofhuDp.js.map} +1 -1
- package/dist/{MSkeleton-BdwhPx-k.cjs → MSkeleton-CuYA8eN3.cjs} +2 -2
- package/dist/{MSkeleton-BdwhPx-k.cjs.map → MSkeleton-CuYA8eN3.cjs.map} +1 -1
- package/dist/{MStack-DFIc3S4_.js → MStack-C4Eocfb5.js} +2 -2
- package/dist/{MStack-DFIc3S4_.js.map → MStack-C4Eocfb5.js.map} +1 -1
- package/dist/{MStack-ByFYGSsy.cjs → MStack-w8XcuIJK.cjs} +2 -2
- package/dist/{MStack-ByFYGSsy.cjs.map → MStack-w8XcuIJK.cjs.map} +1 -1
- package/dist/{MSubText-BFdfBlpS.js → MSubText-C-N15d4Z.js} +3 -3
- package/dist/{MSubText-BFdfBlpS.js.map → MSubText-C-N15d4Z.js.map} +1 -1
- package/dist/{MSubText-1ilKSz8e.cjs → MSubText-CIMKPb8o.cjs} +2 -2
- package/dist/{MSubText-1ilKSz8e.cjs.map → MSubText-CIMKPb8o.cjs.map} +1 -1
- package/dist/{MSurface-CpAuwpHv.cjs → MSurface-KvAS2hkl.cjs} +2 -2
- package/dist/{MSurface-CpAuwpHv.cjs.map → MSurface-KvAS2hkl.cjs.map} +1 -1
- package/dist/{MSurface-CmVIQC1A.js → MSurface-odrvQXkb.js} +2 -2
- package/dist/{MSurface-CmVIQC1A.js.map → MSurface-odrvQXkb.js.map} +1 -1
- package/dist/{MTag-DwQ-j1sV.cjs → MTag-DZqV4S13.cjs} +2 -2
- package/dist/{MTag-DwQ-j1sV.cjs.map → MTag-DZqV4S13.cjs.map} +1 -1
- package/dist/{MTag-C4SUJly2.js → MTag-DgB6ukFJ.js} +3 -3
- package/dist/{MTag-C4SUJly2.js.map → MTag-DgB6ukFJ.js.map} +1 -1
- package/dist/{MText-D0fI_D_Q.cjs → MText-BHbI7KJO.cjs} +2 -2
- package/dist/{MText-D0fI_D_Q.cjs.map → MText-BHbI7KJO.cjs.map} +1 -1
- package/dist/{MText-DcB1GAt-.js → MText-CL-LPcXi.js} +2 -2
- package/dist/{MText-DcB1GAt-.js.map → MText-CL-LPcXi.js.map} +1 -1
- package/dist/{cards-D7oHIHmU.js → cards-C50fpYud.js} +20 -16
- package/dist/cards-C50fpYud.js.map +1 -0
- package/dist/cards-Ci1FoV9C.cjs +2 -0
- package/dist/cards-Ci1FoV9C.cjs.map +1 -0
- package/dist/cards.cjs +1 -1
- package/dist/cards.js +3 -3
- package/dist/components/cards/MCardGrid/MCardGrid.types.d.ts +40 -1
- package/dist/components/cards/MCardGrid/index.d.ts +1 -1
- package/dist/components/cards/MStatCard/MStatCard.d.ts +0 -1
- package/dist/components/cards/MStatCard/MStatCard.types.d.ts +0 -2
- package/dist/components/cards/MStatCard/index.d.ts +2 -2
- package/dist/components/cards/index.d.ts +3 -3
- package/dist/components/data/MTimelineCalendar/DayStrip.d.ts +11 -0
- package/dist/components/data/MTimelineCalendar/EventPopover.d.ts +18 -0
- package/dist/components/data/MTimelineCalendar/MTimelineCalendar.d.ts +2 -0
- package/dist/components/data/MTimelineCalendar/MTimelineCalendar.helpers.d.ts +55 -0
- package/dist/components/data/MTimelineCalendar/MTimelineCalendar.types.d.ts +89 -0
- package/dist/components/data/MTimelineCalendar/index.d.ts +2 -0
- package/dist/components/data/index.d.ts +4 -0
- package/dist/components/layout/MGrid/MGrid.d.ts +1 -1
- package/dist/components/layout/MNavbar/MNavbar.d.ts +1 -1
- package/dist/components/layout/MNavbar/MNavbar.types.d.ts +19 -0
- package/dist/components/layout/index.d.ts +0 -4
- package/dist/components/media/MAvatarStack/MAvatarStack.d.ts +1 -1
- package/dist/components/media/MAvatarStack/MAvatarStack.types.d.ts +14 -1
- package/dist/components/typography/MHeading/MHeading.d.ts +1 -562
- package/dist/{controls-BfV0vxeJ.cjs → controls-CYQxPd4U.cjs} +2 -2
- package/dist/{controls-BfV0vxeJ.cjs.map → controls-CYQxPd4U.cjs.map} +1 -1
- package/dist/{controls-BczTk73I.js → controls-CcbEqqWo.js} +3 -3
- package/dist/{controls-BczTk73I.js.map → controls-CcbEqqWo.js.map} +1 -1
- package/dist/controls.cjs +1 -1
- package/dist/controls.js +2 -2
- package/dist/data-DtShJEic.cjs +2 -0
- package/dist/data-DtShJEic.cjs.map +1 -0
- package/dist/data-RXuvb9VI.js +3454 -0
- package/dist/data-RXuvb9VI.js.map +1 -0
- package/dist/data.cjs +1 -1
- package/dist/data.js +3 -3
- package/dist/{display-Cw3-bTsm.cjs → display-96-TEGmZ.cjs} +2 -2
- package/dist/{display-Cw3-bTsm.cjs.map → display-96-TEGmZ.cjs.map} +1 -1
- package/dist/{display-DyC7084n.js → display-C7YRf4Ze.js} +5 -5
- package/dist/{display-DyC7084n.js.map → display-C7YRf4Ze.js.map} +1 -1
- package/dist/display.cjs +1 -1
- package/dist/display.js +2 -2
- package/dist/{dropdowns-6eO0b6eI.cjs → dropdowns-Ce3Pb2JM.cjs} +2 -2
- package/dist/{dropdowns-6eO0b6eI.cjs.map → dropdowns-Ce3Pb2JM.cjs.map} +1 -1
- package/dist/{dropdowns-zXgrjNXZ.js → dropdowns-DfXhVlWQ.js} +4 -4
- package/dist/{dropdowns-zXgrjNXZ.js.map → dropdowns-DfXhVlWQ.js.map} +1 -1
- package/dist/dropdowns.cjs +1 -1
- package/dist/dropdowns.js +1 -1
- package/dist/{feedback-DfBjzJAw.js → feedback-DGT28-Zx.js} +11 -11
- package/dist/{feedback-DfBjzJAw.js.map → feedback-DGT28-Zx.js.map} +1 -1
- package/dist/{feedback-BvRmoSzV.cjs → feedback-Dr7G3K_R.cjs} +2 -2
- package/dist/{feedback-BvRmoSzV.cjs.map → feedback-Dr7G3K_R.cjs.map} +1 -1
- package/dist/feedback.cjs +1 -1
- package/dist/feedback.js +4 -4
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -4
- package/dist/index.js +52 -52
- package/dist/index.js.map +1 -1
- package/dist/{inputs-C1I1SLZ8.cjs → inputs-BJMmyEdL.cjs} +2 -2
- package/dist/{inputs-C1I1SLZ8.cjs.map → inputs-BJMmyEdL.cjs.map} +1 -1
- package/dist/{inputs-Dy1WurNK.js → inputs-CNPeF6gb.js} +3 -3
- package/dist/{inputs-Dy1WurNK.js.map → inputs-CNPeF6gb.js.map} +1 -1
- package/dist/inputs.cjs +1 -1
- package/dist/inputs.js +4 -4
- package/dist/layout-dUrQeGc2.cjs +2 -0
- package/dist/layout-dUrQeGc2.cjs.map +1 -0
- package/dist/{layout-D1-mF4xn.js → layout-tIq6BGQK.js} +240 -301
- package/dist/layout-tIq6BGQK.js.map +1 -0
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +8 -8
- package/dist/licensing-9sZ43Cif.cjs +2 -0
- package/dist/licensing-9sZ43Cif.cjs.map +1 -0
- package/dist/{licensing-ZFCUU4Z8.js → licensing-Bq78CLC_.js} +5 -5
- package/dist/licensing-Bq78CLC_.js.map +1 -0
- package/dist/media-BySr5LGc.cjs +2 -0
- package/dist/media-BySr5LGc.cjs.map +1 -0
- package/dist/media-IQ4iYTs-.js +391 -0
- package/dist/media-IQ4iYTs-.js.map +1 -0
- package/dist/media.cjs +1 -1
- package/dist/media.js +4 -4
- package/dist/{overlays-B0khU6Wb.js → overlays-BabXGLEM.js} +7 -7
- package/dist/{overlays-B0khU6Wb.js.map → overlays-BabXGLEM.js.map} +1 -1
- package/dist/{overlays-VAh5PqAe.cjs → overlays-CTR3n21O.cjs} +2 -2
- package/dist/{overlays-VAh5PqAe.cjs.map → overlays-CTR3n21O.cjs.map} +1 -1
- package/dist/overlays.cjs +1 -1
- package/dist/overlays.js +3 -3
- package/dist/style-runtime.cjs +1 -1
- package/dist/style-runtime.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/theme/MTheme.types.d.ts +5 -0
- package/dist/theme/responsive.d.ts +1 -10
- package/dist/{theme-D_f-cmSA.js → theme-DAOU1aPs.js} +4 -3
- package/dist/{theme-D_f-cmSA.js.map → theme-DAOU1aPs.js.map} +1 -1
- package/dist/{theme-BaroO-OB.cjs → theme-DsTDooyX.cjs} +2 -2
- package/dist/{theme-BaroO-OB.cjs.map → theme-DsTDooyX.cjs.map} +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +1 -1
- package/dist/{typography-CldwDFse.js → typography-CAW17MDj.js} +2 -2
- package/dist/{typography-CldwDFse.js.map → typography-CAW17MDj.js.map} +1 -1
- package/dist/{typography-D7COsP1O.cjs → typography-sbLuXqFn.cjs} +2 -2
- package/dist/{typography-D7COsP1O.cjs.map → typography-sbLuXqFn.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +5 -5
- package/dist/utils/commandPaletteFromNavGroups.d.ts +74 -0
- package/dist/utils/licensing.d.ts +4 -4
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +1 -1
- package/package.json +1 -1
- package/dist/MGrid-C4kPZDSa.cjs +0 -2
- package/dist/MGrid-C4kPZDSa.cjs.map +0 -1
- package/dist/MGrid-DR0fHItF.js.map +0 -1
- package/dist/MImage-BZ6SrSao.cjs +0 -2
- package/dist/MImage-BZ6SrSao.cjs.map +0 -1
- package/dist/MImage-Btx_7g2Z.js +0 -257
- package/dist/MImage-Btx_7g2Z.js.map +0 -1
- package/dist/cards-B9g6Lf1n.cjs +0 -2
- package/dist/cards-B9g6Lf1n.cjs.map +0 -1
- package/dist/cards-D7oHIHmU.js.map +0 -1
- package/dist/components/layout/MAppMenu/MAppMenu.d.ts +0 -2
- package/dist/components/layout/MAppMenu/MAppMenu.types.d.ts +0 -63
- package/dist/components/layout/MAppMenu/index.d.ts +0 -2
- package/dist/data-7kG1MC1Z.cjs +0 -2
- package/dist/data-7kG1MC1Z.cjs.map +0 -1
- package/dist/data-z3e8XTSt.js +0 -2692
- package/dist/data-z3e8XTSt.js.map +0 -1
- package/dist/layout-D1-mF4xn.js.map +0 -1
- package/dist/layout-Op6GWQ8w.cjs +0 -2
- package/dist/layout-Op6GWQ8w.cjs.map +0 -1
- package/dist/licensing-DmF0ObpG.cjs +0 -2
- package/dist/licensing-DmF0ObpG.cjs.map +0 -1
- package/dist/licensing-ZFCUU4Z8.js.map +0 -1
- package/dist/media-DbToUupt.cjs +0 -2
- package/dist/media-DbToUupt.cjs.map +0 -1
- package/dist/media-DdChr0Cw.js +0 -431
- package/dist/media-DdChr0Cw.js.map +0 -1
- package/dist/utils/commandPaletteFromAppMenu.d.ts +0 -42
|
@@ -51,5 +51,10 @@ export type MBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
|
51
51
|
export type MHidden = MBreakpoint;
|
|
52
52
|
export type MShellBreakpoint = 'mobile' | 'compact';
|
|
53
53
|
export interface MHiddenProps {
|
|
54
|
+
/** Hide on this breakpoint and below (mobile-first hide). */
|
|
54
55
|
hidden?: MHidden | boolean;
|
|
56
|
+
/** Hide above this breakpoint. Use as a complement to `hidden` to render
|
|
57
|
+
* elements only on smaller viewports (e.g. `hiddenAbove="lg"` shows the
|
|
58
|
+
* element at sm/md/lg and hides it on xl+). */
|
|
59
|
+
hiddenAbove?: MHidden;
|
|
55
60
|
}
|
|
@@ -11,13 +11,4 @@ export declare const MShellBreakpoints: {
|
|
|
11
11
|
readonly compact: 1024;
|
|
12
12
|
};
|
|
13
13
|
export declare function useMaxWidth(breakpoint: number): boolean;
|
|
14
|
-
export declare function getHiddenProps(hidden?: MHiddenProps['hidden']):
|
|
15
|
-
hidden?: undefined;
|
|
16
|
-
'data-m-hidden'?: undefined;
|
|
17
|
-
} | {
|
|
18
|
-
hidden: boolean;
|
|
19
|
-
'data-m-hidden'?: undefined;
|
|
20
|
-
} | {
|
|
21
|
-
'data-m-hidden': import('./MTheme.types').MBreakpoint;
|
|
22
|
-
hidden?: undefined;
|
|
23
|
-
};
|
|
14
|
+
export declare function getHiddenProps(hidden?: MHiddenProps['hidden'], hiddenAbove?: MHiddenProps['hiddenAbove']): Record<string, unknown>;
|
|
@@ -146,10 +146,11 @@ function _(e) {
|
|
|
146
146
|
return r(), typeof t.addEventListener == "function" ? (t.addEventListener("change", r), () => t.removeEventListener("change", r)) : (t.addListener(r), () => t.removeListener(r));
|
|
147
147
|
}, [e]), t;
|
|
148
148
|
}
|
|
149
|
-
function v(e) {
|
|
150
|
-
|
|
149
|
+
function v(e, t) {
|
|
150
|
+
let n = {};
|
|
151
|
+
return e === !0 ? n.hidden = !0 : e !== void 0 && e !== !1 && (n["data-m-hidden"] = e), t && (n["data-m-hidden-above"] = t), n;
|
|
151
152
|
}
|
|
152
153
|
//#endregion
|
|
153
154
|
export { p as a, _ as i, g as n, m as o, v as r, h as t };
|
|
154
155
|
|
|
155
|
-
//# sourceMappingURL=theme-
|
|
156
|
+
//# sourceMappingURL=theme-DAOU1aPs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-D_f-cmSA.js","names":[],"sources":["../src/theme/MThemeProvider.tsx","../src/theme/responsive.ts"],"sourcesContent":["import {createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode} from 'react'\nimport type {MTheme, MMode, MModePreference} from './MTheme.types'\n\nconst STORAGE_KEY = 'mineralui-theme'\n\n// Resolve the final mode once 'system' is allowed.\nfunction resolveMode(pref: MModePreference): MMode {\n if (pref !== 'system') return pref\n if (typeof window === 'undefined') return 'dark'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\n// Read a persisted mode safely when storage is available.\nfunction readStored(): MModePreference | null {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'dark' || v === 'light' || v === 'system') return v\n } catch {\n /* SSR / blocked storage */\n }\n return null\n}\n\nexport interface MThemeContextValue {\n theme: MTheme\n mode: MModePreference\n resolvedMode: MMode\n setMode: (next: MModePreference) => void\n toggleMode: () => void\n}\n\nconst ThemeContext = createContext<MThemeContextValue>({\n theme: {},\n mode: 'dark',\n resolvedMode: 'dark',\n setMode: () => {},\n toggleMode: () => {},\n})\n\n// Map JS theme keys to CSS custom properties.\nconst varMap: Record<keyof MTheme, string> = {\n primaryRgb: '--mineral-primary-rgb',\n primary: '--mineral-primary',\n primaryDark: '--mineral-primary-dark',\n primaryLight: '--mineral-primary-light',\n neutralRgb: '--mineral-neutral-rgb',\n neutral: '--mineral-neutral',\n dark: '--mineral-dark',\n darkLight: '--mineral-dark-light',\n surface: '--mineral-surface',\n surfaceContrast: '--mineral-surface-contrast',\n pageBg: '--mineral-page-bg',\n pageText: '--mineral-page-text',\n text: '--mineral-text',\n textSecondary: '--mineral-text-secondary',\n textHeading: '--mineral-text-heading',\n border: '--mineral-border',\n borderHover: '--mineral-border-hover',\n borderFocus: '--mineral-border-focus',\n successRgb: '--mineral-success-rgb',\n success: '--mineral-success',\n errorRgb: '--mineral-error-rgb',\n error: '--mineral-error',\n warningRgb: '--mineral-warning-rgb',\n warning: '--mineral-warning',\n infoRgb: '--mineral-info-rgb',\n info: '--mineral-info',\n fontFamily: '--mineral-font-family-sans',\n fontFamilySans: '--mineral-font-family-sans',\n fontFamilyMono: '--mineral-font-family-mono',\n fontFamilyHeading: '--mineral-font-family-heading',\n fontColorDefault: '--mineral-fcolor-default',\n fontColorMuted: '--mineral-fcolor-muted',\n fontColorHeading: '--mineral-fcolor-heading',\n fontColorInverted: '--mineral-fcolor-inverted',\n fontColorPrimary: '--mineral-fcolor-primary',\n fontColorNeutral: '--mineral-fcolor-neutral',\n fontColorSuccess: '--mineral-fcolor-success',\n fontColorError: '--mineral-fcolor-error',\n fontColorWarning: '--mineral-fcolor-warning',\n fontColorInfo: '--mineral-fcolor-info',\n radiusSm: '--mineral-radius-sm',\n radiusMd: '--mineral-radius-md',\n radiusLg: '--mineral-radius-lg',\n}\n\nexport type MThemeScope = 'body' | 'wrapper'\n\nexport interface MThemeProviderProps {\n theme?: MTheme\n mode?: MModePreference\n persist?: boolean\n scope?: MThemeScope\n children: ReactNode\n}\n\n// Sync theme tokens and mode classes with either the body or a local wrapper.\nexport function MThemeProvider({\n theme,\n mode: modeProp = 'dark',\n persist = true,\n scope = 'body',\n children,\n}: MThemeProviderProps) {\n const ref = useRef<HTMLDivElement>(null)\n const safeTheme = useMemo(() => theme ?? {}, [theme])\n\n const [mode, setModeState] = useState<MModePreference>(() => {\n if (persist) {\n const stored = readStored()\n if (stored) return stored\n }\n return modeProp\n })\n\n const resolved = resolveMode(mode)\n\n const setMode = useCallback(\n (next: MModePreference) => {\n setModeState(next)\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n },\n [persist]\n )\n\n const toggleMode = useCallback(() => {\n setMode(resolved === 'dark' ? 'light' : 'dark')\n }, [resolved, setMode])\n\n // Listen for system theme changes when mode is 'system'.\n useEffect(() => {\n if (mode !== 'system') return\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const handler = () => setModeState('system')\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [mode])\n\n // Apply token overrides and light/dark class.\n useEffect(() => {\n const target = scope === 'body' ? document.body : ref.current\n if (!target) return\n\n for (const [key, value] of Object.entries(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar && value) {\n target.style.setProperty(cssVar, value)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.setProperty('--mineral-font-family', value)\n }\n }\n }\n\n target.classList.toggle('theme-light', resolved === 'light')\n\n return () => {\n for (const key of Object.keys(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar) {\n target.style.removeProperty(cssVar)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.removeProperty('--mineral-font-family')\n }\n }\n }\n target.classList.remove('theme-light')\n }\n }, [resolved, safeTheme, scope])\n\n const ctx = useMemo<MThemeContextValue>(\n () => ({\n theme: safeTheme,\n mode,\n resolvedMode: resolved,\n setMode,\n toggleMode,\n }),\n [safeTheme, mode, resolved, setMode, toggleMode]\n )\n\n return (\n <ThemeContext.Provider value={ctx}>\n {scope === 'wrapper' ? (\n <div ref={ref} className={resolved === 'light' ? 'theme-light' : undefined}>\n {children}\n </div>\n ) : (\n children\n )}\n </ThemeContext.Provider>\n )\n}\n\nexport function useMTheme(): MThemeContextValue {\n return useContext(ThemeContext)\n}\n","import {useEffect, useState} from 'react'\nimport type {MHiddenProps} from './MTheme.types'\n\nexport const MBreakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n} as const\n\nexport const MShellBreakpoints = {\n mobile: 768,\n compact: 1024,\n} as const\n\nexport function useMaxWidth(breakpoint: number): boolean {\n const [matches, setMatches] = useState(() =>\n typeof window !== 'undefined' ? window.innerWidth <= breakpoint : false\n )\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const media = window.matchMedia(`(max-width: ${breakpoint}px)`)\n const sync = () => setMatches(media.matches)\n\n sync()\n\n if (typeof media.addEventListener === 'function') {\n media.addEventListener('change', sync)\n return () => media.removeEventListener('change', sync)\n }\n\n media.addListener(sync)\n return () => media.removeListener(sync)\n }, [breakpoint])\n\n return matches\n}\n\nexport function getHiddenProps(hidden?: MHiddenProps['hidden']) {\n if (hidden === undefined || hidden === false) {\n return {}\n }\n\n if (hidden === true) {\n return {hidden: true}\n }\n\n return {'data-m-hidden': hidden}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theme-DAOU1aPs.js","names":[],"sources":["../src/theme/MThemeProvider.tsx","../src/theme/responsive.ts"],"sourcesContent":["import {createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode} from 'react'\nimport type {MTheme, MMode, MModePreference} from './MTheme.types'\n\nconst STORAGE_KEY = 'mineralui-theme'\n\n// Resolve the final mode once 'system' is allowed.\nfunction resolveMode(pref: MModePreference): MMode {\n if (pref !== 'system') return pref\n if (typeof window === 'undefined') return 'dark'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\n// Read a persisted mode safely when storage is available.\nfunction readStored(): MModePreference | null {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'dark' || v === 'light' || v === 'system') return v\n } catch {\n /* SSR / blocked storage */\n }\n return null\n}\n\nexport interface MThemeContextValue {\n theme: MTheme\n mode: MModePreference\n resolvedMode: MMode\n setMode: (next: MModePreference) => void\n toggleMode: () => void\n}\n\nconst ThemeContext = createContext<MThemeContextValue>({\n theme: {},\n mode: 'dark',\n resolvedMode: 'dark',\n setMode: () => {},\n toggleMode: () => {},\n})\n\n// Map JS theme keys to CSS custom properties.\nconst varMap: Record<keyof MTheme, string> = {\n primaryRgb: '--mineral-primary-rgb',\n primary: '--mineral-primary',\n primaryDark: '--mineral-primary-dark',\n primaryLight: '--mineral-primary-light',\n neutralRgb: '--mineral-neutral-rgb',\n neutral: '--mineral-neutral',\n dark: '--mineral-dark',\n darkLight: '--mineral-dark-light',\n surface: '--mineral-surface',\n surfaceContrast: '--mineral-surface-contrast',\n pageBg: '--mineral-page-bg',\n pageText: '--mineral-page-text',\n text: '--mineral-text',\n textSecondary: '--mineral-text-secondary',\n textHeading: '--mineral-text-heading',\n border: '--mineral-border',\n borderHover: '--mineral-border-hover',\n borderFocus: '--mineral-border-focus',\n successRgb: '--mineral-success-rgb',\n success: '--mineral-success',\n errorRgb: '--mineral-error-rgb',\n error: '--mineral-error',\n warningRgb: '--mineral-warning-rgb',\n warning: '--mineral-warning',\n infoRgb: '--mineral-info-rgb',\n info: '--mineral-info',\n fontFamily: '--mineral-font-family-sans',\n fontFamilySans: '--mineral-font-family-sans',\n fontFamilyMono: '--mineral-font-family-mono',\n fontFamilyHeading: '--mineral-font-family-heading',\n fontColorDefault: '--mineral-fcolor-default',\n fontColorMuted: '--mineral-fcolor-muted',\n fontColorHeading: '--mineral-fcolor-heading',\n fontColorInverted: '--mineral-fcolor-inverted',\n fontColorPrimary: '--mineral-fcolor-primary',\n fontColorNeutral: '--mineral-fcolor-neutral',\n fontColorSuccess: '--mineral-fcolor-success',\n fontColorError: '--mineral-fcolor-error',\n fontColorWarning: '--mineral-fcolor-warning',\n fontColorInfo: '--mineral-fcolor-info',\n radiusSm: '--mineral-radius-sm',\n radiusMd: '--mineral-radius-md',\n radiusLg: '--mineral-radius-lg',\n}\n\nexport type MThemeScope = 'body' | 'wrapper'\n\nexport interface MThemeProviderProps {\n theme?: MTheme\n mode?: MModePreference\n persist?: boolean\n scope?: MThemeScope\n children: ReactNode\n}\n\n// Sync theme tokens and mode classes with either the body or a local wrapper.\nexport function MThemeProvider({\n theme,\n mode: modeProp = 'dark',\n persist = true,\n scope = 'body',\n children,\n}: MThemeProviderProps) {\n const ref = useRef<HTMLDivElement>(null)\n const safeTheme = useMemo(() => theme ?? {}, [theme])\n\n const [mode, setModeState] = useState<MModePreference>(() => {\n if (persist) {\n const stored = readStored()\n if (stored) return stored\n }\n return modeProp\n })\n\n const resolved = resolveMode(mode)\n\n const setMode = useCallback(\n (next: MModePreference) => {\n setModeState(next)\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n },\n [persist]\n )\n\n const toggleMode = useCallback(() => {\n setMode(resolved === 'dark' ? 'light' : 'dark')\n }, [resolved, setMode])\n\n // Listen for system theme changes when mode is 'system'.\n useEffect(() => {\n if (mode !== 'system') return\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const handler = () => setModeState('system')\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [mode])\n\n // Apply token overrides and light/dark class.\n useEffect(() => {\n const target = scope === 'body' ? document.body : ref.current\n if (!target) return\n\n for (const [key, value] of Object.entries(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar && value) {\n target.style.setProperty(cssVar, value)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.setProperty('--mineral-font-family', value)\n }\n }\n }\n\n target.classList.toggle('theme-light', resolved === 'light')\n\n return () => {\n for (const key of Object.keys(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar) {\n target.style.removeProperty(cssVar)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.removeProperty('--mineral-font-family')\n }\n }\n }\n target.classList.remove('theme-light')\n }\n }, [resolved, safeTheme, scope])\n\n const ctx = useMemo<MThemeContextValue>(\n () => ({\n theme: safeTheme,\n mode,\n resolvedMode: resolved,\n setMode,\n toggleMode,\n }),\n [safeTheme, mode, resolved, setMode, toggleMode]\n )\n\n return (\n <ThemeContext.Provider value={ctx}>\n {scope === 'wrapper' ? (\n <div ref={ref} className={resolved === 'light' ? 'theme-light' : undefined}>\n {children}\n </div>\n ) : (\n children\n )}\n </ThemeContext.Provider>\n )\n}\n\nexport function useMTheme(): MThemeContextValue {\n return useContext(ThemeContext)\n}\n","import {useEffect, useState} from 'react'\nimport type {MHiddenProps} from './MTheme.types'\n\nexport const MBreakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n} as const\n\nexport const MShellBreakpoints = {\n mobile: 768,\n compact: 1024,\n} as const\n\nexport function useMaxWidth(breakpoint: number): boolean {\n const [matches, setMatches] = useState(() =>\n typeof window !== 'undefined' ? window.innerWidth <= breakpoint : false\n )\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const media = window.matchMedia(`(max-width: ${breakpoint}px)`)\n const sync = () => setMatches(media.matches)\n\n sync()\n\n if (typeof media.addEventListener === 'function') {\n media.addEventListener('change', sync)\n return () => media.removeEventListener('change', sync)\n }\n\n media.addListener(sync)\n return () => media.removeListener(sync)\n }, [breakpoint])\n\n return matches\n}\n\nexport function getHiddenProps(\n hidden?: MHiddenProps['hidden'],\n hiddenAbove?: MHiddenProps['hiddenAbove']\n) {\n const result: Record<string, unknown> = {}\n if (hidden === true) {\n result.hidden = true\n } else if (hidden !== undefined && hidden !== false) {\n result['data-m-hidden'] = hidden\n }\n if (hiddenAbove) {\n result['data-m-hidden-above'] = hiddenAbove\n }\n return result\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`./core-DAox0BHy.cjs`);let e=require(`react`),t=require(`react/jsx-runtime`);var n=`mineralui-theme`;function r(e){return e===`system`?typeof window>`u`||window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e}function i(){try{let e=localStorage.getItem(n);if(e===`dark`||e===`light`||e===`system`)return e}catch{}return null}var a=(0,e.createContext)({theme:{},mode:`dark`,resolvedMode:`dark`,setMode:()=>{},toggleMode:()=>{}}),o={primaryRgb:`--mineral-primary-rgb`,primary:`--mineral-primary`,primaryDark:`--mineral-primary-dark`,primaryLight:`--mineral-primary-light`,neutralRgb:`--mineral-neutral-rgb`,neutral:`--mineral-neutral`,dark:`--mineral-dark`,darkLight:`--mineral-dark-light`,surface:`--mineral-surface`,surfaceContrast:`--mineral-surface-contrast`,pageBg:`--mineral-page-bg`,pageText:`--mineral-page-text`,text:`--mineral-text`,textSecondary:`--mineral-text-secondary`,textHeading:`--mineral-text-heading`,border:`--mineral-border`,borderHover:`--mineral-border-hover`,borderFocus:`--mineral-border-focus`,successRgb:`--mineral-success-rgb`,success:`--mineral-success`,errorRgb:`--mineral-error-rgb`,error:`--mineral-error`,warningRgb:`--mineral-warning-rgb`,warning:`--mineral-warning`,infoRgb:`--mineral-info-rgb`,info:`--mineral-info`,fontFamily:`--mineral-font-family-sans`,fontFamilySans:`--mineral-font-family-sans`,fontFamilyMono:`--mineral-font-family-mono`,fontFamilyHeading:`--mineral-font-family-heading`,fontColorDefault:`--mineral-fcolor-default`,fontColorMuted:`--mineral-fcolor-muted`,fontColorHeading:`--mineral-fcolor-heading`,fontColorInverted:`--mineral-fcolor-inverted`,fontColorPrimary:`--mineral-fcolor-primary`,fontColorNeutral:`--mineral-fcolor-neutral`,fontColorSuccess:`--mineral-fcolor-success`,fontColorError:`--mineral-fcolor-error`,fontColorWarning:`--mineral-fcolor-warning`,fontColorInfo:`--mineral-fcolor-info`,radiusSm:`--mineral-radius-sm`,radiusMd:`--mineral-radius-md`,radiusLg:`--mineral-radius-lg`};function s({theme:s,mode:c=`dark`,persist:l=!0,scope:u=`body`,children:d}){let f=(0,e.useRef)(null),p=(0,e.useMemo)(()=>s??{},[s]),[m,h]=(0,e.useState)(()=>{if(l){let e=i();if(e)return e}return c}),g=r(m),_=(0,e.useCallback)(e=>{if(h(e),l)try{localStorage.setItem(n,e)}catch{}},[l]),v=(0,e.useCallback)(()=>{_(g===`dark`?`light`:`dark`)},[g,_]);(0,e.useEffect)(()=>{if(m!==`system`)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>h(`system`);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[m]),(0,e.useEffect)(()=>{let e=u===`body`?document.body:f.current;if(e){for(let[t,n]of Object.entries(p)){let r=o[t];r&&n&&(e.style.setProperty(r,n),r===`--mineral-font-family-sans`&&e.style.setProperty(`--mineral-font-family`,n))}return e.classList.toggle(`theme-light`,g===`light`),()=>{for(let t of Object.keys(p)){let n=o[t];n&&(e.style.removeProperty(n),n===`--mineral-font-family-sans`&&e.style.removeProperty(`--mineral-font-family`))}e.classList.remove(`theme-light`)}}},[g,p,u]);let y=(0,e.useMemo)(()=>({theme:p,mode:m,resolvedMode:g,setMode:_,toggleMode:v}),[p,m,g,_,v]);return(0,t.jsx)(a.Provider,{value:y,children:u===`wrapper`?(0,t.jsx)(`div`,{ref:f,className:g===`light`?`theme-light`:void 0,children:d}):d})}function c(){return(0,e.useContext)(a)}var l={sm:640,md:768,lg:1024,xl:1280,"2xl":1536},u={mobile:768,compact:1024};function d(t){let[n,r]=(0,e.useState)(()=>typeof window<`u`?window.innerWidth<=t:!1);return(0,e.useEffect)(()=>{if(typeof window>`u`)return;let e=window.matchMedia(`(max-width: ${t}px)`),n=()=>r(e.matches);return n(),typeof e.addEventListener==`function`?(e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)):(e.addListener(n),()=>e.removeListener(n))},[t]),n}function f(e){
|
|
2
|
-
//# sourceMappingURL=theme-
|
|
1
|
+
require(`./core-DAox0BHy.cjs`);let e=require(`react`),t=require(`react/jsx-runtime`);var n=`mineralui-theme`;function r(e){return e===`system`?typeof window>`u`||window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e}function i(){try{let e=localStorage.getItem(n);if(e===`dark`||e===`light`||e===`system`)return e}catch{}return null}var a=(0,e.createContext)({theme:{},mode:`dark`,resolvedMode:`dark`,setMode:()=>{},toggleMode:()=>{}}),o={primaryRgb:`--mineral-primary-rgb`,primary:`--mineral-primary`,primaryDark:`--mineral-primary-dark`,primaryLight:`--mineral-primary-light`,neutralRgb:`--mineral-neutral-rgb`,neutral:`--mineral-neutral`,dark:`--mineral-dark`,darkLight:`--mineral-dark-light`,surface:`--mineral-surface`,surfaceContrast:`--mineral-surface-contrast`,pageBg:`--mineral-page-bg`,pageText:`--mineral-page-text`,text:`--mineral-text`,textSecondary:`--mineral-text-secondary`,textHeading:`--mineral-text-heading`,border:`--mineral-border`,borderHover:`--mineral-border-hover`,borderFocus:`--mineral-border-focus`,successRgb:`--mineral-success-rgb`,success:`--mineral-success`,errorRgb:`--mineral-error-rgb`,error:`--mineral-error`,warningRgb:`--mineral-warning-rgb`,warning:`--mineral-warning`,infoRgb:`--mineral-info-rgb`,info:`--mineral-info`,fontFamily:`--mineral-font-family-sans`,fontFamilySans:`--mineral-font-family-sans`,fontFamilyMono:`--mineral-font-family-mono`,fontFamilyHeading:`--mineral-font-family-heading`,fontColorDefault:`--mineral-fcolor-default`,fontColorMuted:`--mineral-fcolor-muted`,fontColorHeading:`--mineral-fcolor-heading`,fontColorInverted:`--mineral-fcolor-inverted`,fontColorPrimary:`--mineral-fcolor-primary`,fontColorNeutral:`--mineral-fcolor-neutral`,fontColorSuccess:`--mineral-fcolor-success`,fontColorError:`--mineral-fcolor-error`,fontColorWarning:`--mineral-fcolor-warning`,fontColorInfo:`--mineral-fcolor-info`,radiusSm:`--mineral-radius-sm`,radiusMd:`--mineral-radius-md`,radiusLg:`--mineral-radius-lg`};function s({theme:s,mode:c=`dark`,persist:l=!0,scope:u=`body`,children:d}){let f=(0,e.useRef)(null),p=(0,e.useMemo)(()=>s??{},[s]),[m,h]=(0,e.useState)(()=>{if(l){let e=i();if(e)return e}return c}),g=r(m),_=(0,e.useCallback)(e=>{if(h(e),l)try{localStorage.setItem(n,e)}catch{}},[l]),v=(0,e.useCallback)(()=>{_(g===`dark`?`light`:`dark`)},[g,_]);(0,e.useEffect)(()=>{if(m!==`system`)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>h(`system`);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[m]),(0,e.useEffect)(()=>{let e=u===`body`?document.body:f.current;if(e){for(let[t,n]of Object.entries(p)){let r=o[t];r&&n&&(e.style.setProperty(r,n),r===`--mineral-font-family-sans`&&e.style.setProperty(`--mineral-font-family`,n))}return e.classList.toggle(`theme-light`,g===`light`),()=>{for(let t of Object.keys(p)){let n=o[t];n&&(e.style.removeProperty(n),n===`--mineral-font-family-sans`&&e.style.removeProperty(`--mineral-font-family`))}e.classList.remove(`theme-light`)}}},[g,p,u]);let y=(0,e.useMemo)(()=>({theme:p,mode:m,resolvedMode:g,setMode:_,toggleMode:v}),[p,m,g,_,v]);return(0,t.jsx)(a.Provider,{value:y,children:u===`wrapper`?(0,t.jsx)(`div`,{ref:f,className:g===`light`?`theme-light`:void 0,children:d}):d})}function c(){return(0,e.useContext)(a)}var l={sm:640,md:768,lg:1024,xl:1280,"2xl":1536},u={mobile:768,compact:1024};function d(t){let[n,r]=(0,e.useState)(()=>typeof window<`u`?window.innerWidth<=t:!1);return(0,e.useEffect)(()=>{if(typeof window>`u`)return;let e=window.matchMedia(`(max-width: ${t}px)`),n=()=>r(e.matches);return n(),typeof e.addEventListener==`function`?(e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)):(e.addListener(n),()=>e.removeListener(n))},[t]),n}function f(e,t){let n={};return e===!0?n.hidden=!0:e!==void 0&&e!==!1&&(n[`data-m-hidden`]=e),t&&(n[`data-m-hidden-above`]=t),n}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return l}});
|
|
2
|
+
//# sourceMappingURL=theme-DsTDooyX.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-BaroO-OB.cjs","names":[],"sources":["../src/theme/MThemeProvider.tsx","../src/theme/responsive.ts"],"sourcesContent":["import {createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode} from 'react'\nimport type {MTheme, MMode, MModePreference} from './MTheme.types'\n\nconst STORAGE_KEY = 'mineralui-theme'\n\n// Resolve the final mode once 'system' is allowed.\nfunction resolveMode(pref: MModePreference): MMode {\n if (pref !== 'system') return pref\n if (typeof window === 'undefined') return 'dark'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\n// Read a persisted mode safely when storage is available.\nfunction readStored(): MModePreference | null {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'dark' || v === 'light' || v === 'system') return v\n } catch {\n /* SSR / blocked storage */\n }\n return null\n}\n\nexport interface MThemeContextValue {\n theme: MTheme\n mode: MModePreference\n resolvedMode: MMode\n setMode: (next: MModePreference) => void\n toggleMode: () => void\n}\n\nconst ThemeContext = createContext<MThemeContextValue>({\n theme: {},\n mode: 'dark',\n resolvedMode: 'dark',\n setMode: () => {},\n toggleMode: () => {},\n})\n\n// Map JS theme keys to CSS custom properties.\nconst varMap: Record<keyof MTheme, string> = {\n primaryRgb: '--mineral-primary-rgb',\n primary: '--mineral-primary',\n primaryDark: '--mineral-primary-dark',\n primaryLight: '--mineral-primary-light',\n neutralRgb: '--mineral-neutral-rgb',\n neutral: '--mineral-neutral',\n dark: '--mineral-dark',\n darkLight: '--mineral-dark-light',\n surface: '--mineral-surface',\n surfaceContrast: '--mineral-surface-contrast',\n pageBg: '--mineral-page-bg',\n pageText: '--mineral-page-text',\n text: '--mineral-text',\n textSecondary: '--mineral-text-secondary',\n textHeading: '--mineral-text-heading',\n border: '--mineral-border',\n borderHover: '--mineral-border-hover',\n borderFocus: '--mineral-border-focus',\n successRgb: '--mineral-success-rgb',\n success: '--mineral-success',\n errorRgb: '--mineral-error-rgb',\n error: '--mineral-error',\n warningRgb: '--mineral-warning-rgb',\n warning: '--mineral-warning',\n infoRgb: '--mineral-info-rgb',\n info: '--mineral-info',\n fontFamily: '--mineral-font-family-sans',\n fontFamilySans: '--mineral-font-family-sans',\n fontFamilyMono: '--mineral-font-family-mono',\n fontFamilyHeading: '--mineral-font-family-heading',\n fontColorDefault: '--mineral-fcolor-default',\n fontColorMuted: '--mineral-fcolor-muted',\n fontColorHeading: '--mineral-fcolor-heading',\n fontColorInverted: '--mineral-fcolor-inverted',\n fontColorPrimary: '--mineral-fcolor-primary',\n fontColorNeutral: '--mineral-fcolor-neutral',\n fontColorSuccess: '--mineral-fcolor-success',\n fontColorError: '--mineral-fcolor-error',\n fontColorWarning: '--mineral-fcolor-warning',\n fontColorInfo: '--mineral-fcolor-info',\n radiusSm: '--mineral-radius-sm',\n radiusMd: '--mineral-radius-md',\n radiusLg: '--mineral-radius-lg',\n}\n\nexport type MThemeScope = 'body' | 'wrapper'\n\nexport interface MThemeProviderProps {\n theme?: MTheme\n mode?: MModePreference\n persist?: boolean\n scope?: MThemeScope\n children: ReactNode\n}\n\n// Sync theme tokens and mode classes with either the body or a local wrapper.\nexport function MThemeProvider({\n theme,\n mode: modeProp = 'dark',\n persist = true,\n scope = 'body',\n children,\n}: MThemeProviderProps) {\n const ref = useRef<HTMLDivElement>(null)\n const safeTheme = useMemo(() => theme ?? {}, [theme])\n\n const [mode, setModeState] = useState<MModePreference>(() => {\n if (persist) {\n const stored = readStored()\n if (stored) return stored\n }\n return modeProp\n })\n\n const resolved = resolveMode(mode)\n\n const setMode = useCallback(\n (next: MModePreference) => {\n setModeState(next)\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n },\n [persist]\n )\n\n const toggleMode = useCallback(() => {\n setMode(resolved === 'dark' ? 'light' : 'dark')\n }, [resolved, setMode])\n\n // Listen for system theme changes when mode is 'system'.\n useEffect(() => {\n if (mode !== 'system') return\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const handler = () => setModeState('system')\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [mode])\n\n // Apply token overrides and light/dark class.\n useEffect(() => {\n const target = scope === 'body' ? document.body : ref.current\n if (!target) return\n\n for (const [key, value] of Object.entries(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar && value) {\n target.style.setProperty(cssVar, value)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.setProperty('--mineral-font-family', value)\n }\n }\n }\n\n target.classList.toggle('theme-light', resolved === 'light')\n\n return () => {\n for (const key of Object.keys(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar) {\n target.style.removeProperty(cssVar)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.removeProperty('--mineral-font-family')\n }\n }\n }\n target.classList.remove('theme-light')\n }\n }, [resolved, safeTheme, scope])\n\n const ctx = useMemo<MThemeContextValue>(\n () => ({\n theme: safeTheme,\n mode,\n resolvedMode: resolved,\n setMode,\n toggleMode,\n }),\n [safeTheme, mode, resolved, setMode, toggleMode]\n )\n\n return (\n <ThemeContext.Provider value={ctx}>\n {scope === 'wrapper' ? (\n <div ref={ref} className={resolved === 'light' ? 'theme-light' : undefined}>\n {children}\n </div>\n ) : (\n children\n )}\n </ThemeContext.Provider>\n )\n}\n\nexport function useMTheme(): MThemeContextValue {\n return useContext(ThemeContext)\n}\n","import {useEffect, useState} from 'react'\nimport type {MHiddenProps} from './MTheme.types'\n\nexport const MBreakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n} as const\n\nexport const MShellBreakpoints = {\n mobile: 768,\n compact: 1024,\n} as const\n\nexport function useMaxWidth(breakpoint: number): boolean {\n const [matches, setMatches] = useState(() =>\n typeof window !== 'undefined' ? window.innerWidth <= breakpoint : false\n )\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const media = window.matchMedia(`(max-width: ${breakpoint}px)`)\n const sync = () => setMatches(media.matches)\n\n sync()\n\n if (typeof media.addEventListener === 'function') {\n media.addEventListener('change', sync)\n return () => media.removeEventListener('change', sync)\n }\n\n media.addListener(sync)\n return () => media.removeListener(sync)\n }, [breakpoint])\n\n return matches\n}\n\nexport function getHiddenProps(hidden?: MHiddenProps['hidden']) {\n if (hidden === undefined || hidden === false) {\n return {}\n }\n\n if (hidden === true) {\n return {hidden: true}\n }\n\n return {'data-m-hidden': hidden}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theme-DsTDooyX.cjs","names":[],"sources":["../src/theme/MThemeProvider.tsx","../src/theme/responsive.ts"],"sourcesContent":["import {createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode} from 'react'\nimport type {MTheme, MMode, MModePreference} from './MTheme.types'\n\nconst STORAGE_KEY = 'mineralui-theme'\n\n// Resolve the final mode once 'system' is allowed.\nfunction resolveMode(pref: MModePreference): MMode {\n if (pref !== 'system') return pref\n if (typeof window === 'undefined') return 'dark'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\n// Read a persisted mode safely when storage is available.\nfunction readStored(): MModePreference | null {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'dark' || v === 'light' || v === 'system') return v\n } catch {\n /* SSR / blocked storage */\n }\n return null\n}\n\nexport interface MThemeContextValue {\n theme: MTheme\n mode: MModePreference\n resolvedMode: MMode\n setMode: (next: MModePreference) => void\n toggleMode: () => void\n}\n\nconst ThemeContext = createContext<MThemeContextValue>({\n theme: {},\n mode: 'dark',\n resolvedMode: 'dark',\n setMode: () => {},\n toggleMode: () => {},\n})\n\n// Map JS theme keys to CSS custom properties.\nconst varMap: Record<keyof MTheme, string> = {\n primaryRgb: '--mineral-primary-rgb',\n primary: '--mineral-primary',\n primaryDark: '--mineral-primary-dark',\n primaryLight: '--mineral-primary-light',\n neutralRgb: '--mineral-neutral-rgb',\n neutral: '--mineral-neutral',\n dark: '--mineral-dark',\n darkLight: '--mineral-dark-light',\n surface: '--mineral-surface',\n surfaceContrast: '--mineral-surface-contrast',\n pageBg: '--mineral-page-bg',\n pageText: '--mineral-page-text',\n text: '--mineral-text',\n textSecondary: '--mineral-text-secondary',\n textHeading: '--mineral-text-heading',\n border: '--mineral-border',\n borderHover: '--mineral-border-hover',\n borderFocus: '--mineral-border-focus',\n successRgb: '--mineral-success-rgb',\n success: '--mineral-success',\n errorRgb: '--mineral-error-rgb',\n error: '--mineral-error',\n warningRgb: '--mineral-warning-rgb',\n warning: '--mineral-warning',\n infoRgb: '--mineral-info-rgb',\n info: '--mineral-info',\n fontFamily: '--mineral-font-family-sans',\n fontFamilySans: '--mineral-font-family-sans',\n fontFamilyMono: '--mineral-font-family-mono',\n fontFamilyHeading: '--mineral-font-family-heading',\n fontColorDefault: '--mineral-fcolor-default',\n fontColorMuted: '--mineral-fcolor-muted',\n fontColorHeading: '--mineral-fcolor-heading',\n fontColorInverted: '--mineral-fcolor-inverted',\n fontColorPrimary: '--mineral-fcolor-primary',\n fontColorNeutral: '--mineral-fcolor-neutral',\n fontColorSuccess: '--mineral-fcolor-success',\n fontColorError: '--mineral-fcolor-error',\n fontColorWarning: '--mineral-fcolor-warning',\n fontColorInfo: '--mineral-fcolor-info',\n radiusSm: '--mineral-radius-sm',\n radiusMd: '--mineral-radius-md',\n radiusLg: '--mineral-radius-lg',\n}\n\nexport type MThemeScope = 'body' | 'wrapper'\n\nexport interface MThemeProviderProps {\n theme?: MTheme\n mode?: MModePreference\n persist?: boolean\n scope?: MThemeScope\n children: ReactNode\n}\n\n// Sync theme tokens and mode classes with either the body or a local wrapper.\nexport function MThemeProvider({\n theme,\n mode: modeProp = 'dark',\n persist = true,\n scope = 'body',\n children,\n}: MThemeProviderProps) {\n const ref = useRef<HTMLDivElement>(null)\n const safeTheme = useMemo(() => theme ?? {}, [theme])\n\n const [mode, setModeState] = useState<MModePreference>(() => {\n if (persist) {\n const stored = readStored()\n if (stored) return stored\n }\n return modeProp\n })\n\n const resolved = resolveMode(mode)\n\n const setMode = useCallback(\n (next: MModePreference) => {\n setModeState(next)\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n },\n [persist]\n )\n\n const toggleMode = useCallback(() => {\n setMode(resolved === 'dark' ? 'light' : 'dark')\n }, [resolved, setMode])\n\n // Listen for system theme changes when mode is 'system'.\n useEffect(() => {\n if (mode !== 'system') return\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const handler = () => setModeState('system')\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [mode])\n\n // Apply token overrides and light/dark class.\n useEffect(() => {\n const target = scope === 'body' ? document.body : ref.current\n if (!target) return\n\n for (const [key, value] of Object.entries(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar && value) {\n target.style.setProperty(cssVar, value)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.setProperty('--mineral-font-family', value)\n }\n }\n }\n\n target.classList.toggle('theme-light', resolved === 'light')\n\n return () => {\n for (const key of Object.keys(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar) {\n target.style.removeProperty(cssVar)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.removeProperty('--mineral-font-family')\n }\n }\n }\n target.classList.remove('theme-light')\n }\n }, [resolved, safeTheme, scope])\n\n const ctx = useMemo<MThemeContextValue>(\n () => ({\n theme: safeTheme,\n mode,\n resolvedMode: resolved,\n setMode,\n toggleMode,\n }),\n [safeTheme, mode, resolved, setMode, toggleMode]\n )\n\n return (\n <ThemeContext.Provider value={ctx}>\n {scope === 'wrapper' ? (\n <div ref={ref} className={resolved === 'light' ? 'theme-light' : undefined}>\n {children}\n </div>\n ) : (\n children\n )}\n </ThemeContext.Provider>\n )\n}\n\nexport function useMTheme(): MThemeContextValue {\n return useContext(ThemeContext)\n}\n","import {useEffect, useState} from 'react'\nimport type {MHiddenProps} from './MTheme.types'\n\nexport const MBreakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n} as const\n\nexport const MShellBreakpoints = {\n mobile: 768,\n compact: 1024,\n} as const\n\nexport function useMaxWidth(breakpoint: number): boolean {\n const [matches, setMatches] = useState(() =>\n typeof window !== 'undefined' ? window.innerWidth <= breakpoint : false\n )\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const media = window.matchMedia(`(max-width: ${breakpoint}px)`)\n const sync = () => setMatches(media.matches)\n\n sync()\n\n if (typeof media.addEventListener === 'function') {\n media.addEventListener('change', sync)\n return () => media.removeEventListener('change', sync)\n }\n\n media.addListener(sync)\n return () => media.removeListener(sync)\n }, [breakpoint])\n\n return matches\n}\n\nexport function getHiddenProps(\n hidden?: MHiddenProps['hidden'],\n hiddenAbove?: MHiddenProps['hiddenAbove']\n) {\n const result: Record<string, unknown> = {}\n if (hidden === true) {\n result.hidden = true\n } else if (hidden !== undefined && hidden !== false) {\n result['data-m-hidden'] = hidden\n }\n if (hiddenAbove) {\n result['data-m-hidden-above'] = hiddenAbove\n }\n return result\n}\n"],"mappings":"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"}
|
package/dist/theme.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
const {ensureStyles}=require('./style-runtime.cjs')
|
|
2
2
|
ensureStyles()
|
|
3
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./theme-
|
|
3
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./theme-DsTDooyX.cjs`);exports.MBreakpoints=e.t,exports.MShellBreakpoints=e.n,exports.MThemeProvider=e.a,exports.getHiddenProps=e.r,exports.useMTheme=e.o,exports.useMaxWidth=e.i;
|
package/dist/theme.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import {ensureStyles} from './style-runtime.js'
|
|
2
2
|
ensureStyles()
|
|
3
|
-
import { a as e, i as t, n, o as r, r as i, t as a } from "./theme-
|
|
3
|
+
import { a as e, i as t, n, o as r, r as i, t as a } from "./theme-DAOU1aPs.js";
|
|
4
4
|
export { a as MBreakpoints, n as MShellBreakpoints, e as MThemeProvider, i as getHiddenProps, r as useMTheme, t as useMaxWidth };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as e } from "./cn-YER3QsV1.js";
|
|
2
|
-
import { n as t } from "./MText-
|
|
2
|
+
import { n as t } from "./MText-CL-LPcXi.js";
|
|
3
3
|
import { jsx as n } from "react/jsx-runtime";
|
|
4
4
|
//#region src/components/typography/MCode/MCode.tsx
|
|
5
5
|
function r({ color: r, className: i, children: a, ...o }) {
|
|
@@ -28,4 +28,4 @@ function a({ className: t, children: r, ...i }) {
|
|
|
28
28
|
//#endregion
|
|
29
29
|
export { a as n, r, i as t };
|
|
30
30
|
|
|
31
|
-
//# sourceMappingURL=typography-
|
|
31
|
+
//# sourceMappingURL=typography-CAW17MDj.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typography-
|
|
1
|
+
{"version":3,"file":"typography-CAW17MDj.js","names":[],"sources":["../src/components/typography/MCode/MCode.tsx","../src/components/typography/MList/MList.tsx"],"sourcesContent":["import type {MCodeProps} from './MCode.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MCode.css'\n\n// Render inline code tokens with semantic color support.\nexport function MCode({color, className, children, ...rest}: MCodeProps) {\n return (\n <code className={cn('code', ...getAppearanceClassNames({color}), className)} {...rest}>\n {children}\n </code>\n )\n}\n","import type {HTMLAttributes} from 'react'\nimport type {MListProps} from './MList.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MList.css'\n\n// Render ordered or unordered lists with shared typography tokens.\nexport function MList({ordered = false, color, className, children, ...rest}: MListProps) {\n const Component = ordered ? 'ol' : 'ul'\n\n return (\n <Component\n className={cn('list', ordered && 'ordered', ...getAppearanceClassNames({color}), className)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n\n// Render a list item that inherits the parent list styling.\nexport function MListItem({className, children, ...rest}: HTMLAttributes<HTMLLIElement>) {\n return (\n <li className={cn('item', className)} {...rest}>\n {children}\n </li>\n )\n}\n"],"mappings":";;;;AAMA,SAAgB,EAAM,EAAC,UAAO,cAAW,aAAU,GAAG,KAAmB;AACrE,QACI,kBAAC,QAAD;EAAM,WAAW,EAAG,QAAQ,GAAG,EAAwB,EAAC,UAAM,CAAC,EAAE,EAAU;EAAE,GAAI;EAC5E;EACE,CAAA;;;;ACHf,SAAgB,EAAM,EAAC,aAAU,IAAO,UAAO,cAAW,aAAU,GAAG,KAAmB;AAGtF,QACI,kBAHc,IAAU,OAAO,MAG/B;EACI,WAAW,EAAG,QAAQ,KAAW,WAAW,GAAG,EAAwB,EAAC,UAAM,CAAC,EAAE,EAAU;EAC3F,GAAI;EAEH;EACO,CAAA;;AAKpB,SAAgB,EAAU,EAAC,cAAW,aAAU,GAAG,KAAsC;AACrF,QACI,kBAAC,MAAD;EAAI,WAAW,EAAG,QAAQ,EAAU;EAAE,GAAI;EACrC;EACA,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./cn-CU5TNITO.cjs`),t=require(`./MText-
|
|
2
|
-
//# sourceMappingURL=typography-
|
|
1
|
+
const e=require(`./cn-CU5TNITO.cjs`),t=require(`./MText-BHbI7KJO.cjs`);require(`./core-DAox0BHy.cjs`);let n=require(`react/jsx-runtime`);function r({color:r,className:i,children:a,...o}){return(0,n.jsx)(`code`,{className:e.t(`code`,...t.n({color:r}),i),...o,children:a})}function i({ordered:r=!1,color:i,className:a,children:o,...s}){return(0,n.jsx)(r?`ol`:`ul`,{className:e.t(`list`,r&&`ordered`,...t.n({color:i}),a),...s,children:o})}function a({className:t,children:r,...i}){return(0,n.jsx)(`li`,{className:e.t(`item`,t),...i,children:r})}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
|
|
2
|
+
//# sourceMappingURL=typography-sbLuXqFn.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typography-
|
|
1
|
+
{"version":3,"file":"typography-sbLuXqFn.cjs","names":[],"sources":["../src/components/typography/MCode/MCode.tsx","../src/components/typography/MList/MList.tsx"],"sourcesContent":["import type {MCodeProps} from './MCode.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MCode.css'\n\n// Render inline code tokens with semantic color support.\nexport function MCode({color, className, children, ...rest}: MCodeProps) {\n return (\n <code className={cn('code', ...getAppearanceClassNames({color}), className)} {...rest}>\n {children}\n </code>\n )\n}\n","import type {HTMLAttributes} from 'react'\nimport type {MListProps} from './MList.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MList.css'\n\n// Render ordered or unordered lists with shared typography tokens.\nexport function MList({ordered = false, color, className, children, ...rest}: MListProps) {\n const Component = ordered ? 'ol' : 'ul'\n\n return (\n <Component\n className={cn('list', ordered && 'ordered', ...getAppearanceClassNames({color}), className)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n\n// Render a list item that inherits the parent list styling.\nexport function MListItem({className, children, ...rest}: HTMLAttributes<HTMLLIElement>) {\n return (\n <li className={cn('item', className)} {...rest}>\n {children}\n </li>\n )\n}\n"],"mappings":"yIAMA,SAAgB,EAAM,CAAC,QAAO,YAAW,WAAU,GAAG,GAAmB,CACrE,OACI,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,EAAG,OAAQ,GAAG,EAAA,EAAwB,CAAC,QAAM,CAAC,CAAE,EAAU,CAAE,GAAI,EAC5E,WACE,CAAA,CCHf,SAAgB,EAAM,CAAC,UAAU,GAAO,QAAO,YAAW,WAAU,GAAG,GAAmB,CAGtF,OACI,EAAA,EAAA,KAHc,EAAU,KAAO,KAG/B,CACI,UAAW,EAAA,EAAG,OAAQ,GAAW,UAAW,GAAG,EAAA,EAAwB,CAAC,QAAM,CAAC,CAAE,EAAU,CAC3F,GAAI,EAEH,WACO,CAAA,CAKpB,SAAgB,EAAU,CAAC,YAAW,WAAU,GAAG,GAAsC,CACrF,OACI,EAAA,EAAA,KAAC,KAAD,CAAI,UAAW,EAAA,EAAG,OAAQ,EAAU,CAAE,GAAI,EACrC,WACA,CAAA"}
|
package/dist/typography.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
const {ensureStyles}=require('./style-runtime.cjs')
|
|
2
2
|
ensureStyles()
|
|
3
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./MText-
|
|
3
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./MText-BHbI7KJO.cjs`),t=require(`./MHeading-f3hwkW3r.cjs`),n=require(`./MLink-CRK8YvR4.cjs`),r=require(`./typography-sbLuXqFn.cjs`),i=require(`./MSubText-CIMKPb8o.cjs`),a=require(`./MKbd-DWTS3iS5.cjs`);exports.MCode=r.r,exports.MHeading=t.t,exports.MKbd=a.t,exports.MLink=n.t,exports.MList=r.t,exports.MListItem=r.n,exports.MSubText=i.t,exports.MText=e.t;
|
package/dist/typography.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {ensureStyles} from './style-runtime.js'
|
|
2
2
|
ensureStyles()
|
|
3
|
-
import { t as e } from "./MText-
|
|
4
|
-
import { t } from "./MHeading-
|
|
5
|
-
import { t as n } from "./MLink-
|
|
6
|
-
import { n as r, r as i, t as a } from "./typography-
|
|
7
|
-
import { t as o } from "./MSubText-
|
|
3
|
+
import { t as e } from "./MText-CL-LPcXi.js";
|
|
4
|
+
import { t } from "./MHeading-B7KgSP4T.js";
|
|
5
|
+
import { t as n } from "./MLink-Bd8fLH1N.js";
|
|
6
|
+
import { n as r, r as i, t as a } from "./typography-CAW17MDj.js";
|
|
7
|
+
import { t as o } from "./MSubText-C-N15d4Z.js";
|
|
8
8
|
import { t as s } from "./MKbd-v6-tJ9sP.js";
|
|
9
9
|
export { i as MCode, t as MHeading, s as MKbd, n as MLink, a as MList, r as MListItem, o as MSubText, e as MText };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ComponentType, ElementType, ReactNode } from 'react';
|
|
2
|
+
import { MColor } from '../theme';
|
|
3
|
+
import { MNavsItemIconProps } from '../components/layout/MNavs';
|
|
4
|
+
import { MCommandPaletteItem } from '../components/overlays/MCommandPalette/MCommandPalette.types';
|
|
5
|
+
export type MNavGroupIcon = ReactNode | ComponentType<MNavsItemIconProps>;
|
|
6
|
+
export interface MNavGroupItem {
|
|
7
|
+
key?: string;
|
|
8
|
+
label: ReactNode;
|
|
9
|
+
icon?: MNavGroupIcon;
|
|
10
|
+
href?: string;
|
|
11
|
+
to?: string;
|
|
12
|
+
target?: string;
|
|
13
|
+
rel?: string;
|
|
14
|
+
/** HTML `title` attribute — accessibility hint, also used as a description fallback. */
|
|
15
|
+
title?: string;
|
|
16
|
+
/** Forwarded to the command palette as `MCommandPaletteItem.description`. */
|
|
17
|
+
description?: ReactNode;
|
|
18
|
+
onClick?: () => void;
|
|
19
|
+
badge?: ReactNode;
|
|
20
|
+
color?: MColor;
|
|
21
|
+
active?: boolean;
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
className?: string;
|
|
24
|
+
component?: ElementType;
|
|
25
|
+
children?: MNavGroupItem[];
|
|
26
|
+
primary?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface MNavGroup {
|
|
29
|
+
key?: string;
|
|
30
|
+
label: ReactNode;
|
|
31
|
+
icon?: MNavGroupIcon;
|
|
32
|
+
collapsible?: boolean;
|
|
33
|
+
defaultOpen?: boolean;
|
|
34
|
+
items: MNavGroupItem[];
|
|
35
|
+
}
|
|
36
|
+
export interface CommandPaletteFromNavGroupsOptions {
|
|
37
|
+
/**
|
|
38
|
+
* Called when the user selects an item that has a `to` or `href`. Receives
|
|
39
|
+
* the resolved target string and the original `MNavGroupItem` so the caller
|
|
40
|
+
* can run their router (`navigate(target)`) without `MCommandPalette`
|
|
41
|
+
* needing to know about `react-router`.
|
|
42
|
+
*/
|
|
43
|
+
onSelect?: (target: string, item: MNavGroupItem) => void;
|
|
44
|
+
/** When `true`, disabled menu items are still emitted. Default `false`. */
|
|
45
|
+
includeDisabled?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Optional extra keywords appended to every emitted item. Useful for adding
|
|
48
|
+
* global search aliases (e.g. translations) without mutating the source menu.
|
|
49
|
+
*/
|
|
50
|
+
extraKeywords?: string[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Convert a navigation model (`MNavGroup[]` — a shared groups+items shape) into
|
|
54
|
+
* `MCommandPaletteItem[]` so the command palette and the app's navigation menu
|
|
55
|
+
* can share one source of truth instead of being maintained in parallel.
|
|
56
|
+
*
|
|
57
|
+
* Mapping:
|
|
58
|
+
* - `MNavGroup.label` → `MCommandPaletteItem.group`
|
|
59
|
+
* - `MNavGroupItem.label` → `MCommandPaletteItem.title`
|
|
60
|
+
* - `MNavGroupItem.icon` → `MCommandPaletteItem.icon` (component icons are
|
|
61
|
+
* instantiated as elements; ReactNode icons are forwarded as-is)
|
|
62
|
+
* - `MNavGroupItem.description` (or fallback to the HTML `title` attr)
|
|
63
|
+
* → `MCommandPaletteItem.description`
|
|
64
|
+
* - `MNavGroupItem.to` → `MCommandPaletteItem.to`
|
|
65
|
+
* - `MNavGroupItem.href` → `MCommandPaletteItem.href`
|
|
66
|
+
* - `MNavGroupItem.target` / `rel` / `component` / `badge` are forwarded
|
|
67
|
+
* - When `to`/`href` is present and `options.onSelect` is provided, the emitted
|
|
68
|
+
* `onSelect` calls `options.onSelect(target, item)` so the caller's router
|
|
69
|
+
* handles navigation.
|
|
70
|
+
*
|
|
71
|
+
* Tree menus are flattened — only leaves with a navigable target (or with their
|
|
72
|
+
* own `onClick`) are emitted, so the palette stays a flat command list.
|
|
73
|
+
*/
|
|
74
|
+
export declare function commandPaletteFromNavGroups(groups: MNavGroup[], options?: CommandPaletteFromNavGroupsOptions): MCommandPaletteItem[];
|
|
@@ -12,6 +12,10 @@ export declare const mineralComponentLicenses: {
|
|
|
12
12
|
readonly group: "data";
|
|
13
13
|
readonly plan: "pro";
|
|
14
14
|
};
|
|
15
|
+
readonly MTimelineCalendar: {
|
|
16
|
+
readonly group: "data";
|
|
17
|
+
readonly plan: "pro";
|
|
18
|
+
};
|
|
15
19
|
readonly MChat: {
|
|
16
20
|
readonly group: "data";
|
|
17
21
|
readonly plan: "pro";
|
|
@@ -36,10 +40,6 @@ export declare const mineralComponentLicenses: {
|
|
|
36
40
|
readonly group: "layout";
|
|
37
41
|
readonly plan: "pro";
|
|
38
42
|
};
|
|
39
|
-
readonly MAppMenu: {
|
|
40
|
-
readonly group: "layout";
|
|
41
|
-
readonly plan: "pro";
|
|
42
|
-
};
|
|
43
43
|
readonly MMasonry: {
|
|
44
44
|
readonly group: "media";
|
|
45
45
|
readonly plan: "pro";
|
package/dist/utils.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
const {ensureStyles}=require('./style-runtime.cjs')
|
|
2
2
|
ensureStyles()
|
|
3
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./cn-CU5TNITO.cjs`),t=require(`./validators-DRhikiAi.cjs`),n=require(`./creditCards-D_HwRUBz.cjs`),r=require(`./formatters-CNjg_h7-.cjs`),i=require(`./dateUtils-Dq1vaA-D.cjs`),a=require(`./relativeTime-DgYBUaVm.cjs`),o=require(`./useGhostText-Dg4P606B.cjs`),s=require(`./licensing-
|
|
3
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./cn-CU5TNITO.cjs`),t=require(`./validators-DRhikiAi.cjs`),n=require(`./creditCards-D_HwRUBz.cjs`),r=require(`./formatters-CNjg_h7-.cjs`),i=require(`./dateUtils-Dq1vaA-D.cjs`),a=require(`./relativeTime-DgYBUaVm.cjs`),o=require(`./useGhostText-Dg4P606B.cjs`),s=require(`./licensing-9sZ43Cif.cjs`),c=require(`./useKeyboardNav-CyeQtqF8.cjs`),l=require(`./useInteractionEffect-Bo8285cg.cjs`);exports.addMonths=i.t,exports.addYears=i.n,exports.adjustCursorAfterFormat=r.t,exports.capitalizeWords=r.n,exports.cn=e.t,exports.composeValidators=t.t,exports.creditCardBrands=n.t,exports.daysInMonth=i.i,exports.detectCardBrand=n.n,exports.firstDayOfMonth=i.a,exports.formatAbsoluteTime=a.t,exports.formatCardNumber=n.r,exports.formatCurrency=r.r,exports.formatDate=i.o,exports.formatIBAN=r.a,exports.formatNIP=r.o,exports.formatPhone=r.s,exports.formatPostCode=t._,exports.formatRelativeTime=a.n,exports.formatTime=i.c,exports.getAutoUpdateInterval=a.r,exports.getDayNames=i.u,exports.getMineralComponentLicense=s.t,exports.getMineralComponentPlan=s.n,exports.getMonthNames=i.d,exports.getPostCodeRule=t.v,exports.getRelativeTimeValue=a.i,exports.isDateInRange=i.f,exports.isMineralProComponent=s.r,exports.isSameDay=i.p,exports.mineralComponentLicenses=s.i,exports.mineralProComponents=s.a,exports.parseCurrencyToNumber=r.c,exports.parseDate=i.m,exports.parseRelativeThreshold=a.a,exports.parseTime=i.h,exports.postCodeCountries=t.y,exports.postCodeRules=t.b,exports.stripCardNumber=n.i,exports.stripNonAlphanumeric=r.l,exports.stripNonDigits=r.u,exports.stripTime=i._,exports.toDate=a.o,exports.unformatIBAN=r.d,exports.useClickOutside=s.o,exports.useDebounce=o.n,exports.useDebouncedCallback=o.r,exports.useGhostText=o.t,exports.useInteractionEffect=l.t,exports.useKeyboardNav=c.t,exports.validateCardNumber=n.a,exports.validateEmail=t.o,exports.validateIBAN=t.s,exports.validateMaxLength=t.c,exports.validateMinLength=t.l,exports.validateNIP=t.u,exports.validatePESEL=t.d,exports.validatePattern=t.f,exports.validatePhone=t.p,exports.validatePostCode=t.x,exports.validateREGON=t.m,exports.validateRange=t.h,exports.validateRequired=t.g;
|
package/dist/utils.js
CHANGED
|
@@ -7,7 +7,7 @@ import { a as C, c as w, d as T, l as E, n as D, o as O, r as k, s as A, t as j,
|
|
|
7
7
|
import { _ as N, a as P, c as F, d as I, f as L, h as R, i as z, m as B, n as V, o as H, p as U, t as W, u as G } from "./dateUtils-CUY6CRCf.js";
|
|
8
8
|
import { a as K, i as q, n as J, o as Y, r as X, t as Z } from "./relativeTime-Cr-NVzij.js";
|
|
9
9
|
import { n as Q, r as $, t as ee } from "./useGhostText-DG0bzcao.js";
|
|
10
|
-
import { a as te, i as ne, n as re, o as ie, r as ae, t as oe } from "./licensing-
|
|
10
|
+
import { a as te, i as ne, n as re, o as ie, r as ae, t as oe } from "./licensing-Bq78CLC_.js";
|
|
11
11
|
import { t as se } from "./useKeyboardNav-iEXOdEMB.js";
|
|
12
12
|
import { t as ce } from "./useInteractionEffect-DtpbVd77.js";
|
|
13
13
|
export { W as addMonths, V as addYears, j as adjustCursorAfterFormat, D as capitalizeWords, e as cn, p as composeValidators, S as creditCardBrands, z as daysInMonth, b as detectCardBrand, P as firstDayOfMonth, Z as formatAbsoluteTime, x as formatCardNumber, k as formatCurrency, H as formatDate, C as formatIBAN, O as formatNIP, A as formatPhone, t as formatPostCode, J as formatRelativeTime, F as formatTime, X as getAutoUpdateInterval, G as getDayNames, oe as getMineralComponentLicense, re as getMineralComponentPlan, I as getMonthNames, h as getPostCodeRule, q as getRelativeTimeValue, L as isDateInRange, ae as isMineralProComponent, U as isSameDay, ne as mineralComponentLicenses, te as mineralProComponents, w as parseCurrencyToNumber, B as parseDate, K as parseRelativeThreshold, R as parseTime, _ as postCodeCountries, n as postCodeRules, y as stripCardNumber, E as stripNonAlphanumeric, M as stripNonDigits, N as stripTime, Y as toDate, T as unformatIBAN, ie as useClickOutside, Q as useDebounce, $ as useDebouncedCallback, ee as useGhostText, ce as useInteractionEffect, se as useKeyboardNav, v as validateCardNumber, u as validateEmail, f as validateIBAN, r as validateMaxLength, c as validateMinLength, m as validateNIP, i as validatePESEL, a as validatePattern, d as validatePhone, g as validatePostCode, l as validateREGON, s as validateRange, o as validateRequired };
|
package/package.json
CHANGED
package/dist/MGrid-C4kPZDSa.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=require(`./theme-BaroO-OB.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./layoutProps-B8y2XwHy.cjs`);require(`./core-DAox0BHy.cjs`);let r=require(`react`),i=require(`react/jsx-runtime`);var a=[`base`,`xxl`,`xl`,`lg`,`md`,`sm`],o={sm:[`sm`],md:[`md`,`sm`],lg:[`lg`,`md`,`sm`],xl:[`xl`,`lg`,`md`,`sm`],"2xl":[`xxl`,`xl`,`lg`,`md`,`sm`]};function s(e){return(0,r.isValidElement)(e)?e.type===p?!0:e.type===f&&e.props.type===`col`:!1}function c(e){let t=e.sm,n=e.md??t,r=e.lg??n,i=e.xl??r,a=e.xxl??i;return{base:a,xxl:a,xl:i,lg:r,md:n,sm:t}}function l(e,t){return e===!0?!0:e===void 0||e===!1||t===`base`?!1:o[e]?.includes(t)??!1}function u(e,t){if(t<=0)return[];if(e<=0)return Array.from({length:t},()=>12);let n=Math.floor(e/t),r=e%t;return Array.from({length:t},(e,t)=>{let i=n+ +(t<r);return i>=1?i:12})}function d(e){let t=e.map(e=>c(e)),n=t.map(e=>({...e}));for(let r of a){let i=[],a=0;t.forEach((t,o)=>{if(l(e[o].hidden,r)){n[o][r]=void 0;return}let s=t[r];if(s){a+=s;return}i.push(o)});let o=u(Math.max(12-a,0),i.length);i.forEach((e,t)=>{n[e][r]=o[t]})}return n}function f({type:a=`row`,sm:o,md:l,lg:u,xl:f,xxl:p,resolvedBase:m,hidden:h,align:g,spacing:_,padding:v,fsize:y,mt:b,mb:x,ml:S,mr:C,mx:w,my:T,pt:E,pb:D,pl:O,pr:k,px:A,py:j,fullWidth:M,className:N,style:P,children:F,...I}){let L=n.n({fsize:y}),R=c({sm:o,md:l,lg:u,xl:f,xxl:p}),z=m??R.base;if(a===`col`)return(0,i.jsx)(`div`,{className:t.t(`grid`,`col`,z?`span-${z}`:`span-auto`,p&&`xxl-${p}`,f&&`xl-${f}`,u&&`lg-${u}`,l&&`md-${l}`,o&&`sm-${o}`,g&&`self-${g}`,...n.t({spacing:_,padding:v,fsize:y,mt:b,mb:x,ml:S,mr:C,mx:w,my:T,pt:E,pb:D,pl:O,pr:k,px:A,py:j,fullWidth:M}),N),style:{...L,...P},...e.r(h),...I,children:F});let B=r.Children.toArray(F),V=B.flatMap((e,t)=>s(e)?[{child:e,index:t}]:[]),H=Math.min(Math.max(V.length||B.length,1),12),U=V.some(({child:e})=>{let t=e.props;return!!(t.hidden||t.xxl||t.xl||t.lg||t.md||t.sm)}),W=U?d(V.map(({child:e})=>e.props)):null,G=U&&W?B.map((e,t)=>{let n=V.findIndex(e=>e.index===t);if(n===-1||!s(e))return e;let i=W[n];return(0,r.cloneElement)(e,{resolvedBase:i.base,xxl:i.xxl,xl:i.xl,lg:i.lg,md:i.md,sm:i.sm})}):B;return(0,i.jsx)(`div`,{className:t.t(`grid`,`row`,U?`tracked`:`auto-cols-${H}`,g&&`align-${g}`,...n.t({spacing:_,padding:v,fsize:y,mt:b,mb:x,ml:S,mr:C,mx:w,my:T,pt:E,pb:D,pl:O,pr:k,px:A,py:j,fullWidth:M??!0}),N),style:{...L,...P},...e.r(h),...I,children:G})}function p({sm:e,md:t,lg:n,xl:r,xxl:a,align:o,...s}){return(0,i.jsx)(f,{type:`col`,sm:e,md:t,lg:n,xl:r,xxl:a,align:o,...s})}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return f}});
|
|
2
|
-
//# sourceMappingURL=MGrid-C4kPZDSa.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MGrid-C4kPZDSa.cjs","names":[],"sources":["../src/components/layout/MGrid/MGrid.tsx"],"sourcesContent":["import {Children, cloneElement, isValidElement} from 'react'\nimport type {ReactElement} from 'react'\nimport type {MGridColumns, MGridItemProps, MGridProps} from './MGrid.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MGrid.css'\n\ntype GridBreakpoint = 'base' | 'xxl' | 'xl' | 'lg' | 'md' | 'sm'\ntype GridBreakpointSpans = Record<GridBreakpoint, MGridColumns | undefined>\ntype MGridInternalProps = MGridProps & {\n resolvedBase?: MGridColumns\n}\n\nconst gridBreakpointOrder: GridBreakpoint[] = ['base', 'xxl', 'xl', 'lg', 'md', 'sm']\n\nconst hiddenBreakpointMap: Record<string, GridBreakpoint[]> = {\n sm: ['sm'],\n md: ['md', 'sm'],\n lg: ['lg', 'md', 'sm'],\n xl: ['xl', 'lg', 'md', 'sm'],\n '2xl': ['xxl', 'xl', 'lg', 'md', 'sm'],\n}\n\nfunction isGridColumnElement(child: unknown): child is ReactElement<MGridProps | MGridItemProps> {\n if (!isValidElement(child)) {\n return false\n }\n\n if (child.type === MGridItem) {\n return true\n }\n\n return child.type === MGrid && (child.props as MGridProps).type === 'col'\n}\n\nfunction getInheritedSpans(props: Partial<MGridProps>): GridBreakpointSpans {\n const sm = props.sm\n const md = props.md ?? sm\n const lg = props.lg ?? md\n const xl = props.xl ?? lg\n const xxl = props.xxl ?? xl\n\n return {\n base: xxl,\n xxl,\n xl,\n lg,\n md,\n sm,\n }\n}\n\nfunction isHiddenAtBreakpoint(hidden: MGridProps['hidden'], breakpoint: GridBreakpoint) {\n if (hidden === true) {\n return true\n }\n\n if (hidden === undefined || hidden === false || breakpoint === 'base') {\n return false\n }\n\n return hiddenBreakpointMap[hidden]?.includes(breakpoint) ?? false\n}\n\nfunction distributeRemainingColumns(remaining: number, count: number): Array<MGridColumns | undefined> {\n if (count <= 0) {\n return []\n }\n\n if (remaining <= 0) {\n return Array.from({length: count}, () => 12 as MGridColumns)\n }\n\n const base = Math.floor(remaining / count)\n const extra = remaining % count\n\n return Array.from({length: count}, (_, index) => {\n const value = base + (index < extra ? 1 : 0)\n return value >= 1 ? (value as MGridColumns) : (12 as MGridColumns)\n })\n}\n\nfunction resolveAutoSpans(columnProps: Array<Partial<MGridProps>>) {\n const normalized = columnProps.map((props) => getInheritedSpans(props))\n const resolved = normalized.map((spans) => ({...spans}))\n\n for (const breakpoint of gridBreakpointOrder) {\n const autoIndexes: number[] = []\n let usedColumns = 0\n\n normalized.forEach((spans, index) => {\n if (isHiddenAtBreakpoint(columnProps[index].hidden, breakpoint)) {\n resolved[index][breakpoint] = undefined\n return\n }\n\n const value = spans[breakpoint]\n\n if (value) {\n usedColumns += value\n return\n }\n\n autoIndexes.push(index)\n })\n\n const distributed = distributeRemainingColumns(Math.max(12 - usedColumns, 0), autoIndexes.length)\n\n autoIndexes.forEach((columnIndex, autoIndex) => {\n resolved[columnIndex][breakpoint] = distributed[autoIndex]\n })\n }\n\n return resolved\n}\n\n// Render either a responsive row or a responsive column using one shared grid API.\nexport function MGrid({\n type = 'row',\n sm,\n md,\n lg,\n xl,\n xxl,\n resolvedBase,\n hidden,\n align,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MGridInternalProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const inheritedSpans = getInheritedSpans({sm, md, lg, xl, xxl})\n const baseSpan = resolvedBase ?? inheritedSpans.base\n\n if (type === 'col') {\n return (\n <div\n className={cn(\n 'grid',\n 'col',\n baseSpan ? `span-${baseSpan}` : 'span-auto',\n xxl && `xxl-${xxl}`,\n xl && `xl-${xl}`,\n lg && `lg-${lg}`,\n md && `md-${md}`,\n sm && `sm-${sm}`,\n align && `self-${align}`,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n }\n\n const childArray = Children.toArray(children)\n const columnEntries = childArray.flatMap((child, index) => (isGridColumnElement(child) ? [{child, index}] : []))\n const autoColumns = Math.min(Math.max(columnEntries.length || childArray.length, 1), 12)\n const needsResponsiveResolution = columnEntries.some(({child}) => {\n const p = child.props as MGridProps\n return Boolean(p.hidden || p.xxl || p.xl || p.lg || p.md || p.sm)\n })\n const resolvedSpans = needsResponsiveResolution\n ? resolveAutoSpans(columnEntries.map(({child}) => child.props as Partial<MGridProps>))\n : null\n const resolvedChildren =\n needsResponsiveResolution && resolvedSpans\n ? childArray.map((child, childIndex) => {\n const columnIndex = columnEntries.findIndex((entry) => entry.index === childIndex)\n\n if (columnIndex === -1 || !isGridColumnElement(child)) {\n return child\n }\n\n const spans = resolvedSpans[columnIndex]\n\n return cloneElement(child as ReactElement<MGridInternalProps>, {\n resolvedBase: spans.base,\n xxl: spans.xxl,\n xl: spans.xl,\n lg: spans.lg,\n md: spans.md,\n sm: spans.sm,\n })\n })\n : childArray\n\n return (\n <div\n className={cn(\n 'grid',\n 'row',\n needsResponsiveResolution ? 'tracked' : `auto-cols-${autoColumns}`,\n align && `align-${align}`,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth: fullWidth ?? true,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {resolvedChildren}\n </div>\n )\n}\n\n// Keep MGridItem as a compatibility alias for explicit column declarations.\nexport function MGridItem({sm, md, lg, xl, xxl, align, ...rest}: MGridItemProps) {\n return <MGrid type=\"col\" sm={sm} md={md} lg={lg} xl={xl} xxl={xxl} align={align} {...rest} />\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MGrid-DR0fHItF.js","names":[],"sources":["../src/components/layout/MGrid/MGrid.tsx"],"sourcesContent":["import {Children, cloneElement, isValidElement} from 'react'\nimport type {ReactElement} from 'react'\nimport type {MGridColumns, MGridItemProps, MGridProps} from './MGrid.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MGrid.css'\n\ntype GridBreakpoint = 'base' | 'xxl' | 'xl' | 'lg' | 'md' | 'sm'\ntype GridBreakpointSpans = Record<GridBreakpoint, MGridColumns | undefined>\ntype MGridInternalProps = MGridProps & {\n resolvedBase?: MGridColumns\n}\n\nconst gridBreakpointOrder: GridBreakpoint[] = ['base', 'xxl', 'xl', 'lg', 'md', 'sm']\n\nconst hiddenBreakpointMap: Record<string, GridBreakpoint[]> = {\n sm: ['sm'],\n md: ['md', 'sm'],\n lg: ['lg', 'md', 'sm'],\n xl: ['xl', 'lg', 'md', 'sm'],\n '2xl': ['xxl', 'xl', 'lg', 'md', 'sm'],\n}\n\nfunction isGridColumnElement(child: unknown): child is ReactElement<MGridProps | MGridItemProps> {\n if (!isValidElement(child)) {\n return false\n }\n\n if (child.type === MGridItem) {\n return true\n }\n\n return child.type === MGrid && (child.props as MGridProps).type === 'col'\n}\n\nfunction getInheritedSpans(props: Partial<MGridProps>): GridBreakpointSpans {\n const sm = props.sm\n const md = props.md ?? sm\n const lg = props.lg ?? md\n const xl = props.xl ?? lg\n const xxl = props.xxl ?? xl\n\n return {\n base: xxl,\n xxl,\n xl,\n lg,\n md,\n sm,\n }\n}\n\nfunction isHiddenAtBreakpoint(hidden: MGridProps['hidden'], breakpoint: GridBreakpoint) {\n if (hidden === true) {\n return true\n }\n\n if (hidden === undefined || hidden === false || breakpoint === 'base') {\n return false\n }\n\n return hiddenBreakpointMap[hidden]?.includes(breakpoint) ?? false\n}\n\nfunction distributeRemainingColumns(remaining: number, count: number): Array<MGridColumns | undefined> {\n if (count <= 0) {\n return []\n }\n\n if (remaining <= 0) {\n return Array.from({length: count}, () => 12 as MGridColumns)\n }\n\n const base = Math.floor(remaining / count)\n const extra = remaining % count\n\n return Array.from({length: count}, (_, index) => {\n const value = base + (index < extra ? 1 : 0)\n return value >= 1 ? (value as MGridColumns) : (12 as MGridColumns)\n })\n}\n\nfunction resolveAutoSpans(columnProps: Array<Partial<MGridProps>>) {\n const normalized = columnProps.map((props) => getInheritedSpans(props))\n const resolved = normalized.map((spans) => ({...spans}))\n\n for (const breakpoint of gridBreakpointOrder) {\n const autoIndexes: number[] = []\n let usedColumns = 0\n\n normalized.forEach((spans, index) => {\n if (isHiddenAtBreakpoint(columnProps[index].hidden, breakpoint)) {\n resolved[index][breakpoint] = undefined\n return\n }\n\n const value = spans[breakpoint]\n\n if (value) {\n usedColumns += value\n return\n }\n\n autoIndexes.push(index)\n })\n\n const distributed = distributeRemainingColumns(Math.max(12 - usedColumns, 0), autoIndexes.length)\n\n autoIndexes.forEach((columnIndex, autoIndex) => {\n resolved[columnIndex][breakpoint] = distributed[autoIndex]\n })\n }\n\n return resolved\n}\n\n// Render either a responsive row or a responsive column using one shared grid API.\nexport function MGrid({\n type = 'row',\n sm,\n md,\n lg,\n xl,\n xxl,\n resolvedBase,\n hidden,\n align,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MGridInternalProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const inheritedSpans = getInheritedSpans({sm, md, lg, xl, xxl})\n const baseSpan = resolvedBase ?? inheritedSpans.base\n\n if (type === 'col') {\n return (\n <div\n className={cn(\n 'grid',\n 'col',\n baseSpan ? `span-${baseSpan}` : 'span-auto',\n xxl && `xxl-${xxl}`,\n xl && `xl-${xl}`,\n lg && `lg-${lg}`,\n md && `md-${md}`,\n sm && `sm-${sm}`,\n align && `self-${align}`,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n }\n\n const childArray = Children.toArray(children)\n const columnEntries = childArray.flatMap((child, index) => (isGridColumnElement(child) ? [{child, index}] : []))\n const autoColumns = Math.min(Math.max(columnEntries.length || childArray.length, 1), 12)\n const needsResponsiveResolution = columnEntries.some(({child}) => {\n const p = child.props as MGridProps\n return Boolean(p.hidden || p.xxl || p.xl || p.lg || p.md || p.sm)\n })\n const resolvedSpans = needsResponsiveResolution\n ? resolveAutoSpans(columnEntries.map(({child}) => child.props as Partial<MGridProps>))\n : null\n const resolvedChildren =\n needsResponsiveResolution && resolvedSpans\n ? childArray.map((child, childIndex) => {\n const columnIndex = columnEntries.findIndex((entry) => entry.index === childIndex)\n\n if (columnIndex === -1 || !isGridColumnElement(child)) {\n return child\n }\n\n const spans = resolvedSpans[columnIndex]\n\n return cloneElement(child as ReactElement<MGridInternalProps>, {\n resolvedBase: spans.base,\n xxl: spans.xxl,\n xl: spans.xl,\n lg: spans.lg,\n md: spans.md,\n sm: spans.sm,\n })\n })\n : childArray\n\n return (\n <div\n className={cn(\n 'grid',\n 'row',\n needsResponsiveResolution ? 'tracked' : `auto-cols-${autoColumns}`,\n align && `align-${align}`,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth: fullWidth ?? true,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {resolvedChildren}\n </div>\n )\n}\n\n// Keep MGridItem as a compatibility alias for explicit column declarations.\nexport function MGridItem({sm, md, lg, xl, xxl, align, ...rest}: MGridItemProps) {\n return <MGrid type=\"col\" sm={sm} md={md} lg={lg} xl={xl} xxl={xxl} align={align} {...rest} />\n}\n"],"mappings":"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"}
|
package/dist/MImage-BZ6SrSao.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=require(`./theme-BaroO-OB.cjs`),t=require(`./icons-qCoE70hn.cjs`),n=require(`./cn-CU5TNITO.cjs`),r=require(`./useInteractionEffect-Bo8285cg.cjs`),i=require(`./MPortal-BIxPtFYd.cjs`),a=require(`./MButton-8UCydOik.cjs`),o=require(`./MSkeleton-BdwhPx-k.cjs`);require(`./core-DAox0BHy.cjs`);let s=require(`react`),c=require(`react/jsx-runtime`);function l({open:e,items:r,activeIndex:l,onClose:u,onActiveIndexChange:d}){let f=r[l],p=(0,s.useRef)(null),m=l>0,h=l<r.length-1;if((0,s.useEffect)(()=>{if(!e)return;let t=e=>{if(e.key===`Escape`){u();return}e.key===`ArrowLeft`&&m&&d(l-1),e.key===`ArrowRight`&&h&&d(l+1)};return document.addEventListener(`keydown`,t),()=>document.removeEventListener(`keydown`,t)},[l,h,m,d,u,e]),(0,s.useEffect)(()=>{if(!e)return;let t=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=t}},[e]),!e||!f)return null;let g=e=>{let t=e.target;t&&p.current&&!p.current.contains(t)&&u()},_=f.alt||f.caption||`Image preview`;return(0,c.jsx)(i.t,{children:(0,c.jsx)(`div`,{className:n.t(`mineral-backdrop`,`media-lightbox-backdrop`),onMouseDown:g,children:(0,c.jsx)(`div`,{className:`media-lightbox-shell`,role:`dialog`,"aria-modal":`true`,"aria-label":_,children:(0,c.jsx)(`div`,{className:`media-lightbox-stage`,children:(0,c.jsxs)(`div`,{ref:p,className:`media-lightbox-frame`,children:[(0,c.jsxs)(`div`,{className:`media-lightbox-topbar`,children:[(0,c.jsx)(o.s,{color:`dark`,size:`md`,rounded:!0,className:`media-lightbox-counter`,children:r.length>1?`${l+1} / ${r.length}`:`Preview`}),(0,c.jsx)(a.t,{type:`button`,variant:`ghost`,color:`error`,size:`lg`,shape:`circle`,iconOnly:!0,className:`media-lightbox-action`,"aria-label":`Close preview`,onClick:u,children:(0,c.jsx)(t.Li,{})})]}),(0,c.jsx)(a.t,{type:`button`,variant:`ghost`,color:`primary`,size:`lg`,shape:`circle`,iconOnly:!0,className:`media-lightbox-nav media-lightbox-nav-prev`,"aria-label":`Previous image`,disabled:r.length<=1||!m,onClick:()=>m&&d(l-1),children:(0,c.jsx)(t.Fi,{})}),(0,c.jsx)(`img`,{className:`media-lightbox-image`,src:f.src,alt:f.alt||``}),(0,c.jsx)(a.t,{type:`button`,variant:`ghost`,color:`primary`,size:`lg`,shape:`circle`,iconOnly:!0,className:`media-lightbox-nav media-lightbox-nav-next`,"aria-label":`Next image`,disabled:r.length<=1||!h,onClick:()=>h&&d(l+1),children:(0,c.jsx)(t.Pi,{})}),f.caption||f.alt?(0,c.jsx)(o.s,{color:`dark`,size:`sm`,rounded:!0,className:`media-lightbox-caption`,children:f.caption||f.alt}):null]})})})})})}var u=new Map;function d(e,t,n){let r=u.get(e);return r||(r=new Map,u.set(e,r)),r.set(t,{id:t,...n}),()=>{let n=u.get(e);n&&(n.delete(t),n.size===0&&u.delete(e))}}function f(e){return Array.from(u.get(e)?.values()??[])}function p(e){return e===`ripple`||e===`zoom-ripple`}function m(e){return e===`zoom`||e===`zoom-ripple`}function h(e){return e===`dim`}function g(e){return e===`zoom`||e===`zoom-dim`}function _(e){return e===`dim`||e===`zoom-dim`}var v={"1:1":`1 / 1`,"4:3":`4 / 3`,"16:9":`16 / 9`,"21:9":`21 / 9`};function y(e){if(e!=null)return typeof e==`number`?`${e}px`:e}function b({src:t,fit:i=`cover`,ratio:a=`auto`,width:u,height:p,hidden:m,rounded:h=!1,bordered:b=!1,shadow:x=!1,preview:S=!1,previewGroup:C,hoverEffect:w=`none`,clickEffect:ee=`none`,fallback:T,skeleton:E=!1,className:D,style:te,alt:O,onError:ne,...k}){let[A,j]=(0,s.useState)(!1),[M,N]=(0,s.useState)(!1),[P,F]=(0,s.useState)([]),[I,L]=(0,s.useState)(0),R=(0,s.useId)(),{effectClassName:re,effectLayer:z,handlePointerDown:B}=r.t({effect:E?`none`:ee}),V=e=>{T&&!A&&(j(!0),e.currentTarget.src=T),ne?.(e)},H=y(u),U=y(p),W=H!=null||U!=null,G=a!==`auto`&&!!v[a],K={};H!=null&&(K.width=H),U!=null&&(K.height=U);let q={...te,...G?{aspectRatio:v[a]}:null,...K},J=A&&T?T:t,Y=(0,s.useMemo)(()=>({src:J||``,alt:O??``,caption:typeof k.title==`string`?k.title:void 0}),[O,J,k.title]);if((0,s.useEffect)(()=>{if(!(!S||!C||!J))return d(C,R,Y)},[S,C,R,Y,J]),E)return(0,c.jsx)(o.t,{variant:`rectangle`,animate:`pulse`,className:n.t(`image-skeleton`,h&&`rounded`,b&&`bordered`,D),style:q,"aria-label":`Loading`,...e.r(m)});let X=()=>{if(!(!S||!J)){if(C){let e=f(C),t=e.findIndex(e=>e.id===R);if(e.length>0&&t>=0){F(e.map(({id:e,...t})=>t)),L(t),N(!0);return}}F([Y]),L(0),N(!0)}},Z=n.t(`image`,i,!z&&h&&`rounded`,!z&&b&&`bordered`,!z&&x&&`shadow`),ie=G||W||!!z||S||w!==`none`,Q=n.t(`image-wrap`,G&&`has-ratio`,W&&`has-size`,h&&`rounded`,b&&`bordered`,x&&`shadow`,S&&`preview`,g(w)&&`effect-zoom`,_(w)&&`effect-dim`,re,D),$=(0,c.jsx)(`img`,{className:Z,onError:V,src:J,...k,alt:O??``});return ie?(0,c.jsxs)(c.Fragment,{children:[S?(0,c.jsxs)(`button`,{type:`button`,className:n.t(Q,`image-button`),"aria-label":`Preview ${O||`image`}`,onClick:X,onPointerDown:z?B:void 0,disabled:!J,...e.r(m),style:q,children:[z,$]}):(0,c.jsxs)(`span`,{className:Q,onPointerDown:z?B:void 0,...e.r(m),style:q,children:[z,$]}),(0,c.jsx)(l,{open:M,items:P,activeIndex:I,onActiveIndexChange:L,onClose:()=>N(!1)})]}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(`img`,{className:n.t(Z,D),style:q,onError:V,src:J,...e.r(m),...k,alt:O??``}),(0,c.jsx)(l,{open:M,items:P,activeIndex:I,onActiveIndexChange:L,onClose:()=>N(!1)})]})}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return b}});
|
|
2
|
-
//# sourceMappingURL=MImage-BZ6SrSao.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MImage-BZ6SrSao.cjs","names":[],"sources":["../src/components/media/MMediaLightbox/MMediaLightbox.tsx","../src/components/media/mediaPreviewRegistry.ts","../src/components/media/mediaInteraction.ts","../src/components/media/MImage/MImage.tsx"],"sourcesContent":["import {useEffect, useRef} from 'react'\nimport type {MouseEvent} from 'react'\nimport {MButton} from '../../controls'\nimport {MBadge} from '../../feedback'\nimport {MPortal} from '../../primitives'\nimport {MCloseIcon, MChevronLeftIcon, MChevronRightIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MMediaLightbox.css'\n\nexport interface MMediaLightboxItem {\n src: string\n alt?: string\n caption?: string\n}\n\ninterface MMediaLightboxProps {\n open: boolean\n items: MMediaLightboxItem[]\n activeIndex: number\n onClose: () => void\n onActiveIndexChange: (index: number) => void\n}\n\nexport function MMediaLightbox({open, items, activeIndex, onClose, onActiveIndexChange}: MMediaLightboxProps) {\n const currentItem = items[activeIndex]\n const frameRef = useRef<HTMLDivElement | null>(null)\n const canGoPrev = activeIndex > 0\n const canGoNext = activeIndex < items.length - 1\n\n useEffect(() => {\n if (!open) {\n return\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onClose()\n return\n }\n\n if (event.key === 'ArrowLeft' && canGoPrev) {\n onActiveIndexChange(activeIndex - 1)\n }\n\n if (event.key === 'ArrowRight' && canGoNext) {\n onActiveIndexChange(activeIndex + 1)\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [activeIndex, canGoNext, canGoPrev, onActiveIndexChange, onClose, open])\n\n useEffect(() => {\n if (!open) {\n return\n }\n\n const previousOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n\n return () => {\n document.body.style.overflow = previousOverflow\n }\n }, [open])\n\n if (!open || !currentItem) {\n return null\n }\n\n const handleBackdropMouseDown = (event: MouseEvent<HTMLDivElement>) => {\n const target = event.target as Node | null\n\n if (target && frameRef.current && !frameRef.current.contains(target)) {\n onClose()\n }\n }\n\n const previewLabel = currentItem.alt || currentItem.caption || 'Image preview'\n\n return (\n <MPortal>\n <div className={cn('mineral-backdrop', 'media-lightbox-backdrop')} onMouseDown={handleBackdropMouseDown}>\n <div className=\"media-lightbox-shell\" role=\"dialog\" aria-modal=\"true\" aria-label={previewLabel}>\n <div className=\"media-lightbox-stage\">\n <div ref={frameRef} className=\"media-lightbox-frame\">\n <div className=\"media-lightbox-topbar\">\n <MBadge color=\"dark\" size=\"md\" rounded className=\"media-lightbox-counter\">\n {items.length > 1 ? `${activeIndex + 1} / ${items.length}` : 'Preview'}\n </MBadge>\n <MButton\n type=\"button\"\n variant=\"ghost\"\n color=\"error\"\n size=\"lg\"\n shape=\"circle\"\n iconOnly\n className=\"media-lightbox-action\"\n aria-label=\"Close preview\"\n onClick={onClose}\n >\n <MCloseIcon />\n </MButton>\n </div>\n\n <MButton\n type=\"button\"\n variant=\"ghost\"\n color=\"primary\"\n size=\"lg\"\n shape=\"circle\"\n iconOnly\n className=\"media-lightbox-nav media-lightbox-nav-prev\"\n aria-label=\"Previous image\"\n disabled={items.length <= 1 || !canGoPrev}\n onClick={() => canGoPrev && onActiveIndexChange(activeIndex - 1)}\n >\n <MChevronLeftIcon />\n </MButton>\n\n <img className=\"media-lightbox-image\" src={currentItem.src} alt={currentItem.alt || ''} />\n\n <MButton\n type=\"button\"\n variant=\"ghost\"\n color=\"primary\"\n size=\"lg\"\n shape=\"circle\"\n iconOnly\n className=\"media-lightbox-nav media-lightbox-nav-next\"\n aria-label=\"Next image\"\n disabled={items.length <= 1 || !canGoNext}\n onClick={() => canGoNext && onActiveIndexChange(activeIndex + 1)}\n >\n <MChevronRightIcon />\n </MButton>\n\n {currentItem.caption || currentItem.alt ? (\n <MBadge color=\"dark\" size=\"sm\" rounded className=\"media-lightbox-caption\">\n {currentItem.caption || currentItem.alt}\n </MBadge>\n ) : null}\n </div>\n </div>\n </div>\n </div>\n </MPortal>\n )\n}\n","import type {MMediaLightboxItem} from './MMediaLightbox/MMediaLightbox'\n\ninterface MMediaPreviewRegistryItem extends MMediaLightboxItem {\n id: string\n}\n\nconst previewGroups = new Map<string, Map<string, MMediaPreviewRegistryItem>>()\n\nexport function registerMediaPreviewItem(group: string, id: string, item: MMediaLightboxItem) {\n let groupItems = previewGroups.get(group)\n\n if (!groupItems) {\n groupItems = new Map()\n previewGroups.set(group, groupItems)\n }\n\n groupItems.set(id, {id, ...item})\n\n return () => {\n const currentGroupItems = previewGroups.get(group)\n if (!currentGroupItems) {\n return\n }\n\n currentGroupItems.delete(id)\n\n if (currentGroupItems.size === 0) {\n previewGroups.delete(group)\n }\n }\n}\n\nexport function getMediaPreviewGroupItems(group: string) {\n return Array.from(previewGroups.get(group)?.values() ?? [])\n}\n","import type {MClickEffect} from '../../utils/useInteractionEffect'\n\nexport type MMediaInteractionEffect = MClickEffect | 'zoom' | 'dim' | 'zoom-ripple'\nexport type MMediaHoverEffect = 'none' | 'zoom' | 'dim' | 'zoom-dim'\n\nexport function usesRipple(effect: MMediaInteractionEffect): boolean {\n return effect === 'ripple' || effect === 'zoom-ripple'\n}\n\nexport function usesZoom(effect: MMediaInteractionEffect): boolean {\n return effect === 'zoom' || effect === 'zoom-ripple'\n}\n\nexport function usesDim(effect: MMediaInteractionEffect): boolean {\n return effect === 'dim'\n}\n\nexport function usesHoverZoom(effect: MMediaHoverEffect): boolean {\n return effect === 'zoom' || effect === 'zoom-dim'\n}\n\nexport function usesHoverDim(effect: MMediaHoverEffect): boolean {\n return effect === 'dim' || effect === 'zoom-dim'\n}\n","import {useEffect, useId, useMemo, useState} from 'react'\nimport type * as React from 'react'\nimport type {CSSProperties} from 'react'\nimport type {MImageProps, MImageSize} from './MImage.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {MSkeleton} from '../../feedback'\nimport {MMediaLightbox} from '../MMediaLightbox/MMediaLightbox'\nimport {getMediaPreviewGroupItems, registerMediaPreviewItem} from '../mediaPreviewRegistry'\nimport {usesHoverDim, usesHoverZoom} from '../mediaInteraction'\nimport './MImage.css'\n\nconst RATIO_MAP: Record<string, string> = {\n '1:1': '1 / 1',\n '4:3': '4 / 3',\n '16:9': '16 / 9',\n '21:9': '21 / 9',\n}\n\nfunction toCssSize(value: MImageSize | undefined): string | undefined {\n if (value == null) return undefined\n return typeof value === 'number' ? `${value}px` : value\n}\n\n// Render a styled image with aspect ratio, fit, and optional fallback.\nexport function MImage({\n src,\n fit = 'cover',\n ratio = 'auto',\n width,\n height,\n hidden,\n rounded = false,\n bordered = false,\n shadow = false,\n preview = false,\n previewGroup,\n hoverEffect = 'none',\n clickEffect = 'none',\n fallback,\n skeleton = false,\n className,\n style,\n alt,\n onError,\n ...rest\n}: MImageProps) {\n const [errored, setErrored] = useState(false)\n const [previewOpen, setPreviewOpen] = useState(false)\n const [previewItems, setPreviewItems] = useState<Array<{src: string; alt?: string; caption?: string}>>([])\n const [previewIndex, setPreviewIndex] = useState(0)\n const previewId = useId()\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLElement>({\n effect: skeleton ? 'none' : clickEffect,\n })\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n if (fallback && !errored) {\n setErrored(true)\n e.currentTarget.src = fallback\n }\n onError?.(e)\n }\n\n const widthValue = toCssSize(width)\n const heightValue = toCssSize(height)\n const hasExplicitSize = widthValue != null || heightValue != null\n const hasFixedRatio = ratio !== 'auto' && !!RATIO_MAP[ratio]\n const sizeStyle: CSSProperties = {}\n if (widthValue != null) sizeStyle.width = widthValue\n if (heightValue != null) sizeStyle.height = heightValue\n const ratioStyle: CSSProperties = {\n ...style,\n ...(hasFixedRatio ? {aspectRatio: RATIO_MAP[ratio]} : null),\n ...sizeStyle,\n }\n const resolvedSrc = errored && fallback ? fallback : src\n const previewItem = useMemo(\n () => ({\n src: resolvedSrc || '',\n alt: alt ?? '',\n caption: typeof rest.title === 'string' ? rest.title : undefined,\n }),\n [alt, resolvedSrc, rest.title]\n )\n\n useEffect(() => {\n if (!preview || !previewGroup || !resolvedSrc) {\n return\n }\n\n return registerMediaPreviewItem(previewGroup, previewId, previewItem)\n }, [preview, previewGroup, previewId, previewItem, resolvedSrc])\n\n // Skeleton placeholder\n if (skeleton) {\n return (\n <MSkeleton\n variant=\"rectangle\"\n animate=\"pulse\"\n className={cn('image-skeleton', rounded && 'rounded', bordered && 'bordered', className)}\n style={ratioStyle}\n aria-label=\"Loading\"\n {...getHiddenProps(hidden)}\n />\n )\n }\n\n const openPreview = () => {\n if (!preview || !resolvedSrc) {\n return\n }\n\n if (previewGroup) {\n const groupItems = getMediaPreviewGroupItems(previewGroup)\n const currentIndex = groupItems.findIndex((item) => item.id === previewId)\n\n if (groupItems.length > 0 && currentIndex >= 0) {\n setPreviewItems(groupItems.map(({id, ...item}) => item))\n setPreviewIndex(currentIndex)\n setPreviewOpen(true)\n return\n }\n }\n\n setPreviewItems([previewItem])\n setPreviewIndex(0)\n setPreviewOpen(true)\n }\n\n const imgClassName = cn(\n 'image',\n fit,\n !effectLayer && rounded && 'rounded',\n !effectLayer && bordered && 'bordered',\n !effectLayer && shadow && 'shadow'\n )\n const usesWrapper = hasFixedRatio || hasExplicitSize || Boolean(effectLayer) || preview || hoverEffect !== 'none'\n const wrapperClassName = cn(\n 'image-wrap',\n hasFixedRatio && 'has-ratio',\n hasExplicitSize && 'has-size',\n rounded && 'rounded',\n bordered && 'bordered',\n shadow && 'shadow',\n preview && 'preview',\n usesHoverZoom(hoverEffect) && 'effect-zoom',\n usesHoverDim(hoverEffect) && 'effect-dim',\n effectClassName,\n className\n )\n const imageNode = <img className={imgClassName} onError={handleError} src={resolvedSrc} {...rest} alt={alt ?? ''} />\n\n if (usesWrapper) {\n return (\n <>\n {preview ? (\n <button\n type=\"button\"\n className={cn(wrapperClassName, 'image-button')}\n aria-label={`Preview ${alt || 'image'}`}\n onClick={openPreview}\n onPointerDown={effectLayer ? handlePointerDown : undefined}\n disabled={!resolvedSrc}\n {...getHiddenProps(hidden)}\n style={ratioStyle}\n >\n {effectLayer}\n {imageNode}\n </button>\n ) : (\n <span\n className={wrapperClassName}\n onPointerDown={effectLayer ? handlePointerDown : undefined}\n {...getHiddenProps(hidden)}\n style={ratioStyle}\n >\n {effectLayer}\n {imageNode}\n </span>\n )}\n\n <MMediaLightbox\n open={previewOpen}\n items={previewItems}\n activeIndex={previewIndex}\n onActiveIndexChange={setPreviewIndex}\n onClose={() => setPreviewOpen(false)}\n />\n </>\n )\n }\n\n return (\n <>\n <img\n className={cn(imgClassName, className)}\n style={ratioStyle}\n onError={handleError}\n src={resolvedSrc}\n {...getHiddenProps(hidden)}\n {...rest}\n alt={alt ?? ''}\n />\n\n <MMediaLightbox\n open={previewOpen}\n items={previewItems}\n activeIndex={previewIndex}\n onActiveIndexChange={setPreviewIndex}\n onClose={() => setPreviewOpen(false)}\n />\n </>\n )\n}\n"],"mappings":"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"}
|