@webpros/mui-theme 0.3.12 → 0.4.1

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.
Files changed (32) hide show
  1. package/dist/package.json +1 -2
  2. package/dist/src/components/data-display/Chip/Chip.theme.js +13 -0
  3. package/dist/src/components/data-display/Table/Table.theme.js +1 -1
  4. package/dist/src/components/inputs/Filter/Filter.js +2 -2
  5. package/dist/src/components/inputs/ToggleButton/ToggleButton.d.ts +10 -2
  6. package/dist/src/components/inputs/ToggleButton/ToggleButton.js +26 -3
  7. package/dist/src/components/inputs/ToggleButton/index.d.ts +1 -1
  8. package/dist/src/components/inputs/ToggleButton/index.js +2 -2
  9. package/dist/src/components/inputs/ToggleButtonGroup/ToggleButtonGroup.d.ts +12 -3
  10. package/dist/src/components/inputs/ToggleButtonGroup/ToggleButtonGroup.js +32 -3
  11. package/dist/src/components/inputs/ToggleButtonGroup/index.d.ts +1 -1
  12. package/dist/src/components/inputs/ToggleButtonGroup/index.js +2 -2
  13. package/dist/src/index.d.ts +3 -0
  14. package/dist/src/index.js +3 -0
  15. package/dist/src/tokens/ThemeColorTokens.d.ts +1 -0
  16. package/dist/src/tokens/ThemeColorTokens.js +16 -1
  17. package/dist/src/tokens/ThemeMode.d.ts +1 -1
  18. package/dist/src/tokens/ThemeScheme.d.ts +2 -0
  19. package/dist/src/tokens/ThemeScheme.js +2 -1
  20. package/dist/src/tokens/colors/Dark.js +92 -88
  21. package/dist/src/tokens/colors/Light.js +92 -88
  22. package/dist/src/tokens/colors/Wptk.d.ts +24 -0
  23. package/dist/src/tokens/colors/Wptk.js +1500 -0
  24. package/dist/src/tokens/colors/index.d.ts +1 -0
  25. package/dist/src/tokens/colors/index.js +1 -0
  26. package/dist/src/tokens/colors/stateLayers.d.ts +2 -0
  27. package/dist/src/utils/getMUIComponents.js +2 -2
  28. package/package.json +2 -3
  29. package/dist/src/components/inputs/ToggleButton/ToggleButton.theme.d.ts +0 -11
  30. package/dist/src/components/inputs/ToggleButton/ToggleButton.theme.js +0 -26
  31. package/dist/src/components/inputs/ToggleButtonGroup/ToggleButtonGroup.theme.d.ts +0 -11
  32. package/dist/src/components/inputs/ToggleButtonGroup/ToggleButtonGroup.theme.js +0 -18
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.3.12",
4
+ "version": "0.4.1",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -83,7 +83,6 @@
83
83
  "@storybook/addon-a11y": "^9.1.16",
84
84
  "@storybook/addon-docs": "^9.1.16",
85
85
  "@storybook/addon-onboarding": "^9.1.16",
86
- "@storybook/addon-themes": "^9.1.16",
87
86
  "@storybook/builder-vite": "^9.1.16",
88
87
  "@storybook/react-vite": "^9.1.16",
89
88
  "@stylistic/eslint-plugin": "^5.5.0",
