@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.
|
|
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
|
package/src/Module/index.tsx
CHANGED
|
@@ -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
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
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
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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
|
-
|
|
267
|
-
|
|
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>
|