@moderneinc/neo-styled-components 2.6.0 → 2.7.0-next.e807e4

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/index.js CHANGED
@@ -14,7 +14,8 @@ var Breadcrumbs = require('@mui/material/Breadcrumbs');
14
14
  var Link = require('@mui/material/Link');
15
15
  var ButtonBase = require('@mui/material/ButtonBase');
16
16
  var CircularProgress = require('@mui/material/CircularProgress');
17
- var MuiButtonGroup = require('@mui/material/ButtonGroup');
17
+ var MuiToggleButton = require('@mui/material/ToggleButton');
18
+ var MuiToggleButtonGroup = require('@mui/material/ToggleButtonGroup');
18
19
  var Checkbox = require('@mui/material/Checkbox');
19
20
  var xDataGridPro = require('@mui/x-data-grid-pro');
20
21
  var Button = require('@mui/material/Button');
@@ -62,22 +63,20 @@ var Switch = require('@mui/material/Switch');
62
63
  var hooks = require('@mui/x-tree-view/hooks');
63
64
  var TreeItem = require('@mui/x-tree-view/TreeItem');
64
65
  var RichTreeViewPro = require('@mui/x-tree-view-pro/RichTreeViewPro');
65
- var ToggleButton = require('@mui/material/ToggleButton');
66
- var ToggleButtonGroup = require('@mui/material/ToggleButtonGroup');
67
66
 
68
67
  /**
69
- * Outline-based focus ring styles derived from Neo shadow tokens.
68
+ * Outline-based focus ring styles derived from Neo border tokens.
70
69
  * Uses CSS outline (not box-shadow) so focus rings are never clipped by overflow:hidden.
71
70
  *
72
- * Produces a double-ring effect: a white inner gap (via outline-offset) and a blue outer ring.
71
+ * Produces a double-ring effect: a white inner gap (via outline-offset) and a colored outer ring.
73
72
  */
74
73
  const focusRingStyles = {
75
- outline: `${neoDesign.shadows.focusBlue2.spread - neoDesign.shadows.focusWhite1.spread}px solid ${neoDesign.shadows.focusBlue2.shadow}`,
76
- outlineOffset: `${neoDesign.shadows.focusWhite1.spread}px`,
74
+ outline: `2px solid ${neoDesign.semanticColors.border.focus}`,
75
+ outlineOffset: '2px',
77
76
  };
78
77
 
79
78
  // biome-ignore lint/suspicious/noExplicitAny: Type cast required to override MUI Avatar variant type without global augmentation
