@moderneinc/neo-styled-components 3.0.0 → 4.0.0-next.3cddda
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/Alert/Alert.d.ts +50 -0
- package/dist/DataGridFilterPanel/DataGridFilterPanel.d.ts +2 -2
- package/dist/DatePicker/DatePicker.d.ts +3 -5
- package/dist/Divider/Divider.d.ts +4 -4
- package/dist/ListItem/ListItem.d.ts +7 -7
- package/dist/{DropdownMenu/DropdownMenu.d.ts → Menu/Menu.d.ts} +9 -9
- package/dist/{DropdownMenuItem/DropdownMenuItem.d.ts → MenuItem/MenuItem.d.ts} +9 -9
- package/dist/NavigationItem/NavigationItem.d.ts +12 -8
- package/dist/Select/Select.d.ts +24 -0
- package/dist/Tabs/Tabs.d.ts +1 -4
- package/dist/Tag/Tag.d.ts +12 -12
- package/dist/Toast/Toast.d.ts +20 -14
- package/dist/Tooltip/Tooltip.d.ts +3 -3
- package/dist/index.d.ts +127 -165
- package/dist/index.esm.js +350 -396
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +360 -407
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/Dropdown/Dropdown.d.ts +0 -24
- package/dist/MarketplaceCard/MarketplaceCard.d.ts +0 -23
- package/dist/MarketplaceLargeCard/MarketplaceLargeCard.d.ts +0 -23
- package/dist/NavItem/NavItem.d.ts +0 -26
- package/dist/StatusBanner/StatusBanner.d.ts +0 -55
package/dist/index.esm.js
CHANGED
|
@@ -6,11 +6,11 @@ import Avatar from '@mui/material/Avatar';
|
|
|
6
6
|
import Chip, { chipClasses } from '@mui/material/Chip';
|
|
7
7
|
import SvgIcon, { svgIconClasses } from '@mui/material/SvgIcon';
|
|
8
8
|
import Alert, { alertClasses } from '@mui/material/Alert';
|
|
9
|
-
import
|
|
9
|
+
import ButtonBase, { buttonBaseClasses } from '@mui/material/ButtonBase';
|
|
10
10
|
import React, { forwardRef, createElement, useState, useRef, useCallback, useMemo, useEffect } from 'react';
|
|
11
|
+
import IconButton, { iconButtonClasses } from '@mui/material/IconButton';
|
|
11
12
|
import Breadcrumbs, { breadcrumbsClasses } from '@mui/material/Breadcrumbs';
|
|
12
13
|
import Link from '@mui/material/Link';
|
|
13
|
-
import ButtonBase, { buttonBaseClasses } from '@mui/material/ButtonBase';
|
|
14
14
|
import CircularProgress from '@mui/material/CircularProgress';
|
|
15
15
|
import MuiToggleButton, { toggleButtonClasses } from '@mui/material/ToggleButton';
|
|
16
16
|
import MuiToggleButtonGroup, { toggleButtonGroupClasses } from '@mui/material/ToggleButtonGroup';
|
|
@@ -40,14 +40,14 @@ import Badge, { badgeClasses } from '@mui/material/Badge';
|
|
|
40
40
|
import LinearProgress, { linearProgressClasses } from '@mui/material/LinearProgress';
|
|
41
41
|
import Paper, { paperClasses } from '@mui/material/Paper';
|
|
42
42
|
import Stack from '@mui/material/Stack';
|
|
43
|
-
import { listClasses } from '@mui/material/List';
|
|
44
|
-
import Menu from '@mui/material/Menu';
|
|
45
43
|
import FormControl from '@mui/material/FormControl';
|
|
46
44
|
import FormHelperText, { formHelperTextClasses } from '@mui/material/FormHelperText';
|
|
47
45
|
import ListItemButton, { listItemButtonClasses } from '@mui/material/ListItemButton';
|
|
48
46
|
import ListItemIcon, { listItemIconClasses } from '@mui/material/ListItemIcon';
|
|
49
47
|
import ListItemText, { listItemTextClasses } from '@mui/material/ListItemText';
|
|
50
48
|
import Typography from '@mui/material/Typography';
|
|
49
|
+
import { listClasses } from '@mui/material/List';
|
|
50
|
+
import Menu from '@mui/material/Menu';
|
|
51
51
|
import Dialog, { dialogClasses } from '@mui/material/Dialog';
|
|
52
52
|
import DialogActions, { dialogActionsClasses } from '@mui/material/DialogActions';
|
|
53
53
|
import DialogContent, { dialogContentClasses } from '@mui/material/DialogContent';
|
|
@@ -136,7 +136,7 @@ const AvatarContainer = styled(Box)(({ size = 'medium' }) => ({
|
|
|
136
136
|
alignItems: 'center',
|
|
137
137
|
justifyContent: 'center',
|
|
138
138
|
overflow: 'hidden',
|
|
139
|
-
boxShadow: `${shadows.
|
|
139
|
+
boxShadow: `${shadows.neutral.small.x}px ${shadows.neutral.small.y}px ${shadows.neutral.small.blur}px ${shadows.neutral.small.spread}px ${shadows.neutral.small.shadow}`,
|
|
140
140
|
}),
|
|
141
141
|
'&:focus-within': {
|
|
142
142
|
...focusRingStyles,
|
|
@@ -688,11 +688,11 @@ const createLucideIcon = (iconName, iconNode) => {
|
|
|
688
688
|
*/
|
|
689
689
|
|
|
690
690
|
|
|
691
|
-
const __iconNode$
|
|
691
|
+
const __iconNode$k = [
|
|
692
692
|
["path", { d: "M12 5v14", key: "s699le" }],
|
|
693
693
|
["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
|
|
694
694
|
];
|
|
695
|
-
const ArrowDown = createLucideIcon("arrow-down", __iconNode$
|
|
695
|
+
const ArrowDown = createLucideIcon("arrow-down", __iconNode$k);
|
|
696
696
|
|
|
697
697
|
/**
|
|
698
698
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -702,11 +702,32 @@ const ArrowDown = createLucideIcon("arrow-down", __iconNode$j);
|
|
|
702
702
|
*/
|
|
703
703
|
|
|
704
704
|
|
|
705
|
-
const __iconNode$
|
|
705
|
+
const __iconNode$j = [
|
|
706
706
|
["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
|
|
707
707
|
["path", { d: "M12 19V5", key: "x0mq9r" }]
|
|
708
708
|
];
|
|
709
|
-
const ArrowUp = createLucideIcon("arrow-up", __iconNode$
|
|
709
|
+
const ArrowUp = createLucideIcon("arrow-up", __iconNode$j);
|
|
710
|
+
|
|
711
|
+
/**
|
|
712
|
+
* @license lucide-react v0.577.0 - ISC
|
|
713
|
+
*
|
|
714
|
+
* This source code is licensed under the ISC license.
|
|
715
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
716
|
+
*/
|
|
717
|
+
|
|
718
|
+
|
|
719
|
+
const __iconNode$i = [
|
|
720
|
+
[
|
|
721
|
+
"path",
|
|
722
|
+
{
|
|
723
|
+
d: "M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",
|
|
724
|
+
key: "3c2336"
|
|
725
|
+
}
|
|
726
|
+
],
|
|
727
|
+
["line", { x1: "12", x2: "12", y1: "16", y2: "12", key: "1y1yb1" }],
|
|
728
|
+
["line", { x1: "12", x2: "12.01", y1: "8", y2: "8", key: "110wyk" }]
|
|
729
|
+
];
|
|
730
|
+
const BadgeInfo = createLucideIcon("badge-info", __iconNode$i);
|
|
710
731
|
|
|
711
732
|
/**
|
|
712
733
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -812,10 +833,10 @@ const CircleAlert = createLucideIcon("circle-alert", __iconNode$b);
|
|
|
812
833
|
|
|
813
834
|
|
|
814
835
|
const __iconNode$a = [
|
|
815
|
-
["
|
|
816
|
-
["path", { d: "m9
|
|
836
|
+
["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }],
|
|
837
|
+
["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }]
|
|
817
838
|
];
|
|
818
|
-
const
|
|
839
|
+
const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$a);
|
|
819
840
|
|
|
820
841
|
/**
|
|
821
842
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -856,26 +877,11 @@ const Columns3 = createLucideIcon("columns-3", __iconNode$8);
|
|
|
856
877
|
|
|
857
878
|
|
|
858
879
|
const __iconNode$7 = [
|
|
859
|
-
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
860
|
-
["path", { d: "M12 16v-4", key: "1dtifu" }],
|
|
861
|
-
["path", { d: "M12 8h.01", key: "e9boi3" }]
|
|
862
|
-
];
|
|
863
|
-
const Info = createLucideIcon("info", __iconNode$7);
|
|
864
|
-
|
|
865
|
-
/**
|
|
866
|
-
* @license lucide-react v0.577.0 - ISC
|
|
867
|
-
*
|
|
868
|
-
* This source code is licensed under the ISC license.
|
|
869
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
870
|
-
*/
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
const __iconNode$6 = [
|
|
874
880
|
["path", { d: "M2 5h20", key: "1fs1ex" }],
|
|
875
881
|
["path", { d: "M6 12h12", key: "8npq4p" }],
|
|
876
882
|
["path", { d: "M9 19h6", key: "456am0" }]
|
|
877
883
|
];
|
|
878
|
-
const ListFilter = createLucideIcon("list-filter", __iconNode$
|
|
884
|
+
const ListFilter = createLucideIcon("list-filter", __iconNode$7);
|
|
879
885
|
|
|
880
886
|
/**
|
|
881
887
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -885,8 +891,8 @@ const ListFilter = createLucideIcon("list-filter", __iconNode$6);
|
|
|
885
891
|
*/
|
|
886
892
|
|
|
887
893
|
|
|
888
|
-
const __iconNode$
|
|
889
|
-
const Minus = createLucideIcon("minus", __iconNode$
|
|
894
|
+
const __iconNode$6 = [["path", { d: "M5 12h14", key: "1ays0h" }]];
|
|
895
|
+
const Minus = createLucideIcon("minus", __iconNode$6);
|
|
890
896
|
|
|
891
897
|
/**
|
|
892
898
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -896,11 +902,11 @@ const Minus = createLucideIcon("minus", __iconNode$5);
|
|
|
896
902
|
*/
|
|
897
903
|
|
|
898
904
|
|
|
899
|
-
const __iconNode$
|
|
905
|
+
const __iconNode$5 = [
|
|
900
906
|
["path", { d: "M5 12h14", key: "1ays0h" }],
|
|
901
907
|
["path", { d: "M12 5v14", key: "s699le" }]
|
|
902
908
|
];
|
|
903
|
-
const Plus = createLucideIcon("plus", __iconNode$
|
|
909
|
+
const Plus = createLucideIcon("plus", __iconNode$5);
|
|
904
910
|
|
|
905
911
|
/**
|
|
906
912
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -910,11 +916,11 @@ const Plus = createLucideIcon("plus", __iconNode$4);
|
|
|
910
916
|
*/
|
|
911
917
|
|
|
912
918
|
|
|
913
|
-
const __iconNode$
|
|
919
|
+
const __iconNode$4 = [
|
|
914
920
|
["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
|
|
915
921
|
["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
|
|
916
922
|
];
|
|
917
|
-
const Search = createLucideIcon("search", __iconNode$
|
|
923
|
+
const Search = createLucideIcon("search", __iconNode$4);
|
|
918
924
|
|
|
919
925
|
/**
|
|
920
926
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -924,14 +930,35 @@ const Search = createLucideIcon("search", __iconNode$3);
|
|
|
924
930
|
*/
|
|
925
931
|
|
|
926
932
|
|
|
927
|
-
const __iconNode$
|
|
933
|
+
const __iconNode$3 = [
|
|
928
934
|
["path", { d: "M10 11v6", key: "nco0om" }],
|
|
929
935
|
["path", { d: "M14 11v6", key: "outv1u" }],
|
|
930
936
|
["path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6", key: "miytrc" }],
|
|
931
937
|
["path", { d: "M3 6h18", key: "d0wm0j" }],
|
|
932
938
|
["path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2", key: "e791ji" }]
|
|
933
939
|
];
|
|
934
|
-
const Trash2 = createLucideIcon("trash-2", __iconNode$
|
|
940
|
+
const Trash2 = createLucideIcon("trash-2", __iconNode$3);
|
|
941
|
+
|
|
942
|
+
/**
|
|
943
|
+
* @license lucide-react v0.577.0 - ISC
|
|
944
|
+
*
|
|
945
|
+
* This source code is licensed under the ISC license.
|
|
946
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
947
|
+
*/
|
|
948
|
+
|
|
949
|
+
|
|
950
|
+
const __iconNode$2 = [
|
|
951
|
+
[
|
|
952
|
+
"path",
|
|
953
|
+
{
|
|
954
|
+
d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",
|
|
955
|
+
key: "wmoenq"
|
|
956
|
+
}
|
|
957
|
+
],
|
|
958
|
+
["path", { d: "M12 9v4", key: "juzpu7" }],
|
|
959
|
+
["path", { d: "M12 17h.01", key: "p32p05" }]
|
|
960
|
+
];
|
|
961
|
+
const TriangleAlert = createLucideIcon("triangle-alert", __iconNode$2);
|
|
935
962
|
|
|
936
963
|
/**
|
|
937
964
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -966,7 +993,93 @@ const __iconNode = [
|
|
|
966
993
|
];
|
|
967
994
|
const X = createLucideIcon("x", __iconNode);
|
|
968
995
|
|
|
969
|
-
const
|
|
996
|
+
const neutralSmallShadow = `${shadows.neutral.small.x}px ${shadows.neutral.small.y}px ${shadows.neutral.small.blur}px ${shadows.neutral.small.spread}px ${shadows.neutral.small.shadow}`;
|
|
997
|
+
const intentColors$2 = {
|
|
998
|
+
success: semanticColors.status.success,
|
|
999
|
+
error: semanticColors.status.error,
|
|
1000
|
+
warning: semanticColors.status.warning,
|
|
1001
|
+
offline: semanticColors.status.neutral,
|
|
1002
|
+
info: semanticColors.status.info,
|
|
1003
|
+
};
|
|
1004
|
+
// biome-ignore lint/suspicious/noExplicitAny: Type cast required to override MUI Alert variant type without global augmentation
|
|
1005
|
+
const StyledAlert$2 = styled(Alert, {
|
|
1006
|
+
shouldForwardProp: prop => prop !== 'intent' && prop !== 'alertType',
|
|
1007
|
+
})(({ theme, intent = 'success', alertType = 'outlined' }) => {
|
|
1008
|
+
const palette = intentColors$2[intent];
|
|
1009
|
+
const isFilled = alertType === 'filled';
|
|
1010
|
+
const iconColor = isFilled ? semanticColors.typography.tooltip : palette.default;
|
|
1011
|
+
const messageColor = isFilled ? semanticColors.typography.tooltip : semanticColors.typography.body;
|
|
1012
|
+
return {
|
|
1013
|
+
height: spacing.spacing_8,
|
|
1014
|
+
width: '100%',
|
|
1015
|
+
borderRadius: borderRadius.xS,
|
|
1016
|
+
alignItems: 'center',
|
|
1017
|
+
fontFamily: typography.fontFamily.body,
|
|
1018
|
+
fontSize: theme.typography.pxToRem(typography.fontSize.default),
|
|
1019
|
+
fontWeight: typography.fontWeight.semiBold,
|
|
1020
|
+
lineHeight: 1.5,
|
|
1021
|
+
padding: theme.spacing(0, 2),
|
|
1022
|
+
backgroundColor: isFilled ? palette.dark : palette.light,
|
|
1023
|
+
border: isFilled ? 'none' : `1px solid ${palette.transparent}`,
|
|
1024
|
+
color: isFilled ? semanticColors.typography.tooltip : semanticColors.typography.body,
|
|
1025
|
+
boxShadow: isFilled ? neutralSmallShadow : undefined,
|
|
1026
|
+
[`& .${alertClasses.icon}`]: {
|
|
1027
|
+
color: iconColor,
|
|
1028
|
+
padding: 0,
|
|
1029
|
+
opacity: 1,
|
|
1030
|
+
marginRight: spacing.spacing_1_1_2,
|
|
1031
|
+
},
|
|
1032
|
+
[`& .${alertClasses.message}`]: {
|
|
1033
|
+
color: messageColor,
|
|
1034
|
+
padding: 0,
|
|
1035
|
+
flex: 1,
|
|
1036
|
+
display: 'flex',
|
|
1037
|
+
flexDirection: 'column',
|
|
1038
|
+
justifyContent: 'center',
|
|
1039
|
+
'& span:last-child': {
|
|
1040
|
+
fontSize: theme.typography.pxToRem(typography.fontSize.sm),
|
|
1041
|
+
fontWeight: typography.fontWeight.medium,
|
|
1042
|
+
color: isFilled
|
|
1043
|
+
? semanticColors.typography.tooltip
|
|
1044
|
+
: semanticColors.typography.bodySecondary,
|
|
1045
|
+
lineHeight: 1.4,
|
|
1046
|
+
},
|
|
1047
|
+
},
|
|
1048
|
+
[`& .${alertClasses.action}`]: {
|
|
1049
|
+
padding: 0,
|
|
1050
|
+
marginRight: 0,
|
|
1051
|
+
...(isFilled && {
|
|
1052
|
+
color: semanticColors.typography.tooltip,
|
|
1053
|
+
[`& .${buttonBaseClasses.root}`]: { color: 'inherit' },
|
|
1054
|
+
}),
|
|
1055
|
+
},
|
|
1056
|
+
};
|
|
1057
|
+
});
|
|
1058
|
+
const iconMap = {
|
|
1059
|
+
success: jsx(CircleCheckBig, { size: 24 }),
|
|
1060
|
+
error: jsx(CircleAlert, { size: 24 }),
|
|
1061
|
+
warning: jsx(TriangleAlert, { size: 24 }),
|
|
1062
|
+
offline: jsx(WifiOff, { size: 24 }),
|
|
1063
|
+
info: jsx(BadgeInfo, { size: 24 }),
|
|
1064
|
+
};
|
|
1065
|
+
/**
|
|
1066
|
+
* NeoAlert - Alert component for displaying contextual status messages
|
|
1067
|
+
*
|
|
1068
|
+
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4921-3427
|
|
1069
|
+
*
|
|
1070
|
+
* Figma Props Mapping:
|
|
1071
|
+
* - Intent (Success|Error|Warning|Offline|Info) → intent
|
|
1072
|
+
* - Type (Outlined|Filled) → type
|
|
1073
|
+
* - Show supporting text → description prop presence
|
|
1074
|
+
* - Show Button → action prop presence
|
|
1075
|
+
*/
|
|
1076
|
+
const NeoAlert = ({ intent = 'success', type = 'outlined', title, description, icon, action, ...props }) => {
|
|
1077
|
+
const defaultIcon = iconMap[intent];
|
|
1078
|
+
return (jsxs(StyledAlert$2, { ...props, intent: intent, alertType: type, icon: icon ?? defaultIcon, action: action, children: [jsx("span", { children: title }), description && jsx("span", { children: description })] }));
|
|
1079
|
+
};
|
|
1080
|
+
NeoAlert.displayName = 'NeoAlert';
|
|
1081
|
+
|
|
1082
|
+
const intentColors$1 = {
|
|
970
1083
|
info: semanticColors.status.info,
|
|
971
1084
|
success: semanticColors.status.success,
|
|
972
1085
|
error: semanticColors.status.error,
|
|
@@ -974,10 +1087,10 @@ const intentColors = {
|
|
|
974
1087
|
neutral: semanticColors.status.neutral,
|
|
975
1088
|
};
|
|
976
1089
|
// biome-ignore lint/suspicious/noExplicitAny: Type cast required to override MUI Alert variant type without global augmentation
|
|
977
|
-
const StyledAlert$
|
|
1090
|
+
const StyledAlert$1 = styled(Alert, {
|
|
978
1091
|
shouldForwardProp: prop => prop !== 'messagePosition' && prop !== 'intent' && prop !== 'bannerType',
|
|
979
1092
|
})(({ intent = 'info', bannerType = 'outlined', messagePosition = 'left' }) => {
|
|
980
|
-
const palette = intentColors[intent];
|
|
1093
|
+
const palette = intentColors$1[intent];
|
|
981
1094
|
const typeStyles = bannerType === 'filled'
|
|
982
1095
|
? {
|
|
983
1096
|
backgroundColor: palette.dark,
|
|
@@ -998,7 +1111,7 @@ const StyledAlert$2 = styled(Alert, {
|
|
|
998
1111
|
alignItems: 'center',
|
|
999
1112
|
justifyContent: messagePosition === 'center' ? 'center' : 'flex-start',
|
|
1000
1113
|
...(messagePosition === 'center' && { position: 'relative' }),
|
|
1001
|
-
boxShadow: `${shadows.
|
|
1114
|
+
boxShadow: `${shadows.neutral.small.x}px ${shadows.neutral.small.y}px ${shadows.neutral.small.blur}px ${shadows.neutral.small.spread}px ${shadows.neutral.small.shadow}`,
|
|
1002
1115
|
fontSize: typography.fontSize.default,
|
|
1003
1116
|
fontWeight: typography.fontWeight.medium,
|
|
1004
1117
|
lineHeight: 1.5,
|
|
@@ -1053,8 +1166,8 @@ const NeoBanner = ({ intent = 'info', type = 'outlined', message, messagePositio
|
|
|
1053
1166
|
if (dismissed) {
|
|
1054
1167
|
return null;
|
|
1055
1168
|
}
|
|
1056
|
-
const closeIconColor = type === 'filled' ? semanticColors.surfaces.white : intentColors[intent].default;
|
|
1057
|
-
return (jsx(StyledAlert$
|
|
1169
|
+
const closeIconColor = type === 'filled' ? semanticColors.surfaces.white : intentColors$1[intent].default;
|
|
1170
|
+
return (jsx(StyledAlert$1, { ...props, intent: intent, bannerType: type, messagePosition: messagePosition, icon: messagePosition === 'left' ? icon || false : false, action: showClose ? (jsx(StyledIconButton$1, { size: "small", onClick: handleClose, closeIconColor: closeIconColor, children: jsx(X, { size: 24 }) })) : undefined, children: messagePosition === 'center' ? (jsxs(Fragment, { children: [icon, jsx("span", { children: message }), linkText && (jsx(LinkText, { bannerType: type, onClick: onLinkClick, children: linkText }))] })) : (jsxs(Fragment, { children: [jsx("span", { children: message }), linkText && (jsx(LinkText, { bannerType: type, onClick: onLinkClick, children: linkText }))] })) }));
|
|
1058
1171
|
};
|
|
1059
1172
|
NeoBanner.displayName = 'NeoBanner';
|
|
1060
1173
|
|
|
@@ -2218,32 +2331,32 @@ const Shortcut = styled('span')(({ theme }) => ({
|
|
|
2218
2331
|
backgroundColor: semanticColors.surfaces.white,
|
|
2219
2332
|
}));
|
|
2220
2333
|
/**
|
|
2221
|
-
*
|
|
2334
|
+
* NeoMenuItem - Menu item component based on MUI MenuItem
|
|
2222
2335
|
*
|
|
2223
2336
|
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4159-8584
|
|
2224
2337
|
*
|
|
2225
2338
|
* @example
|
|
2226
2339
|
* ```tsx
|
|
2227
2340
|
* // With icon and shortcut
|
|
2228
|
-
* <
|
|
2341
|
+
* <NeoMenuItem icon={<UserIcon />} shortcut="⌘+P">
|
|
2229
2342
|
* View profile
|
|
2230
|
-
* </
|
|
2343
|
+
* </NeoMenuItem>
|
|
2231
2344
|
*
|
|
2232
2345
|
* // With secondary text (user list pattern from Figma node 4305:41844)
|
|
2233
|
-
* <
|
|
2234
|
-
* <
|
|
2346
|
+
* <NeoMenuItem secondaryText="@phoenix">Phoenix Baker</NeoMenuItem>
|
|
2347
|
+
* <NeoMenuItem secondaryText="@olivia">Olivia Rhye</NeoMenuItem>
|
|
2235
2348
|
*
|
|
2236
2349
|
* // Disabled state
|
|
2237
|
-
* <
|
|
2350
|
+
* <NeoMenuItem disabled>Disabled item</NeoMenuItem>
|
|
2238
2351
|
* ```
|
|
2239
2352
|
*/
|
|
2240
|
-
const
|
|
2353
|
+
const NeoMenuItem = ({ icon, shortcut, secondaryText, children, ...props }) => {
|
|
2241
2354
|
return (jsx(StyledMenuItem, { ...props, children: jsxs(MenuItemContent, { children: [icon && jsx(IconWrapper$1, { children: icon }), jsxs(LabelContainer$3, { children: [jsx(Label$3, { children: children }), secondaryText && jsx(SecondaryLabel, { children: secondaryText })] }), shortcut && jsx(Shortcut, { children: shortcut })] }) }));
|
|
2242
2355
|
};
|
|
2243
|
-
|
|
2356
|
+
NeoMenuItem.displayName = 'NeoMenuItem';
|
|
2244
2357
|
|
|
2245
2358
|
/**
|
|
2246
|
-
* Custom chevron icon for
|
|
2359
|
+
* Custom chevron icon for select
|
|
2247
2360
|
* Must accept props from MUI Select to work correctly
|
|
2248
2361
|
*/
|
|
2249
2362
|
const ChevronDownIcon = (props) => (jsx(ChevronDown, { ...props, size: spacing.spacing_2_1_2, color: semanticColors.typography.input.default, style: { ...props.style } }));
|
|
@@ -2283,22 +2396,22 @@ const StyledSelect = styled(MuiSelect)({
|
|
|
2283
2396
|
},
|
|
2284
2397
|
});
|
|
2285
2398
|
/**
|
|
2286
|
-
*
|
|
2399
|
+
* NeoSelect - Select component with Neo design system styling
|
|
2287
2400
|
*
|
|
2288
2401
|
* A styled version of MUI's Select that uses Neo design tokens, Lucide ChevronDown icon,
|
|
2289
|
-
* and
|
|
2402
|
+
* and NeoMenu/NeoMenuItem for the dropdown list.
|
|
2290
2403
|
*
|
|
2291
2404
|
* @example
|
|
2292
2405
|
* ```tsx
|
|
2293
|
-
* import {
|
|
2406
|
+
* import { NeoSelect, NeoSelectOption } from '@moderneinc/neo-styled-components'
|
|
2294
2407
|
*
|
|
2295
|
-
* <
|
|
2296
|
-
* <
|
|
2297
|
-
* <
|
|
2298
|
-
* </
|
|
2408
|
+
* <NeoSelect value={value} onChange={handleChange}>
|
|
2409
|
+
* <NeoSelectOption value="option1">Option 1</NeoSelectOption>
|
|
2410
|
+
* <NeoSelectOption value="option2">Option 2</NeoSelectOption>
|
|
2411
|
+
* </NeoSelect>
|
|
2299
2412
|
* ```
|
|
2300
2413
|
*/
|
|
2301
|
-
const
|
|
2414
|
+
const NeoSelect = (props) => {
|
|
2302
2415
|
return (jsx(StyledSelect, { ...props, IconComponent: ChevronDownIcon, variant: "standard", MenuProps: {
|
|
2303
2416
|
...props.MenuProps,
|
|
2304
2417
|
PaperProps: {
|
|
@@ -2313,7 +2426,7 @@ const NeoDropdown = (props) => {
|
|
|
2313
2426
|
},
|
|
2314
2427
|
} }));
|
|
2315
2428
|
};
|
|
2316
|
-
|
|
2429
|
+
NeoSelect.displayName = 'NeoSelect';
|
|
2317
2430
|
|
|
2318
2431
|
/**
|
|
2319
2432
|
* Icon components for DataGrid filter panel slots
|
|
@@ -2774,37 +2887,37 @@ const outlinedColorStyles = {
|
|
|
2774
2887
|
default: {
|
|
2775
2888
|
backgroundColor: semanticColors.status.neutral.light,
|
|
2776
2889
|
color: semanticColors.status.neutral.dark,
|
|
2777
|
-
borderColor:
|
|
2890
|
+
borderColor: semanticColors.status.neutral.transparent,
|
|
2778
2891
|
},
|
|
2779
2892
|
error: {
|
|
2780
2893
|
backgroundColor: semanticColors.status.error.light,
|
|
2781
2894
|
color: semanticColors.status.error.dark,
|
|
2782
|
-
borderColor:
|
|
2895
|
+
borderColor: semanticColors.status.error.transparent,
|
|
2783
2896
|
},
|
|
2784
2897
|
warning: {
|
|
2785
2898
|
backgroundColor: semanticColors.status.warning.light,
|
|
2786
2899
|
color: semanticColors.status.warning.dark,
|
|
2787
|
-
borderColor:
|
|
2900
|
+
borderColor: semanticColors.status.warning.transparent,
|
|
2788
2901
|
},
|
|
2789
2902
|
success: {
|
|
2790
2903
|
backgroundColor: semanticColors.status.success.light,
|
|
2791
2904
|
color: semanticColors.status.success.dark,
|
|
2792
|
-
borderColor:
|
|
2905
|
+
borderColor: semanticColors.status.success.transparent,
|
|
2793
2906
|
},
|
|
2794
2907
|
info: {
|
|
2795
2908
|
backgroundColor: semanticColors.status.info.light,
|
|
2796
2909
|
color: semanticColors.status.info.dark,
|
|
2797
|
-
borderColor:
|
|
2910
|
+
borderColor: semanticColors.status.info.transparent,
|
|
2798
2911
|
},
|
|
2799
2912
|
violet: {
|
|
2800
|
-
backgroundColor:
|
|
2913
|
+
backgroundColor: 'rgba(235, 213, 241, 0.4)',
|
|
2801
2914
|
color: colors.violet[600],
|
|
2802
|
-
borderColor: colors.violet[
|
|
2915
|
+
borderColor: colors.violet[200],
|
|
2803
2916
|
},
|
|
2804
2917
|
beta: {
|
|
2805
|
-
backgroundColor: colors.digitalBlue[
|
|
2918
|
+
backgroundColor: colors.digitalBlue[50],
|
|
2806
2919
|
color: colors.digitalBlue[400],
|
|
2807
|
-
borderColor: colors.digitalBlue[
|
|
2920
|
+
borderColor: colors.digitalBlue[200],
|
|
2808
2921
|
},
|
|
2809
2922
|
};
|
|
2810
2923
|
const filledColorStyles = {
|
|
@@ -2842,13 +2955,13 @@ const StyledChip$1 = styled(Chip)(({ theme, size, variant, color }) => ({
|
|
|
2842
2955
|
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4120-34533
|
|
2843
2956
|
*
|
|
2844
2957
|
* Figma Props Mapping:
|
|
2845
|
-
* -
|
|
2846
|
-
* -
|
|
2847
|
-
* -
|
|
2848
|
-
* - Label
|
|
2958
|
+
* - Size (Small|Medium|Large) → size (small|medium|large)
|
|
2959
|
+
* - Variant (Subtle|Filled) → variant (outlined|filled)
|
|
2960
|
+
* - Intent (Neutral|Error|Warning|Success|Info|Violet|Beta) → intent (default|error|warning|success|info|violet|beta)
|
|
2961
|
+
* - TEXT Label → label prop
|
|
2849
2962
|
*/
|
|
2850
|
-
function NeoTag({ size = 'small', variant = 'outlined', ...props }) {
|
|
2851
|
-
return jsx(StyledChip$1, { size: size, variant: variant, ...props });
|
|
2963
|
+
function NeoTag({ size = 'small', variant = 'outlined', intent = 'default', ...props }) {
|
|
2964
|
+
return jsx(StyledChip$1, { size: size, variant: variant, color: intent, ...props });
|
|
2852
2965
|
}
|
|
2853
2966
|
NeoTag.displayName = 'NeoTag';
|
|
2854
2967
|
|
|
@@ -3630,11 +3743,10 @@ const shortcutChipStyles = {
|
|
|
3630
3743
|
* customization. Supports both single date selection and date range selection with
|
|
3631
3744
|
* built-in shortcuts.
|
|
3632
3745
|
*
|
|
3633
|
-
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4176-
|
|
3746
|
+
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4176-8593
|
|
3634
3747
|
*
|
|
3635
3748
|
* Figma Props Mapping:
|
|
3636
|
-
* -
|
|
3637
|
-
* - type ('Single date'|'Dual dates') → type ('single'|'range')
|
|
3749
|
+
* - Mode ('Single'|'Range') → type ('single'|'range')
|
|
3638
3750
|
*
|
|
3639
3751
|
* Design Tokens Used:
|
|
3640
3752
|
* - colors: semanticColors.grey[800], semanticColors.grey[700], semanticColors.surfaces.white, semanticColors.icons.hoverBackground
|
|
@@ -3734,11 +3846,11 @@ const StyledDivider = styled(Divider)(({ theme }) => ({
|
|
|
3734
3846
|
* @example
|
|
3735
3847
|
* ```tsx
|
|
3736
3848
|
* // In a menu
|
|
3737
|
-
* <
|
|
3738
|
-
* <
|
|
3849
|
+
* <NeoMenu>
|
|
3850
|
+
* <NeoMenuItem>Settings</NeoMenuItem>
|
|
3739
3851
|
* <NeoDivider />
|
|
3740
|
-
* <
|
|
3741
|
-
* </
|
|
3852
|
+
* <NeoMenuItem>Sign out</NeoMenuItem>
|
|
3853
|
+
* </NeoMenu>
|
|
3742
3854
|
*
|
|
3743
3855
|
* // In a card
|
|
3744
3856
|
* <Card>
|
|
@@ -3887,47 +3999,6 @@ const NeoDownloadToast = ({ title, fileName, progress, showClose = true, showPau
|
|
|
3887
3999
|
};
|
|
3888
4000
|
NeoDownloadToast.displayName = 'NeoDownloadToast';
|
|
3889
4001
|
|
|
3890
|
-
const StyledMenu = styled(Menu)(({ theme }) => ({
|
|
3891
|
-
[`& .${paperClasses.root}`]: {
|
|
3892
|
-
backgroundColor: semanticColors.surfaces.white,
|
|
3893
|
-
borderRadius: borderRadius.s,
|
|
3894
|
-
border: `1px solid ${semanticColors.border.primary}`,
|
|
3895
|
-
boxShadow: `${shadows.dropdown.x}px ${shadows.dropdown.y}px ${shadows.dropdown.blur}px ${shadows.dropdown.spread}px ${shadows.dropdown.shadow}`,
|
|
3896
|
-
minWidth: 200,
|
|
3897
|
-
marginTop: theme.spacing(1),
|
|
3898
|
-
paddingTop: theme.spacing(1),
|
|
3899
|
-
paddingBottom: theme.spacing(1),
|
|
3900
|
-
},
|
|
3901
|
-
[`& .${listClasses.root}`]: {
|
|
3902
|
-
padding: 0,
|
|
3903
|
-
},
|
|
3904
|
-
}));
|
|
3905
|
-
/**
|
|
3906
|
-
* NeoDropdownMenu - Dropdown menu component based on MUI Menu
|
|
3907
|
-
*
|
|
3908
|
-
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=11141-4980
|
|
3909
|
-
*
|
|
3910
|
-
* @example
|
|
3911
|
-
* ```tsx
|
|
3912
|
-
* const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
|
|
3913
|
-
* const open = Boolean(anchorEl);
|
|
3914
|
-
*
|
|
3915
|
-
* <Button onClick={(e) => setAnchorEl(e.currentTarget)}>Open Menu</Button>
|
|
3916
|
-
* <NeoDropdownMenu
|
|
3917
|
-
* open={open}
|
|
3918
|
-
* anchorEl={anchorEl}
|
|
3919
|
-
* onClose={() => setAnchorEl(null)}
|
|
3920
|
-
* >
|
|
3921
|
-
* <NeoDropdownMenuItem icon={<Icon />} shortcut="⌘+P">View profile</NeoDropdownMenuItem>
|
|
3922
|
-
* <NeoDropdownMenuItem>Settings</NeoDropdownMenuItem>
|
|
3923
|
-
* </NeoDropdownMenu>
|
|
3924
|
-
* ```
|
|
3925
|
-
*/
|
|
3926
|
-
const NeoDropdownMenu = ({ children, ...props }) => {
|
|
3927
|
-
return jsx(StyledMenu, { ...props, children: children });
|
|
3928
|
-
};
|
|
3929
|
-
NeoDropdownMenu.displayName = 'NeoDropdownMenu';
|
|
3930
|
-
|
|
3931
4002
|
const filterChipOnlyProps = ['selected', 'expanded', 'selectedLabel', 'count', 'onClear'];
|
|
3932
4003
|
const StyledChip = styled(Chip, {
|
|
3933
4004
|
shouldForwardProp: prop => !filterChipOnlyProps.includes(prop),
|
|
@@ -4071,11 +4142,11 @@ const StyledFooter = styled(Box, {
|
|
|
4071
4142
|
'&::before': {
|
|
4072
4143
|
content: showShadow ? '""' : 'none',
|
|
4073
4144
|
position: 'absolute',
|
|
4074
|
-
top: `-${shadows.
|
|
4145
|
+
top: `-${shadows.neutral.regular.blur}px`, // -4px
|
|
4075
4146
|
left: 0,
|
|
4076
4147
|
right: 0,
|
|
4077
|
-
height: `${shadows.
|
|
4078
|
-
background: `linear-gradient(to top, ${shadows.
|
|
4148
|
+
height: `${shadows.neutral.regular.blur}px`, // 4px
|
|
4149
|
+
background: `linear-gradient(to top, ${shadows.neutral.regular.shadow}, transparent)`, // rgba(31, 41, 55, 0.1)
|
|
4079
4150
|
pointerEvents: 'none',
|
|
4080
4151
|
},
|
|
4081
4152
|
[theme.breakpoints.down('sm')]: {
|
|
@@ -4665,6 +4736,19 @@ const sizeConfig = {
|
|
|
4665
4736
|
badgeFontSize: typography.fontSize.xs,
|
|
4666
4737
|
lineHeight: 1.5,
|
|
4667
4738
|
},
|
|
4739
|
+
xxxlarge: {
|
|
4740
|
+
height: spacing.spacing_10,
|
|
4741
|
+
paddingTop: 1,
|
|
4742
|
+
paddingRight: spacing.spacing_3_4,
|
|
4743
|
+
paddingBottom: 1,
|
|
4744
|
+
paddingLeft: spacing.spacing_3_4,
|
|
4745
|
+
gap: spacing.spacing_2,
|
|
4746
|
+
iconSize: spacing.spacing_6,
|
|
4747
|
+
fontSize: typography.fontSize.h5,
|
|
4748
|
+
secondaryFontSize: typography.fontSize.sm,
|
|
4749
|
+
badgeFontSize: typography.fontSize.xs,
|
|
4750
|
+
lineHeight: 1.5,
|
|
4751
|
+
},
|
|
4668
4752
|
};
|
|
4669
4753
|
const StyledListItemButton$1 = styled(ListItemButton, {
|
|
4670
4754
|
shouldForwardProp: prop => prop !== 'size' &&
|
|
@@ -4709,7 +4793,7 @@ const StyledListItemButton$1 = styled(ListItemButton, {
|
|
|
4709
4793
|
'& .list-item-primary': {
|
|
4710
4794
|
fontSize: theme.typography.pxToRem(config.fontSize),
|
|
4711
4795
|
lineHeight: config.lineHeight,
|
|
4712
|
-
fontWeight: isLink && size === 'xxlarge'
|
|
4796
|
+
fontWeight: isLink && (size === 'xxlarge' || size === 'xxxlarge')
|
|
4713
4797
|
? typography.fontWeight.semiBold
|
|
4714
4798
|
: size === 'small' || size === 'medium'
|
|
4715
4799
|
? typography.fontWeight.regular
|
|
@@ -4720,18 +4804,20 @@ const StyledListItemButton$1 = styled(ListItemButton, {
|
|
|
4720
4804
|
overflow: 'hidden',
|
|
4721
4805
|
textOverflow: 'ellipsis',
|
|
4722
4806
|
whiteSpace: 'nowrap',
|
|
4723
|
-
...(isLink && size === 'xxlarge' && { textDecoration: 'none' }),
|
|
4807
|
+
...(isLink && (size === 'xxlarge' || size === 'xxxlarge') && { textDecoration: 'none' }),
|
|
4724
4808
|
},
|
|
4725
|
-
// Link hover styling (underline on hover for xxlarge)
|
|
4809
|
+
// Link hover styling (underline on hover for xxlarge/xxxlarge)
|
|
4726
4810
|
...(isLink &&
|
|
4727
|
-
size === 'xxlarge' && {
|
|
4811
|
+
(size === 'xxlarge' || size === 'xxxlarge') && {
|
|
4728
4812
|
'&:hover .list-item-primary': {
|
|
4729
4813
|
textDecoration: 'underline',
|
|
4730
4814
|
},
|
|
4731
4815
|
}),
|
|
4732
|
-
// Badge styling (for xxlarge link variant)
|
|
4816
|
+
// Badge styling (for xxlarge/xxxlarge link variant)
|
|
4733
4817
|
'& .list-item-badge': {
|
|
4734
|
-
fontSize: theme.typography.pxToRem(size === 'xxlarge'
|
|
4818
|
+
fontSize: theme.typography.pxToRem(size === 'xxlarge' || size === 'xxxlarge'
|
|
4819
|
+
? config.badgeFontSize || 12
|
|
4820
|
+
: 12),
|
|
4735
4821
|
lineHeight: 1.5,
|
|
4736
4822
|
fontWeight: typography.fontWeight.regular,
|
|
4737
4823
|
color: semanticColors.typography.bodySecondary,
|
|
@@ -4809,14 +4895,14 @@ const StyledListItemButton$1 = styled(ListItemButton, {
|
|
|
4809
4895
|
/**
|
|
4810
4896
|
* NeoListItem - Flexible list item component with multiple size variants and states
|
|
4811
4897
|
*
|
|
4812
|
-
* A versatile list item component built on MUI's ListItemButton that supports
|
|
4813
|
-
* (small to
|
|
4898
|
+
* A versatile list item component built on MUI's ListItemButton that supports six size variants
|
|
4899
|
+
* (small to xxxlarge), interactive states (default, selected, disabled, link), and optional
|
|
4814
4900
|
* icons/logos, secondary text, and badges.
|
|
4815
4901
|
*
|
|
4816
4902
|
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4205-36442
|
|
4817
4903
|
*
|
|
4818
4904
|
* Figma Props Mapping:
|
|
4819
|
-
* - size (
|
|
4905
|
+
* - size (Small|Medium|Large|Extra Large|XX Large|TripleExtraLarge) → size (small|medium|large|xlarge|xxlarge|xxxlarge)
|
|
4820
4906
|
* - state (default|active|disabled|link) → selected, disabled, isLink props
|
|
4821
4907
|
* - showIcon → icon prop (pass ReactNode)
|
|
4822
4908
|
* - showSupportingText → secondaryText prop (pass ReactNode)
|
|
@@ -4839,9 +4925,10 @@ const StyledListItemButton$1 = styled(ListItemButton, {
|
|
|
4839
4925
|
*/
|
|
4840
4926
|
const NeoListItem = ({ size = 'medium', primaryText, secondaryText, badge, icon, isLink = false, trailingElement, component, ...props }) => {
|
|
4841
4927
|
// Determine if secondary text should be shown based on size
|
|
4842
|
-
const showSecondaryText = secondaryText &&
|
|
4843
|
-
|
|
4844
|
-
|
|
4928
|
+
const showSecondaryText = secondaryText &&
|
|
4929
|
+
(size === 'large' || size === 'xlarge' || size === 'xxlarge' || size === 'xxxlarge');
|
|
4930
|
+
// Determine if badge should be shown (for xxlarge/xxxlarge)
|
|
4931
|
+
const showBadge = badge && (size === 'xxlarge' || size === 'xxxlarge');
|
|
4845
4932
|
// Prepare primary text with badge if needed
|
|
4846
4933
|
const primaryContent = showBadge ? (jsxs(Fragment, { children: [primaryText, ' ', jsx(Typography, { component: "span", className: "list-item-badge", children: badge })] })) : (primaryText);
|
|
4847
4934
|
return (jsxs(StyledListItemButton$1, { size: size, isLink: isLink, hasSecondaryText: !!showSecondaryText, ...(component && { component }), ...props, children: [icon && jsx(ListItemIcon, { children: icon }), jsx(ListItemText, { primary: primaryContent, secondary: showSecondaryText ? secondaryText : undefined, sx: { minWidth: 0, flex: 1 }, slotProps: {
|
|
@@ -4980,39 +5067,46 @@ const NeoListItemButton = ({ children, selected = false, disabled = false, ...pr
|
|
|
4980
5067
|
};
|
|
4981
5068
|
NeoListItemButton.displayName = 'NeoListItemButton';
|
|
4982
5069
|
|
|
5070
|
+
const StyledMenu = styled(Menu)(({ theme }) => ({
|
|
5071
|
+
[`& .${paperClasses.root}`]: {
|
|
5072
|
+
backgroundColor: semanticColors.surfaces.white,
|
|
5073
|
+
borderRadius: borderRadius.s,
|
|
5074
|
+
border: `1px solid ${semanticColors.border.primary}`,
|
|
5075
|
+
boxShadow: `${shadows.dropdown.x}px ${shadows.dropdown.y}px ${shadows.dropdown.blur}px ${shadows.dropdown.spread}px ${shadows.dropdown.shadow}`,
|
|
5076
|
+
minWidth: 200,
|
|
5077
|
+
marginTop: theme.spacing(1),
|
|
5078
|
+
paddingTop: theme.spacing(1),
|
|
5079
|
+
paddingBottom: theme.spacing(1),
|
|
5080
|
+
},
|
|
5081
|
+
[`& .${listClasses.root}`]: {
|
|
5082
|
+
padding: 0,
|
|
5083
|
+
},
|
|
5084
|
+
}));
|
|
4983
5085
|
/**
|
|
4984
|
-
*
|
|
5086
|
+
* NeoMenu - Menu component based on MUI Menu
|
|
4985
5087
|
*
|
|
4986
|
-
* @
|
|
4987
|
-
* ```tsx
|
|
4988
|
-
* // Before
|
|
4989
|
-
* <NeoMarketplaceCard logo={...} title="Java" ... />
|
|
4990
|
-
*
|
|
4991
|
-
* // After
|
|
4992
|
-
* <NeoCard size="small" logo={...} title="Java" ... />
|
|
4993
|
-
* ```
|
|
4994
|
-
*/
|
|
4995
|
-
const NeoMarketplaceCard = (props) => {
|
|
4996
|
-
return jsx(NeoCard, { size: "small", ...props });
|
|
4997
|
-
};
|
|
4998
|
-
NeoMarketplaceCard.displayName = 'NeoMarketplaceCard';
|
|
4999
|
-
|
|
5000
|
-
/**
|
|
5001
|
-
* @deprecated Use `NeoCard` with `size="large"` instead.
|
|
5088
|
+
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=11141-4980
|
|
5002
5089
|
*
|
|
5003
5090
|
* @example
|
|
5004
5091
|
* ```tsx
|
|
5005
|
-
*
|
|
5006
|
-
*
|
|
5092
|
+
* const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
|
|
5093
|
+
* const open = Boolean(anchorEl);
|
|
5007
5094
|
*
|
|
5008
|
-
*
|
|
5009
|
-
* <
|
|
5095
|
+
* <Button onClick={(e) => setAnchorEl(e.currentTarget)}>Open Menu</Button>
|
|
5096
|
+
* <NeoMenu
|
|
5097
|
+
* open={open}
|
|
5098
|
+
* anchorEl={anchorEl}
|
|
5099
|
+
* onClose={() => setAnchorEl(null)}
|
|
5100
|
+
* >
|
|
5101
|
+
* <NeoMenuItem icon={<Icon />} shortcut="⌘+P">View profile</NeoMenuItem>
|
|
5102
|
+
* <NeoMenuItem>Settings</NeoMenuItem>
|
|
5103
|
+
* </NeoMenu>
|
|
5010
5104
|
* ```
|
|
5011
5105
|
*/
|
|
5012
|
-
const
|
|
5013
|
-
return jsx(
|
|
5106
|
+
const NeoMenu = ({ children, ...props }) => {
|
|
5107
|
+
return jsx(StyledMenu, { ...props, children: children });
|
|
5014
5108
|
};
|
|
5015
|
-
|
|
5109
|
+
NeoMenu.displayName = 'NeoMenu';
|
|
5016
5110
|
|
|
5017
5111
|
// ============================================================================
|
|
5018
5112
|
// NeoModal - Main Dialog Container
|
|
@@ -5324,9 +5418,9 @@ const TagPill = styled('span')(({ theme }) => ({
|
|
|
5324
5418
|
*
|
|
5325
5419
|
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=8455-6120
|
|
5326
5420
|
*/
|
|
5327
|
-
|
|
5421
|
+
function NeoNavigationItem({ icon, label, selected = false, tag, children, ...props }) {
|
|
5328
5422
|
return (jsxs(StyledRoot, { selected: selected, disableRipple: true, ...props, children: [jsx(IconPadding, { className: "neo-nav-icon-padding", children: icon }), label && jsx(Label$2, { className: "neo-nav-label", children: label }), tag && jsx(TagPill, { children: tag }), children] }));
|
|
5329
|
-
}
|
|
5423
|
+
}
|
|
5330
5424
|
NeoNavigationItem.displayName = 'NeoNavigationItem';
|
|
5331
5425
|
|
|
5332
5426
|
/**
|
|
@@ -5982,127 +6076,6 @@ const NeoSkeleton = ({ colorTheme = 'light', position = 'start', ...props }) =>
|
|
|
5982
6076
|
};
|
|
5983
6077
|
NeoSkeleton.displayName = 'NeoSkeleton';
|
|
5984
6078
|
|
|
5985
|
-
/**
|
|
5986
|
-
* Styled Alert component with custom severity and variant styling
|
|
5987
|
-
* Uses Custom Variants Pattern to add 'neutral' and 'info' severities
|
|
5988
|
-
*/
|
|
5989
|
-
const StyledAlert$1 = styled(Alert, {
|
|
5990
|
-
shouldForwardProp: prop => prop !== 'severity' && prop !== 'variant',
|
|
5991
|
-
})(({ theme, severity = 'success', variant = 'outlined' }) => {
|
|
5992
|
-
// Color mapping for different severities
|
|
5993
|
-
const colorMap = {
|
|
5994
|
-
success: {
|
|
5995
|
-
light: semanticColors.status.success.light,
|
|
5996
|
-
medium: semanticColors.status.success.default,
|
|
5997
|
-
},
|
|
5998
|
-
error: {
|
|
5999
|
-
light: semanticColors.status.error.light,
|
|
6000
|
-
medium: semanticColors.status.error.default,
|
|
6001
|
-
},
|
|
6002
|
-
neutral: {
|
|
6003
|
-
light: semanticColors.status.neutral.light,
|
|
6004
|
-
medium: semanticColors.status.neutral.default,
|
|
6005
|
-
},
|
|
6006
|
-
info: {
|
|
6007
|
-
light: semanticColors.status.info.light,
|
|
6008
|
-
medium: semanticColors.status.info.default,
|
|
6009
|
-
},
|
|
6010
|
-
};
|
|
6011
|
-
const severityColors = colorMap[severity];
|
|
6012
|
-
// Variant-specific styles based on Phase 1.1 analysis
|
|
6013
|
-
const variantStyles = (() => {
|
|
6014
|
-
if (variant === 'filled') {
|
|
6015
|
-
// Dark mode: solid background with white text
|
|
6016
|
-
return {
|
|
6017
|
-
backgroundColor: severityColors.medium,
|
|
6018
|
-
border: 'none',
|
|
6019
|
-
color: semanticColors.typography.tooltip,
|
|
6020
|
-
padding: theme.spacing(0.75, 3),
|
|
6021
|
-
boxShadow: `0px 1px 3px ${semanticColors.surfaces.shadowNeutral}1a`, // 1a = 10% opacity
|
|
6022
|
-
[`& .${alertClasses.icon}`]: {
|
|
6023
|
-
color: semanticColors.typography.tooltip,
|
|
6024
|
-
},
|
|
6025
|
-
[`& .${alertClasses.message}`]: {
|
|
6026
|
-
color: semanticColors.typography.tooltip,
|
|
6027
|
-
},
|
|
6028
|
-
};
|
|
6029
|
-
}
|
|
6030
|
-
// Light mode: light background with border
|
|
6031
|
-
return {
|
|
6032
|
-
backgroundColor: severityColors.light,
|
|
6033
|
-
border: `1px solid ${severityColors.medium}`,
|
|
6034
|
-
color: colors.grey[800],
|
|
6035
|
-
padding: theme.spacing(0.125, 2),
|
|
6036
|
-
[`& .${alertClasses.icon}`]: {
|
|
6037
|
-
color: severityColors.medium,
|
|
6038
|
-
},
|
|
6039
|
-
[`& .${alertClasses.message}`]: {
|
|
6040
|
-
color: colors.grey[800],
|
|
6041
|
-
},
|
|
6042
|
-
};
|
|
6043
|
-
})();
|
|
6044
|
-
return {
|
|
6045
|
-
height: spacing.spacing_8,
|
|
6046
|
-
width: '100%',
|
|
6047
|
-
borderRadius: borderRadius.xS,
|
|
6048
|
-
alignItems: 'center',
|
|
6049
|
-
fontFamily: typography.fontFamily.body,
|
|
6050
|
-
fontSize: theme.typography.pxToRem(typography.fontSize.default),
|
|
6051
|
-
fontWeight: typography.fontWeight.medium,
|
|
6052
|
-
lineHeight: 1.5,
|
|
6053
|
-
...variantStyles,
|
|
6054
|
-
// Supporting text styling
|
|
6055
|
-
[`& .${alertClasses.message} > *:not(:first-child)`]: {
|
|
6056
|
-
fontSize: theme.typography.pxToRem(typography.fontSize.sm),
|
|
6057
|
-
fontWeight: typography.fontWeight.regular,
|
|
6058
|
-
color: variant === 'filled'
|
|
6059
|
-
? semanticColors.typography.tooltip
|
|
6060
|
-
: semanticColors.typography.bodySecondary,
|
|
6061
|
-
lineHeight: 1.4,
|
|
6062
|
-
marginTop: theme.spacing(0.25),
|
|
6063
|
-
},
|
|
6064
|
-
};
|
|
6065
|
-
});
|
|
6066
|
-
/**
|
|
6067
|
-
* NeoStatusBanner - Status banner component for displaying system status messages
|
|
6068
|
-
*
|
|
6069
|
-
* Displays status information with different severity levels (success, error, info, neutral) and
|
|
6070
|
-
* visual modes (outlined for light backgrounds, filled for emphasis).
|
|
6071
|
-
*
|
|
6072
|
-
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4921-3427
|
|
6073
|
-
*
|
|
6074
|
-
* Figma Props Mapping:
|
|
6075
|
-
* - Status (Success|Error|Info|Offline) → severity ('success'|'error'|'info'|'neutral')
|
|
6076
|
-
* - Mode (Light|Dark) → variant ('outlined'|'filled')
|
|
6077
|
-
*
|
|
6078
|
-
* Design Tokens Used:
|
|
6079
|
-
* - status.success.light, status.success.default
|
|
6080
|
-
* - status.error.light, status.error.default
|
|
6081
|
-
* - status.neutral.light, status.neutral.default
|
|
6082
|
-
* - status.info.light, status.info.default
|
|
6083
|
-
* - typography.tooltip, typography.bodySecondary
|
|
6084
|
-
* - grey[800]
|
|
6085
|
-
* - fontSize.default, fontSize.sm
|
|
6086
|
-
* - fontWeight.medium, fontWeight.regular
|
|
6087
|
-
* - fontFamily.body
|
|
6088
|
-
* - surfaces.shadowNeutral
|
|
6089
|
-
*/
|
|
6090
|
-
const NeoStatusBanner = ({ severity = 'success', variant = 'outlined', icon, children, ...props }) => {
|
|
6091
|
-
// Icon mapping for different severities
|
|
6092
|
-
const iconMap = {
|
|
6093
|
-
success: jsx(CircleCheck, { size: 24 }),
|
|
6094
|
-
error: jsx(CircleAlert, { size: 24 }),
|
|
6095
|
-
neutral: jsx(WifiOff, { size: 24 }),
|
|
6096
|
-
info: jsx(Info, { size: 24 }),
|
|
6097
|
-
};
|
|
6098
|
-
const defaultIcon = iconMap[severity];
|
|
6099
|
-
// Type assertion needed: severity and variant are custom props filtered by shouldForwardProp
|
|
6100
|
-
// biome-ignore lint/suspicious/noExplicitAny: Custom props pattern requires any cast
|
|
6101
|
-
const StyledAlertAny = StyledAlert$1;
|
|
6102
|
-
return (jsx(StyledAlertAny, { ...props, severity: severity, variant: variant, icon: icon ?? defaultIcon, children: children }));
|
|
6103
|
-
};
|
|
6104
|
-
NeoStatusBanner.displayName = 'NeoStatusBanner';
|
|
6105
|
-
|
|
6106
6079
|
/**
|
|
6107
6080
|
* NeoTabs - Tabs container component based on MUI Tabs
|
|
6108
6081
|
*
|
|
@@ -6137,7 +6110,20 @@ const StyledTab = styled(MuiTab)(({ theme }) => ({
|
|
|
6137
6110
|
color: semanticColors.typography.tab.active,
|
|
6138
6111
|
fontWeight: typography.fontWeight.semiBold,
|
|
6139
6112
|
},
|
|
6113
|
+
'&:hover': {
|
|
6114
|
+
backgroundColor: semanticColors.buttons.secondary.hoverBackground,
|
|
6115
|
+
[`&.${tabClasses.selected}::after`]: {
|
|
6116
|
+
content: '""',
|
|
6117
|
+
position: 'absolute',
|
|
6118
|
+
bottom: 0,
|
|
6119
|
+
left: 0,
|
|
6120
|
+
right: 0,
|
|
6121
|
+
height: 2,
|
|
6122
|
+
backgroundColor: semanticColors.buttons.primary.hover,
|
|
6123
|
+
},
|
|
6124
|
+
},
|
|
6140
6125
|
[`&.${buttonBaseClasses.focusVisible}`]: {
|
|
6126
|
+
color: semanticColors.typography.tab.active,
|
|
6141
6127
|
outline: `2px solid ${semanticColors.border.focus}`,
|
|
6142
6128
|
outlineOffset: -2,
|
|
6143
6129
|
},
|
|
@@ -6145,6 +6131,21 @@ const StyledTab = styled(MuiTab)(({ theme }) => ({
|
|
|
6145
6131
|
color: semanticColors.typography.button.disabled,
|
|
6146
6132
|
cursor: 'not-allowed',
|
|
6147
6133
|
pointerEvents: 'auto',
|
|
6134
|
+
'&:hover': {
|
|
6135
|
+
backgroundColor: 'transparent',
|
|
6136
|
+
},
|
|
6137
|
+
[`&.${tabClasses.selected}`]: {
|
|
6138
|
+
color: semanticColors.typography.button.disabled,
|
|
6139
|
+
'&::after': {
|
|
6140
|
+
content: '""',
|
|
6141
|
+
position: 'absolute',
|
|
6142
|
+
bottom: 0,
|
|
6143
|
+
left: 0,
|
|
6144
|
+
right: 0,
|
|
6145
|
+
height: 2,
|
|
6146
|
+
backgroundColor: semanticColors.buttons.tertiary.disabled,
|
|
6147
|
+
},
|
|
6148
|
+
},
|
|
6148
6149
|
},
|
|
6149
6150
|
}));
|
|
6150
6151
|
const TabLabelContainer = styled('span')(({ theme }) => ({
|
|
@@ -6159,10 +6160,7 @@ const TabLabelContainer = styled('span')(({ theme }) => ({
|
|
|
6159
6160
|
*
|
|
6160
6161
|
* Figma Props Mapping:
|
|
6161
6162
|
* - Current=True/False → Controlled by parent NeoTabs value
|
|
6162
|
-
* -
|
|
6163
|
-
* - State=Hover → CSS :hover
|
|
6164
|
-
* - State=Focus → CSS :focus-visible
|
|
6165
|
-
* - Tag count → count prop (renders NeoTag)
|
|
6163
|
+
* - Show tag → count prop (renders NeoTag)
|
|
6166
6164
|
* - Text label → label prop
|
|
6167
6165
|
*/
|
|
6168
6166
|
const NeoTab = ({ label, count, ...props }) => {
|
|
@@ -6171,18 +6169,37 @@ const NeoTab = ({ label, count, ...props }) => {
|
|
|
6171
6169
|
};
|
|
6172
6170
|
NeoTab.displayName = 'NeoTab';
|
|
6173
6171
|
|
|
6172
|
+
const intentColors = {
|
|
6173
|
+
info: semanticColors.status.info,
|
|
6174
|
+
success: semanticColors.status.success,
|
|
6175
|
+
error: semanticColors.status.error,
|
|
6176
|
+
warning: semanticColors.status.warning,
|
|
6177
|
+
neutral: semanticColors.status.neutral,
|
|
6178
|
+
};
|
|
6174
6179
|
// biome-ignore lint/suspicious/noExplicitAny: Type cast required to override MUI Alert variant type without global augmentation
|
|
6175
6180
|
const StyledAlert = styled(Alert, {
|
|
6176
|
-
shouldForwardProp: prop => prop !== '
|
|
6177
|
-
})(({ theme,
|
|
6178
|
-
|
|
6179
|
-
const
|
|
6181
|
+
shouldForwardProp: prop => prop !== 'intent' && prop !== 'toastType',
|
|
6182
|
+
})(({ theme, intent = 'neutral', toastType = 'outlined' }) => {
|
|
6183
|
+
const palette = intentColors[intent];
|
|
6184
|
+
const typeStyles = toastType === 'filled'
|
|
6185
|
+
? {
|
|
6186
|
+
backgroundColor: palette.dark,
|
|
6187
|
+
color: semanticColors.surfaces.white,
|
|
6188
|
+
border: `1px solid ${palette.dark}`,
|
|
6189
|
+
}
|
|
6190
|
+
: {
|
|
6191
|
+
backgroundColor: palette.light,
|
|
6192
|
+
color: colors.grey['800'],
|
|
6193
|
+
border: `1px solid ${palette.default}`,
|
|
6194
|
+
};
|
|
6195
|
+
return {
|
|
6180
6196
|
padding: spacing.spacing_2,
|
|
6181
6197
|
borderRadius: borderRadius.s,
|
|
6182
6198
|
gap: spacing.spacing_4,
|
|
6183
6199
|
alignItems: 'flex-start',
|
|
6184
6200
|
fontSize: theme.typography.pxToRem(typography.fontSize.sm),
|
|
6185
6201
|
lineHeight: 1.4,
|
|
6202
|
+
...typeStyles,
|
|
6186
6203
|
[`& .${alertClasses.icon}`]: {
|
|
6187
6204
|
display: 'none',
|
|
6188
6205
|
},
|
|
@@ -6198,76 +6215,31 @@ const StyledAlert = styled(Alert, {
|
|
|
6198
6215
|
marginRight: 0,
|
|
6199
6216
|
},
|
|
6200
6217
|
};
|
|
6201
|
-
// Variant-specific styles
|
|
6202
|
-
const variantStyles = {
|
|
6203
|
-
default: {
|
|
6204
|
-
backgroundColor: semanticColors.surfaces.snackbarDarkMode,
|
|
6205
|
-
color: colors.grey['800'],
|
|
6206
|
-
border: `1px solid ${semanticColors.border.primary}`,
|
|
6207
|
-
},
|
|
6208
|
-
dark: {
|
|
6209
|
-
backgroundColor: semanticColors.surfaces.snackbarLightMode,
|
|
6210
|
-
color: semanticColors.surfaces.white,
|
|
6211
|
-
border: `1px solid ${semanticColors.surfaces.snackbarLightMode}`,
|
|
6212
|
-
},
|
|
6213
|
-
brand: {
|
|
6214
|
-
backgroundColor: semanticColors.surfaces.snackbarBrand,
|
|
6215
|
-
color: semanticColors.surfaces.white,
|
|
6216
|
-
border: `1px solid ${semanticColors.surfaces.snackbarBrand}`,
|
|
6217
|
-
},
|
|
6218
|
-
error: {
|
|
6219
|
-
backgroundColor: semanticColors.status.error.light,
|
|
6220
|
-
color: semanticColors.status.error.dark,
|
|
6221
|
-
border: `1px solid ${semanticColors.status.error.default}`,
|
|
6222
|
-
},
|
|
6223
|
-
success: {
|
|
6224
|
-
backgroundColor: semanticColors.status.success.light,
|
|
6225
|
-
color: semanticColors.status.success.dark,
|
|
6226
|
-
border: `1px solid ${semanticColors.status.success.default}`,
|
|
6227
|
-
},
|
|
6228
|
-
info: {
|
|
6229
|
-
backgroundColor: semanticColors.status.info.light,
|
|
6230
|
-
color: semanticColors.status.info.dark,
|
|
6231
|
-
border: `1px solid ${semanticColors.status.info.default}`,
|
|
6232
|
-
},
|
|
6233
|
-
};
|
|
6234
|
-
return {
|
|
6235
|
-
...baseStyles,
|
|
6236
|
-
...variantStyles[variant],
|
|
6237
|
-
};
|
|
6238
6218
|
});
|
|
6239
|
-
const ToastTitle = styled('p')(({ theme,
|
|
6240
|
-
const
|
|
6241
|
-
|
|
6242
|
-
dark: semanticColors.surfaces.white,
|
|
6243
|
-
brand: semanticColors.surfaces.white,
|
|
6244
|
-
error: semanticColors.status.error.dark,
|
|
6245
|
-
success: semanticColors.status.success.dark,
|
|
6246
|
-
info: semanticColors.status.info.dark,
|
|
6247
|
-
};
|
|
6219
|
+
const ToastTitle = styled('p')(({ theme, intent = 'neutral', toastType = 'outlined' }) => {
|
|
6220
|
+
const palette = intentColors[intent];
|
|
6221
|
+
const color = toastType === 'filled' ? semanticColors.surfaces.white : palette.dark;
|
|
6248
6222
|
return {
|
|
6249
6223
|
margin: 0,
|
|
6250
6224
|
fontSize: theme.typography.pxToRem(typography.fontSize.sm),
|
|
6251
6225
|
fontWeight: typography.fontWeight.semiBold,
|
|
6252
6226
|
lineHeight: 1.4,
|
|
6253
|
-
color
|
|
6227
|
+
color,
|
|
6254
6228
|
};
|
|
6255
6229
|
});
|
|
6256
|
-
const ToastMessage = styled('p')(({ theme,
|
|
6257
|
-
const
|
|
6258
|
-
|
|
6259
|
-
|
|
6260
|
-
|
|
6261
|
-
|
|
6262
|
-
|
|
6263
|
-
info: semanticColors.status.info.dark,
|
|
6264
|
-
};
|
|
6230
|
+
const ToastMessage = styled('p')(({ theme, intent = 'neutral', toastType = 'outlined' }) => {
|
|
6231
|
+
const palette = intentColors[intent];
|
|
6232
|
+
const color = toastType === 'filled'
|
|
6233
|
+
? colors.grey['200']
|
|
6234
|
+
: intent === 'neutral'
|
|
6235
|
+
? semanticColors.typography.bodySecondary
|
|
6236
|
+
: palette.dark;
|
|
6265
6237
|
return {
|
|
6266
6238
|
margin: 0,
|
|
6267
6239
|
fontSize: theme.typography.pxToRem(typography.fontSize.sm),
|
|
6268
6240
|
fontWeight: typography.fontWeight.regular,
|
|
6269
6241
|
lineHeight: 1.4,
|
|
6270
|
-
color
|
|
6242
|
+
color,
|
|
6271
6243
|
};
|
|
6272
6244
|
});
|
|
6273
6245
|
const ToastActions = styled(Stack)({
|
|
@@ -6276,30 +6248,20 @@ const ToastActions = styled(Stack)({
|
|
|
6276
6248
|
justifyContent: 'flex-start',
|
|
6277
6249
|
});
|
|
6278
6250
|
const ToastButton = styled(Button, {
|
|
6279
|
-
shouldForwardProp: prop => prop !== '
|
|
6280
|
-
})(({
|
|
6251
|
+
shouldForwardProp: prop => prop !== 'toastIntent' && prop !== 'toastType' && prop !== 'primary',
|
|
6252
|
+
})(({ toastIntent = 'neutral', toastType = 'outlined', primary }) => {
|
|
6253
|
+
const palette = intentColors[toastIntent];
|
|
6281
6254
|
const getColor = () => {
|
|
6255
|
+
if (toastType === 'filled') {
|
|
6256
|
+
return primary ? colors.digitalBlue['200'] : semanticColors.surfaces.white;
|
|
6257
|
+
}
|
|
6282
6258
|
if (primary) {
|
|
6283
|
-
if (toastVariant === 'dark' || toastVariant === 'brand') {
|
|
6284
|
-
return colors.digitalBlue['200'];
|
|
6285
|
-
}
|
|
6286
6259
|
return semanticColors.typography.link.primary;
|
|
6287
6260
|
}
|
|
6288
|
-
|
|
6289
|
-
|
|
6290
|
-
return semanticColors.surfaces.white;
|
|
6291
|
-
}
|
|
6292
|
-
if (toastVariant === 'error') {
|
|
6293
|
-
return semanticColors.status.error.dark;
|
|
6294
|
-
}
|
|
6295
|
-
if (toastVariant === 'success') {
|
|
6296
|
-
return semanticColors.status.success.dark;
|
|
6261
|
+
if (toastIntent === 'neutral') {
|
|
6262
|
+
return semanticColors.icons.placeholder;
|
|
6297
6263
|
}
|
|
6298
|
-
|
|
6299
|
-
return semanticColors.status.info.dark;
|
|
6300
|
-
}
|
|
6301
|
-
// default variant uses icon placeholder color
|
|
6302
|
-
return semanticColors.icons.placeholder;
|
|
6264
|
+
return palette.dark;
|
|
6303
6265
|
};
|
|
6304
6266
|
return {
|
|
6305
6267
|
padding: 0,
|
|
@@ -6319,22 +6281,17 @@ const ToastButton = styled(Button, {
|
|
|
6319
6281
|
* NeoToast - Notification/Toast component based on MUI Alert
|
|
6320
6282
|
*
|
|
6321
6283
|
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4122-37223
|
|
6322
|
-
|
|
6323
|
-
|
|
6324
|
-
|
|
6325
|
-
|
|
6326
|
-
|
|
6327
|
-
* - xCloseButton → showClose (boolean)
|
|
6328
|
-
* - actions → actions (ReactNode)
|
|
6329
|
-
*/
|
|
6330
|
-
const NeoToast = ({ variant = 'default', title, message, showClose = true, actions, onClose, ...props }) => {
|
|
6331
|
-
return (jsxs(StyledAlert, { ...props, variant: variant, action: showClose ? (jsx(IconButton, { size: "small", onClick: onClose, sx: { color: semanticColors.icons.placeholder }, children: jsx(X, { size: 16 }) })) : undefined, children: [jsxs(Stack, { sx: { gap: `${spacing.spacing_1}px`, width: '100%' }, children: [title && jsx(ToastTitle, { variant: variant, children: title }), message && jsx(ToastMessage, { variant: variant, children: message })] }), actions && jsx(ToastActions, { direction: "row", children: actions })] }));
|
|
6284
|
+
*/
|
|
6285
|
+
const NeoToast = ({ intent = 'neutral', type = 'outlined', title, message, showClose = false, actions, onClose, ...props }) => {
|
|
6286
|
+
const palette = intentColors[intent];
|
|
6287
|
+
const closeIconColor = type === 'filled' ? semanticColors.surfaces.white : palette.default;
|
|
6288
|
+
return (jsxs(StyledAlert, { ...props, intent: intent, toastType: type, action: showClose ? (jsx(IconButton, { size: "small", onClick: onClose, sx: { color: closeIconColor }, children: jsx(X, { size: 16 }) })) : undefined, children: [jsxs(Stack, { sx: { gap: `${spacing.spacing_1}px`, width: '100%' }, children: [title && jsx(ToastTitle, { intent: intent, toastType: type, children: title }), message && jsx(ToastMessage, { intent: intent, toastType: type, children: message })] }), actions && jsx(ToastActions, { direction: "row", children: actions })] }));
|
|
6332
6289
|
};
|
|
6333
6290
|
/**
|
|
6334
6291
|
* Helper component for creating toast action buttons with proper styling
|
|
6335
6292
|
*/
|
|
6336
|
-
const NeoToastButton = ({ primary,
|
|
6337
|
-
return (jsx(ToastButton, { variant: "text",
|
|
6293
|
+
const NeoToastButton = ({ primary, intent = 'neutral', type = 'outlined', children, ...props }) => {
|
|
6294
|
+
return (jsx(ToastButton, { variant: "text", toastIntent: intent, toastType: type, primary: primary, ...props, children: children }));
|
|
6338
6295
|
};
|
|
6339
6296
|
NeoToast.displayName = 'NeoToast';
|
|
6340
6297
|
NeoToastButton.displayName = 'NeoToastButton';
|
|
@@ -6435,7 +6392,7 @@ const StyledSwitch = styled(Switch, {
|
|
|
6435
6392
|
[`& .${switchClasses.thumb}`]: {
|
|
6436
6393
|
width: config.thumbSize,
|
|
6437
6394
|
height: config.thumbSize,
|
|
6438
|
-
boxShadow: `${shadows.
|
|
6395
|
+
boxShadow: `${shadows.neutral.small.x}px ${shadows.neutral.small.y}px ${shadows.neutral.small.blur}px ${shadows.neutral.small.spread}px ${shadows.neutral.small.shadow}`,
|
|
6439
6396
|
transition: theme.transitions.create(['width'], {
|
|
6440
6397
|
duration: theme.transitions.duration.shortest,
|
|
6441
6398
|
}),
|
|
@@ -6579,7 +6536,7 @@ const variantConfig = {
|
|
|
6579
6536
|
*/
|
|
6580
6537
|
const StyledTooltip = styled(Tooltip, {
|
|
6581
6538
|
shouldForwardProp: prop => prop !== 'variant' && prop !== 'description',
|
|
6582
|
-
})(({
|
|
6539
|
+
})(({ variant = 'light', description }) => {
|
|
6583
6540
|
const hasDescription = Boolean(description);
|
|
6584
6541
|
const variantStyles = variantConfig[variant];
|
|
6585
6542
|
return {
|
|
@@ -6587,24 +6544,21 @@ const StyledTooltip = styled(Tooltip, {
|
|
|
6587
6544
|
[`& .${tooltipClasses.tooltip}`]: {
|
|
6588
6545
|
backgroundColor: variantStyles.backgroundColor,
|
|
6589
6546
|
color: variantStyles.color,
|
|
6590
|
-
fontSize:
|
|
6591
|
-
fontWeight:
|
|
6592
|
-
lineHeight: hasDescription ? 1.5 : 1,
|
|
6593
|
-
borderRadius: hasDescription ?
|
|
6594
|
-
padding: hasDescription
|
|
6595
|
-
? theme.spacing(1.5) // 12px all sides
|
|
6596
|
-
: theme.spacing(0, 1), // 0 vertical, 8px horizontal
|
|
6547
|
+
fontSize: typography.fontSize.xs,
|
|
6548
|
+
fontWeight: typography.fontWeight.medium,
|
|
6549
|
+
lineHeight: hasDescription ? 1.5 : 1,
|
|
6550
|
+
borderRadius: hasDescription ? borderRadius.s : borderRadius.xS,
|
|
6551
|
+
padding: hasDescription ? spacing.spacing_1_1_2 : `0 ${spacing.spacing_1}px`,
|
|
6597
6552
|
...(hasDescription && {
|
|
6598
6553
|
maxWidth: 296,
|
|
6599
6554
|
}),
|
|
6600
6555
|
...(!hasDescription && {
|
|
6601
|
-
height:
|
|
6556
|
+
height: spacing.spacing_3_1_4,
|
|
6602
6557
|
display: 'flex',
|
|
6603
6558
|
alignItems: 'center',
|
|
6604
6559
|
justifyContent: 'center',
|
|
6605
6560
|
}),
|
|
6606
|
-
|
|
6607
|
-
boxShadow: `${shadows.neutralMedium.x}px ${shadows.neutralMedium.y}px ${shadows.neutralMedium.blur}px ${shadows.neutralMedium.spread}px ${shadows.neutralMedium.shadow}`,
|
|
6561
|
+
boxShadow: `${shadows.neutral.medium.x}px ${shadows.neutral.medium.y}px ${shadows.neutral.medium.blur}px ${shadows.neutral.medium.spread}px ${shadows.neutral.medium.shadow}`,
|
|
6608
6562
|
},
|
|
6609
6563
|
// Style the arrow
|
|
6610
6564
|
[`& .${tooltipClasses.arrow}`]: {
|
|
@@ -6621,8 +6575,8 @@ const StyledTooltip = styled(Tooltip, {
|
|
|
6621
6575
|
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4091-26557&t=Bo58EpFmg6ILJtmv-11
|
|
6622
6576
|
*
|
|
6623
6577
|
* Figma Props Mapping:
|
|
6624
|
-
* -
|
|
6625
|
-
* -
|
|
6578
|
+
* - Theme (Light mode|Dark mode|Brand color) → variant ('light'|'dark'|'brand')
|
|
6579
|
+
* - Placement → arrow (boolean) + placement (top/bottom/left/right/etc)
|
|
6626
6580
|
* - Supporting text (True|False) → description (string|undefined)
|
|
6627
6581
|
* - text → title (string, literal content)
|
|
6628
6582
|
*
|
|
@@ -6845,5 +6799,5 @@ NeoTypologyControl.displayName = 'NeoTypologyControl';
|
|
|
6845
6799
|
|
|
6846
6800
|
const version = '0.0.0-development';
|
|
6847
6801
|
|
|
6848
|
-
export { ActivityScene, CIRCLE_RADIUS, NeoActivityHeader, NeoActivityIndicatorCell, NeoAvatar, NeoBadge, NeoBanner, NeoBreadcrumbLink, NeoBreadcrumbs, NeoButton, NeoButtonTab, NeoButtonTabGroup, NeoCard, NeoCheckbox, NeoCodeSnippet, NeoDataGrid, NeoDataGridCellContent, NeoDataGridColumnsButton, NeoDataGridColumnsPanel, NeoDataGridFilterPanel, NeoDataGridFilterPanelAddIcon, NeoDataGridFilterPanelDeleteIcon, NeoDataGridFilterPanelRemoveAllIcon, NeoDataGridFiltersButton, NeoDataGridHeaderLabel,
|
|
6802
|
+
export { ActivityScene, CIRCLE_RADIUS, NeoActivityHeader, NeoActivityIndicatorCell, NeoAlert, NeoAvatar, NeoBadge, NeoBanner, NeoBreadcrumbLink, NeoBreadcrumbs, NeoButton, NeoButtonTab, NeoButtonTabGroup, NeoCard, NeoCheckbox, NeoCodeSnippet, NeoDataGrid, NeoDataGridCellContent, NeoDataGridColumnsButton, NeoDataGridColumnsPanel, NeoDataGridFilterPanel, NeoDataGridFilterPanelAddIcon, NeoDataGridFilterPanelDeleteIcon, NeoDataGridFilterPanelRemoveAllIcon, NeoDataGridFiltersButton, NeoDataGridHeaderLabel, NeoSelect as NeoDataGridSelect, NeoDatePicker, NeoDivider, NeoDot, NeoDownloadToast, NeoSelect as NeoDropdown, NeoMenu as NeoDropdownMenu, NeoMenuItem as NeoDropdownMenuItem, NeoMenuItem as NeoDropdownOption, NeoFilterChip, NeoFooter, NeoGeneralAvatar, NeoIconButton, NeoIconWrapper, NeoInfiniteScrollGrid, NeoInputField, NeoListItem, NeoListItemButton, NeoLoadingSpinner, NeoMenu, NeoMenuItem, NeoModal, NeoModalContent, NeoModalFooter, NeoModalHeader, NeoMultiBadgesCell, NeoNavigationAvatar, NeoNavigationItem, NeoPageContent, NeoPaginatedGrid, NeoProgressbar, NeoQuickFilter, NeoRadio, NeoSearchChip, NeoSelect, NeoMenuItem as NeoSelectOption, NeoSkeleton, NeoStatusBadgeCell, NeoTab, NeoTabs, NeoTag, NeoToast, NeoToastButton, NeoToggle, NeoToolbar, NeoTooltip, NeoTreeItem, NeoTreeView, StyledToggleButton as NeoTypologyButton, NeoTypologyControl, NeoUserAvatarCell, SortedAscendingIcon, SortedDescendingIcon, UnsortedIcon, focusRingStyles, getDataGridHeaderStyles, neoRowHeights, version };
|
|
6849
6803
|
//# sourceMappingURL=index.esm.js.map
|