@moderneinc/design-system-components 7.6.1-next.f065cb → 7.7.0-next.121d55

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 (82) hide show
  1. package/dist/ActivityHeader/ActivityHeader.d.ts +1 -1
  2. package/dist/ActivityIndicatorCell/ActivityIndicatorCell.d.ts +1 -1
  3. package/dist/Alert/Alert.d.ts +1 -1
  4. package/dist/Badge/Badge.d.ts +1 -1
  5. package/dist/Banner/Banner.d.ts +1 -1
  6. package/dist/Breadcrumbs/Breadcrumbs.d.ts +2 -2
  7. package/dist/Button/Button.d.ts +7 -5
  8. package/dist/ButtonTab/ButtonTab.d.ts +1 -1
  9. package/dist/ButtonTabGroup/ButtonTabGroup.d.ts +1 -1
  10. package/dist/CanceledIcon/CanceledIcon.d.ts +1 -1
  11. package/dist/Card/Card.d.ts +1 -1
  12. package/dist/Checkbox/Checkbox.d.ts +1 -1
  13. package/dist/CheckboxWithText/CheckboxWithText.d.ts +1 -1
  14. package/dist/CodeSnippet/CodeSnippet.d.ts +1 -1
  15. package/dist/DataGrid/DataGrid.d.ts +1 -1
  16. package/dist/DataGridCell/DataGridCell.d.ts +4 -4
  17. package/dist/DataGridColumnsButton/DataGridColumnsButton.d.ts +1 -1
  18. package/dist/DataGridColumnsPanel/DataGridColumnsPanel.d.ts +1 -1
  19. package/dist/DataGridFilterPanel/DataGridFilterPanel.d.ts +4 -4
  20. package/dist/DataGridFiltersButton/DataGridFiltersButton.d.ts +1 -1
  21. package/dist/DataGridHeaderCell/DataGridHeaderCell.d.ts +3 -3
  22. package/dist/DataGridHeaderLabel/DataGridHeaderLabel.d.ts +1 -1
  23. package/dist/DatePicker/DatePicker.d.ts +1 -1
  24. package/dist/DateTimeCell/DateTimeCell.d.ts +1 -1
  25. package/dist/Divider/Divider.d.ts +1 -1
  26. package/dist/Dot/Dot.d.ts +1 -1
  27. package/dist/DownloadToast/DownloadToast.d.ts +1 -1
  28. package/dist/DropdownInputField/DropdownInputField.d.ts +1 -1
  29. package/dist/EmptyState/EmptyState.d.ts +1 -1
  30. package/dist/FilledStatusIcons/FilledStatusIcons.d.ts +7 -7
  31. package/dist/FilterChip/FilterChip.d.ts +1 -1
  32. package/dist/Footer/Footer.d.ts +1 -1
  33. package/dist/GeneralAvatar/GeneralAvatar.d.ts +1 -1
  34. package/dist/IconButton/IconButton.d.ts +1 -1
  35. package/dist/IconWrapper/IconWrapper.d.ts +1 -1
  36. package/dist/InfiniteScrollGrid/InfiniteScrollGrid.d.ts +1 -1
  37. package/dist/InputField/InputField.d.ts +1 -1
  38. package/dist/LinkCell/LinkCell.d.ts +1 -1
  39. package/dist/ListItem/ListItem.d.ts +1 -1
  40. package/dist/ListItemButton/ListItemButton.d.ts +1 -1
  41. package/dist/LoadingSpinner/LoadingSpinner.d.ts +1 -1
  42. package/dist/Menu/Menu.d.ts +1 -1
  43. package/dist/MenuItem/MenuItem.d.ts +1 -1
  44. package/dist/ModActionsCell/ModActionsCell.d.ts +1 -1
  45. package/dist/ModAvatarCell/ModAvatarCell.d.ts +1 -1
  46. package/dist/ModIconCell/ModIconCell.d.ts +1 -1
  47. package/dist/ModLogoCell/ModLogoCell.d.ts +1 -1
  48. package/dist/ModProgressCell/ModProgressCell.d.ts +1 -1
  49. package/dist/ModStatusCell/ModStatusCell.d.ts +1 -1
  50. package/dist/Modal/Modal.d.ts +4 -4
  51. package/dist/NavIconButton/NavIconButton.d.ts +1 -1
  52. package/dist/NavigationAvatar/NavigationAvatar.d.ts +1 -1
  53. package/dist/NavigationItem/NavigationItem.d.ts +1 -1
  54. package/dist/PageContent/PageContent.d.ts +1 -1
  55. package/dist/PaginatedGrid/PaginatedGrid.d.ts +1 -1
  56. package/dist/ProgressSpinner/ProgressSpinner.d.ts +1 -1
  57. package/dist/Progressbar/Progressbar.d.ts +1 -1
  58. package/dist/QuickFilter/QuickFilter.d.ts +1 -1
  59. package/dist/Radio/Radio.d.ts +1 -1
  60. package/dist/SearchChip/SearchChip.d.ts +1 -1
  61. package/dist/Select/Select.d.ts +1 -1
  62. package/dist/SelectField/SelectField.d.ts +1 -1
  63. package/dist/SideNav/SideNav.d.ts +1 -1
  64. package/dist/Skeleton/Skeleton.d.ts +1 -1
  65. package/dist/TabPanel/TabPanel.d.ts +1 -1
  66. package/dist/Table/Table.d.ts +1 -1
  67. package/dist/Tabs/Tabs.d.ts +1 -1
  68. package/dist/Tag/Tag.d.ts +1 -1
  69. package/dist/Toast/Toast.d.ts +2 -2
  70. package/dist/Toggle/Toggle.d.ts +1 -1
  71. package/dist/ToggleButton/ToggleButton.d.ts +1 -1
  72. package/dist/ToggleButtonGroup/ToggleButtonGroup.d.ts +1 -1
  73. package/dist/Toolbar/Toolbar.d.ts +1 -1
  74. package/dist/Tooltip/Tooltip.d.ts +1 -1
  75. package/dist/Tree/Tree.d.ts +1 -1
  76. package/dist/TypologyControl/TypologyControl.d.ts +1 -1
  77. package/dist/index.d.ts +98 -98
  78. package/dist/index.esm.js +110 -68
  79. package/dist/index.esm.js.map +1 -1
  80. package/dist/index.js +136 -94
  81. package/dist/index.js.map +1 -1
  82. package/package.json +12 -12
