@centreon/ui 25.9.0 → 25.9.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@centreon/ui",
3
- "version": "25.9.0",
3
+ "version": "25.9.2",
4
4
  "description": "Centreon UI Components",
5
5
  "scripts": {
6
6
  "update:deps": "pnpx npm-check-updates -i --format group",
@@ -106,7 +106,6 @@
106
106
  "storybook-dark-mode": "^4.0.2",
107
107
  "storybook-react-rsbuild": "^1.0.1",
108
108
  "style-dictionary": "^4.3.3",
109
- "tailwind": "^4.0.0",
110
109
  "tailwindcss": "^4.1.7",
111
110
  "ts-node": "^10.9.2",
112
111
  "use-resize-observer": "^9.1.0",
@@ -98,6 +98,7 @@ export type TextProps = {
98
98
  transparent?: boolean;
99
99
  value?: string;
100
100
  textFieldSlotsAndSlotProps?: TextFieldSlotsAndSlotProps<InputProps>;
101
+ forceUncontrolled?: boolean;
101
102
  } & Omit<TextFieldProps, 'variant' | 'size' | 'error'>;
102
103
 
103
104
  const TextField = forwardRef(
@@ -123,6 +124,7 @@ const TextField = forwardRef(
123
124
  containerClassName,
124
125
  type,
125
126
  textFieldSlotsAndSlotProps,
127
+ forceUncontrolled,
126
128
  ...rest
127
129
  }: TextProps,
128
130
  ref: React.ForwardedRef<HTMLDivElement>
@@ -141,7 +143,7 @@ const TextField = forwardRef(
141
143
  const tooltipTitle = displayErrorInTooltip && !isNil(error) ? error : '';
142
144
 
143
145
  const getValueProps = useCallback((): object => {
144
- if (debounced) {
146
+ if (debounced || forceUncontrolled) {
145
147
  return {};
146
148
  }
147
149
  if (defaultValue) {
@@ -149,7 +151,7 @@ const TextField = forwardRef(
149
151
  }
150
152
 
151
153
  return { value: innerValue };
152
- }, [innerValue, debounced, defaultValue]);
154
+ }, [innerValue, debounced, defaultValue, forceUncontrolled]);
153
155
 
154
156
  return (
155
157
  <Box
@@ -5,6 +5,7 @@ import { StylesProvider, createGenerateClassName } from '@mui/styles';
5
5
 
6
6
  import { QueryProvider, ThemeProvider } from '..';
7
7
  import SnackbarProvider from '../Snackbar/SnackbarProvider';
8
+ import { ThemeOptions } from '@mui/material';
8
9
 
9
10
  export interface ModuleProps {
10
11
  children: React.ReactElement;
@@ -12,6 +13,10 @@ export interface ModuleProps {
12
13
  queryClient?: QueryClient;
13
14
  seedName: string;
14
15
  store: ReturnType<typeof createStore>;
16
+ overrideTheme?: {
17
+ light: Partial<ThemeOptions>;
18
+ dark: Partial<ThemeOptions>;
19
+ };
15
20
  }
16
21
 
17
22
  const Module = ({
@@ -19,7 +24,8 @@ const Module = ({
19
24
  seedName,
20
25
  maxSnackbars = 3,
21
26
  store,
22
- queryClient
27
+ queryClient,
28
+ overrideTheme
23
29
  }: ModuleProps): JSX.Element => {
24
30
  const generateClassName = createGenerateClassName({
25
31
  seed: seedName
@@ -29,7 +35,7 @@ const Module = ({
29
35
  <QueryProvider queryClient={queryClient}>
30
36
  <JotaiProvider store={store}>
31
37
  <StylesProvider generateClassName={generateClassName}>
32
- <ThemeProvider>
38
+ <ThemeProvider overrideTheme={overrideTheme}>
33
39
  <SnackbarProvider maxSnackbars={maxSnackbars}>
34
40
  {children}
35
41
  </SnackbarProvider>
@@ -1,11 +1,12 @@
1
1
  import { useAtomValue } from 'jotai';
2
- import { equals } from 'ramda';
2
+ import { equals, mergeDeepRight } from 'ramda';
3
3
  import { CSSInterpolation } from 'tss-react';
4
4
 
5
5
  import {
6
6
  ButtonProps,
7
7
  InputBaseProps,
8
8
  ThemeProvider as MuiThemeProvider,
9
+ PaletteOptions,
9
10
  StyledEngineProvider,
10
11
  Theme,
11
12
  createTheme
@@ -26,7 +27,7 @@ import { ReactNode, useMemo } from 'react';
26
27
  import { getPalette } from './palettes';
27
28
 
28
29
  declare module '@mui/styles/defaultTheme' {
29
- interface DefaultTheme extends Theme { }
30
+ interface DefaultTheme extends Theme {}
30
31
  }
31
32
 
32
33
  declare module '@mui/material/TextField' {
@@ -198,14 +199,14 @@ export const getTheme = (mode: ThemeMode): ThemeOptions => ({
198
199
  styleOverrides: {
199
200
  root: ({ theme }) => ({
200
201
  '&:hover, &.Mui-selected, &.Mui-selected:hover, &.Mui-selected:focus':
201
- {
202
- background: equals(theme.palette.mode, ThemeMode.dark)
203
- ? theme.palette.primary.dark
204
- : theme.palette.primary.light,
205
- color: equals(theme.palette.mode, ThemeMode.dark)
206
- ? theme.palette.common.white
207
- : theme.palette.primary.main
208
- },
202
+ {
203
+ background: equals(theme.palette.mode, ThemeMode.dark)
204
+ ? theme.palette.primary.dark
205
+ : theme.palette.primary.light,
206
+ color: equals(theme.palette.mode, ThemeMode.dark)
207
+ ? theme.palette.common.white
208
+ : theme.palette.primary.main
209
+ },
209
210
  fontSize: theme.typography.body2.fontSize
210
211
  })
211
212
  }
@@ -222,12 +223,12 @@ export const getTheme = (mode: ThemeMode): ThemeOptions => ({
222
223
  styleOverrides: {
223
224
  root: ({ theme }) => ({
224
225
  [`[role="tooltip"] &, &.MuiMenu-paper, &.${autocompleteClasses.paper}`]:
225
- {
226
- backgroundColor: theme.palette.background.default,
227
- border: 'none',
228
- borderRadius: `${theme.shape.borderRadius}px`,
229
- boxShadow: theme.shadows[3]
230
- }
226
+ {
227
+ backgroundColor: theme.palette.background.default,
228
+ border: 'none',
229
+ borderRadius: `${theme.shape.borderRadius}px`,
230
+ boxShadow: theme.shadows[3]
231
+ }
231
232
  })
232
233
  }
233
234
  },
@@ -257,15 +258,23 @@ export const getTheme = (mode: ThemeMode): ThemeOptions => ({
257
258
 
258
259
  interface Props {
259
260
  children: ReactNode;
261
+ overrideTheme?: {
262
+ light: Partial<PaletteOptions>;
263
+ dark: Partial<PaletteOptions>;
264
+ };
260
265
  }
261
266
 
262
- const ThemeProvider = ({ children }: Props): JSX.Element => {
267
+ const ThemeProvider = ({ children, overrideTheme }: Props): JSX.Element => {
263
268
  const { themeMode } = useAtomValue(userAtom);
264
269
 
265
- const theme = useMemo(
266
- () => createTheme(getTheme(themeMode || ThemeMode.light)),
267
- [themeMode]
268
- );
270
+ const theme = useMemo(() => {
271
+ const overrideThemeByMode = overrideTheme?.[themeMode || 'light'];
272
+ return createTheme(
273
+ mergeDeepRight(getTheme(themeMode || ThemeMode.light), {
274
+ palette: overrideThemeByMode || {}
275
+ })
276
+ );
277
+ }, [themeMode, overrideTheme]);
269
278
 
270
279
  return (
271
280
  <StyledEngineProvider injectFirst enableCssLayer>