@webpros/mui-theme 0.4.12 → 0.5.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/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@webpros/mui-theme",
3
3
  "description": "MUI v7 theme for WebPros products",
4
- "version": "0.4.12",
4
+ "version": "0.5.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -0,0 +1,3 @@
1
+ import { ThemeMode } from '../tokens/ThemeMode';
2
+ export declare const THEME_MODE_KEY = "ThemeModeKey";
3
+ export declare const useLocalStorageThemeMode: () => readonly [ThemeMode, () => void, import("react").Dispatch<import("react").SetStateAction<ThemeMode>>];
@@ -2,8 +2,7 @@
2
2
  import { useMediaQuery } from '@mui/material';
3
3
  import { useLocalStorage } from 'usehooks-ts';
4
4
  export const THEME_MODE_KEY = 'ThemeModeKey';
5
- // TODO get rid of this hook, as the theme shouldn't have any knowledge of the mode
6
- export const useThemeMode = () => {
5
+ export const useLocalStorageThemeMode = () => {
7
6
  const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
8
7
  const [value, setValue] = useLocalStorage(THEME_MODE_KEY, prefersDarkMode ? 'dark' : 'light');
9
8
  const toggleTheme = () => {
@@ -1,6 +1,10 @@
1
1
  export { default as WebProsMuiThemeProvider } from './providers/WebProsMuiThemeProvider';
2
+ export { default as ThemeModeProvider } from './providers/ThemeModeProvider';
3
+ export { ThemeModeContext, useThemeModeContext } from './providers/ThemeModeProvider';
4
+ export type { ThemeModeContextType, ThemeModeProviderProps } from './providers/ThemeModeProvider';
5
+ export { default as LocalStorageThemeModeProvider } from './providers/LocalStorageThemeModeProvider';
6
+ export { useLocalStorageThemeMode, THEME_MODE_KEY } from './hooks/useLocalStorageThemeMode';
2
7
  export type { WebProsMuiThemeProviderProps } from './providers/WebProsMuiThemeProvider';
3
- export { useThemeModeContext } from './providers/ThemeModeProvider';
4
8
  export { ToggleButtonGroup } from './components/inputs/ToggleButtonGroup';
5
9
  export { ToggleButton } from './components/inputs/ToggleButton';
6
10
  export { Filter } from './components/inputs/Filter';
package/dist/src/index.js CHANGED
@@ -1,6 +1,9 @@
1
1
  // Copyright 2025 WebPros International GmbH. All rights reserved.
2
2
  export { default as WebProsMuiThemeProvider } from './providers/WebProsMuiThemeProvider';
3
- export { useThemeModeContext } from './providers/ThemeModeProvider';
3
+ export { default as ThemeModeProvider } from './providers/ThemeModeProvider';
4
+ export { ThemeModeContext, useThemeModeContext } from './providers/ThemeModeProvider';
5
+ export { default as LocalStorageThemeModeProvider } from './providers/LocalStorageThemeModeProvider';
6
+ export { useLocalStorageThemeMode, THEME_MODE_KEY } from './hooks/useLocalStorageThemeMode';
4
7
  export { ToggleButtonGroup } from './components/inputs/ToggleButtonGroup';
5
8
  export { ToggleButton } from './components/inputs/ToggleButton';
6
9
  export { Filter } from './components/inputs/Filter';
@@ -0,0 +1,5 @@
1
+ export type LocalStorageThemeModeProviderProps = {
2
+ children?: React.ReactNode;
3
+ };
4
+ declare const LocalStorageThemeModeProvider: ({ children }: LocalStorageThemeModeProviderProps) => import("react/jsx-runtime").JSX.Element;
5
+ export default LocalStorageThemeModeProvider;
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // Copyright 2025 WebPros International GmbH. All rights reserved.
3
+ import { useMemo } from 'react';
4
+ import { useLocalStorageThemeMode } from '../hooks/useLocalStorageThemeMode';
5
+ import { ThemeModeProvider } from '../index';
6
+ const LocalStorageThemeModeProvider = ({ children }) => {
7
+ const [value, toggleTheme, setValue] = useLocalStorageThemeMode();
8
+ const contextValue = useMemo(() => ({
9
+ themeMode: value,
10
+ toggleTheme,
11
+ setThemeMode: setValue,
12
+ }), [value, toggleTheme, setValue]);
13
+ return _jsx(ThemeModeProvider, Object.assign({}, contextValue, { children: children }));
14
+ };
15
+ export default LocalStorageThemeModeProvider;
@@ -6,8 +6,11 @@ export type ThemeModeContextType = {
6
6
  };
7
7
  export type ThemeModeProviderProps = {
8
8
  children?: React.ReactNode;
9
+ themeMode?: ThemeMode;
10
+ toggleTheme?: () => void;
11
+ setThemeMode?: (mode: ThemeMode) => void;
9
12
  };
10
13
  export declare const ThemeModeContext: import("react").Context<ThemeModeContextType>;
11
- declare const ThemeModeProvider: ({ children }: ThemeModeProviderProps) => import("react/jsx-runtime").JSX.Element;
14
+ declare const ThemeModeProvider: ({ children, themeMode, toggleTheme, setThemeMode, }: ThemeModeProviderProps) => import("react/jsx-runtime").JSX.Element;
12
15
  export default ThemeModeProvider;
13
16
  export declare const useThemeModeContext: () => ThemeModeContextType;
@@ -1,15 +1,17 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // Copyright 2025 WebPros International GmbH. All rights reserved.
3
3
  import { createContext, useContext, useMemo } from 'react';
4
- import { useThemeMode } from '../hooks/useThemeMode';
5
4
  export const ThemeModeContext = createContext({
6
5
  themeMode: 'light',
7
6
  toggleTheme: () => { },
8
7
  setThemeMode: () => { },
9
8
  });
10
- const ThemeModeProvider = ({ children }) => {
11
- const [themeMode, toggleTheme, setThemeMode] = useThemeMode();
12
- const value = useMemo(() => ({ themeMode, toggleTheme, setThemeMode }), [themeMode, toggleTheme, setThemeMode]);
9
+ const ThemeModeProvider = ({ children, themeMode = 'light', toggleTheme, setThemeMode, }) => {
10
+ const value = useMemo(() => ({
11
+ themeMode,
12
+ toggleTheme: toggleTheme !== null && toggleTheme !== void 0 ? toggleTheme : (() => { }),
13
+ setThemeMode: setThemeMode !== null && setThemeMode !== void 0 ? setThemeMode : (() => { }),
14
+ }), [themeMode, toggleTheme, setThemeMode]);
13
15
  return _jsx(ThemeModeContext.Provider, { value: value, children: children });
14
16
  };
15
17
  export default ThemeModeProvider;
@@ -1,10 +1,8 @@
1
1
  import { Localization } from '@mui/material/locale';
2
- import { ThemeMode } from '../tokens/ThemeMode';
3
2
  import { ThemeOptions, Theme } from '@mui/material';
4
3
  import { M3Components } from '../utils';
5
4
  export type WebProsMuiThemeProviderProps = {
6
5
  children?: React.ReactNode;
7
- themeMode?: ThemeMode;
8
6
  localization?: Localization;
9
7
  /**
10
8
  * Modifier function to customize theme foundation (palette, typography, spacing, etc.).
@@ -21,5 +19,5 @@ export type WebProsMuiThemeProviderProps = {
21
19
  */
22
20
  themeComponentsModifier?: (options: M3Components, theme: Theme) => M3Components;
23
21
  };
24
- declare const WebProsMuiThemeProvider: ({ children, localization, themeMode, themeOptionsModifier, themeComponentsModifier, }: WebProsMuiThemeProviderProps) => import("react/jsx-runtime").JSX.Element;
22
+ declare const WebProsMuiThemeProvider: ({ children, localization, themeOptionsModifier, themeComponentsModifier, }: WebProsMuiThemeProviderProps) => import("react/jsx-runtime").JSX.Element;
25
23
  export default WebProsMuiThemeProvider;
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import ThemeModeProvider from './ThemeModeProvider';
3
2
  import WebProsTheme from './WebProsTheme';
4
- const WebProsMuiThemeProvider = ({ children, localization, themeMode, themeOptionsModifier, themeComponentsModifier, }) => (_jsx(ThemeModeProvider, { children: _jsx(WebProsTheme, { mode: themeMode, localization: localization, themeOptionsModifier: themeOptionsModifier, themeComponentsModifier: themeComponentsModifier, children: children }) }));
3
+ const WebProsMuiThemeProvider = ({ children, localization, themeOptionsModifier, themeComponentsModifier, }) => (_jsx(WebProsTheme, { localization: localization, themeOptionsModifier: themeOptionsModifier, themeComponentsModifier: themeComponentsModifier, children: children }));
5
4
  export default WebProsMuiThemeProvider;
@@ -1,11 +1,9 @@
1
1
  import { ThemeOptions, Theme } from '@mui/material';
2
2
  import '../utils/getMUIThemeCustoimzationType';
3
3
  import { M3Components } from '../utils/getMUIComponents';
4
- import { ThemeMode } from '../tokens/ThemeMode';
5
4
  import { Localization } from '@mui/material/locale';
6
5
  type WebProsThemeProps = {
7
6
  children?: React.ReactNode;
8
- mode?: ThemeMode;
9
7
  localization?: Localization;
10
8
  /**
11
9
  * Modifier function for theme foundation (palette, typography, spacing, etc.).
@@ -24,5 +22,5 @@ type WebProsThemeProps = {
24
22
  */
25
23
  themeComponentsModifier?: (options: M3Components, theme: Theme) => M3Components;
26
24
  };
27
- export declare const WebProsTheme: ({ children, mode, localization, themeOptionsModifier, themeComponentsModifier, }: WebProsThemeProps) => import("react/jsx-runtime").JSX.Element;
25
+ export declare const WebProsTheme: ({ children, localization, themeOptionsModifier, themeComponentsModifier, }: WebProsThemeProps) => import("react/jsx-runtime").JSX.Element;
28
26
  export default WebProsTheme;
@@ -1,9 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // Copyright 2025 WebPros International GmbH. All rights reserved.
3
- import { useContext, useMemo } from 'react';
3
+ import { useMemo } from 'react';
4
4
  import { CssBaseline, createTheme, ThemeProvider } from '@mui/material';
5
5
  import { deepmerge } from '@mui/utils';
6
- import { ThemeModeContext } from '../providers/ThemeModeProvider';
7
6
  import '../utils/getMUIThemeCustoimzationType';
8
7
  import { getMUIPalette } from '../utils/getMUIPalette';
9
8
  import { getMUIComponents } from '../utils/getMUIComponents';
@@ -11,9 +10,9 @@ import { enUS } from '@mui/material/locale';
11
10
  import { patchMUIShadows } from '../utils/patchMUIShadows';
12
11
  import { ThemeSchemeDefault } from '../tokens/ThemeScheme';
13
12
  import { getMUITypography } from '../utils/getMUITypography';
14
- export const WebProsTheme = ({ children, mode, localization = enUS, themeOptionsModifier, themeComponentsModifier, }) => {
15
- const themeModeContext = useContext(ThemeModeContext);
16
- const themeMode = mode !== null && mode !== void 0 ? mode : themeModeContext.themeMode;
13
+ import { useThemeModeContext } from '../providers/ThemeModeProvider';
14
+ export const WebProsTheme = ({ children, localization = enUS, themeOptionsModifier, themeComponentsModifier, }) => {
15
+ const { themeMode } = useThemeModeContext();
17
16
  const webprosTheme = useMemo(() => {
18
17
  const typography = getMUITypography();
19
18
  const muiPalette = getMUIPalette(themeMode, ThemeSchemeDefault);
@@ -1,3 +1,4 @@
1
+ export type { ThemeMode } from './ThemeMode';
1
2
  export type { TypescaleTypographyVariants } from './typography';
2
3
  export { typographyVariants } from './typography';
3
4
  export type { M3ShadowLayer, M3ShadowTokenName, M3ShadowTokens } from './shadows';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@webpros/mui-theme",
3
3
  "description": "MUI v7 theme for WebPros products",
4
- "version": "0.4.12",
4
+ "version": "0.5.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -114,4 +114,4 @@
114
114
  "resolutions": {
115
115
  "react-is": "^18.3.1"
116
116
  }
117
- }
117
+ }
@@ -1,3 +0,0 @@
1
- import { ThemeMode } from '../tokens/ThemeMode';
2
- export declare const THEME_MODE_KEY = "ThemeModeKey";
3
- export declare const useThemeMode: () => readonly [ThemeMode, () => void, import("react").Dispatch<import("react").SetStateAction<ThemeMode>>];