package/dist/index.esm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { semanticColors, spacing, typography, borderRadius, shadows, colors, semanticColorsDark, semanticTypography, iconSize, height } from '@moderneinc/design-system-tokens';
2
+ import { semanticColors, spacing, typography, borderRadius, shadows, iconSize, colors, semanticColorsDark, semanticTypography, height } from '@moderneinc/design-system-tokens';
3
3
  import Box from '@mui/material/Box';
4
4
  import { styled, useTheme, alpha } from '@mui/material/styles';
5
5
  import Chip, { chipClasses } from '@mui/material/Chip';
@@ -9,9 +9,10 @@ import Alert, { alertClasses } from '@mui/material/Alert';
9
9
  import ButtonBase, { buttonBaseClasses } from '@mui/material/ButtonBase';
10
10
  import { Info, WifiOff, TriangleAlert, CircleAlert, CircleCheckBig, X, ChevronRight, Square, SquareCheck, SquareMinus, Search, ChevronDown, Plus, Trash2, ArrowUp, ArrowDown, ChevronsUpDown, Columns3, ListFilter, HelpCircle, CalendarDays, Minus, ChevronLeft, AlertCircle, ChevronUp } from 'lucide-react';
11
11
  import IconButton, { iconButtonClasses } from '@mui/material/IconButton';
12
- import React, { useState, useRef, useCallback, useMemo, forwardRef, useEffect, createContext, useContext, useLayoutEffect, Children, isValidElement, cloneElement } from 'react';
12
+ import { useState, useId, useRef, useCallback, useMemo, forwardRef, useEffect, createContext, useContext, useLayoutEffect, Children, isValidElement, cloneElement } from 'react';
13
13
  import Breadcrumbs, { breadcrumbsClasses } from '@mui/material/Breadcrumbs';
14
14
  import Link from '@mui/material/Link';
15
+ import Button, { buttonClasses } from '@mui/material/Button';
15
16
  import CircularProgress from '@mui/material/CircularProgress';
16
17
  import MuiToggleButton, { toggleButtonClasses } from '@mui/material/ToggleButton';
17
18
  import MuiToggleButtonGroup, { toggleButtonGroupClasses } from '@mui/material/ToggleButtonGroup';
@@ -19,7 +20,6 @@ import MuiCard from '@mui/material/Card';
19
20
  import Checkbox, { checkboxClasses } from '@mui/material/Checkbox';