80
- const StyledAvatar = styles.styled(Avatar, {
79
+ const StyledAvatar$1 = styles.styled(Avatar, {
81
80
  shouldForwardProp: prop => prop !== 'size' && prop !== 'variant',
82
81
  })(({ theme, size = 'medium', variant = 'circular' }) => ({
83
82
  boxSizing: 'border-box',
@@ -179,7 +178,7 @@ const AvatarContainer = styles.styled(Box)(({ size = 'medium' }) => ({
179
178
  */
180
179
  const NeoAvatar = ({ size = 'medium', variant = 'circular', ...props }) => {
181
180
  // shouldForwardProp filters out size and variant from being passed to the DOM
182
- const avatar = jsxRuntime.jsx(StyledAvatar, { size: size, variant: variant, ...props });
181
+ const avatar = jsxRuntime.jsx(StyledAvatar$1, { size: size, variant: variant, ...props });
183
182
  // Medium size with circular variant (image) gets wrapped in white container
184
183
  if (size === 'medium' && variant === 'circular') {
185
184
  return jsxRuntime.jsx(AvatarContainer, { size: size, children: avatar });
@@ -221,7 +220,7 @@ const StyledChip$2 = styles.styled(Chip)(({ theme }) => ({
221
220
  [`&.${Chip.chipClasses.colorDefault}`]: {
222
221
  backgroundColor: neoDesign.semanticColors.status.neutral.light,
223
222
  color: neoDesign.semanticColors.status.neutral.dark,
224
- border: `1px solid ${neoDesign.semanticColors.status.neutral.medium}80`,
223
+ border: `1px solid ${neoDesign.semanticColors.status.neutral.default}80`,
225
224
  [`& .${Chip.chipClasses.icon}, & .${Chip.chipClasses.deleteIcon}`]: {
226
225
  color: neoDesign.semanticColors.status.neutral.dark,
227
226
  },
@@ -230,7 +229,7 @@ const StyledChip$2 = styles.styled(Chip)(({ theme }) => ({
230
229
  [`&.${Chip.chipClasses.colorError}`]: {
231
230
  backgroundColor: neoDesign.semanticColors.status.error.light,
232
231
  color: neoDesign.semanticColors.status.error.dark,
233
- border: `1px solid ${neoDesign.semanticColors.status.error.medium}80`,
232
+ border: `1px solid ${neoDesign.semanticColors.status.error.default}80`,
234
233
  [`& .${Chip.chipClasses.icon}, & .${Chip.chipClasses.deleteIcon}`]: {
235
234
  color: neoDesign.semanticColors.status.error.dark,
236
235
  },
@@ -239,7 +238,7 @@ const StyledChip$2 = styles.styled(Chip)(({ theme }) => ({
239
238
  [`&.${Chip.chipClasses.colorWarning}`]: {
240
239
  backgroundColor: neoDesign.semanticColors.status.warning.light,
241
240
  color: neoDesign.semanticColors.status.warning.dark,
242
- border: `1px solid ${neoDesign.semanticColors.status.warning.medium}80`,
241
+ border: `1px solid ${neoDesign.semanticColors.status.warning.default}80`,
243
242
  [`& .${Chip.chipClasses.icon}, & .${Chip.chipClasses.deleteIcon}`]: {
244
243
  color: neoDesign.semanticColors.status.warning.dark,
245
244
  },
@@ -248,7 +247,7 @@ const StyledChip$2 = styles.styled(Chip)(({ theme }) => ({
248
247
  [`&.${Chip.chipClasses.colorSuccess}`]: {
249
248
  backgroundColor: neoDesign.semanticColors.status.success.light,
250
249
  color: neoDesign.semanticColors.status.success.dark,
251
- border: `1px solid ${neoDesign.semanticColors.status.success.medium}80`,
250
+ border: `1px solid ${neoDesign.semanticColors.status.success.default}80`,
252
251
  [`& .${Chip.chipClasses.icon}, & .${Chip.chipClasses.deleteIcon}`]: {
253
252
  color: neoDesign.semanticColors.status.success.dark,
254
253
  },
@@ -257,7 +256,7 @@ const StyledChip$2 = styles.styled(Chip)(({ theme }) => ({
257
256
  [`&.${Chip.chipClasses.colorInfo}`]: {
258
257
  backgroundColor: neoDesign.semanticColors.status.info.light,
259
258
  color: neoDesign.semanticColors.status.info.dark,
260
- border: `1px solid ${neoDesign.semanticColors.status.info.medium}80`,
259
+ border: `1px solid ${neoDesign.semanticColors.status.info.default}80`,
261
260
  [`& .${Chip.chipClasses.icon}, & .${Chip.chipClasses.deleteIcon}`]: {
262
261
  color: neoDesign.semanticColors.status.info.dark,
263
262
  },
@@ -691,11 +690,11 @@ const createLucideIcon = (iconName, iconNode) => {
691
690
  */
692
691
 
693
692
 
694
- const __iconNode$i = [
693
+ const __iconNode$j = [
695
694
  ["path", { d: "M12 5v14", key: "s699le" }],
696
695
  ["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
697
696
  ];
698
- const ArrowDown = createLucideIcon("arrow-down", __iconNode$i);
697
+ const ArrowDown = createLucideIcon("arrow-down", __iconNode$j);
699
698
 
700
699
  /**
701
700
  * @license lucide-react v0.577.0 - ISC
@@ -705,11 +704,11 @@ const ArrowDown = createLucideIcon("arrow-down", __iconNode$i);
705
704
  */
706
705
 
707
706
 
708
- const __iconNode$h = [
707
+ const __iconNode$i = [
709
708
  ["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
710
709
  ["path", { d: "M12 19V5", key: "x0mq9r" }]
711
710
  ];
712
- const ArrowUp = createLucideIcon("arrow-up", __iconNode$h);
711
+ const ArrowUp = createLucideIcon("arrow-up", __iconNode$i);
713
712
 
714
713
  /**
715
714
  * @license lucide-react v0.577.0 - ISC
@@ -719,7 +718,7 @@ const ArrowUp = createLucideIcon("arrow-up", __iconNode$h);
719
718
  */
720
719
 
721
720
 
722
- const __iconNode$g = [
721
+ const __iconNode$h = [
723
722
  ["path", { d: "M8 2v4", key: "1cmpym" }],
724
723
  ["path", { d: "M16 2v4", key: "4m81vk" }],
725
724
  ["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
@@ -731,7 +730,7 @@ const __iconNode$g = [
731
730
  ["path", { d: "M12 18h.01", key: "mhygvu" }],
732
731
  ["path", { d: "M16 18h.01", key: "kzsmim" }]
733
732
  ];
734
- const CalendarDays = createLucideIcon("calendar-days", __iconNode$g);
733
+ const CalendarDays = createLucideIcon("calendar-days", __iconNode$h);
735
734
 
736
735
  /**
737
736
  * @license lucide-react v0.577.0 - ISC
@@ -741,8 +740,8 @@ const CalendarDays = createLucideIcon("calendar-days", __iconNode$g);
741
740
  */
742
741
 
743
742
 
744
- const __iconNode$f = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
745
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$f);
743
+ const __iconNode$g = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
744
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$g);
746
745
 
747
746
  /**
748
747
  * @license lucide-react v0.577.0 - ISC
@@ -752,8 +751,8 @@ const ChevronDown = createLucideIcon("chevron-down", __iconNode$f);
752
751
  */
753
752
 
754
753
 
755
- const __iconNode$e = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
756
- const ChevronLeft = createLucideIcon("chevron-left", __iconNode$e);
754
+ const __iconNode$f = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
755
+ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$f);
757
756
 
758
757
  /**
759
758
  * @license lucide-react v0.577.0 - ISC
@@ -763,8 +762,8 @@ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$e);
763
762
  */
764
763
 
765
764
 
766
- const __iconNode$d = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
767
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$d);
765
+ const __iconNode$e = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
766
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$e);
768
767
 
769
768
  /**
770
769
  * @license lucide-react v0.577.0 - ISC
@@ -774,8 +773,8 @@ const ChevronRight = createLucideIcon("chevron-right", __iconNode$d);
774
773
  */
775
774
 
776
775
 
777
- const __iconNode$c = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
778
- const ChevronUp = createLucideIcon("chevron-up", __iconNode$c);
776
+ const __iconNode$d = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
777
+ const ChevronUp = createLucideIcon("chevron-up", __iconNode$d);
779
778
 
780
779
  /**
781
780
  * @license lucide-react v0.577.0 - ISC
@@ -785,11 +784,11 @@ const ChevronUp = createLucideIcon("chevron-up", __iconNode$c);
785
784
  */
786
785
 
787
786
 
788
- const __iconNode$b = [
787
+ const __iconNode$c = [
789
788
  ["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
790
789
  ["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
791
790
  ];
792
- const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$b);
791
+ const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$c);
793
792
 
794
793
  /**
795
794
  * @license lucide-react v0.577.0 - ISC
@@ -799,12 +798,12 @@ const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$b);
799
798
  */
800
799
 
801
800
 
802
- const __iconNode$a = [
801
+ const __iconNode$b = [
803
802
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
804
803
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
805
804
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
806
805
  ];
807
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$a);
806
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$b);
808
807
 
809
808
  /**
810
809
  * @license lucide-react v0.577.0 - ISC
@@ -814,11 +813,11 @@ const CircleAlert = createLucideIcon("circle-alert", __iconNode$a);
814
813
  */
815
814
 
816
815
 
817
- const __iconNode$9 = [
816
+ const __iconNode$a = [
818
817
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
819
818
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
820
819
  ];
821
- const CircleCheck = createLucideIcon("circle-check", __iconNode$9);
820
+ const CircleCheck = createLucideIcon("circle-check", __iconNode$a);
822
821
 
823
822
  /**
824
823
  * @license lucide-react v0.577.0 - ISC
@@ -828,12 +827,12 @@ const CircleCheck = createLucideIcon("circle-check", __iconNode$9);
828
827
  */
829
828
 
830
829
 
831
- const __iconNode$8 = [
830
+ const __iconNode$9 = [
832
831
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
833
832
  ["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
834
833
  ["path", { d: "M12 17h.01", key: "p32p05" }]
835
834
  ];
836
- const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$8);
835
+ const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$9);
837
836
 
838
837
  /**
839
838
  * @license lucide-react v0.577.0 - ISC
@@ -843,12 +842,12 @@ const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$8
843
842
  */
844
843
 
845
844
 
846
- const __iconNode$7 = [
845
+ const __iconNode$8 = [
847
846
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
848
847
  ["path", { d: "M9 3v18", key: "fh3hqa" }],
849
848
  ["path", { d: "M15 3v18", key: "14nvp0" }]
850
849
  ];
851
- const Columns3 = createLucideIcon("columns-3", __iconNode$7);
850
+ const Columns3 = createLucideIcon("columns-3", __iconNode$8);
852
851
 
853
852
  /**
854
853
  * @license lucide-react v0.577.0 - ISC
@@ -858,12 +857,12 @@ const Columns3 = createLucideIcon("columns-3", __iconNode$7);
858
857
  */
859
858
 
860
859
 
861
- const __iconNode$6 = [
860
+ const __iconNode$7 = [
862
861
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
863
862
  ["path", { d: "M12 16v-4", key: "1dtifu" }],
864
863
  ["path", { d: "M12 8h.01", key: "e9boi3" }]
865
864
  ];
866
- const Info = createLucideIcon("info", __iconNode$6);
865
+ const Info = createLucideIcon("info", __iconNode$7);
867
866
 
868
867
  /**
869
868
  * @license lucide-react v0.577.0 - ISC
@@ -873,12 +872,12 @@ const Info = createLucideIcon("info", __iconNode$6);
873
872
  */
874
873
 
875
874
 
876
- const __iconNode$5 = [
875
+ const __iconNode$6 = [
877
876
  ["path", { d: "M2 5h20", key: "1fs1ex" }],
878
877
  ["path", { d: "M6 12h12", key: "8npq4p" }],
879
878
  ["path", { d: "M9 19h6", key: "456am0" }]
880
879
  ];
881
- const ListFilter = createLucideIcon("list-filter", __iconNode$5);
880
+ const ListFilter = createLucideIcon("list-filter", __iconNode$6);
882
881
 
883
882
  /**
884
883
  * @license lucide-react v0.577.0 - ISC
@@ -888,11 +887,11 @@ const ListFilter = createLucideIcon("list-filter", __iconNode$5);
888
887
  */
889
888
 
890
889
 
891
- const __iconNode$4 = [
890
+ const __iconNode$5 = [
892
891
  ["path", { d: "M5 12h14", key: "1ays0h" }],
893
892
  ["path", { d: "M12 5v14", key: "s699le" }]
894
893
  ];
895
- const Plus = createLucideIcon("plus", __iconNode$4);
894
+ const Plus = createLucideIcon("plus", __iconNode$5);
896
895
 
897
896
  /**
898
897
  * @license lucide-react v0.577.0 - ISC
@@ -902,11 +901,11 @@ const Plus = createLucideIcon("plus", __iconNode$4);
902
901
  */
903
902
 
904
903
 
905
- const __iconNode$3 = [
904
+ const __iconNode$4 = [
906
905
  ["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
907
906
  ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
908
907
  ];
909
- const Search = createLucideIcon("search", __iconNode$3);
908
+ const Search = createLucideIcon("search", __iconNode$4);
910
909
 
911
910
  /**
912
911
  * @license lucide-react v0.577.0 - ISC
@@ -916,14 +915,35 @@ const Search = createLucideIcon("search", __iconNode$3);
916
915
  */
917
916
 
918
917
 
919
- const __iconNode$2 = [
918
+ const __iconNode$3 = [
920
919
  ["path", { d: "M10 11v6", key: "nco0om" }],
921
920
  ["path", { d: "M14 11v6", key: "outv1u" }],
922
921
  ["path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6", key: "miytrc" }],
923
922
  ["path", { d: "M3 6h18", key: "d0wm0j" }],
924
923
  ["path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2", key: "e791ji" }]
925
924
  ];
926
- const Trash2 = createLucideIcon("trash-2", __iconNode$2);
925
+ const Trash2 = createLucideIcon("trash-2", __iconNode$3);
926
+
927
+ /**
928
+ * @license lucide-react v0.577.0 - ISC
929
+ *
930
+ * This source code is licensed under the ISC license.
931
+ * See the LICENSE file in the root directory of this source tree.
932
+ */
933
+
934
+
935
+ const __iconNode$2 = [
936
+ [
937
+ "path",
938
+ {
939
+ 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",
940
+ key: "wmoenq"
941
+ }
942
+ ],
943
+ ["path", { d: "M12 9v4", key: "juzpu7" }],
944
+ ["path", { d: "M12 17h.01", key: "p32p05" }]
945
+ ];
946
+ const TriangleAlert = createLucideIcon("triangle-alert", __iconNode$2);
927
947
 
928
948
  /**
929
949
  * @license lucide-react v0.577.0 - ISC
@@ -960,15 +980,11 @@ const X = createLucideIcon("x", __iconNode);
960
980
 
961
981
  // biome-ignore lint/suspicious/noExplicitAny: Type cast required to override MUI Alert variant type without global augmentation
962
982
  const StyledAlert$2 = styles.styled(Alert, {
963
- shouldForwardProp: prop => prop !== 'messagePosition' && prop !== 'variant',
964
- })(({ variant = 'light', messagePosition = 'left' }) => {
965
- // Variant-specific styles
966
- const variantStyles = {
967
- dark: {
968
- backgroundColor: neoDesign.semanticColors.surfaces.snackbarBrand,
969
- color: neoDesign.semanticColors.surfaces.white,
970
- },
971
- light: {
983
+ shouldForwardProp: prop => prop !== 'messagePosition' && prop !== 'variant' && prop !== 'bannerType',
984
+ })(({ variant = 'info', bannerType = 'outlined', messagePosition = 'left' }) => {
985
+ // Outlined styles (light bg + colored border)
986
+ const outlinedStyles = {
987
+ info: {
972
988
  backgroundColor: neoDesign.semanticColors.status.info.light,
973
989
  color: neoDesign.colors.grey['800'],
974
990
  },
@@ -984,6 +1000,50 @@ const StyledAlert$2 = styles.styled(Alert, {
984
1000
  backgroundColor: neoDesign.semanticColors.status.warning.light,
985
1001
  color: neoDesign.colors.grey['800'],
986
1002
  },
1003
+ neutral: {
1004
+ backgroundColor: neoDesign.semanticColors.status.neutral.light,
1005
+ color: neoDesign.colors.grey['800'],
1006
+ },
1007
+ };
1008
+ // Filled styles (solid bg)
1009
+ const filledStyles = {
1010
+ info: {
1011
+ backgroundColor: neoDesign.semanticColors.status.info.dark,
1012
+ color: neoDesign.semanticColors.surfaces.white,
1013
+ },
1014
+ success: {
1015
+ backgroundColor: neoDesign.semanticColors.status.success.dark,
1016
+ color: neoDesign.semanticColors.surfaces.white,
1017
+ },
1018
+ error: {
1019
+ backgroundColor: neoDesign.semanticColors.status.error.dark,
1020
+ color: neoDesign.semanticColors.surfaces.white,
1021
+ },
1022
+ warning: {
1023
+ backgroundColor: neoDesign.semanticColors.status.warning.default,
1024
+ color: neoDesign.semanticColors.typography.warning,
1025
+ },
1026
+ neutral: {
1027
+ backgroundColor: neoDesign.semanticColors.surfaces.snackbarLightMode,
1028
+ color: neoDesign.semanticColors.surfaces.white,
1029
+ },
1030
+ };
1031
+ // Legacy variants (ignore bannerType)
1032
+ const legacyStyles = {
1033
+ dark: {
1034
+ backgroundColor: neoDesign.semanticColors.surfaces.snackbarBrand,
1035
+ color: neoDesign.semanticColors.surfaces.white,
1036
+ },
1037
+ light: {
1038
+ backgroundColor: neoDesign.semanticColors.status.info.light,
1039
+ color: neoDesign.colors.grey['800'],
1040
+ },
1041
+ };
1042
+ const getVariantStyles = () => {
1043
+ if (legacyStyles[variant])
1044
+ return legacyStyles[variant];
1045
+ const styleMap = bannerType === 'filled' ? filledStyles : outlinedStyles;
1046
+ return styleMap[variant] ?? outlinedStyles.info;
987
1047
  };
988
1048
  return {
989
1049
  width: '100%',
@@ -1000,7 +1060,7 @@ const StyledAlert$2 = styles.styled(Alert, {
1000
1060
  fontSize: neoDesign.typography.fontSize.default,
1001
1061
  fontWeight: neoDesign.typography.fontWeight.regular,
1002
1062
  lineHeight: 1.5,
1003
- ...variantStyles[variant],
1063
+ ...getVariantStyles(),
1004
1064
  [`& .${Alert.alertClasses.icon}`]: {
1005
1065
  padding: 0,
1006
1066
  opacity: 1,
@@ -1023,15 +1083,16 @@ const StyledAlert$2 = styles.styled(Alert, {
1023
1083
  },
1024
1084
  };
1025
1085
  });
1026
- const LinkText = styles.styled('span')(({ variant = 'light' }) => {
1086
+ const LinkText = styles.styled('span')(({ variant = 'info', bannerType = 'outlined' }) => {
1087
+ const isLegacy = variant === 'dark' || variant === 'light';
1088
+ const isFilled = !isLegacy && bannerType === 'filled';
1027
1089
  const getLinkColor = () => {
1028
- if (variant === 'dark') {
1029
- return neoDesign.semanticColors.typography.link.default; // #f9fafb (light gray/white)
1090
+ if (variant === 'dark' || isFilled) {
1091
+ return neoDesign.semanticColors.typography.link.default;
1030
1092
  }
1031
- if (variant === 'light') {
1032
- return neoDesign.semanticColors.typography.link.primary; // #2f42ff (blue)
1093
+ if (variant === 'light' || variant === 'info') {
1094
+ return neoDesign.semanticColors.typography.link.primary;
1033
1095
  }
1034
- // For success, error, warning - use dark body color #1f2937
1035
1096
  return neoDesign.colors.grey['800'];
1036
1097
  };
1037
1098
  return {
@@ -1056,29 +1117,34 @@ const StyledIconButton$1 = styles.styled(IconButton)(({ closeIconColor }) => ({
1056
1117
  * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4170-2158
1057
1118
  *
1058
1119
  * Figma Props Mapping:
1059
- * - color (Dark|Light|Success|Error|Warning) → variant (dark|light|success|error|warning)
1060
- * - messagePosition (Left|Center) → messagePosition ("left"|"center")
1061
- * - closeIcon (boolean) → showClose (boolean)
1062
- * - link (boolean) → linkText (string)
1063
- * - {Message}message (string)
1064
- */
1065
- const NeoBanner = ({ variant = 'light', message, messagePosition = 'left', linkText, showClose = true, icon, onClose, onLinkClick, ...props }) => {
1120
+ * - Intention (Info|Success|Error|Warning|Neutral) → variant (info|success|error|warning|neutral)
1121
+ * - Type (Outlined|Filled) → type ('outlined'|'filled')
1122
+ * - Message Position (Left|Center) → messagePosition ('left'|'center')
1123
+ * - Dismissible (boolean) → showClose (boolean)
1124
+ * - Show Link (boolean) linkText presence (string when shown)
1125
+ */
1126
+ const NeoBanner = ({ variant = 'info', type = 'outlined', message, messagePosition = 'left', linkText, showClose = true, icon, onClose, onLinkClick, ...props }) => {
1127
+ const isLegacy = variant === 'dark' || variant === 'light';
1128
+ const isFilled = !isLegacy && type === 'filled';
1066
1129
  const getCloseIconColor = () => {
1067
- if (variant === 'dark') {
1130
+ if (isFilled && variant === 'warning') {
1131
+ return neoDesign.semanticColors.typography.warning;
1132
+ }
1133
+ if (variant === 'dark' || isFilled) {
1068
1134
  return neoDesign.semanticColors.surfaces.white;
1069
1135
  }
1070
1136
  if (variant === 'success') {
1071
- return neoDesign.semanticColors.status.success.medium;
1137
+ return neoDesign.semanticColors.status.success.default;
1072
1138
  }
1073
1139
  if (variant === 'error') {
1074
- return neoDesign.semanticColors.status.error.medium;
1140
+ return neoDesign.semanticColors.status.error.default;
1075
1141
  }
1076
1142
  if (variant === 'warning') {
1077
- return neoDesign.semanticColors.status.warning.medium;
1143
+ return neoDesign.semanticColors.status.warning.default;
1078
1144
  }
1079
1145
  return neoDesign.colors.grey['800'];
1080
1146
  };
1081
- return (jsxRuntime.jsx(StyledAlert$2, { ...props, variant: variant, messagePosition: messagePosition, icon: messagePosition === 'left' ? icon || false : false, action: showClose ? (jsxRuntime.jsx(StyledIconButton$1, { size: "small", onClick: onClose, closeIconColor: getCloseIconColor(), children: jsxRuntime.jsx(X, { size: 24 }) })) : undefined, children: messagePosition === 'center' ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [icon, jsxRuntime.jsx("span", { children: message }), linkText && (jsxRuntime.jsx(LinkText, { variant: variant, onClick: onLinkClick, children: linkText }))] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { children: message }), linkText && (jsxRuntime.jsx(LinkText, { variant: variant, onClick: onLinkClick, children: linkText }))] })) }));
1147
+ return (jsxRuntime.jsx(StyledAlert$2, { ...props, variant: variant, bannerType: type, messagePosition: messagePosition, icon: messagePosition === 'left' ? icon || false : false, action: showClose ? (jsxRuntime.jsx(StyledIconButton$1, { size: "small", onClick: onClose, closeIconColor: getCloseIconColor(), children: jsxRuntime.jsx(X, { size: 24 }) })) : undefined, children: messagePosition === 'center' ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [icon, jsxRuntime.jsx("span", { children: message }), linkText && (jsxRuntime.jsx(LinkText, { variant: variant, bannerType: type, onClick: onLinkClick, children: linkText }))] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { children: message }), linkText && (jsxRuntime.jsx(LinkText, { variant: variant, bannerType: type, onClick: onLinkClick, children: linkText }))] })) }));
1082
1148
  };
1083
1149
  NeoBanner.displayName = 'NeoBanner';
1084
1150
 
@@ -1106,7 +1172,7 @@ const StyledBreadcrumbLink = styles.styled(Link, {
1106
1172
  color: current ? neoDesign.semanticColors.buttons.tertiary.hover : neoDesign.semanticColors.icons.hover,
1107
1173
  },
1108
1174
  '&:focus-visible': {
1109
- outline: `2px solid ${neoDesign.semanticColors.buttons.primary.focus}`,
1175
+ outline: `2px solid ${neoDesign.semanticColors.border.focus}`,
1110
1176
  outlineOffset: 2,
1111
1177
  },
1112
1178
  }));
@@ -1196,7 +1262,7 @@ const StyledButtonBase$1 = styles.styled(ButtonBase, {
1196
1262
  },
1197
1263
  // Focus visible for keyboard navigation
1198
1264
  [`&.${ButtonBase.buttonBaseClasses.focusVisible}`]: {
1199
- outline: `2px solid ${neoDesign.semanticColors.buttons.primary.focus}`,
1265
+ outline: `2px solid ${neoDesign.semanticColors.border.focus}`,
1200
1266
  outlineOffset: 2,
1201
1267
  },
1202
1268
  };
@@ -1236,7 +1302,7 @@ const StyledButtonBase$1 = styles.styled(ButtonBase, {
1236
1302
  : {
1237
1303
  [`&.${ButtonBase.buttonBaseClasses.disabled}`]: {
1238
1304
  backgroundColor: neoDesign.semanticColors.buttons.secondary.disabledBackground,
1239
- borderColor: neoDesign.semanticColors.buttons.secondary.disabledBorder,
1305
+ borderColor: neoDesign.semanticColors.border.secondary,
1240
1306
  color: neoDesign.semanticColors.typography.button.disabled,
1241
1307
  },
1242
1308
  }),
@@ -1364,40 +1430,102 @@ function NeoButton({ variant = 'primary', size = 'medium', loading = false, chil
1364
1430
  }
1365
1431
  NeoButton.displayName = 'NeoButton';
1366
1432
 
1433
+ const StyledButtonTab = styles.styled(MuiToggleButton)(({ theme }) => ({
1434
+ fontFamily: neoDesign.typography.fontFamily.body,
1435
+ fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.sm),
1436
+ lineHeight: 1,
1437
+ color: neoDesign.semanticColors.typography.tab.inactive,
1438
+ backgroundColor: 'transparent',
1439
+ border: 'none',
1440
+ padding: theme.spacing(1, 1.5),
1441
+ cursor: 'pointer',
1442
+ textTransform: 'none',
1443
+ transition: theme.transitions.create(['color'], {
1444
+ duration: theme.transitions.duration.short,
1445
+ }),
1446
+ '&:hover': {
1447
+ color: neoDesign.semanticColors.typography.tab.active,
1448
+ },
1449
+ '&.Mui-focusVisible': {
1450
+ outline: `2px solid ${neoDesign.semanticColors.border.focus}`,
1451
+ outlineOffset: -2,
1452
+ borderRadius: neoDesign.borderRadius.xXS,
1453
+ },
1454
+ '&.Mui-disabled': {
1455
+ color: neoDesign.semanticColors.typography.button.disabled,
1456
+ cursor: 'default',
1457
+ pointerEvents: 'none',
1458
+ },
1459
+ }));
1460
+ /**
1461
+ * Syncs aria-selected with MUI's Mui-selected class via MutationObserver.
1462
+ * MUI ToggleButton computes selection internally from context and applies
1463
+ * the Mui-selected class — we mirror that to aria-selected for tab semantics.
1464
+ */
1465
+ function useTabAriaSync() {
1466
+ const observerRef = React.useRef(null);
1467
+ return React.useCallback((node) => {
1468
+ if (observerRef.current) {
1469
+ observerRef.current.disconnect();
1470
+ observerRef.current = null;
1471
+ }
1472
+ if (!node)
1473
+ return;
1474
+ const sync = () => {
1475
+ node.setAttribute('role', 'tab');
1476
+ node.setAttribute('aria-selected', String(node.classList.contains('Mui-selected')));
1477
+ };
1478
+ sync();
1479
+ observerRef.current = new MutationObserver(sync);
1480
+ observerRef.current.observe(node, { attributes: true, attributeFilter: ['class'] });
1481
+ }, []);
1482
+ }
1483
+ /**
1484
+ * NeoButtonTab - A tab-style toggle button for use within NeoButtonGroup
1485
+ *
1486
+ * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC?node-id=4106-11048
1487
+ */
1488
+ const NeoButtonTab = ({ children, ...props }) => {
1489
+ const tabRef = useTabAriaSync();
1490
+ return (jsxRuntime.jsx(StyledButtonTab, { ref: tabRef, ...props, children: children }));
1491
+ };
1492
+ NeoButtonTab.displayName = 'NeoButtonTab';
1493
+
1367
1494
  /**
1368
- * Styled ButtonGroup that implements Neo design system styling
1495
+ * Styled toggle button group that implements the Figma "Button tab group" design.
1369
1496
  *
1370
- * The ButtonGroup uses MUI's built-in functionality for:
1371
- * - Button grouping and spacing
1372
- * - Orientation handling
1373
- * - Disabled state management
1497
+ * Built on MUI ToggleButtonGroup which provides:
1498
+ * - Selection state management (value/onChange/exclusive)
1499
+ * - Size and disabled propagation via context
1500
+ * - Positional classes (firstButton/middleButton/lastButton)
1374
1501
  *
1375
- * Custom styling focuses on:
1376
- * - Border radius (pill shape with borderRadius.full)
1502
+ * Custom styling:
1503
+ * - Pill-shaped border (borderRadius.full)
1377
1504
  * - Size variants (small=32px, medium=40px)
1378
1505
  * - Border colors using semantic tokens
1379
- * - Active/inactive button states (handled by individual buttons)
1506
+ * - Selected state colors from Neo design tokens
1380
1507
  */
1381
- const StyledButtonGroup = styles.styled(MuiButtonGroup)(({ theme, size = 'medium' }) => {
1508
+ const StyledButtonTabGroup = styles.styled(MuiToggleButtonGroup)(({ theme, size = 'medium' }) => {
1382
1509
  const sizeStyles = {
1383
1510
  small: {
1384
- height: 32,
1511
+ height: neoDesign.spacing.spacing_4,
1385
1512
  },
1386
1513
  medium: {
1387
1514
  height: neoDesign.spacing.spacing_5,
1388
1515
  },
1389
1516
  };
1390
1517
  return {
1391
- // Apply pill-shaped border radius
1392
1518
  borderRadius: neoDesign.borderRadius.full,
1393
1519
  border: `1px solid ${neoDesign.semanticColors.border.primary}`,
1394
- // Override MUI's default button group styles
1395
- [`& .${MuiButtonGroup.buttonGroupClasses.grouped}`]: {
1520
+ overflow: 'hidden',
1521
+ // Style all grouped children
1522
+ [`& .${MuiToggleButtonGroup.toggleButtonGroupClasses.grouped}`]: {
1523
+ flex: 1,
1396
1524
  minWidth: 'auto',
1397
1525
  height: sizeStyles[size].height,
1398
1526
  padding: `${theme.spacing(1)} ${theme.spacing(2)}`,
1399
1527
  fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.sm),
1400
- fontWeight: neoDesign.typography.fontWeight.semiBold,
1528
+ fontWeight: neoDesign.typography.fontWeight.regular,
1401
1529
  lineHeight: 1,
1402
1530
  textTransform: 'none',
1403
1531
  border: 'none',
@@ -1408,40 +1536,35 @@ const StyledButtonGroup = styles.styled(MuiButtonGroup)(({ theme, size = 'medium
1408
1536
  transition: theme.transitions.create(['background-color', 'color', 'border-color'], {
1409
1537
  duration: theme.transitions.duration.short,
1410
1538
  }),
1411
- // Active state (when button is selected/pressed)
1412
- '&:active, &.active': {
1539
+ // Selected state double selector for specificity over MUI ToggleButton defaults
1540
+ [`&.${MuiToggleButton.toggleButtonClasses.selected}.${MuiToggleButton.toggleButtonClasses.selected}`]: {
1413
1541
  backgroundColor: neoDesign.semanticColors.surfaces.white,
1414
1542
  color: neoDesign.semanticColors.buttons.tertiary.default,
1415
1543
  fontWeight: neoDesign.typography.fontWeight.semiBold,
1416
1544
  },
1417
1545
  // Hover state
1418
- '&:hover': {
1546
+ [`&:hover, &.${MuiToggleButton.toggleButtonClasses.selected}:hover`]: {
1419
1547
  backgroundColor: neoDesign.semanticColors.buttons.secondary.hoverBackground,
1420
- borderRight: `1px solid ${neoDesign.semanticColors.border.primary}`,
1421
1548
  },
1422
1549
  // Focus visible for keyboard navigation
1423
- [`&.${ButtonBase.buttonBaseClasses.focusVisible}`]: {
1424
- outline: `2px solid ${neoDesign.semanticColors.buttons.primary.focus}`,
1550
+ '&.Mui-focusVisible': {
1551
+ outline: `2px solid ${neoDesign.semanticColors.border.focus}`,
1425
1552
  outlineOffset: -2,
1426
1553
  zIndex: 1,
1427
1554
  },
1428
1555
  // First button: rounded left edge
1429
- [`&.${MuiButtonGroup.buttonGroupClasses.firstButton}`]: {
1556
+ [`&.${MuiToggleButtonGroup.toggleButtonGroupClasses.firstButton}`]: {
1430
1557
  borderTopLeftRadius: neoDesign.borderRadius.full,
1431
1558
  borderBottomLeftRadius: neoDesign.borderRadius.full,
1432
1559
  },
1433
1560
  // Last button: rounded right edge, no right border
1434
- [`&.${MuiButtonGroup.buttonGroupClasses.lastButton}`]: {
1561
+ [`&.${MuiToggleButtonGroup.toggleButtonGroupClasses.lastButton}`]: {
1435
1562
  borderTopRightRadius: neoDesign.borderRadius.full,
1436
1563
  borderBottomRightRadius: neoDesign.borderRadius.full,
1437
1564
  borderRight: 'none',
1438
1565
  },
1439
- // Middle buttons: no border radius
1440
- [`&.${MuiButtonGroup.buttonGroupClasses.middleButton}`]: {
1441
- borderRadius: 0,
1442
- },
1443
1566
  // Disabled state
1444
- [`&.${ButtonBase.buttonBaseClasses.disabled}`]: {
1567
+ [`&.${MuiToggleButton.toggleButtonClasses.disabled}`]: {
1445
1568
  backgroundColor: neoDesign.semanticColors.buttons.secondary.disabledBackground,
1446
1569
  color: neoDesign.semanticColors.typography.button.disabled,
1447
1570
  cursor: 'not-allowed',
@@ -1451,29 +1574,27 @@ const StyledButtonGroup = styles.styled(MuiButtonGroup)(({ theme, size = 'medium
1451
1574
  };
1452
1575
  });
1453
1576
  /**
1454
- * NeoButtonGroup - Button group component based on MUI ButtonGroup
1577
+ * NeoButtonTabGroup - Button tab group container
1455
1578
  *
1456
1579
  * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4106-11129
1457
1580
  *
1458
1581
  * Figma Props Mapping:
1459
1582
  * - Size (Sm|Md) → size prop (small|medium)
1460
- * - Active button state → Controlled externally via button props or classes
1583
+ * - Active button state → Controlled via value/onChange props
1461
1584
  *
1462
1585
  * Usage:
1463
1586
  * ```tsx
1464
- * <NeoButtonGroup size="medium">
1465
- * <NeoButton>Button 1</NeoButton>
1466
- * <NeoButton>Button 2</NeoButton>
1467
- * <NeoButton>Button 3</NeoButton>
1468
- * </NeoButtonGroup>
1587
+ * <NeoButtonTabGroup value={selected} onChange={(_, val) => setSelected(val)} size="medium">
1588
+ * <NeoButtonTab value="tab1">Tab 1</NeoButtonTab>
1589
+ * <NeoButtonTab value="tab2">Tab 2</NeoButtonTab>
1590
+ * <NeoButtonTab value="tab3">Tab 3</NeoButtonTab>
1591
+ * </NeoButtonTabGroup>
1469
1592
  * ```
1470
- *
1471
- * Note: To show active state, add 'active' class to the selected button
1472
1593
  */
1473
- const NeoButtonGroup = ({ size = 'medium', variant = 'outlined', ...props }) => {
1474
- return jsxRuntime.jsx(StyledButtonGroup, { size: size, variant: variant, ...props });
1594
+ const NeoButtonTabGroup = ({ size = 'medium', exclusive = true, ...props }) => {
1595
+ return jsxRuntime.jsx(StyledButtonTabGroup, { role: "tablist", size: size, exclusive: exclusive, ...props });
1475
1596
  };
1476
- NeoButtonGroup.displayName = 'NeoButtonGroup';
1597
+ NeoButtonTabGroup.displayName = 'NeoButtonTabGroup';
1477
1598
 
1478
1599
  // Border radius per size (from Figma)
1479
1600
  const borderRadiusConfig = {
@@ -1547,7 +1668,7 @@ const StyledCheckbox = styles.styled(Checkbox, {
1547
1668
  height: config.size,
1548
1669
  padding: 0,
1549
1670
  marginTop: size === 'xs' ? 3 : 2,
1550
- color: neoDesign.semanticColors.border.input,
1671
+ color: neoDesign.semanticColors.border.primary,
1551
1672
  flexShrink: 0,
1552
1673
  // Root element
1553
1674
  [`&.${Checkbox.checkboxClasses.root}`]: {
@@ -1570,20 +1691,20 @@ const StyledCheckbox = styles.styled(Checkbox, {
1570
1691
  },
1571
1692
  // Disabled state
1572
1693
  [`&.${Checkbox.checkboxClasses.disabled}`]: {
1573
- color: neoDesign.semanticColors.border.input,
1694
+ color: neoDesign.semanticColors.border.primary,
1574
1695
  cursor: 'not-allowed',
1575
1696
  // When checked and disabled
1576
1697
  [`&.${Checkbox.checkboxClasses.checked}`]: {
1577
- color: neoDesign.semanticColors.border.input,
1698
+ color: neoDesign.semanticColors.border.primary,
1578
1699
  },
1579
1700
  // When indeterminate and disabled
1580
1701
  [`&.${Checkbox.checkboxClasses.indeterminate}`]: {
1581
- color: neoDesign.semanticColors.border.input,
1702
+ color: neoDesign.semanticColors.border.primary,
1582
1703
  },
1583
1704
  },
1584
1705
  // Focus visible for keyboard navigation
1585
1706
  '&.Mui-focusVisible': {
1586
- outline: `2px solid ${neoDesign.semanticColors.buttons.primary.focus}`,
1707
+ outline: `2px solid ${neoDesign.semanticColors.border.focus}`,
1587
1708
  outlineOffset: 2,
1588
1709
  borderRadius: config.borderRadius,
1589
1710
  },
@@ -1713,7 +1834,7 @@ const StyledButtonBase = styles.styled(ButtonBase, {
1713
1834
  cursor: 'text',
1714
1835
  // Focus visible for keyboard navigation
1715
1836
  [`&.${ButtonBase.buttonBaseClasses.focusVisible}`]: {
1716
- outline: `2px solid ${neoDesign.semanticColors.buttons.primary.focus}`,
1837
+ outline: `2px solid ${neoDesign.semanticColors.border.focus}`,
1717
1838
  outlineOffset: 2,
1718
1839
  },
1719
1840
  };
@@ -1754,9 +1875,9 @@ const IconWrapper$2 = styles.styled('span')(({ theme, isMultiline }) => ({
1754
1875
  * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4187-30353
1755
1876
  *
1756
1877
  * Figma Props Mapping:
1757
- * - Color (Light|Dark) → variant (outlined|filled)
1758
- * - size (Single line|multiline|inline) → size prop + auto-detected multiline
1759
- * - Copy button → endIcon (ReactNode)
1878
+ * - Theme (Dark|Light) → variant (outlined|filled)
1879
+ * - Content (Single|Multi|Inline) → size (small|large|inline)
1880
+ * - Show icon (boolean) → endIcon (ReactNode, unmappable)
1760
1881
  * - Text content → children prop
1761
1882
  */
1762
1883
  const NeoCodeSnippet = ({ variant = 'outlined', size = 'small', endIcon, children, ...props }) => {
@@ -1784,7 +1905,7 @@ const StyledSearchField = styles.styled(TextField)(({ theme }) => ({
1784
1905
  fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.default),
1785
1906
  borderRadius: neoDesign.borderRadius.input,
1786
1907
  backgroundColor: neoDesign.semanticColors.input.background,
1787
- border: `1px solid ${neoDesign.semanticColors.border.input}`,
1908
+ border: `1px solid ${neoDesign.semanticColors.border.primary}`,
1788
1909
  paddingTop: neoDesign.spacing.spacing_1,
1789
1910
  paddingBottom: neoDesign.spacing.spacing_1,
1790
1911
  paddingLeft: neoDesign.spacing.spacing_1_1_2,
@@ -2041,11 +2162,11 @@ const ChevronDownIcon = (props) => (jsxRuntime.jsx(ChevronDown, { ...props, size
2041
2162
  const StyledSelect = styles.styled(MuiSelect)({
2042
2163
  minHeight: neoDesign.spacing.spacing_5,
2043
2164
  backgroundColor: neoDesign.semanticColors.input.background,
2044
- border: `1px solid ${neoDesign.semanticColors.border.input}`,
2165
+ border: `1px solid ${neoDesign.semanticColors.border.primary}`,
2045
2166
  borderRadius: `${neoDesign.borderRadius.input}px`,
2046
2167
  '&:hover': {
2047
2168
  backgroundColor: neoDesign.semanticColors.input.hoverBackground,
2048
- borderColor: neoDesign.semanticColors.border.input,
2169
+ borderColor: neoDesign.semanticColors.border.primary,
2049
2170
  },
2050
2171
  '&.Mui-focused': {
2051
2172
  backgroundColor: neoDesign.semanticColors.input.background,
@@ -2161,7 +2282,7 @@ const StyledGridFilterPanel = styles.styled(xDataGrid.GridFilterPanel)({
2161
2282
  position: 'relative',
2162
2283
  minHeight: neoDesign.spacing.spacing_5,
2163
2284
  backgroundColor: neoDesign.semanticColors.input.background,
2164
- border: `1px solid ${neoDesign.semanticColors.border.input}`,
2285
+ border: `1px solid ${neoDesign.semanticColors.border.primary}`,
2165
2286
  borderRadius: `${neoDesign.borderRadius.input}px`,
2166
2287
  fontSize: neoDesign.typography.fontSize.default,
2167
2288
  fontWeight: neoDesign.typography.fontWeight.regular,
@@ -2169,11 +2290,11 @@ const StyledGridFilterPanel = styles.styled(xDataGrid.GridFilterPanel)({
2169
2290
  },
2170
2291
  [`& .${xDataGrid.gridClasses.filterForm} .${InputBase.inputBaseClasses.root}:hover`]: {
2171
2292
  backgroundColor: neoDesign.semanticColors.input.hoverBackground,
2172
- borderColor: neoDesign.semanticColors.border.input,
2293
+ borderColor: neoDesign.semanticColors.border.primary,
2173
2294
  },
2174
2295
  [`& .${xDataGrid.gridClasses.filterForm} .${InputBase.inputBaseClasses.root}.${InputBase.inputBaseClasses.focused}`]: {
2175
2296
  backgroundColor: neoDesign.semanticColors.input.background,
2176
- borderColor: neoDesign.semanticColors.border.input,
2297
+ borderColor: neoDesign.semanticColors.border.primary,
2177
2298
  },
2178
2299
  [`& .${xDataGrid.gridClasses.filterForm} .${InputBase.inputBaseClasses.root}::before`]: {
2179
2300
  display: 'none',
@@ -2597,11 +2718,11 @@ const outlinedColorStyles = {
2597
2718
  },
2598
2719
  };
2599
2720
  const filledColorStyles = {
2600
- default: neoDesign.semanticColors.status.neutral.medium,
2601
- error: neoDesign.semanticColors.status.error.medium,
2602
- warning: neoDesign.semanticColors.status.warning.medium,
2603
- success: neoDesign.semanticColors.status.success.medium,
2604
- info: neoDesign.semanticColors.status.info.medium,
2721
+ default: neoDesign.semanticColors.status.neutral.default,
2722
+ error: neoDesign.semanticColors.status.error.default,
2723
+ warning: neoDesign.semanticColors.status.warning.default,
2724
+ success: neoDesign.semanticColors.status.success.default,
2725
+ info: neoDesign.semanticColors.status.info.default,
2605
2726
  violet: neoDesign.colors.violet[500],
2606
2727
  beta: neoDesign.colors.digitalBlue[300],
2607
2728
  };
@@ -2631,9 +2752,9 @@ const StyledChip$1 = styles.styled(Chip)(({ theme, size, variant, color }) => ({
2631
2752
  * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4120-34533
2632
2753
  *
2633
2754
  * Figma Props Mapping:
2634
- * - m (sm|md|lg) → size (small|medium|large)
2635
- * - type (light|dark) → variant (outlined|filled)
2636
- * - state (Neutral|Error|Warning|Success|Info|Violet|Beta) → color (default|error|warning|success|info|violet|beta)
2755
+ * - Size (Small|Medium|Large) → size (small|medium|large)
2756
+ * - Type (Outline|Filled) → variant (outlined|filled)
2757
+ * - Intent (Neutral|Error|Warning|Success|Info|Violet|Beta) → color (default|error|warning|success|info|violet|beta)
2637
2758
  * - Label text → label prop
2638
2759
  */
2639
2760
  const NeoTag = ({ size = 'small', variant = 'outlined', ...props }) => {
@@ -3209,7 +3330,7 @@ const StyledIconButton = styles.styled(IconButton, {
3209
3330
  },
3210
3331
  // Focus visible for keyboard navigation
3211
3332
  '&:focus-visible': {
3212
- outline: `2px solid ${neoDesign.semanticColors.buttons.primary.focus}`,
3333
+ outline: `2px solid ${neoDesign.semanticColors.border.focus}`,
3213
3334
  outlineOffset: 2,
3214
3335
  },
3215
3336
  };
@@ -3549,7 +3670,7 @@ const sizeMap = {
3549
3670
  };
3550
3671
  const StyledBadge = styles.styled(Badge)(({ ownerState }) => {
3551
3672
  const size = sizeMap[ownerState.size];
3552
- const color = neoDesign.semanticColors.status[ownerState.color].medium;
3673
+ const color = neoDesign.semanticColors.status[ownerState.color].default;
3553
3674
  return {
3554
3675
  [`& .${Badge.badgeClasses.badge}`]: {
3555
3676
  width: size,
@@ -3577,7 +3698,7 @@ const StyledBadge = styles.styled(Badge)(({ ownerState }) => {
3577
3698
  */
3578
3699
  const NeoDot = ({ size = 'medium', variant = 'solid', color = 'neutral', ...props }) => {
3579
3700
  const dotSize = sizeMap[size];
3580
- const mediumColor = neoDesign.semanticColors.status[color].medium;
3701
+ const mediumColor = neoDesign.semanticColors.status[color].default;
3581
3702
  const lightColor = neoDesign.semanticColors.status[color].light;
3582
3703
  // For outline variant, use SVG for precise control
3583
3704
  const renderDot = () => {
@@ -3943,6 +4064,56 @@ const NeoFooter = ({ variant = 'pagination', showShadow = false, loading = false
3943
4064
  };
3944
4065
  NeoFooter.displayName = 'NeoFooter';
3945
4066
 
4067
+ /**
4068
+ * Shared color palette for avatar components (GeneralAvatar, NavigationAvatar).
4069
+ * Maps color index (1-7) to background color token pairs.
4070
+ */
4071
+ const avatarColorPalette = {
4072
+ 1: { bg: neoDesign.colors.digitalBlue[100] },
4073
+ 2: { bg: neoDesign.colors.digitalGreen[100] },
4074
+ 3: { bg: neoDesign.colors.gold[100] },
4075
+ 4: { bg: neoDesign.colors.red[100] },
4076
+ 5: { bg: neoDesign.colors.violet[100] },
4077
+ 6: { bg: neoDesign.colors.tealGreen[100] },
4078
+ 7: { bg: neoDesign.colors.orange[100] },
4079
+ };
4080
+
4081
+ const sizeConfig$1 = {
4082
+ small: { width: neoDesign.spacing.spacing_4, height: neoDesign.spacing.spacing_4, fontSize: neoDesign.typography.fontSize.xs },
4083
+ medium: { width: neoDesign.spacing.spacing_5, height: neoDesign.spacing.spacing_5, fontSize: neoDesign.typography.fontSize.sm },
4084
+ };
4085
+ const StyledAvatar = styles.styled(Avatar, {
4086
+ shouldForwardProp: prop => prop !== 'avatarSize' && prop !== 'colorIndex',
4087
+ })(({ theme, avatarSize, colorIndex }) => {
4088
+ const size = sizeConfig$1[avatarSize];
4089
+ const palette = avatarColorPalette[colorIndex];
4090
+ return {
4091
+ boxSizing: 'border-box',
4092
+ width: size.width,
4093
+ height: size.height,
4094
+ fontSize: theme.typography.pxToRem(size.fontSize),
4095
+ fontFamily: neoDesign.typography.fontFamily.body,
4096
+ fontWeight: neoDesign.typography.fontWeight.regular,
4097
+ lineHeight: 1,
4098
+ color: neoDesign.semanticColors.typography.body,
4099
+ backgroundColor: palette ? palette.bg : undefined,
4100
+ border: `1px solid ${neoDesign.semanticColors.border.primary}`,
4101
+ '&:focus-visible': {
4102
+ ...focusRingStyles,
4103
+ borderColor: neoDesign.semanticColors.border.focus,
4104
+ },
4105
+ };
4106
+ });
4107
+ /**
4108
+ * NeoGeneralAvatar - Avatar with image or colored initials display
4109
+ *
4110
+ * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC?node-id=9600-185
4111
+ */
4112
+ const NeoGeneralAvatar = ({ size = 'medium', colorIndex = 0, children, ...props }) => {
4113
+ return (jsxRuntime.jsx(StyledAvatar, { avatarSize: size, colorIndex: colorIndex, ...props, children: children }));
4114
+ };
4115
+ NeoGeneralAvatar.displayName = 'NeoGeneralAvatar';
4116
+
3946
4117
  const customProps$1 = ['iconSize'];
3947
4118
  const StyledIconWrapper = styles.styled('div', {
3948
4119
  shouldForwardProp: prop => !customProps$1.includes(prop),
@@ -4124,9 +4295,9 @@ const StyledInputBase = styles.styled(InputBase, {
4124
4295
  },
4125
4296
  medium: {
4126
4297
  height: neoDesign.spacing.spacing_5_1_2,
4127
- padding: `${neoDesign.spacing.spacing_2}px ${neoDesign.spacing.spacing_3}px ${neoDesign.spacing.spacing_2}px ${startAdornment ? 0 : neoDesign.spacing.spacing_2}px`,
4298
+ padding: `${neoDesign.spacing.spacing_1_1_4}px ${neoDesign.spacing.spacing_2}px ${neoDesign.spacing.spacing_1_1_4}px ${startAdornment ? 0 : neoDesign.spacing.spacing_2}px`,
4128
4299
  fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.default),
4129
- borderRadius: neoDesign.borderRadius.input,
4300
+ borderRadius: neoDesign.spacing.spacing_8,
4130
4301
  },
4131
4302
  };
4132
4303
  const sizeStyles = sizeConfig[size];
@@ -4135,7 +4306,7 @@ const StyledInputBase = styles.styled(InputBase, {
4135
4306
  fontSize: sizeStyles.fontSize,
4136
4307
  borderRadius: sizeStyles.borderRadius,
4137
4308
  backgroundColor: neoDesign.semanticColors.input.background,
4138
- border: `1px solid ${destructive ? neoDesign.semanticColors.status.error.medium : neoDesign.semanticColors.border.input}`,
4309
+ border: `1px solid ${destructive ? neoDesign.semanticColors.status.error.default : neoDesign.semanticColors.border.primary}`,
4139
4310
  transition: theme.transitions.create(['border-color', 'background-color'], {
4140
4311
  duration: theme.transitions.duration.short,
4141
4312
  }),
@@ -4149,19 +4320,21 @@ const StyledInputBase = styles.styled(InputBase, {
4149
4320
  // Hover state
4150
4321
  '&:hover': {
4151
4322
  backgroundColor: neoDesign.semanticColors.input.hoverBackground,
4152
- borderColor: destructive ? neoDesign.semanticColors.status.error.medium : neoDesign.semanticColors.border.input,
4323
+ borderColor: destructive
4324
+ ? neoDesign.semanticColors.status.error.default
4325
+ : neoDesign.semanticColors.border.primary,
4153
4326
  },
4154
4327
  // Focused state
4155
4328
  [`&.${InputBase.inputBaseClasses.focused}`]: {
4156
4329
  backgroundColor: neoDesign.semanticColors.input.background,
4157
4330
  borderColor: destructive
4158
- ? neoDesign.semanticColors.status.error.medium
4331
+ ? neoDesign.semanticColors.status.error.default
4159
4332
  : neoDesign.semanticColors.buttons.primary.default,
4160
4333
  },
4161
4334
  // Disabled state
4162
4335
  [`&.${InputBase.inputBaseClasses.disabled}`]: {
4163
4336
  backgroundColor: neoDesign.semanticColors.input.disabledBackground,
4164
- borderColor: neoDesign.semanticColors.border.input,
4337
+ borderColor: neoDesign.semanticColors.border.primary,
4165
4338
  color: neoDesign.semanticColors.icons.disabled,
4166
4339
  [`& .${InputBase.inputBaseClasses.input}`]: {
4167
4340
  WebkitTextFillColor: neoDesign.semanticColors.icons.disabled,
@@ -4169,11 +4342,11 @@ const StyledInputBase = styles.styled(InputBase, {
4169
4342
  },
4170
4343
  // Error state
4171
4344
  [`&.${InputBase.inputBaseClasses.error}`]: {
4172
- borderColor: neoDesign.semanticColors.status.error.medium,
4345
+ borderColor: neoDesign.semanticColors.status.error.default,
4173
4346
  },
4174
4347
  // Adornment styling
4175
4348
  [`& .${InputAdornment.inputAdornmentClasses.root}`]: {
4176
- color: destructive ? neoDesign.semanticColors.status.error.medium : neoDesign.semanticColors.icons.placeholder,
4349
+ color: destructive ? neoDesign.semanticColors.status.error.default : neoDesign.semanticColors.icons.placeholder,
4177
4350
  },
4178
4351
  };
4179
4352
  });
@@ -4187,7 +4360,7 @@ const StyledFormHelperText = styles.styled(FormHelperText, {
4187
4360
  fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.sm),
4188
4361
  color: neoDesign.semanticColors.typography.input.helper,
4189
4362
  [`&.${FormHelperText.formHelperTextClasses.error}`]: {
4190
- color: neoDesign.semanticColors.status.error.medium,
4363
+ color: neoDesign.semanticColors.status.error.default,
4191
4364
  },
4192
4365
  [`&.${FormHelperText.formHelperTextClasses.disabled}`]: {
4193
4366
  color: neoDesign.semanticColors.icons.disabled,
@@ -4487,7 +4660,7 @@ const StyledListItemButton = styles.styled(ListItemButton)(({ theme }) => ({
4487
4660
  transition: theme.transitions.create(['border', 'background-color']),
4488
4661
  // Active (selected) state
4489
4662
  [`&.${ListItemButton.listItemButtonClasses.selected}`]: {
4490
- border: `2px solid ${neoDesign.semanticColors.border.tabActive}`,
4663
+ border: `2px solid ${neoDesign.semanticColors.buttons.primary.default}`,
4491
4664
  backgroundColor: theme.palette.common.white,
4492
4665
  '&:hover': {
4493
4666
  backgroundColor: theme.palette.common.white,
@@ -4521,9 +4694,9 @@ const StyledListItemButton = styles.styled(ListItemButton)(({ theme }) => ({
4521
4694
  },
4522
4695
  // Focus state
4523
4696
  [`&.${ListItemButton.listItemButtonClasses.focusVisible}`]: {
4524
- outline: `2px solid ${neoDesign.semanticColors.border.tabActive}`,
4697
+ outline: `2px solid ${neoDesign.semanticColors.buttons.primary.default}`,
4525
4698
  outlineOffset: 2,
4526
- border: `2px solid ${neoDesign.semanticColors.border.tabActive}`,
4699
+ border: `2px solid ${neoDesign.semanticColors.buttons.primary.default}`,
4527
4700
  backgroundColor: theme.palette.common.white,
4528
4701
  [`& .${ListItemIcon.listItemIconClasses.root}`]: {
4529
4702
  color: neoDesign.semanticColors.icons.default,
@@ -4582,7 +4755,7 @@ const StyledListItemButton = styles.styled(ListItemButton)(({ theme }) => ({
4582
4755
  * - showIcon → Conditional rendering of ListItemIcon child
4583
4756
  *
4584
4757
  * Design Tokens Used:
4585
- * - semanticColors.border.tabActive (#2f42ff) - Active border
4758
+ * - semanticColors.buttons.primary.default (#2f42ff) - Active border
4586
4759
  * - semanticColors.border.primary (#d1d5db) - Default/disabled border
4587
4760
  * - semanticColors.icons.default (#1f2937) - Active icon color
4588
4761
  * - semanticColors.icons.disabled (#d1d5db) - Deselected/disabled icon color
@@ -4615,17 +4788,17 @@ const StyledCard = styles.styled(MuiCard, {
4615
4788
  flexDirection: 'column',
4616
4789
  gap: theme.spacing(2), // 16px
4617
4790
  backgroundColor: neoDesign.semanticColors.surfaces.card,
4618
- border: `1px solid ${selected ? neoDesign.semanticColors.border.tabActive : neoDesign.semanticColors.border.card}`,
4791
+ border: `1px solid ${selected ? neoDesign.semanticColors.buttons.primary.default : neoDesign.semanticColors.border.primary}`,
4619
4792
  borderRadius: neoDesign.borderRadius.xS,
4620
4793
  boxShadow: selected ? activeShadow$1 : 'none',
4621
4794
  transition: theme.transitions.create(['border-color', 'background-color', 'box-shadow']),
4622
4795
  cursor: 'pointer',
4623
4796
  '&:hover': {
4624
- borderColor: neoDesign.semanticColors.border.tabActive,
4797
+ borderColor: neoDesign.semanticColors.buttons.primary.default,
4625
4798
  boxShadow: activeShadow$1,
4626
4799
  },
4627
4800
  '&:focus-visible': {
4628
- borderColor: neoDesign.semanticColors.border.tabActive,
4801
+ borderColor: neoDesign.semanticColors.buttons.primary.default,
4629
4802
  ...focusRingStyles,
4630
4803
  },
4631
4804
  ...(disabled && {
@@ -4729,8 +4902,8 @@ const Description$1 = styles.styled('p')(({ theme }) => ({
4729
4902
  * Design Tokens Used:
4730
4903
  * - semanticColors.surfaces.card (#FFFFFF) - Default card background
4731
4904
  * - semanticColors.status.info.light (#f2f3ff) - Active/focused card background
4732
- * - semanticColors.border.card (#d1d5db) - Default border
4733
- * - semanticColors.border.tabActive (#2f42ff) - Active/focused border
4905
+ * - semanticColors.border.primary (#d1d5db) - Default border
4906
+ * - semanticColors.buttons.primary.default (#2f42ff) - Active/focused border
4734
4907
  * - shadows.focusWhite1 - Inner white focus ring (2px spread)
4735
4908
  * - shadows.focusBlue2 - Outer blue focus ring (4px spread)
4736
4909
  * - colors.grey[800] (#1F2937) - Text color
@@ -4753,10 +4926,12 @@ const StyledLargeCard = styles.styled(MuiCard, {
4753
4926
  const isActive = cardState === 'active';
4754
4927
  const isDisabled = cardState === 'disabled';
4755
4928
  const isFocused = cardState === 'focused';
4756
- const activeBorderColor = isLight ? neoDesign.semanticColors.border.tabActive : neoDesign.colors.digitalGreen[300];
4929
+ const activeBorderColor = isLight
4930
+ ? neoDesign.semanticColors.buttons.primary.default
4931
+ : neoDesign.colors.digitalGreen[300];
4757
4932
  const defaultBorderColor = isLight
4758
- ? neoDesign.semanticColors.border.card
4759
- : `${neoDesign.semanticColors.border.card}80`;
4933
+ ? neoDesign.semanticColors.border.primary
4934
+ : `${neoDesign.semanticColors.border.primary}80`;
4760
4935
  return {
4761
4936
  width: 340,
4762
4937
  height: 162,
@@ -4772,7 +4947,7 @@ const StyledLargeCard = styles.styled(MuiCard, {
4772
4947
  overflow: 'hidden',
4773
4948
  ...(isFocused && focusRingStyles),
4774
4949
  '&:focus-visible': {
4775
- borderColor: isLight ? neoDesign.semanticColors.border.tabActive : neoDesign.colors.digitalGreen[300],
4950
+ borderColor: isLight ? neoDesign.semanticColors.buttons.primary.default : neoDesign.colors.digitalGreen[300],
4776
4951
  ...focusRingStyles,
4777
4952
  },
4778
4953
  ...(isDisabled && {
@@ -4852,8 +5027,8 @@ const ButtonsRow = styles.styled('div')({
4852
5027
  * Design Tokens Used:
4853
5028
  * - semanticColors.surfaces.card (#ffffff) - Light theme background
4854
5029
  * - colors.grey[800] (#1f2937) - Dark theme background
4855
- * - semanticColors.border.card (#d1d5db) - Default border (50% opacity on dark)
4856
- * - semanticColors.border.tabActive (#2f42ff) - Active/focused border (light theme)
5030
+ * - semanticColors.border.primary (#d1d5db) - Default border (50% opacity on dark)
5031
+ * - semanticColors.buttons.primary.default (#2f42ff) - Active/focused border (light theme)
4857
5032
  * - colors.digitalGreen[300] (#88fe9b) - Active/focused border (dark theme)
4858
5033
  * - borderRadius.xS (4px) - Corner radius
4859
5034
  * - shadows.focusWhite1 + shadows.focusBlue2 - Focus ring
@@ -4925,7 +5100,7 @@ NeoMenu.displayName = 'NeoMenu';
4925
5100
  const StyledDialog = styles.styled(Dialog)({
4926
5101
  [`& .${Dialog.dialogClasses.paper}`]: {
4927
5102
  borderRadius: neoDesign.borderRadius.card,
4928
- border: `1px solid ${neoDesign.semanticColors.border.card}`,
5103
+ border: `1px solid ${neoDesign.semanticColors.border.primary}`,
4929
5104
  boxShadow: 'none',
4930
5105
  },
4931
5106
  [`& .${Dialog.dialogClasses.container}`]: {
@@ -5108,6 +5283,34 @@ const NeoModalFooter = ({ leadingContent, children }) => {
5108
5283
  };
5109
5284
  NeoModalFooter.displayName = 'NeoModalFooter';
5110
5285
 
5286
+ const NavigationAvatarContainer = styles.styled('div')({
5287
+ display: 'flex',
5288
+ boxSizing: 'border-box',
5289
+ width: neoDesign.spacing.spacing_5_1_2,
5290
+ height: neoDesign.spacing.spacing_5_1_2,
5291
+ padding: neoDesign.spacing.spacing_3_4,
5292
+ justifyContent: 'center',
5293
+ alignItems: 'center',
5294
+ borderRadius: '50%',
5295
+ border: `1px solid ${neoDesign.semanticColors.border.primary}`,
5296
+ backgroundColor: neoDesign.semanticColors.buttons.secondary.defaultBackground,
5297
+ '&:focus-within': {
5298
+ borderColor: neoDesign.semanticColors.border.focus,
5299
+ },
5300
+ });
5301
+ /**
5302
+ * NeoNavigationAvatar - Compact avatar for navigation contexts
5303
+ *
5304
+ * Wraps NeoGeneralAvatar (size="small") in a 44px container with 6px padding,
5305
+ * providing a larger interactive area for navigation UI.
5306
+ *
5307
+ * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC?node-id=11325-102
5308
+ */
5309
+ const NeoNavigationAvatar = ({ colorIndex = 0, children, ...props }) => {
5310
+ return (jsxRuntime.jsx(NavigationAvatarContainer, { children: jsxRuntime.jsx(NeoGeneralAvatar, { size: "small", colorIndex: colorIndex, ...props, children: children }) }));
5311
+ };
5312
+ NeoNavigationAvatar.displayName = 'NeoNavigationAvatar';
5313
+
5111
5314
  const customProps = ['selected'];
5112
5315
  const StyledRoot = styles.styled(ButtonBase, {
5113
5316
  shouldForwardProp: prop => !customProps.includes(prop),
@@ -5447,7 +5650,7 @@ const StyledLinearProgress$1 = styles.styled(LinearProgress, {
5447
5650
  // Cancelled variant uses warning color
5448
5651
  '&[data-variant="cancelled"]': {
5449
5652
  [`& .${LinearProgress.linearProgressClasses.bar}`]: {
5450
- backgroundColor: neoDesign.semanticColors.status.warning.medium,
5653
+ backgroundColor: neoDesign.semanticColors.status.warning.default,
5451
5654
  },
5452
5655
  },
5453
5656
  }));
@@ -5512,7 +5715,7 @@ const StyledTextField = styles.styled(TextField)(({ theme }) => ({
5512
5715
  fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.default),
5513
5716
  borderRadius: neoDesign.borderRadius.input,
5514
5717
  backgroundColor: neoDesign.semanticColors.input.background,
5515
- border: `1px solid ${neoDesign.semanticColors.border.input}`,
5718
+ border: `1px solid ${neoDesign.semanticColors.border.primary}`,
5516
5719
  paddingTop: neoDesign.spacing.spacing_1,
5517
5720
  paddingBottom: neoDesign.spacing.spacing_1,
5518
5721
  paddingLeft: neoDesign.spacing.spacing_1_1_2,
@@ -5607,7 +5810,7 @@ NeoQuickFilter.displayName = 'NeoQuickFilter';
5607
5810
  const UncheckedIcon = ({ size }) => {
5608
5811
  const dimensions = size === 'small' ? 16 : 20;
5609
5812
  const radius = size === 'small' ? 8 : 10;
5610
- return (jsxRuntime.jsxs("svg", { width: dimensions, height: dimensions, viewBox: `0 0 ${dimensions} ${dimensions}`, fill: "none", "aria-hidden": "true", children: [jsxRuntime.jsx("title", { children: "Unchecked radio button" }), jsxRuntime.jsx("circle", { cx: dimensions / 2, cy: dimensions / 2, r: radius - 0.5, stroke: neoDesign.semanticColors.border.input, strokeWidth: "1", fill: "transparent" })] }));
5813
+ return (jsxRuntime.jsxs("svg", { width: dimensions, height: dimensions, viewBox: `0 0 ${dimensions} ${dimensions}`, fill: "none", "aria-hidden": "true", children: [jsxRuntime.jsx("title", { children: "Unchecked radio button" }), jsxRuntime.jsx("circle", { cx: dimensions / 2, cy: dimensions / 2, r: radius - 0.5, stroke: neoDesign.semanticColors.border.primary, strokeWidth: "1", fill: "transparent" })] }));
5611
5814
  };
5612
5815
  const CheckedIcon = ({ size }) => {
5613
5816
  const dimensions = size === 'small' ? 16 : 20;
@@ -5854,7 +6057,7 @@ NeoSkeleton.displayName = 'NeoSkeleton';
5854
6057
 
5855
6058
  /**
5856
6059
  * Styled Alert component with custom severity and variant styling
5857
- * Uses Custom Variants Pattern to add 'neutral' and 'info' severities
6060
+ * Uses Custom Variants Pattern to add 'neutral', 'info', and 'warning' severities
5858
6061
  */
5859
6062
  const StyledAlert$1 = styles.styled(Alert, {
5860
6063
  shouldForwardProp: prop => prop !== 'severity' && prop !== 'variant',
@@ -5863,41 +6066,49 @@ const StyledAlert$1 = styles.styled(Alert, {
5863
6066
  const colorMap = {
5864
6067
  success: {
5865
6068
  light: neoDesign.semanticColors.status.success.light,
5866
- medium: neoDesign.semanticColors.status.success.medium,
6069
+ medium: neoDesign.semanticColors.status.success.default,
5867
6070
  },
5868
6071
  error: {
5869
6072
  light: neoDesign.semanticColors.status.error.light,
5870
- medium: neoDesign.semanticColors.status.error.medium,
6073
+ medium: neoDesign.semanticColors.status.error.default,
5871
6074
  },
5872
6075
  neutral: {
5873
6076
  light: neoDesign.semanticColors.status.neutral.light,
5874
- medium: neoDesign.semanticColors.status.neutral.medium,
6077
+ medium: neoDesign.semanticColors.status.neutral.default,
5875
6078
  },
5876
6079
  info: {
5877
6080
  light: neoDesign.semanticColors.status.info.light,
5878
- medium: neoDesign.semanticColors.status.info.medium,
6081
+ medium: neoDesign.semanticColors.status.info.default,
6082
+ },
6083
+ warning: {
6084
+ light: neoDesign.semanticColors.status.warning.light,
6085
+ medium: neoDesign.semanticColors.status.warning.default,
5879
6086
  },
5880
6087
  };
5881
6088
  const severityColors = colorMap[severity];
5882
- // Variant-specific styles based on Phase 1.1 analysis
6089
+ const isWarningFilled = severity === 'warning' && variant === 'filled';
6090
+ // Variant-specific styles
5883
6091
  const variantStyles = (() => {
5884
6092
  if (variant === 'filled') {
5885
- // Dark mode: solid background with white text
6093
+ // Warning filled uses dark text for contrast on yellow bg
6094
+ const textColor = isWarningFilled
6095
+ ? neoDesign.semanticColors.typography.warning
6096
+ : neoDesign.semanticColors.typography.tooltip;
5886
6097
  return {
5887
6098
  backgroundColor: severityColors.medium,
5888
6099
  border: 'none',
5889
- color: neoDesign.semanticColors.typography.tooltip,
6100
+ color: textColor,
5890
6101
  padding: theme.spacing(0.75, 3),
5891
6102
  boxShadow: `0px 1px 3px ${neoDesign.semanticColors.surfaces.shadowNeutral}1a`, // 1a = 10% opacity
5892
6103
  [`& .${Alert.alertClasses.icon}`]: {
5893
- color: neoDesign.semanticColors.typography.tooltip,
6104
+ color: textColor,
5894
6105
  },
5895
6106
  [`& .${Alert.alertClasses.message}`]: {
5896
- color: neoDesign.semanticColors.typography.tooltip,
6107
+ color: textColor,
5897
6108
  },
5898
6109
  };
5899
6110
  }
5900
- // Light mode: light background with border
6111
+ // Outlined: light background with border
5901
6112
  return {
5902
6113
  backgroundColor: severityColors.light,
5903
6114
  border: `1px solid ${severityColors.medium}`,
@@ -5926,7 +6137,9 @@ const StyledAlert$1 = styles.styled(Alert, {
5926
6137
  fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.sm),
5927
6138
  fontWeight: neoDesign.typography.fontWeight.regular,
5928
6139
  color: variant === 'filled'
5929
- ? neoDesign.semanticColors.typography.tooltip
6140
+ ? isWarningFilled
6141
+ ? neoDesign.semanticColors.typography.warning
6142
+ : neoDesign.semanticColors.typography.tooltip
5930
6143
  : neoDesign.semanticColors.typography.bodySecondary,
5931
6144
  lineHeight: 1.4,
5932
6145
  marginTop: theme.spacing(0.25),
@@ -5936,20 +6149,21 @@ const StyledAlert$1 = styles.styled(Alert, {
5936
6149
  /**
5937
6150
  * NeoStatusBanner - Status banner component for displaying system status messages
5938
6151
  *
5939
- * Displays status information with different severity levels (success, error, info, neutral) and
5940
- * visual modes (outlined for light backgrounds, filled for emphasis).
6152
+ * Displays status information with different severity levels (success, error, info, neutral, warning)
6153
+ * and visual modes (outlined for light backgrounds, filled for emphasis).
5941
6154
  *
5942
6155
  * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4921-3427
5943
6156
  *
5944
6157
  * Figma Props Mapping:
5945
- * - Status (Success|Error|Info|Offline) → severity ('success'|'error'|'info'|'neutral')
5946
- * - Mode (Light|Dark) → variant ('outlined'|'filled')
6158
+ * - Intent (Success|Error|Info|Offline|Warning) → severity ('success'|'error'|'info'|'neutral'|'warning')
6159
+ * - Type (Outlined|Filled) → variant ('outlined'|'filled')
5947
6160
  *
5948
6161
  * Design Tokens Used:
5949
- * - status.success.light, status.success.medium
5950
- * - status.error.light, status.error.medium
5951
- * - status.neutral.light, status.neutral.medium
5952
- * - status.info.light, status.info.medium
6162
+ * - status.success.light, status.success.default
6163
+ * - status.error.light, status.error.default
6164
+ * - status.neutral.light, status.neutral.default
6165
+ * - status.info.light, status.info.default
6166
+ * - status.warning.light, status.warning.default
5953
6167
  * - typography.tooltip, typography.bodySecondary
5954
6168
  * - grey[800]
5955
6169
  * - fontSize.default, fontSize.sm
@@ -5964,6 +6178,7 @@ const NeoStatusBanner = ({ severity = 'success', variant = 'outlined', icon, chi
5964
6178
  error: jsxRuntime.jsx(CircleAlert, { size: 24 }),
5965
6179
  neutral: jsxRuntime.jsx(WifiOff, { size: 24 }),
5966
6180
  info: jsxRuntime.jsx(Info, { size: 24 }),
6181
+ warning: jsxRuntime.jsx(TriangleAlert, { size: 24 }),
5967
6182
  };
5968
6183
  const defaultIcon = iconMap[severity];
5969
6184
  // Type assertion needed: severity and variant are custom props filtered by shouldForwardProp
@@ -5986,7 +6201,7 @@ NeoStatusBanner.displayName = 'NeoStatusBanner';
5986
6201
  const NeoTabs = styles.styled(MuiTabs)(() => ({
5987
6202
  minHeight: neoDesign.spacing.spacing_5,
5988
6203
  [`& .${MuiTabs.tabsClasses.indicator}`]: {
5989
- backgroundColor: neoDesign.semanticColors.border.tabActive,
6204
+ backgroundColor: neoDesign.semanticColors.buttons.primary.default,
5990
6205
  height: 2,
5991
6206
  },
5992
6207
  [`& .${MuiTabs.tabsClasses.flexContainer}`]: {
@@ -6008,7 +6223,7 @@ const StyledTab = styles.styled(MuiTab)(({ theme }) => ({
6008
6223
  fontWeight: neoDesign.typography.fontWeight.semiBold,
6009
6224
  },
6010
6225
  [`&.${ButtonBase.buttonBaseClasses.focusVisible}`]: {
6011
- outline: `2px solid ${neoDesign.semanticColors.buttons.primary.focus}`,
6226
+ outline: `2px solid ${neoDesign.semanticColors.border.focus}`,
6012
6227
  outlineOffset: -2,
6013
6228
  },
6014
6229
  [`&.${MuiTab.tabClasses.disabled}`]: {
@@ -6028,11 +6243,9 @@ const TabLabelContainer = styles.styled('span')(({ theme }) => ({
6028
6243
  * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=3368-26152
6029
6244
  *
6030
6245
  * Figma Props Mapping:
6031
- * - Current=True/False → Controlled by parent NeoTabs value
6032
- * - State=Default → default styling
6033
- * - State=HoverCSS :hover
6034
- * - State=Focus → CSS :focus-visible
6035
- * - Tag count → count prop (renders NeoTag)
6246
+ * - Selected (True|False) → Controlled by parent NeoTabs value
6247
+ * - State (Default|Hover|Focus|Disabled)CSS states + disabled prop
6248
+ * - Show tag (boolean) count prop (renders NeoTag)
6036
6249
  * - Text label → label prop
6037
6250
  */
6038
6251
  const NeoTab = ({ label, count, ...props }) => {
@@ -6043,8 +6256,8 @@ NeoTab.displayName = 'NeoTab';
6043
6256
 
6044
6257
  // biome-ignore lint/suspicious/noExplicitAny: Type cast required to override MUI Alert variant type without global augmentation
6045
6258
  const StyledAlert = styles.styled(Alert, {
6046
- shouldForwardProp: prop => prop !== 'variant' && prop !== 'showProgress',
6047
- })(({ theme, variant = 'default' }) => {
6259
+ shouldForwardProp: prop => prop !== 'variant' && prop !== 'toastType' && prop !== 'showProgress',
6260
+ })(({ theme, variant = 'default', toastType = 'outlined' }) => {
6048
6261
  // Base styles
6049
6262
  const baseStyles = {
6050
6263
  padding: neoDesign.spacing.spacing_2,
@@ -6068,37 +6281,73 @@ const StyledAlert = styles.styled(Alert, {
6068
6281
  marginRight: 0,
6069
6282
  },
6070
6283
  };
6071
- // Variant-specific styles
6072
- const variantStyles = {
6284
+ // Outlined intent styles (light bg + colored border)
6285
+ const outlinedStyles = {
6073
6286
  default: {
6074
6287
  backgroundColor: neoDesign.semanticColors.surfaces.snackbarDarkMode,
6075
6288
  color: neoDesign.colors.grey['800'],
6076
6289
  border: `1px solid ${neoDesign.semanticColors.border.primary}`,
6077
6290
  },
6078
- dark: {
6079
- backgroundColor: neoDesign.semanticColors.surfaces.snackbarLightMode,
6080
- color: neoDesign.semanticColors.surfaces.white,
6081
- border: `1px solid ${neoDesign.semanticColors.surfaces.snackbarLightMode}`,
6082
- },
6083
- brand: {
6084
- backgroundColor: neoDesign.semanticColors.surfaces.snackbarBrand,
6085
- color: neoDesign.semanticColors.surfaces.white,
6086
- border: `1px solid ${neoDesign.semanticColors.surfaces.snackbarBrand}`,
6087
- },
6088
6291
  error: {
6089
6292
  backgroundColor: neoDesign.semanticColors.status.error.light,
6090
6293
  color: neoDesign.semanticColors.status.error.dark,
6091
- border: `1px solid ${neoDesign.semanticColors.status.error.medium}`,
6294
+ border: `1px solid ${neoDesign.semanticColors.status.error.default}`,
6092
6295
  },
6093
6296
  success: {
6094
6297
  backgroundColor: neoDesign.semanticColors.status.success.light,
6095
6298
  color: neoDesign.semanticColors.status.success.dark,
6096
- border: `1px solid ${neoDesign.semanticColors.status.success.medium}`,
6299
+ border: `1px solid ${neoDesign.semanticColors.status.success.default}`,
6097
6300
  },
6098
6301
  info: {
6099
6302
  backgroundColor: neoDesign.semanticColors.status.info.light,
6100
6303
  color: neoDesign.semanticColors.status.info.dark,
6101
- border: `1px solid ${neoDesign.semanticColors.status.info.medium}`,
6304
+ border: `1px solid ${neoDesign.semanticColors.status.info.default}`,
6305
+ },
6306
+ warning: {
6307
+ backgroundColor: neoDesign.semanticColors.status.warning.light,
6308
+ color: neoDesign.semanticColors.status.warning.dark,
6309
+ border: `1px solid ${neoDesign.semanticColors.status.warning.default}`,
6310
+ },
6311
+ };
6312
+ // Filled intent styles (solid bg)
6313
+ const filledStyles = {
6314
+ default: {
6315
+ backgroundColor: neoDesign.semanticColors.surfaces.snackbarLightMode,
6316
+ color: neoDesign.semanticColors.surfaces.white,
6317
+ border: `1px solid ${neoDesign.semanticColors.surfaces.snackbarLightMode}`,
6318
+ },
6319
+ error: {
6320
+ backgroundColor: neoDesign.semanticColors.status.error.dark,
6321
+ color: neoDesign.semanticColors.surfaces.white,
6322
+ border: `1px solid ${neoDesign.semanticColors.status.error.dark}`,
6323
+ },
6324
+ success: {
6325
+ backgroundColor: neoDesign.semanticColors.status.success.dark,
6326
+ color: neoDesign.semanticColors.surfaces.white,
6327
+ border: `1px solid ${neoDesign.semanticColors.status.success.dark}`,
6328
+ },
6329
+ info: {
6330
+ backgroundColor: neoDesign.semanticColors.status.info.dark,
6331
+ color: neoDesign.semanticColors.surfaces.white,
6332
+ border: `1px solid ${neoDesign.semanticColors.status.info.dark}`,
6333
+ },
6334
+ warning: {
6335
+ backgroundColor: neoDesign.semanticColors.status.warning.default,
6336
+ color: neoDesign.semanticColors.typography.warning,
6337
+ border: `1px solid ${neoDesign.semanticColors.status.warning.default}`,
6338
+ },
6339
+ };
6340
+ // Legacy variants (ignore toastType)
6341
+ const legacyStyles = {
6342
+ dark: {
6343
+ backgroundColor: neoDesign.semanticColors.surfaces.snackbarLightMode,
6344
+ color: neoDesign.semanticColors.surfaces.white,
6345
+ border: `1px solid ${neoDesign.semanticColors.surfaces.snackbarLightMode}`,
6346
+ },
6347
+ brand: {
6348
+ backgroundColor: neoDesign.semanticColors.surfaces.snackbarBrand,
6349
+ color: neoDesign.semanticColors.surfaces.white,
6350
+ border: `1px solid ${neoDesign.semanticColors.surfaces.snackbarBrand}`,
6102
6351
  },
6103
6352
  download: {
6104
6353
  backgroundColor: neoDesign.semanticColors.surfaces.snackbarDarkMode,
@@ -6106,45 +6355,83 @@ const StyledAlert = styles.styled(Alert, {
6106
6355
  border: `1px solid ${neoDesign.semanticColors.border.primary}`,
6107
6356
  },
6108
6357
  };
6358
+ const getVariantStyles = () => {
6359
+ if (legacyStyles[variant])
6360
+ return legacyStyles[variant];
6361
+ const styleMap = toastType === 'filled' ? filledStyles : outlinedStyles;
6362
+ return styleMap[variant] ?? outlinedStyles.default;
6363
+ };
6109
6364
  return {
6110
6365
  ...baseStyles,
6111
- ...variantStyles[variant],
6366
+ ...getVariantStyles(),
6112
6367
  };
6113
6368
  });
6114
- const ToastTitle = styles.styled('p')(({ theme, variant = 'default' }) => {
6115
- const colorMap = {
6369
+ const ToastTitle = styles.styled('p')(({ theme, variant = 'default', toastType = 'outlined' }) => {
6370
+ const outlinedColors = {
6116
6371
  default: neoDesign.colors.grey['700'],
6117
- dark: neoDesign.semanticColors.surfaces.white,
6118
- brand: neoDesign.semanticColors.surfaces.white,
6119
6372
  error: neoDesign.semanticColors.status.error.dark,
6120
6373
  success: neoDesign.semanticColors.status.success.dark,
6121
6374
  info: neoDesign.semanticColors.status.info.dark,
6375
+ warning: neoDesign.semanticColors.status.warning.dark,
6376
+ };
6377
+ const filledColors = {
6378
+ default: neoDesign.semanticColors.surfaces.white,
6379
+ error: neoDesign.semanticColors.surfaces.white,
6380
+ success: neoDesign.semanticColors.surfaces.white,
6381
+ info: neoDesign.semanticColors.surfaces.white,
6382
+ warning: neoDesign.semanticColors.typography.warning,
6383
+ };
6384
+ const legacyColors = {
6385
+ dark: neoDesign.semanticColors.surfaces.white,
6386
+ brand: neoDesign.semanticColors.surfaces.white,
6122
6387
  download: neoDesign.colors.grey['700'],
6123
6388
  };
6389
+ const getColor = () => {
6390
+ if (legacyColors[variant])
6391
+ return legacyColors[variant];
6392
+ const colorMap = toastType === 'filled' ? filledColors : outlinedColors;
6393
+ return colorMap[variant] ?? outlinedColors.default;
6394
+ };
6124
6395
  return {
6125
6396
  margin: 0,
6126
6397
  fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.sm),
6127
6398
  fontWeight: neoDesign.typography.fontWeight.semiBold,
6128
6399
  lineHeight: 1.4,
6129
- color: colorMap[variant],
6400
+ color: getColor(),
6130
6401
  };
6131
6402
  });
6132
- const ToastMessage = styles.styled('p')(({ theme, variant = 'default' }) => {
6133
- const colorMap = {
6403
+ const ToastMessage = styles.styled('p')(({ theme, variant = 'default', toastType = 'outlined' }) => {
6404
+ const outlinedColors = {
6134
6405
  default: neoDesign.semanticColors.typography.bodySecondary,
6135
- dark: neoDesign.colors.grey['200'],
6136
- brand: neoDesign.colors.grey['200'],
6137
6406
  error: neoDesign.semanticColors.status.error.dark,
6138
6407
  success: neoDesign.semanticColors.status.success.dark,
6139
6408
  info: neoDesign.semanticColors.status.info.dark,
6409
+ warning: neoDesign.semanticColors.status.warning.dark,
6410
+ };
6411
+ const filledColors = {
6412
+ default: neoDesign.colors.grey['200'],
6413
+ error: neoDesign.semanticColors.surfaces.white,
6414
+ success: neoDesign.semanticColors.surfaces.white,
6415
+ info: neoDesign.semanticColors.surfaces.white,
6416
+ warning: neoDesign.semanticColors.typography.warning,
6417
+ };
6418
+ const legacyColors = {
6419
+ dark: neoDesign.colors.grey['200'],
6420
+ brand: neoDesign.colors.grey['200'],
6140
6421
  download: neoDesign.colors.grey['800'],
6141
6422
  };
6423
+ const getColor = () => {
6424
+ if (legacyColors[variant])
6425
+ return legacyColors[variant];
6426
+ const colorMap = toastType === 'filled' ? filledColors : outlinedColors;
6427
+ return colorMap[variant] ?? outlinedColors.default;
6428
+ };
6142
6429
  return {
6143
6430
  margin: 0,
6144
6431
  fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.sm),
6145
6432
  fontWeight: neoDesign.typography.fontWeight.regular,
6146
6433
  lineHeight: 1.4,
6147
- color: colorMap[variant],
6434
+ color: getColor(),
6148
6435
  };
6149
6436
  });
6150
6437
  const ToastActions = styles.styled(Stack)({
@@ -6153,29 +6440,39 @@ const ToastActions = styles.styled(Stack)({
6153
6440
  justifyContent: 'flex-start',
6154
6441
  });
6155
6442
  const ToastButton = styles.styled(Button, {
6156
- shouldForwardProp: prop => prop !== 'toastVariant' && prop !== 'primary',
6157
- })(({ toastVariant = 'default', primary }) => {
6443
+ shouldForwardProp: prop => prop !== 'toastVariant' && prop !== 'toastType' && prop !== 'primary',
6444
+ })(({ toastVariant = 'default', toastType = 'outlined', primary }) => {
6445
+ const isLegacy = toastVariant === 'dark' || toastVariant === 'brand' || toastVariant === 'download';
6446
+ const isFilled = !isLegacy && toastType === 'filled';
6158
6447
  const getColor = () => {
6159
6448
  if (primary) {
6160
6449
  if (toastVariant === 'dark' || toastVariant === 'brand') {
6161
6450
  return neoDesign.colors.digitalBlue['200'];
6162
6451
  }
6452
+ if (isFilled) {
6453
+ return toastVariant === 'warning'
6454
+ ? neoDesign.semanticColors.typography.link.primary
6455
+ : neoDesign.semanticColors.surfaces.white;
6456
+ }
6163
6457
  return neoDesign.semanticColors.typography.link.primary;
6164
6458
  }
6165
6459
  // Non-primary button colors
6166
6460
  if (toastVariant === 'dark' || toastVariant === 'brand') {
6167
6461
  return neoDesign.semanticColors.surfaces.white;
6168
6462
  }
6169
- if (toastVariant === 'error') {
6170
- return neoDesign.semanticColors.status.error.dark;
6463
+ if (isFilled) {
6464
+ return toastVariant === 'warning'
6465
+ ? neoDesign.semanticColors.typography.warning
6466
+ : neoDesign.semanticColors.surfaces.white;
6171
6467
  }
6172
- if (toastVariant === 'success') {
6468
+ if (toastVariant === 'error')
6469
+ return neoDesign.semanticColors.status.error.dark;
6470
+ if (toastVariant === 'success')
6173
6471
  return neoDesign.semanticColors.status.success.dark;
6174
- }
6175
- if (toastVariant === 'info') {
6472
+ if (toastVariant === 'info')
6176
6473
  return neoDesign.semanticColors.status.info.dark;
6177
- }
6178
- // default and download variants use icon placeholder color
6474
+ if (toastVariant === 'warning')
6475
+ return neoDesign.semanticColors.status.warning.dark;
6179
6476
  return neoDesign.semanticColors.icons.placeholder;
6180
6477
  };
6181
6478
  return {
@@ -6239,27 +6536,27 @@ const DownloadIconButton = styles.styled(IconButton)({
6239
6536
  * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4122-37223
6240
6537
  *
6241
6538
  * Figma Props Mapping:
6242
- * - type (Light mode|Dark mode|Brand color|Error|Success|Info|Download) → variant (default|dark|brand|error|success|info|download)
6243
- * - headertitle (string)
6244
- * - supportingTextmessage (string)
6245
- * - xCloseButtonshowClose (boolean)
6246
- * - actionsactions (ReactNode)
6247
- * - Progress barprogress (number 0-100)
6248
- */
6249
- const NeoToast = ({ variant = 'default', title, message, showClose = true, actions, progress, fileName, onClose, ...props }) => {
6539
+ * - Intent (Neutral|Error|Success|Info|Warning) → variant (default|error|success|info|warning)
6540
+ * - Type (Outlined|Filled) type ('outlined'|'filled')
6541
+ * - Show header title (string)
6542
+ * - Show supporting text message (string)
6543
+ * - Show close icon showClose (boolean)
6544
+ * - Show actionsactions (ReactNode)
6545
+ */
6546
+ const NeoToast = ({ variant = 'default', type = 'outlined', title, message, showClose = true, actions, progress, fileName, onClose, ...props }) => {
6250
6547
  const isDownloadVariant = variant === 'download';
6251
- return (jsxRuntime.jsx(StyledAlert, { ...props, variant: variant, showProgress: isDownloadVariant, action: showClose && !isDownloadVariant ? (jsxRuntime.jsx(IconButton, { size: "small", onClick: onClose, sx: { color: neoDesign.semanticColors.icons.placeholder }, children: jsxRuntime.jsx(X, { size: 16 }) })) : undefined, children: isDownloadVariant ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(Stack, { direction: "row", sx: {
6548
+ return (jsxRuntime.jsx(StyledAlert, { ...props, variant: variant, toastType: type, showProgress: isDownloadVariant, action: showClose && !isDownloadVariant ? (jsxRuntime.jsx(IconButton, { size: "small", onClick: onClose, sx: { color: neoDesign.semanticColors.icons.placeholder }, children: jsxRuntime.jsx(X, { size: 16 }) })) : undefined, children: isDownloadVariant ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(Stack, { direction: "row", sx: {
6252
6549
  alignItems: 'flex-start',
6253
6550
  justifyContent: 'space-between',
6254
6551
  width: '100%',
6255
6552
  gap: `${neoDesign.spacing.spacing_4}px`,
6256
- }, children: [title && jsxRuntime.jsx(ToastTitle, { variant: variant, children: title }), showClose && (jsxRuntime.jsxs(DownloadActions, { direction: "row", children: [jsxRuntime.jsx(DownloadIconButton, { size: "small", children: jsxRuntime.jsx(Stack, { sx: { width: 16, height: 16 } }) }), jsxRuntime.jsx(DownloadIconButton, { size: "small", onClick: onClose, children: jsxRuntime.jsx(X, { size: 16 }) })] }))] }), jsxRuntime.jsxs(ProgressSection, { children: [jsxRuntime.jsxs(Stack, { direction: "row", sx: { alignItems: 'flex-end', justifyContent: 'space-between', width: '100%' }, children: [fileName && jsxRuntime.jsx(FileName, { children: fileName }), progress !== undefined && jsxRuntime.jsxs(ProgressLabel, { children: [progress, "%"] })] }), jsxRuntime.jsx(StyledLinearProgress, { variant: "determinate", value: progress ?? 0 })] })] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(Stack, { sx: { gap: `${neoDesign.spacing.spacing_1}px`, width: '100%' }, children: [title && jsxRuntime.jsx(ToastTitle, { variant: variant, children: title }), message && jsxRuntime.jsx(ToastMessage, { variant: variant, children: message })] }), actions && jsxRuntime.jsx(ToastActions, { direction: "row", children: actions })] })) }));
6553
+ }, children: [title && (jsxRuntime.jsx(ToastTitle, { variant: variant, toastType: type, children: title })), showClose && (jsxRuntime.jsxs(DownloadActions, { direction: "row", children: [jsxRuntime.jsx(DownloadIconButton, { size: "small", children: jsxRuntime.jsx(Stack, { sx: { width: 16, height: 16 } }) }), jsxRuntime.jsx(DownloadIconButton, { size: "small", onClick: onClose, children: jsxRuntime.jsx(X, { size: 16 }) })] }))] }), jsxRuntime.jsxs(ProgressSection, { children: [jsxRuntime.jsxs(Stack, { direction: "row", sx: { alignItems: 'flex-end', justifyContent: 'space-between', width: '100%' }, children: [fileName && jsxRuntime.jsx(FileName, { children: fileName }), progress !== undefined && jsxRuntime.jsxs(ProgressLabel, { children: [progress, "%"] })] }), jsxRuntime.jsx(StyledLinearProgress, { variant: "determinate", value: progress ?? 0 })] })] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(Stack, { sx: { gap: `${neoDesign.spacing.spacing_1}px`, width: '100%' }, children: [title && (jsxRuntime.jsx(ToastTitle, { variant: variant, toastType: type, children: title })), message && (jsxRuntime.jsx(ToastMessage, { variant: variant, toastType: type, children: message }))] }), actions && jsxRuntime.jsx(ToastActions, { direction: "row", children: actions })] })) }));
6257
6554
  };
6258
6555
  /**
6259
6556
  * Helper component for creating toast action buttons with proper styling
6260
6557
  */
6261
- const NeoToastButton = ({ primary, variant = 'default', children, ...props }) => {
6262
- return (jsxRuntime.jsx(ToastButton, { variant: "text", toastVariant: variant, primary: primary, ...props, children: children }));
6558
+ const NeoToastButton = ({ primary, variant = 'default', type = 'outlined', children, ...props }) => {
6559
+ return (jsxRuntime.jsx(ToastButton, { variant: "text", toastVariant: variant, toastType: type, primary: primary, ...props, children: children }));
6263
6560
  };
6264
6561
  NeoToast.displayName = 'NeoToast';
6265
6562
  NeoToastButton.displayName = 'NeoToastButton';
@@ -6326,7 +6623,7 @@ const StyledSwitch = styles.styled(Switch, {
6326
6623
  // Focus visible for keyboard navigation
6327
6624
  '&.Mui-focusVisible': {
6328
6625
  [`& + .${Switch.switchClasses.track}`]: {
6329
- outline: `2px solid ${neoDesign.semanticColors.buttons.primary.focus}`,
6626
+ outline: `2px solid ${neoDesign.semanticColors.border.focus}`,
6330
6627
  outlineOffset: 2,
6331
6628
  },
6332
6629
  },
@@ -6546,10 +6843,10 @@ const StyledTooltip = styles.styled(Tooltip, {
6546
6843
  * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4091-26557&t=Bo58EpFmg6ILJtmv-11
6547
6844
  *
6548
6845
  * Figma Props Mapping:
6549
- * - Type (Light mode|Dark mode|Brand color) → variant ('light'|'dark'|'brand')
6550
- * - Arrow → arrow (boolean) + placement (top/bottom/left/right/etc)
6551
- * - Supporting text (True|False) → description (string|undefined)
6552
- * - text → title (string, literal content)
6846
+ * - Theme (Light mode|Dark mode|Brand color) → variant ('light'|'dark'|'brand')
6847
+ * - Placement (None|Bottom left|...|Top center) → arrow (boolean) + placement
6848
+ * - Show description (boolean) → description (string|undefined)
6849
+ * - Text → title (string, literal content)
6553
6850
  *
6554
6851
  * Design Tokens Used:
6555
6852
  * - Light: surfaces.tooltip (#4b5563), typography.tooltip (#ffffff)
@@ -6667,7 +6964,7 @@ const StyledTreeView = styles.styled(RichTreeViewPro.RichTreeViewPro)({
6667
6964
  backgroundColor: neoDesign.semanticColors.surfaces.listHover,
6668
6965
  },
6669
6966
  [`& .${TreeItem.treeItemClasses.content}.Mui-focused`]: {
6670
- boxShadow: `inset 0 0 0 2px ${neoDesign.semanticColors.buttons.primary.focus}`,
6967
+ boxShadow: `inset 0 0 0 2px ${neoDesign.semanticColors.border.focus}`,
6671
6968
  backgroundColor: 'transparent',
6672
6969
  },
6673
6970
  [`& .${TreeItem.treeItemClasses.content}.Mui-selected`]: {
@@ -6678,7 +6975,7 @@ const StyledTreeView = styles.styled(RichTreeViewPro.RichTreeViewPro)({
6678
6975
  },
6679
6976
  [`& .${TreeItem.treeItemClasses.content}.Mui-selected.Mui-focused`]: {
6680
6977
  backgroundColor: neoDesign.semanticColors.surfaces.listHover,
6681
- boxShadow: `inset 0 0 0 2px ${neoDesign.semanticColors.buttons.primary.focus}`,
6978
+ boxShadow: `inset 0 0 0 2px ${neoDesign.semanticColors.border.focus}`,
6682
6979
  },
6683
6980
  [`& .${TreeItem.treeItemClasses.label}`]: {
6684
6981
  fontSize: neoDesign.typography.fontSize.xs,
@@ -6703,12 +7000,12 @@ const StyledTreeView = styles.styled(RichTreeViewPro.RichTreeViewPro)({
6703
7000
 
6704
7001
  // Figma-exact border radius for toggle buttons — no matching design token
6705
7002
  const TOGGLE_BUTTON_BORDER_RADIUS = 14;
6706
- const StyledToggleButtonGroup = styles.styled(ToggleButtonGroup)(({ theme }) => ({
7003
+ const StyledToggleButtonGroup = styles.styled(MuiToggleButtonGroup)(({ theme }) => ({
6707
7004
  backgroundColor: neoDesign.colors.grey[50],
6708
7005
  padding: theme.spacing(0.625, 0.875),
6709
7006
  borderRadius: neoDesign.borderRadius.full,
6710
7007
  gap: 0,
6711
- [`& .${ToggleButtonGroup.toggleButtonGroupClasses.grouped}`]: {
7008
+ [`& .${MuiToggleButtonGroup.toggleButtonGroupClasses.grouped}`]: {
6712
7009
  border: 'none',
6713
7010
  borderRadius: TOGGLE_BUTTON_BORDER_RADIUS,
6714
7011
  margin: 0,
@@ -6721,7 +7018,7 @@ const StyledToggleButtonGroup = styles.styled(ToggleButtonGroup)(({ theme }) =>
6721
7018
  },
6722
7019
  },
6723
7020
  }));
6724
- const StyledToggleButton = styles.styled(ToggleButton)(({ theme }) => ({
7021
+ const StyledToggleButton = styles.styled(MuiToggleButton)(({ theme }) => ({
6725
7022
  padding: theme.spacing(0.625),
6726
7023
  minWidth: 'auto',
6727
7024
  color: neoDesign.semanticColors.icons.default,
@@ -6733,7 +7030,7 @@ const StyledToggleButton = styles.styled(ToggleButton)(({ theme }) => ({
6733
7030
  '&:hover': {
6734
7031
  backgroundColor: 'transparent',
6735
7032
  },
6736
- [`&.${ToggleButton.toggleButtonClasses.selected}`]: {
7033
+ [`&.${MuiToggleButton.toggleButtonClasses.selected}`]: {
6737
7034
  backgroundColor: neoDesign.semanticColors.buttons.navigation.pressedBackground,
6738
7035
  color: neoDesign.semanticColors.icons.active,
6739
7036
  '&:hover': {
@@ -6779,7 +7076,8 @@ exports.NeoBanner = NeoBanner;
6779
7076
  exports.NeoBreadcrumbLink = NeoBreadcrumbLink;
6780
7077
  exports.NeoBreadcrumbs = NeoBreadcrumbs;
6781
7078
  exports.NeoButton = NeoButton;
6782
- exports.NeoButtonGroup = NeoButtonGroup;
7079
+ exports.NeoButtonTab = NeoButtonTab;
7080
+ exports.NeoButtonTabGroup = NeoButtonTabGroup;
6783
7081
  exports.NeoCheckbox = NeoCheckbox;
6784
7082
  exports.NeoCodeSnippet = NeoCodeSnippet;
6785
7083
  exports.NeoDataGrid = NeoDataGrid;
@@ -6798,6 +7096,7 @@ exports.NeoDivider = NeoDivider;
6798
7096
  exports.NeoDot = NeoDot;
6799
7097
  exports.NeoFilterChip = NeoFilterChip;
6800
7098
  exports.NeoFooter = NeoFooter;
7099
+ exports.NeoGeneralAvatar = NeoGeneralAvatar;
6801
7100
  exports.NeoIconButton = NeoIconButton;
6802
7101
  exports.NeoIconWrapper = NeoIconWrapper;
6803
7102
  exports.NeoInfiniteScrollGrid = NeoInfiniteScrollGrid;
@@ -6814,6 +7113,7 @@ exports.NeoModalContent = NeoModalContent;
6814
7113
  exports.NeoModalFooter = NeoModalFooter;
6815
7114
  exports.NeoModalHeader = NeoModalHeader;
6816
7115
  exports.NeoMultiBadgesCell = NeoMultiBadgesCell;
7116
+ exports.NeoNavigationAvatar = NeoNavigationAvatar;
6817
7117
  exports.NeoNavigationItem = NeoNavigationItem;
6818
7118
  exports.NeoPageContent = NeoPageContent;
6819
7119
  exports.NeoPaginatedGrid = NeoPaginatedGrid;