@centreon/ui 25.10.22 → 25.10.24

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.10.22",
3
+ "version": "25.10.24",
4
4
  "description": "Centreon UI Components",
5
5
  "scripts": {
6
6
  "update:deps": "pnpx npm-check-updates -i --format group",
@@ -11,10 +11,11 @@ interface NamedEntity {
11
11
  }
12
12
 
13
13
  type Props = {
14
- create: () => void;
14
+ create?: () => void;
15
15
  elements: Array<NamedEntity>;
16
16
  goBack: () => void;
17
17
  isActive: (id: number | string) => boolean;
18
+ isDisabled?: (id: number | string) => boolean;
18
19
  labels: {
19
20
  create: string;
20
21
  goBack: string;
@@ -25,6 +26,7 @@ type Props = {
25
26
  export const PageQuickAccess = ({
26
27
  elements,
27
28
  isActive,
29
+ isDisabled,
28
30
  navigateToElement,
29
31
  goBack,
30
32
  create,
@@ -40,25 +42,23 @@ export const PageQuickAccess = ({
40
42
  <Menu.Item
41
43
  key={`${element.id}`}
42
44
  onClick={navigateToElement(element.id)}
43
- {...(isActive(element.id) && {
44
- isActive: true,
45
- isDisabled: true
46
- })}
45
+ isActive={isActive(element.id)}
46
+ isDisabled={isDisabled?.(element.id)}
47
47
  >
48
48
  {element.name}
49
49
  </Menu.Item>
50
50
  ))}
51
51
  <Menu.Divider key="divider" />
52
- <Menu.Item key="create">
53
- <>
54
- <Button
55
- icon={<ArrowBackIcon />}
56
- iconVariant="start"
57
- variant="ghost"
58
- onClick={goBack}
59
- >
60
- {t(labels.goBack)}
61
- </Button>
52
+ <div className="px-2 pb-2 flex gap-4">
53
+ <Button
54
+ icon={<ArrowBackIcon />}
55
+ iconVariant="start"
56
+ variant="ghost"
57
+ onClick={goBack}
58
+ >
59
+ {t(labels.goBack)}
60
+ </Button>
61
+ {create && (
62
62
  <Button
63
63
  icon={<AddIcon />}
64
64
  iconVariant="start"
@@ -67,8 +67,8 @@ export const PageQuickAccess = ({
67
67
  >
68
68
  {t(labels.create)}
69
69
  </Button>
70
- </>
71
- </Menu.Item>
70
+ )}
71
+ </div>
72
72
  </Menu.Items>
73
73
  </Menu>
74
74
  );
@@ -33,8 +33,6 @@ const MenuButton = ({
33
33
  className,
34
34
  ...attr
35
35
  }: MenuButtonProps): ReactElement => {
36
- const { cx, classes } = useStyles();
37
-
38
36
  const { isMenuOpen, setIsMenuOpen, setAnchorEl, onOpen } = useMenu();
39
37
 
40
38
  const onToggle = useCallback(
@@ -52,14 +50,18 @@ const MenuButton = ({
52
50
  <Button
53
51
  {...attr}
54
52
  aria-label={ariaLabel}
55
- className={cx(classes.menuButton, className)}
53
+ className={`${isMenuOpen ? 'bg-primary-main/8 text-text-primary-main' : 'text-text-secondary'} ${className}`}
56
54
  data-is-active={isMenuOpen}
57
55
  size={size}
58
56
  variant={variant}
59
57
  onClick={onToggle}
60
58
  >
61
59
  {children || <MenuIcon />}
62
- {hasArrow && <ArrowDropDownIcon className={classes.buttonIcon} />}
60
+ {hasArrow && (
61
+ <ArrowDropDownIcon
62
+ className={`transform-gpu transition-[rotate] ${isMenuOpen ? 'rotate-180' : 'rotate-0'}`}
63
+ />
64
+ )}
63
65
  </Button>
64
66
  );
65
67
  };
@@ -2,12 +2,8 @@ import { ReactElement } from 'react';
2
2
 
3
3
  import { Divider as MuiDivider } from '@mui/material';
4
4
 
5
- import { useStyles } from './Menu.styles';
6
-
7
5
  const MenuDivider = (): ReactElement => {
8
- const { classes } = useStyles();
9
-
10
- return <MuiDivider className={classes.menuDivider} />;
6
+ return <MuiDivider />;
11
7
  };
12
8
 
13
9
  export { MenuDivider };
@@ -2,8 +2,6 @@ import { ReactElement, ReactNode } from 'react';
2
2
 
3
3
  import { MenuItem as MuiMenuItem } from '@mui/material';
4
4
 
5
- import { useStyles } from './Menu.styles';
6
-
7
5
  type MenuItemProps = {
8
6
  children?: ReactNode;
9
7
  className?: string;
@@ -19,11 +17,9 @@ const MenuItem = ({
19
17
  isDisabled = false,
20
18
  className
21
19
  }: MenuItemProps): ReactElement => {
22
- const { cx, classes } = useStyles();
23
-
24
20
  return (
25
21
  <MuiMenuItem
26
- className={cx(classes.menuItem, className)}
22
+ className={className}
27
23
  data-is-active={isActive}
28
24
  data-is-disabled={isDisabled}
29
25
  disabled={isDisabled}
@@ -2,7 +2,6 @@ import { ReactElement, ReactNode } from 'react';
2
2
 
3
3
  import { Menu as MuiMenu } from '@mui/material';
4
4
 
5
- import { useStyles } from './Menu.styles';
6
5
  import { useMenu } from './useMenu';
7
6
 
8
7
  type MenuItemsProps = {
@@ -10,8 +9,6 @@ type MenuItemsProps = {
10
9
  className?: string;
11
10
  };
12
11
  const MenuItems = ({ children, className }: MenuItemsProps): ReactElement => {
13
- const { cx, classes } = useStyles();
14
-
15
12
  const { isMenuOpen, setIsMenuOpen, anchorEl, onClose } = useMenu();
16
13
 
17
14
  const onCloseMenu = (): void => {
@@ -22,7 +19,11 @@ const MenuItems = ({ children, className }: MenuItemsProps): ReactElement => {
22
19
  return (
23
20
  <MuiMenu
24
21
  anchorEl={anchorEl}
25
- className={cx(classes.menuItems, className)}
22
+ className={className}
23
+ classes={{
24
+ paper:
25
+ 'rounded-sm shadow-lg min-w-[240px] bg-background-paper border-1 border-divider'
26
+ }}
26
27
  open={isMenuOpen}
27
28
  variant="menu"
28
29
  onClick={onCloseMenu}
@@ -1,27 +0,0 @@
1
- import { makeStyles } from 'tss-react/mui';
2
-
3
- export const useStyles = makeStyles()((theme) => ({
4
- buttonIcon: {
5
- '[data-is-active="true"] &': {
6
- transform: 'rotate(180deg)'
7
- },
8
-
9
- fontSize: '1.25rem',
10
- transition: 'transform 0.15s ease-in-out'
11
- },
12
- menuButton: {
13
- '&:hover:not(&[data-is-active="true"])': {
14
- backgroundColor: theme.palette.menu.button.background.hover,
15
- color: theme.palette.menu.button.color.hover
16
- },
17
- '&[data-is-active="true"]': {
18
- backgroundColor: theme.palette.menu.button.background.active,
19
- color: theme.palette.menu.button.color.active
20
- },
21
- backgroundColor: theme.palette.menu.button.background.default,
22
- color: theme.palette.menu.button.color.default,
23
- display: 'flex',
24
- height: 'unset',
25
- minWidth: 'unset'
26
- }
27
- }));
@@ -1,68 +0,0 @@
1
- import { makeStyles } from 'tss-react/mui';
2
-
3
- export const useStyles = makeStyles()((theme) => ({
4
- menuDivider: {
5
- '&, &.MuiDivider-root': {
6
- borderColor: theme.palette.menu.divider.border
7
- }
8
- },
9
- menuItem: {
10
- '&, &.MuiMenuItem-root': {
11
- '& > button': {
12
- fontSize: '1rem',
13
- justifyContent: 'flex-start'
14
- },
15
-
16
- '&:has(button)': {
17
- '& > .MuiTouchRipple-root': {
18
- display: 'none'
19
- },
20
- '&:hover:not(&[data-is-active="true"])': {
21
- backgroundColor: 'unset'
22
- },
23
- padding: theme.spacing(0, 2)
24
- },
25
-
26
- '&:not(:has(button))': {
27
- '&:hover:not(&[data-is-active="true"])': {
28
- backgroundColor: theme.palette.menu.item.background.hover,
29
- color: theme.palette.menu.item.color.hover
30
- },
31
- '&[data-is-active="true"], &.Mui-selected': {
32
- '&[data-is-disabled="true"], &.Mui-disabled': {
33
- opacity: 1
34
- },
35
- backgroundColor: theme.palette.menu.item.background.active,
36
- color: theme.palette.menu.item.color.active,
37
- opacity: 1
38
- },
39
- '&[data-is-disabled="true"], &.Mui-disabled': {
40
- opacity: 0.5
41
- },
42
- backgroundColor: theme.palette.menu.item.background.default,
43
- color: theme.palette.menu.item.color.default,
44
- padding: theme.spacing(0.75, 2)
45
- },
46
-
47
- alignItems: 'center',
48
- display: 'flex',
49
- flexDirection: 'row',
50
- fontSize: '1rem',
51
- gap: theme.spacing(2),
52
- justifyContent: 'space-between',
53
- minHeight: 'unset'
54
- }
55
- },
56
- menuItems: {
57
- '& > .MuiPaper-root.MuiMenu-paper': {
58
- backgroundColor: theme.palette.menu.background,
59
- borderRadius: '4px',
60
- boxShadow: theme.shadows[8],
61
- minWidth: '240px',
62
- transform: `translateY(${theme.spacing(0.5)}) !important`
63
- },
64
- '& ul, & ul.MuiMenu-list': {
65
- padding: theme.spacing(1, 0)
66
- }
67
- }
68
- }));