@@ -48,6 +48,7 @@ export const getChip = (theme) => {
48
48
  const getStylesByColor = (color, viewContext) => {
49
49
  const chipColors = viewContext === 'inverse' ? inverseColorsMap[color] : colorsMap[color];
50
50
  return [
51
+ // Base styles for all chips
51
52
  {
52
53
  props: { color, viewContext },
53
54
  style: {
@@ -62,6 +63,12 @@ export const getChip = (theme) => {
62
63
  color: chipColors.baseColor.deleteIcon.hover,
63
64
  },
64
65
  },
66
+ },
67
+ },
68
+ // Interactive styles only for clickable chips
69
+ {
70
+ props: { color, viewContext, clickable: true },
71
+ style: {
65
72
  '&:hover': {
66
73
  background: chipColors.hover,
67
74
  },
@@ -104,6 +111,12 @@ export const getChip = (theme) => {
104
111
  color: chipColors.selectedColor.deleteIcon.hover,
105
112
  },
106
113
  },
114
+ },
115
+ },
116
+ // Interactive styles for selected + clickable chips
117
+ {
118
+ props: { color, viewContext, selected: true, clickable: true },
119
+ style: {
107
120
  '&:hover, &:focus, &:active': {
108
121
  background: chipColors.selectedColor.background,
109
122
  },
@@ -23,7 +23,7 @@ export const getTable = (theme) => {
23
23
  padding: 'checkbox',
24
24
  },
25
25
  style: {
26
- width: 38, // TODO: align with checbox width
26
+ width: 36,
27
27
  padding: 0,
28
28
  },
29
29
  },
@@ -4,7 +4,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
4
4
  import { useCallback } from 'react';
5
5
  import { Autocomplete, Box, IconButton, TextField, autocompleteClasses, } from '@mui/material';
6
6
  import { FunnelSimpleIcon } from '../../../icons/FunnelSimpleIcon';
7
- import { XIcon } from '../../../icons/XIcon';
7
+ import { CloseIcon } from '../../../icons/CloseIcon';
8
8
  const FILTER_SX = {
9
9
  '& .MuiAutocomplete-inputRoot': {
10
10
  flexWrap: 'nowrap',
@@ -75,7 +75,7 @@ export const Filter = (_a) => {
75
75
  var _a;
76
76
  const chips = (_a = params.InputProps) === null || _a === void 0 ? void 0 : _a.startAdornment;
77
77
  return (_jsx(TextField, Object.assign({}, params, { placeholder: placeholder, slotProps: {
78
- input: Object.assign(Object.assign({}, params.InputProps), { startAdornment: (_jsxs(_Fragment, { children: [_jsx(Box, { sx: FILTER_ICON_SX, children: _jsx(FunnelSimpleIcon, { size: 20 }) }), _jsx(Box, { sx: CHIPS_CONTAINER_SX, children: chips })] })), endAdornment: chips ? (_jsx(IconButton, { size: "small", onClick: handleClear, sx: CLEAR_BUTTON_SX, "aria-label": "Clear", children: _jsx(XIcon, { size: 16 }) })) : null }),
78
+ input: Object.assign(Object.assign({}, params.InputProps), { startAdornment: (_jsxs(_Fragment, { children: [_jsx(Box, { sx: FILTER_ICON_SX, children: _jsx(FunnelSimpleIcon, { size: 20 }) }), _jsx(Box, { sx: CHIPS_CONTAINER_SX, children: chips })] })), endAdornment: chips ? (_jsx(IconButton, { size: "small", onClick: handleClear, sx: CLEAR_BUTTON_SX, "aria-label": "Clear", children: _jsx(CloseIcon, { size: 16 }) })) : null }),
79
79
  } })));
80
80
  }, [placeholder, handleClear]);
81
81
  return (_jsx(Autocomplete, Object.assign({}, props, { multiple: true, size: size, value: value, onChange: onChange, filterSelectedOptions: filterSelectedOptions, forcePopupIcon: false, disableClearable: true, renderInput: renderInput !== null && renderInput !== void 0 ? renderInput : defaultRenderInput, slotProps: Object.assign(Object.assign({}, slotProps), { chip: {
@@ -1,3 +1,11 @@
1
- import './ToggleButton.theme';
2
- export declare const ToggleButton: import("@mui/material").ExtendButtonBase<import("@mui/material").ToggleButtonTypeMap<{}, "button">>;
1
+ import { ReactNode } from 'react';
2
+ import { IconButtonOwnProps } from '@mui/material';
3
+ import { ButtonOwnProps } from '@mui/material/Button';
4
+ type ToggleButtonProps = {
5
+ children: ReactNode;
6
+ value: string;
7
+ isIconButton?: boolean;
8
+ } & ButtonOwnProps & IconButtonOwnProps;
9
+ export declare const ToggleButton: ({ children, value, isIconButton, ...props }: ToggleButtonProps) => import("react/jsx-runtime").JSX.Element;
3
10
  export type ToggleButtonComponentType = typeof ToggleButton;
11
+ export {};
@@ -1,4 +1,27 @@
1
+ import { __rest } from "tslib";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
1
3
  // Copyright 2025 WebPros International GmbH. All rights reserved.
2
- import { ToggleButton as MuiToggleButton } from '@mui/material';
3
- import './ToggleButton.theme';
4
- export const ToggleButton = MuiToggleButton;
4
+ import { useContext } from 'react';
5
+ import { Button } from '../Button/Button';
6
+ import { ToggleContext } from '../ToggleButtonGroup/ToggleButtonGroup';
7
+ import { IconButton } from '@mui/material';
8
+ const isSelected = (btnValue, contextValue) => {
9
+ if (Array.isArray(contextValue)) {
10
+ return contextValue.includes(btnValue);
11
+ }
12
+ return btnValue === contextValue;
13
+ };
14
+ export const ToggleButton = (_a) => {
15
+ var { children, value, isIconButton = false } = _a, props = __rest(_a, ["children", "value", "isIconButton"]);
16
+ const { value: contextValue, handleToggle } = useContext(ToggleContext);
17
+ const isBtnSelected = isSelected(value, contextValue);
18
+ const toggleProps = {
19
+ 'aria-pressed': isBtnSelected,
20
+ onClick: handleToggle,
21
+ value: value,
22
+ };
23
+ const borderRadiusSX = {
24
+ borderRadius: isBtnSelected ? '17px' : '6px',
25
+ };
26
+ return isIconButton ? (_jsx(IconButton, Object.assign({}, toggleProps, props, { variant: "tonal", color: isBtnSelected ? 'primary' : 'default', sx: borderRadiusSX, children: children }))) : (_jsx(Button, Object.assign({}, toggleProps, props, { variant: "tonal", color: isBtnSelected ? 'primary' : 'default', sx: borderRadiusSX, children: children })));
27
+ };
@@ -1 +1 @@
1
- export * from './ToggleButton.theme';
1
+ export * from './ToggleButton';
@@ -1,2 +1,2 @@
1
- // Copyright 2025 WebPros International GmbH. All rights reserved.
2
- export * from './ToggleButton.theme';
1
+ // Copyright 2026 WebPros International GmbH. All rights reserved.
2
+ export * from './ToggleButton';
@@ -1,4 +1,13 @@
1
- import { ToggleButtonGroup as MuiToggleButtonGroup } from '@mui/material';
2
- import './ToggleButtonGroup.theme';
3
- export declare const ToggleButtonGroup: typeof MuiToggleButtonGroup;
1
+ import { ReactNode } from 'react';
2
+ type ToggleButtonGroupProps = {
3
+ children: ReactNode;
4
+ multiple?: boolean;
5
+ };
6
+ export type ToggleContextType = {
7
+ value: string | Array<string>;
8
+ handleToggle: React.MouseEventHandler;
9
+ };
10
+ export declare const ToggleContext: import("react").Context<ToggleContextType>;
11
+ export declare const ToggleButtonGroup: ({ children, multiple }: ToggleButtonGroupProps) => import("react/jsx-runtime").JSX.Element;
4
12
  export type ToggleButtonGroupComponentType = typeof ToggleButtonGroup;
13
+ export {};
@@ -1,4 +1,33 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
1
2
  // Copyright 2025 WebPros International GmbH. All rights reserved.
2
- import { ToggleButtonGroup as MuiToggleButtonGroup } from '@mui/material';
3
- import './ToggleButtonGroup.theme';
4
- export const ToggleButtonGroup = MuiToggleButtonGroup;
3
+ import { Box } from '@mui/material';
4
+ import { createContext, useState } from 'react';
5
+ export const ToggleContext = createContext({
6
+ value: '',
7
+ handleToggle: () => { },
8
+ });
9
+ const toggleGroupSX = {
10
+ borderRadius: '50px',
11
+ overflow: 'clip',
12
+ display: 'inline-flex',
13
+ gap: 0.25,
14
+ width: 'fit-content',
15
+ };
16
+ export const ToggleButtonGroup = ({ children, multiple = false }) => {
17
+ const [value, setValue] = useState(multiple ? [] : '');
18
+ const handleToggle = (e) => {
19
+ const clickedValue = e.currentTarget.value;
20
+ if (Array.isArray(value)) {
21
+ const newValue = value.includes(clickedValue)
22
+ ? value.filter((item) => item !== clickedValue)
23
+ : [...value, clickedValue];
24
+ setValue(newValue);
25
+ }
26
+ else {
27
+ setValue(clickedValue);
28
+ }
29
+ e.currentTarget.blur();
30
+ };
31
+ const toggleContextValue = { value, handleToggle };
32
+ return (_jsx(ToggleContext.Provider, { value: toggleContextValue, children: _jsx(Box, { sx: toggleGroupSX, children: children }) }));
33
+ };
@@ -1 +1 @@
1
- export * from './ToggleButtonGroup.theme';
1
+ export * from './ToggleButtonGroup';
@@ -1,2 +1,2 @@
1
- // Copyright 2025 WebPros International GmbH. All rights reserved.
2
- export * from './ToggleButtonGroup.theme';
1
+ // Copyright 2026 WebPros International GmbH. All rights reserved.
2
+ export * from './ToggleButtonGroup';
@@ -1,6 +1,9 @@
1
1
  export { default as WebProsMuiThemeProvider } from './providers/WebProsMuiThemeProvider';
2
2
  export type { WebProsMuiThemeProviderProps } from './providers/WebProsMuiThemeProvider';
3
3
  export { useThemeModeContext } from './providers/ThemeModeProvider';
4
+ export { ToggleButtonGroup } from './components/inputs/ToggleButtonGroup';
5
+ export { ToggleButton } from './components/inputs/ToggleButton';
6
+ export { Filter } from './components/inputs/Filter';
4
7
  export * from './utils';
5
8
  export * from './tokens';
6
9
  export * from './constants';
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
3
  export { useThemeModeContext } from './providers/ThemeModeProvider';
4
+ export { ToggleButtonGroup } from './components/inputs/ToggleButtonGroup';
5
+ export { ToggleButton } from './components/inputs/ToggleButton';
6
+ export { Filter } from './components/inputs/Filter';
4
7
  export * from './utils';
5
8
  export * from './tokens';
6
9
  export * from './constants';
@@ -15,3 +15,4 @@ export type ThemeColorTokens = {
15
15
  };
16
16
  export declare const LightTokensDefault: ThemeColorTokens;
17
17
  export declare const DarkTokensDefault: ThemeColorTokens;
18
+ export declare const WptkTokensDefault: ThemeColorTokens;
@@ -1,5 +1,5 @@
1
1
  // Copyright 2025 WebPros International GmbH. All rights reserved.
2
- import { DarkSchemes, DarkSchemesGenerated, DarkStateLayers, DarkStateLayersGenerated, DarkInverseSchemes, DarkInverseSchemesGenerated, DarkInverseStateLayers, DarkInverseStateLayersGenerated, DarkOnPrimarySchemes, DarkOnPrimarySchemesGenerated, DarkOnPrimaryStateLayers, DarkOnPrimaryStateLayersGenerated, LightSchemes, LightSchemesGenerated, LightStateLayers, LightStateLayersGenerated, LightInverseSchemes, LightInverseSchemesGenerated, LightInverseStateLayers, LightInverseStateLayersGenerated, LightOnPrimarySchemes, LightOnPrimarySchemesGenerated, LightOnPrimaryStateLayers, LightOnPrimaryStateLayersGenerated, } from '../tokens/colors';
2
+ import { DarkSchemes, DarkSchemesGenerated, DarkStateLayers, DarkStateLayersGenerated, DarkInverseSchemes, DarkInverseSchemesGenerated, DarkInverseStateLayers, DarkInverseStateLayersGenerated, DarkOnPrimarySchemes, DarkOnPrimarySchemesGenerated, DarkOnPrimaryStateLayers, DarkOnPrimaryStateLayersGenerated, LightSchemes, LightSchemesGenerated, LightStateLayers, LightStateLayersGenerated, LightInverseSchemes, LightInverseSchemesGenerated, LightInverseStateLayers, LightInverseStateLayersGenerated, LightOnPrimarySchemes, LightOnPrimarySchemesGenerated, LightOnPrimaryStateLayers, LightOnPrimaryStateLayersGenerated, WptkSchemes, WptkSchemesGenerated, WptkStateLayers, WptkStateLayersGenerated, WptkInverseSchemes, WptkInverseSchemesGenerated, WptkInverseStateLayers, WptkInverseStateLayersGenerated, WptkOnPrimarySchemes, WptkOnPrimarySchemesGenerated, WptkOnPrimaryStateLayers, WptkOnPrimaryStateLayersGenerated, } from '../tokens/colors';
3
3
  // reference
4
4
  export const LightTokensDefault = {
5
5
  schemes: LightSchemes,
@@ -31,3 +31,18 @@ export const DarkTokensDefault = {
31
31
  generatedOnPrimarySchemes: DarkOnPrimarySchemesGenerated,
32
32
  generatedOnPrimaryStateLayers: DarkOnPrimaryStateLayersGenerated,
33
33
  };
34
+ // WPTK theme
35
+ export const WptkTokensDefault = {
36
+ schemes: WptkSchemes,
37
+ stateLayers: WptkStateLayers,
38
+ inverseSchemes: WptkInverseSchemes,
39
+ inverseStateLayers: WptkInverseStateLayers,
40
+ onPrimarySchemes: WptkOnPrimarySchemes,
41
+ onPrimaryStateLayers: WptkOnPrimaryStateLayers,
42
+ generatedSchemes: WptkSchemesGenerated,
43
+ generatedStateLayers: WptkStateLayersGenerated,
44
+ generatedInverseSchemes: WptkInverseSchemesGenerated,
45
+ generatedInverseStateLayers: WptkInverseStateLayersGenerated,
46
+ generatedOnPrimarySchemes: WptkOnPrimarySchemesGenerated,
47
+ generatedOnPrimaryStateLayers: WptkOnPrimaryStateLayersGenerated,
48
+ };
@@ -1 +1 @@
1
- export type ThemeMode = 'light' | 'dark';
1
+ export type ThemeMode = 'light' | 'dark' | 'wptk';
@@ -2,8 +2,10 @@ import { ThemeColorTokens } from './ThemeColorTokens';
2
2
  export type ThemeScheme = {
3
3
  light: ThemeColorTokens;
4
4
  dark: ThemeColorTokens;
5
+ wptk: ThemeColorTokens;
5
6
  };
6
7
  export declare const ThemeSchemeDefault: {
7
8
  light: ThemeColorTokens;
8
9
  dark: ThemeColorTokens;
10
+ wptk: ThemeColorTokens;
9
11
  };
@@ -1,6 +1,7 @@
1
1
  // Copyright 2025 WebPros International GmbH. All rights reserved.
2
- import { DarkTokensDefault, LightTokensDefault } from './ThemeColorTokens';
2
+ import { DarkTokensDefault, LightTokensDefault, WptkTokensDefault, } from './ThemeColorTokens';
3
3
  export const ThemeSchemeDefault = {
4
4
  light: LightTokensDefault,
5
5
  dark: DarkTokensDefault,
6
+ wptk: WptkTokensDefault,
6
7
  };