20
21
  import { gridClasses, useGridApiContext, useGridSelector, gridColumnDefinitionsSelector, gridColumnVisibilityModelSelector, GridFilterPanel, GridPanel, gridPanelClasses, ColumnsPanelTrigger, ToolbarButton, gridFilterModelSelector, FilterPanelTrigger, gridPaginationModelSelector, gridRowCountSelector, gridRowSelectionCountSelector, GridActionsCell, QuickFilter, QuickFilterControl, QuickFilterClear, Toolbar } from '@mui/x-data-grid';
21
22
  import { useGridApiRef, DataGridPro } from '@mui/x-data-grid-pro';
22
- import Button, { buttonClasses } from '@mui/material/Button';
23
23
  import Divider from '@mui/material/Divider';
24
24
  import InputAdornment, { inputAdornmentClasses } from '@mui/material/InputAdornment';
25
25
  import InputBase, { inputBaseClasses } from '@mui/material/InputBase';
@@ -740,39 +740,34 @@ function ModBreadcrumbs({ children, className }) {
740
740
  return (jsx(StyledBreadcrumbs, { separator: jsx(ChevronRight, { size: 10.67, color: semanticColors.color.icon.utility }), className: className, "aria-label": "breadcrumb", children: children }));
741
741
  }
742
742
 
