@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.
- package/dist/ActivityHeader/ActivityHeader.d.ts +1 -1
- package/dist/ActivityIndicatorCell/ActivityIndicatorCell.d.ts +1 -1
- package/dist/Alert/Alert.d.ts +1 -1
- package/dist/Badge/Badge.d.ts +1 -1
- package/dist/Banner/Banner.d.ts +1 -1
- package/dist/Breadcrumbs/Breadcrumbs.d.ts +2 -2
- package/dist/Button/Button.d.ts +7 -5
- package/dist/ButtonTab/ButtonTab.d.ts +1 -1
- package/dist/ButtonTabGroup/ButtonTabGroup.d.ts +1 -1
- package/dist/CanceledIcon/CanceledIcon.d.ts +1 -1
- package/dist/Card/Card.d.ts +1 -1
- package/dist/Checkbox/Checkbox.d.ts +1 -1
- package/dist/CheckboxWithText/CheckboxWithText.d.ts +1 -1
- package/dist/CodeSnippet/CodeSnippet.d.ts +1 -1
- package/dist/DataGrid/DataGrid.d.ts +1 -1
- package/dist/DataGridCell/DataGridCell.d.ts +4 -4
- package/dist/DataGridColumnsButton/DataGridColumnsButton.d.ts +1 -1
- package/dist/DataGridColumnsPanel/DataGridColumnsPanel.d.ts +1 -1
- package/dist/DataGridFilterPanel/DataGridFilterPanel.d.ts +4 -4
- package/dist/DataGridFiltersButton/DataGridFiltersButton.d.ts +1 -1
- package/dist/DataGridHeaderCell/DataGridHeaderCell.d.ts +3 -3
- package/dist/DataGridHeaderLabel/DataGridHeaderLabel.d.ts +1 -1
- package/dist/DatePicker/DatePicker.d.ts +1 -1
- package/dist/DateTimeCell/DateTimeCell.d.ts +1 -1
- package/dist/Divider/Divider.d.ts +1 -1
- package/dist/Dot/Dot.d.ts +1 -1
- package/dist/DownloadToast/DownloadToast.d.ts +1 -1
- package/dist/DropdownInputField/DropdownInputField.d.ts +1 -1
- package/dist/EmptyState/EmptyState.d.ts +1 -1
- package/dist/FilledStatusIcons/FilledStatusIcons.d.ts +7 -7
- package/dist/FilterChip/FilterChip.d.ts +1 -1
- package/dist/Footer/Footer.d.ts +1 -1
- package/dist/GeneralAvatar/GeneralAvatar.d.ts +1 -1
- package/dist/IconButton/IconButton.d.ts +1 -1
- package/dist/IconWrapper/IconWrapper.d.ts +1 -1
- package/dist/InfiniteScrollGrid/InfiniteScrollGrid.d.ts +1 -1
- package/dist/InputField/InputField.d.ts +1 -1
- package/dist/LinkCell/LinkCell.d.ts +1 -1
- package/dist/ListItem/ListItem.d.ts +1 -1
- package/dist/ListItemButton/ListItemButton.d.ts +1 -1
- package/dist/LoadingSpinner/LoadingSpinner.d.ts +1 -1
- package/dist/Menu/Menu.d.ts +1 -1
- package/dist/MenuItem/MenuItem.d.ts +1 -1
- package/dist/ModActionsCell/ModActionsCell.d.ts +1 -1
- package/dist/ModAvatarCell/ModAvatarCell.d.ts +1 -1
- package/dist/ModIconCell/ModIconCell.d.ts +1 -1
- package/dist/ModLogoCell/ModLogoCell.d.ts +1 -1
- package/dist/ModProgressCell/ModProgressCell.d.ts +1 -1
- package/dist/ModStatusCell/ModStatusCell.d.ts +1 -1
- package/dist/Modal/Modal.d.ts +4 -4
- package/dist/NavIconButton/NavIconButton.d.ts +1 -1
- package/dist/NavigationAvatar/NavigationAvatar.d.ts +1 -1
- package/dist/NavigationItem/NavigationItem.d.ts +1 -1
- package/dist/PageContent/PageContent.d.ts +1 -1
- package/dist/PaginatedGrid/PaginatedGrid.d.ts +1 -1
- package/dist/ProgressSpinner/ProgressSpinner.d.ts +1 -1
- package/dist/Progressbar/Progressbar.d.ts +1 -1
- package/dist/QuickFilter/QuickFilter.d.ts +1 -1
- package/dist/Radio/Radio.d.ts +1 -1
- package/dist/SearchChip/SearchChip.d.ts +1 -1
- package/dist/Select/Select.d.ts +1 -1
- package/dist/SelectField/SelectField.d.ts +1 -1
- package/dist/SideNav/SideNav.d.ts +1 -1
- package/dist/Skeleton/Skeleton.d.ts +1 -1
- package/dist/TabPanel/TabPanel.d.ts +1 -1
- package/dist/Table/Table.d.ts +1 -1
- package/dist/Tabs/Tabs.d.ts +1 -1
- package/dist/Tag/Tag.d.ts +1 -1
- package/dist/Toast/Toast.d.ts +2 -2
- package/dist/Toggle/Toggle.d.ts +1 -1
- package/dist/ToggleButton/ToggleButton.d.ts +1 -1
- package/dist/ToggleButtonGroup/ToggleButtonGroup.d.ts +1 -1
- package/dist/Toolbar/Toolbar.d.ts +1 -1
- package/dist/Tooltip/Tooltip.d.ts +1 -1
- package/dist/Tree/Tree.d.ts +1 -1
- package/dist/TypologyControl/TypologyControl.d.ts +1 -1
- package/dist/index.d.ts +98 -98
- package/dist/index.esm.js +110 -68
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +136 -94
- package/dist/index.js.map +1 -1
- 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,
|
|
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
|
|
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
|
-
|
|
744
|
-
|
|
745
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
[`&.${
|
|
824
|
+
[`&.${buttonClasses.disabled}`]: {
|
|
787
825
|
cursor: 'not-allowed',
|
|
788
826
|
pointerEvents: 'auto',
|
|
789
827
|
},
|
|
790
828
|
// Focus visible for keyboard navigation
|
|
791
|
-
[`&.${
|
|
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
|
-
|
|
809
|
-
|
|
810
|
-
:
|
|
811
|
-
|
|
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
|
-
|
|
828
|
-
|
|
829
|
-
:
|
|
830
|
-
|
|
831
|
-
|
|
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
|
-
|
|
849
|
-
|
|
850
|
-
:
|
|
851
|
-
|
|
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
|
-
|
|
871
|
-
|
|
872
|
-
:
|
|
873
|
-
|
|
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 !== '
|
|
887
|
-
})(({
|
|
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[
|
|
923
|
+
color: spinnerColors[buttonVariant],
|
|
897
924
|
};
|
|
898
925
|
});
|
|
899
926
|
/**
|
|
900
|
-
* ModButton - Text button component based on MUI
|
|
927
|
+
* ModButton - Text button component based on MUI Button
|
|
901
928
|
*/
|
|
902
|
-
function ModButton({ variant = 'primary', size = 'medium', loading = false, children,
|
|
903
|
-
|
|
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
|
}, {
|