743
- // Props that should not be forwarded to ButtonBase (Button-specific props that ButtonBase doesn't support)
744
- const buttonOnlyProps = [
745
- 'variant',
746
- 'size',
747
- 'loading',
748
- 'startIcon',
749
- 'endIcon',
750
- 'fullWidth',
751
- 'disableElevation',
752
- ];
753
- const StyledButtonBase$1 = styled(ButtonBase, {
754
- shouldForwardProp: prop => !buttonOnlyProps.includes(prop),
755
- })(({ theme, variant = 'primary', size = 'medium', loading = false }) => {
743
+ const StyledButton = styled(Button, {
744
+ shouldForwardProp: prop => prop !== 'buttonVariant' && prop !== 'buttonSize',
745
+ })(({ theme, buttonVariant: variant, buttonSize: size }) => {
756
746
  // Size configurations
757
747
  const sizeConfig = {
758
748
  small: {
759
749
  height: 32,
760
- padding: `0 ${spacing.spacing_1_1_2}px`,
750
+ paddingX: spacing.spacing_1_1_2,
761
751
  fontSize: theme.typography.pxToRem(14),
762
752
  },
763
753
  medium: {
764
754
  height: spacing.spacing_5,
765
- padding: `0 ${spacing.spacing_2}px`,
755
+ paddingX: spacing.spacing_2,
766
756
  fontSize: theme.typography.pxToRem(14),
767
757
  },
768
758
  };
769
759
  const sizeStyles = sizeConfig[size];
760
+ const paddingX = variant === 'tertiary' ? 0 : sizeStyles.paddingX;
761
+ const spinnerSize = size === 'small' ? iconSize.md : iconSize.xl;
762
+ const disabled = `&.${buttonClasses.disabled}:not(.${buttonClasses.loading})`;
770
763
  // Base styles shared by all variants
771
764
  const baseStyles = {
772
765
  height: sizeStyles.height,
773
- padding: sizeStyles.padding,
766
+ padding: `0 ${paddingX}px`,
767
+ fontFamily: 'inherit',
774
768
  fontSize: sizeStyles.fontSize,
775
769
  fontWeight: typography.fontWeight.semiBold,
770
+ letterSpacing: 'inherit',
776
771
  lineHeight: '1.25rem',
777
772
  borderRadius: borderRadius.button,
778
773
  textTransform: 'none',
@@ -782,13 +777,56 @@ const StyledButtonBase$1 = styled(ButtonBase, {
782
777
  position: 'relative',
783
778
  minWidth: 'fit-content',
784
779
  gap: spacing.spacing_1,
780
+ // `gap` spaces the icons; MUI's slot margins would add to it
781
+ [`& .${buttonClasses.startIcon}, & .${buttonClasses.endIcon}`]: {
782
+ margin: 0,
783
+ },
784
+ // MUI sets font-size on the icon slot's first child; IconSlot takes it so 1em icons keep the label's size
785
+ [`& .${buttonClasses.startIcon} > *:nth-of-type(1), & .${buttonClasses.endIcon} > *:nth-of-type(1)`]: {
786
+ fontSize: 'inherit',
787
+ },
788
+ // MUI's indicator is a sibling of the icon; anchoring sizes and places it on the icon
789
+ [`&.${buttonClasses.loadingPositionStart} .${buttonClasses.startIcon}, &.${buttonClasses.loadingPositionEnd} .${buttonClasses.endIcon}`]: {
790
+ anchorName: '--mod-button-icon',
791
+ // MUI fades the icon out while the spinner appears at full opacity
792
+ transition: 'none',
793
+ },
794
+ [`&.${buttonClasses.loadingPositionStart} .${buttonClasses.loadingIndicator}, &.${buttonClasses.loadingPositionEnd} .${buttonClasses.loadingIndicator}`]: {
795
+ // MUI switches it to relative for fullWidth
796
+ position: 'absolute',
797
+ positionAnchor: '--mod-button-icon',
798
+ // Square on the icon's centre; the slot can be taller than the icon, and a non-square box wobbles
799
+ inset: 'auto auto auto anchor(left)',
800
+ alignSelf: 'anchor-center',
801
+ width: 'anchor-size(width)',
802
+ height: 'anchor-size(width)',
803
+ },
804
+ // Without anchor positioning, the spinner takes the standard icon size at the icon's edge
805
+ '@supports not (anchor-name: --a)': {
806
+ [`&.${buttonClasses.loadingPositionStart} .${buttonClasses.loadingIndicator}`]: {
807
+ inset: 'auto',
808
+ left: paddingX,
809
+ width: spinnerSize,
810
+ height: spinnerSize,
811
+ },
812
+ [`&.${buttonClasses.loadingPositionEnd} .${buttonClasses.loadingIndicator}`]: {
813
+ inset: 'auto',
814
+ right: paddingX,
815
+ width: spinnerSize,
816
+ height: spinnerSize,
817
+ },
818
+ },
819
+ // Hide the label at once when loading starts, so it doesn't fade out under the spinner
820
+ [`&.${buttonClasses.loading}`]: {
821
+ transitionProperty: 'background-color, border-color',
822
+ },
785
823
  // Disabled state (always show cursor)
786
- [`&.${buttonBaseClasses.disabled}`]: {
824
+ [`&.${buttonClasses.disabled}`]: {
787
825
  cursor: 'not-allowed',
788
826
  pointerEvents: 'auto',
789
827
  },
790
828
  // Focus visible for keyboard navigation
791
- [`&.${buttonBaseClasses.focusVisible}`]: {
829
+ [`&.${buttonClasses.focusVisible}`]: {
792
830
  outline: `2px solid ${semanticColors.color.border.focus}`,
793
831
  outlineOffset: 2,
794
832
  },
@@ -805,14 +843,10 @@ const StyledButtonBase$1 = styled(ButtonBase, {
805
843
  '&:active': {
806
844
  backgroundColor: semanticColors.button.primary.bgPressed,
807
845
  },
808
- ...(loading
809
- ? {}
810
- : {
811
- [`&.${buttonBaseClasses.disabled}`]: {
812
- backgroundColor: semanticColors.button.primary.bgDisabled,
813
- color: semanticColors.button.fgDisabled,
814
- },
815
- }),
846
+ [disabled]: {
847
+ backgroundColor: semanticColors.button.primary.bgDisabled,
848
+ color: semanticColors.button.fgDisabled,
849
+ },
816
850
  },
817
851
  secondary: {
818
852
  backgroundColor: semanticColors.button.secondary.bg,
@@ -824,15 +858,11 @@ const StyledButtonBase$1 = styled(ButtonBase, {
824
858
  '&:active': {
825
859
  backgroundColor: semanticColors.button.secondary.bgPressed,
826
860
  },
827
- ...(loading
828
- ? {}
829
- : {
830
- [`&.${buttonBaseClasses.disabled}`]: {
831
- backgroundColor: semanticColors.button.secondary.bgDisabled,
832
- borderColor: semanticColors.color.border.primary,
833
- color: semanticColors.button.fgDisabled,
834
- },
835
- }),
861
+ [disabled]: {
862
+ backgroundColor: semanticColors.button.secondary.bgDisabled,
863
+ borderColor: semanticColors.color.border.primary,
864
+ color: semanticColors.button.fgDisabled,
865
+ },
836
866
  },
837
867
  destructive: {
838
868
  backgroundColor: semanticColors.button.destructive.bg,
@@ -845,20 +875,15 @@ const StyledButtonBase$1 = styled(ButtonBase, {
845
875
  backgroundColor: semanticColors.color.status.error.fg,
846
876
  filter: 'brightness(0.9)',
847
877
  },
848
- ...(loading
849
- ? {}
850
- : {
851
- [`&.${buttonBaseClasses.disabled}`]: {
852
- backgroundColor: semanticColors.button.primary.bgDisabled,
853
- color: semanticColors.button.fgDisabled,
854
- },
855
- }),
878
+ [disabled]: {
879
+ backgroundColor: semanticColors.button.primary.bgDisabled,
880
+ color: semanticColors.button.fgDisabled,
881
+ },
856
882
  },
857
883
  tertiary: {
858
884
  backgroundColor: 'transparent',
859
885
  color: semanticColors.color.text.input,
860
886
  border: 'none',
861
- padding: 0,
862
887
  lineHeight: 1,
863
888
  '&:hover': {
864
889
  backgroundColor: 'transparent',
@@ -867,24 +892,26 @@ const StyledButtonBase$1 = styled(ButtonBase, {
867
892
  '&:active': {
868
893
  color: semanticColors.button.tertiary.fgPressed,
869
894
  },
870
- ...(loading
871
- ? {}
872
- : {
873
- [`&.${buttonBaseClasses.disabled}`]: {
874
- backgroundColor: 'transparent',
875
- color: semanticColors.button.tertiary.fgDisabled,
876
- },
877
- }),
895
+ [disabled]: {
896
+ backgroundColor: 'transparent',
897
+ color: semanticColors.button.tertiary.fgDisabled,
898
+ },
878
899
  },
879
900
  };
901
+ // MUI greys a loading button as disabled; keep the label in the variant's colour
902
+ const { color } = variantStyles[variant];
880
903
  return {
881
904
  ...baseStyles,
882
905
  ...variantStyles[variant],
906
+ [`&.${buttonClasses.loadingPositionStart}, &.${buttonClasses.loadingPositionEnd}`]: { color },
883
907
  };
884
908
  });
909
+ const IconSlot = styled('span')({
910
+ display: 'contents',
911
+ });
885
912
  const LoadingSpinner = styled(CircularProgress, {
886
- shouldForwardProp: prop => prop !== '$variant',
887
- })(({ $variant }) => {
913
+ shouldForwardProp: prop => prop !== 'buttonVariant',
914
+ })(({ buttonVariant }) => {
888
915
  // Use appropriate spinner color for each variant to ensure visibility
889
916
  const spinnerColors = {
890
917
  primary: semanticColors.color.surface.raised,
@@ -893,14 +920,22 @@ const LoadingSpinner = styled(CircularProgress, {
893
920
  tertiary: semanticColors.button.tertiary.fg,
894
921
  };
895
922
  return {
896
- color: spinnerColors[$variant],
923
+ color: spinnerColors[buttonVariant],
897
924
  };
898
925
  });
899
926
  /**
900
- * ModButton - Text button component based on MUI ButtonBase
927
+ * ModButton - Text button component based on MUI Button
901
928
  */
902
- function ModButton({ variant = 'primary', size = 'medium', loading = false, children, disabled, startIcon, endIcon, ...rest }) {
903
- return (jsx(StyledButtonBase$1, { variant: variant, size: size, loading: loading, disabled: disabled || loading, ...rest, children: loading ? (jsx(LoadingSpinner, { "$variant": variant, size: size === 'small' ? 16 : 20 })) : (jsxs(React.Fragment, { children: [startIcon, children, endIcon] })) }));
929
+ function ModButton({ variant = 'primary', size = 'medium', loading = false, children, startIcon, endIcon, ...rest }) {
930
+ const loadingPosition = startIcon ? 'start' : endIcon ? 'end' : 'center';
931
+ // Mirrors MUI: the spinner is named by the button, which gets an id while loading
932
+ const generatedId = useId();
933
+ const id = rest.id ?? (loading ? generatedId : undefined);
934
+ return (jsx(StyledButton, { buttonVariant: variant, buttonSize: size,
935
+ // Pinned so theme defaultProps or a ButtonGroup can't restyle it; ButtonBase had no focus ripple
936
+ variant: "text", size: "medium", color: "primary", disableFocusRipple: true, loading: loading, loadingPosition: loadingPosition, loadingIndicator: jsx(LoadingSpinner, { buttonVariant: variant,
937
+ // With an icon, the anchored indicator is the icon's size and the spinner fills it
938
+ size: loadingPosition === 'center' ? (size === 'small' ? iconSize.md : iconSize.xl) : '100%', "aria-labelledby": id }), startIcon: startIcon && jsx(IconSlot, { children: startIcon }), endIcon: endIcon && jsx(IconSlot, { children: endIcon }), "aria-busy": loading || undefined, ...rest, id: id, children: children }));
904
939
  }
905
940
  ModButton.displayName = 'ModButton';
906
941
 
@@ -943,8 +978,9 @@ function useTabAriaSync() {
943
978
  observerRef.current.disconnect();
944
979
  observerRef.current = null;
945
980
  }
946
- if (!node)
981
+ if (!node) {
947
982
  return;
983
+ }
948
984
  const sync = () => {
949
985
  node.setAttribute('role', 'tab');
950
986
  node.setAttribute('aria-selected', String(node.classList.contains('Mui-selected')));
@@ -1764,8 +1800,9 @@ sx: _sx, theme: _theme, ...props }) => {
1764
1800
  const [searchText, setSearchText] = useState('');
1765
1801
  // Filter columns based on search
1766
1802
  const filteredColumns = useMemo(() => {
1767
- if (!searchText)
1803
+ if (!searchText) {
1768
1804
  return columns;
1805
+ }
1769
1806
  const search = searchText.toLowerCase();
1770
1807
  return columns.filter(col => {
1771
1808
  const headerName = col.headerName || col.field;
@@ -1798,8 +1835,9 @@ sx: _sx, theme: _theme, ...props }) => {
1798
1835
  disableUnderline: true,
1799
1836
  },
1800
1837
  } })), filteredColumns.map(column => {
1801
- if (column.hideable === false)
1838
+ if (column.hideable === false) {
1802
1839
  return null;
1840
+ }
1803
1841
  const isVisible = columnVisibilityModel[column.field] !== false;
1804
1842
  const headerName = column.headerName || column.field;
1805
1843
  return (jsx(ColumnItemContainer, { onClick: () => handleColumnToggle(column.field), children: jsxs(MenuItemContent$1, { children: [jsx(ModCheckbox, { checked: isVisible, size: "small", disableRipple: true }), jsx(MenuItemLabel, { children: headerName })] }) }, column.field));
@@ -3091,11 +3129,13 @@ const ActionButton = styled(IconButton)({
3091
3129
  */
3092
3130
  const ModDownloadToast = ({ title, fileName, progress, showClose = true, showPause = true, onClose, onPause, actions, ...props }) => {
3093
3131
  const renderActions = () => {
3094
- if (actions)
3132
+ if (actions) {
3095
3133
  return actions;
3134
+ }
3096
3135
  const hasActions = showPause || showClose;
3097
- if (!hasActions)
3136
+ if (!hasActions) {
3098
3137
  return null;
3138
+ }
3099
3139
  return (jsxs(Stack, { direction: "row", sx: { alignItems: 'center', gap: `${spacing.spacing_2}px` }, children: [showPause && (jsx(ActionButton, { size: "small", onClick: onPause, "aria-label": "Pause download", children: jsx(Minus, { size: spacing.spacing_2 }) })), showClose && (jsx(ActionButton, { size: "small", onClick: onClose, "aria-label": "Close", children: jsx(X, { size: spacing.spacing_2 }) }))] }));
3100
3140
  };
3101
3141
  return (jsxs(StyledRoot$1, { elevation: 0, role: "status", ...props, children: [jsxs(Stack, { direction: "row", sx: {
@@ -4449,8 +4489,9 @@ const CellRoot = styled('div', {
4449
4489
  * ModIconCell — Icon cell for DataGrid. Renders an icon centered in the cell.
4450
4490
  */
4451
4491
  const ModIconCell = ({ icon, ariaLabel, disabled = false }) => {
4452
- if (!icon)
4492
+ if (!icon) {
4453
4493
  return null;
4494
+ }
4454
4495
  return (jsx(CellRoot, { disabled: disabled, "aria-label": ariaLabel, children: jsx(ModIconWrapper, { size: 16, children: icon }) }));
4455
4496
  };
4456
4497
  ModIconCell.displayName = 'ModIconCell';
@@ -4940,8 +4981,9 @@ function ModPageContent({ pageTitle, subtitle, breadcrumbs, action, sticky = fal
4940
4981
  const containerRef = useRef(null);
4941
4982
  // Intersection observer for back to top button
4942
4983
  useEffect(() => {
4943
- if (!showBackToTop || !headerRef.current)
4984
+ if (!showBackToTop || !headerRef.current) {
4944
4985
  return;
4986
+ }
4945
4987
  const observer = new IntersectionObserver(([entry]) => {
4946
4988
  setShowBackToTopButton(!entry.isIntersecting);
4947
4989
  }, {