@moderneinc/neo-styled-components 2.5.0-next.45d7db → 2.5.0-next.80ce67

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.esm.js CHANGED
@@ -147,7 +147,7 @@ const NeoAvatar = ({ size = 'medium', variant = 'circular', ...props }) => {
147
147
  };
148
148
  NeoAvatar.displayName = 'NeoAvatar';
149
149
 
150
- const StyledChip$1 = styled(Chip)(({ theme }) => ({
150
+ const StyledChip$2 = styled(Chip)(({ theme }) => ({
151
151
  height: 24,
152
152
  paddingTop: spacing.spacing_1_4,
153
153
  paddingBottom: spacing.spacing_1_4,
@@ -234,7 +234,7 @@ const StyledChip$1 = styled(Chip)(({ theme }) => ({
234
234
  * - Label → label prop
235
235
  */
236
236
  const NeoBadge = (props) => {
237
- return jsx(StyledChip$1, { ...props });
237
+ return jsx(StyledChip$2, { ...props });
238
238
  };
239
239
  NeoBadge.displayName = 'NeoBadge';
240
240
 
@@ -384,6 +384,7 @@ const ActivityDot = styled('div')(({ color }) => ({
384
384
  *
385
385
  * **Figma Props Mapping:**
386
386
  * - `Size` (Figma) → `size` (React): Height variant matching DataGrid sizes
387
+ * - `Type` (Figma) → `color` (React): Activity type (Commit Job → commitJob, Recipe Run → recipeRun, Visualization → visualization)
387
388
  *
388
389
  * **Design Tokens:**
389
390
  * - `semanticColors.activity.commitJob` - Blue dot for commit job events (#2F42FF)
@@ -499,7 +500,7 @@ const NeoActivityIndicatorCell = ({ event = 'commit-job', secondaryEvent, scene
499
500
  NeoActivityIndicatorCell.displayName = 'NeoActivityIndicatorCell';
500
501
 
501
502
  /**
502
- * @license lucide-react v0.564.0 - ISC
503
+ * @license lucide-react v0.575.0 - ISC
503
504
  *
504
505
  * This source code is licensed under the ISC license.
505
506
  * See the LICENSE file in the root directory of this source tree.
@@ -510,7 +511,7 @@ const mergeClasses = (...classes) => classes.filter((className, index, array) =>
510
511
  }).join(" ").trim();
511
512
 
512
513
  /**
513
- * @license lucide-react v0.564.0 - ISC
514
+ * @license lucide-react v0.575.0 - ISC
514
515
  *
515
516
  * This source code is licensed under the ISC license.
516
517
  * See the LICENSE file in the root directory of this source tree.
@@ -519,7 +520,7 @@ const mergeClasses = (...classes) => classes.filter((className, index, array) =>
519
520
  const toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
520
521
 
521
522
  /**
522
- * @license lucide-react v0.564.0 - ISC
523
+ * @license lucide-react v0.575.0 - ISC
523
524
  *
524
525
  * This source code is licensed under the ISC license.
525
526
  * See the LICENSE file in the root directory of this source tree.
@@ -531,7 +532,7 @@ const toCamelCase = (string) => string.replace(
531
532
  );
532
533
 
533
534
  /**
534
- * @license lucide-react v0.564.0 - ISC
535
+ * @license lucide-react v0.575.0 - ISC
535
536
  *
536
537
  * This source code is licensed under the ISC license.
537
538
  * See the LICENSE file in the root directory of this source tree.
@@ -544,7 +545,7 @@ const toPascalCase = (string) => {
544
545
  };
545
546
 
546
547
  /**
547
- * @license lucide-react v0.564.0 - ISC
548
+ * @license lucide-react v0.575.0 - ISC
548
549
  *
549
550
  * This source code is licensed under the ISC license.
550
551
  * See the LICENSE file in the root directory of this source tree.
@@ -563,7 +564,7 @@ var defaultAttributes = {
563
564
  };
564
565
 
565
566
  /**
566
- * @license lucide-react v0.564.0 - ISC
567
+ * @license lucide-react v0.575.0 - ISC
567
568
  *
568
569
  * This source code is licensed under the ISC license.
569
570
  * See the LICENSE file in the root directory of this source tree.
@@ -579,7 +580,7 @@ const hasA11yProp = (props) => {
579
580
  };
580
581
 
581
582
  /**
582
- * @license lucide-react v0.564.0 - ISC
583
+ * @license lucide-react v0.575.0 - ISC
583
584
  *
584
585
  * This source code is licensed under the ISC license.
585
586
  * See the LICENSE file in the root directory of this source tree.
@@ -617,7 +618,7 @@ const Icon = forwardRef(
617
618
  );
618
619
 
619
620
  /**
620
- * @license lucide-react v0.564.0 - ISC
621
+ * @license lucide-react v0.575.0 - ISC
621
622
  *
622
623
  * This source code is licensed under the ISC license.
623
624
  * See the LICENSE file in the root directory of this source tree.
@@ -642,42 +643,42 @@ const createLucideIcon = (iconName, iconNode) => {
642
643
  };
643
644
 
644
645
  /**
645
- * @license lucide-react v0.564.0 - ISC
646
+ * @license lucide-react v0.575.0 - ISC
646
647
  *
647
648
  * This source code is licensed under the ISC license.
648
649
  * See the LICENSE file in the root directory of this source tree.
649
650
  */
650
651
 
651
652
 
652
- const __iconNode$h = [
653
+ const __iconNode$i = [
653
654
  ["path", { d: "M12 5v14", key: "s699le" }],
654
655
  ["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
655
656
  ];
656
- const ArrowDown = createLucideIcon("arrow-down", __iconNode$h);
657
+ const ArrowDown = createLucideIcon("arrow-down", __iconNode$i);
657
658
 
658
659
  /**
659
- * @license lucide-react v0.564.0 - ISC
660
+ * @license lucide-react v0.575.0 - ISC
660
661
  *
661
662
  * This source code is licensed under the ISC license.
662
663
  * See the LICENSE file in the root directory of this source tree.
663
664
  */
664
665
 
665
666
 
666
- const __iconNode$g = [
667
+ const __iconNode$h = [
667
668
  ["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
668
669
  ["path", { d: "M12 19V5", key: "x0mq9r" }]
669
670
  ];
670
- const ArrowUp = createLucideIcon("arrow-up", __iconNode$g);
671
+ const ArrowUp = createLucideIcon("arrow-up", __iconNode$h);
671
672
 
672
673
  /**
673
- * @license lucide-react v0.564.0 - ISC
674
+ * @license lucide-react v0.575.0 - ISC
674
675
  *
675
676
  * This source code is licensed under the ISC license.
676
677
  * See the LICENSE file in the root directory of this source tree.
677
678
  */
678
679
 
679
680
 
680
- const __iconNode$f = [
681
+ const __iconNode$g = [
681
682
  ["path", { d: "M8 2v4", key: "1cmpym" }],
682
683
  ["path", { d: "M16 2v4", key: "4m81vk" }],
683
684
  ["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
@@ -689,127 +690,142 @@ const __iconNode$f = [
689
690
  ["path", { d: "M12 18h.01", key: "mhygvu" }],
690
691
  ["path", { d: "M16 18h.01", key: "kzsmim" }]
691
692
  ];
692
- const CalendarDays = createLucideIcon("calendar-days", __iconNode$f);
693
+ const CalendarDays = createLucideIcon("calendar-days", __iconNode$g);
693
694
 
694
695
  /**
695
- * @license lucide-react v0.564.0 - ISC
696
+ * @license lucide-react v0.575.0 - ISC
696
697
  *
697
698
  * This source code is licensed under the ISC license.
698
699
  * See the LICENSE file in the root directory of this source tree.
699
700
  */
700
701
 
701
702
 
702
- const __iconNode$e = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
703
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$e);
703
+ const __iconNode$f = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
704
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$f);
704
705
 
705
706
  /**
706
- * @license lucide-react v0.564.0 - ISC
707
+ * @license lucide-react v0.575.0 - ISC
707
708
  *
708
709
  * This source code is licensed under the ISC license.
709
710
  * See the LICENSE file in the root directory of this source tree.
710
711
  */
711
712
 
712
713
 
713
- const __iconNode$d = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
714
- const ChevronLeft = createLucideIcon("chevron-left", __iconNode$d);
714
+ const __iconNode$e = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
715
+ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$e);
715
716
 
716
717
  /**
717
- * @license lucide-react v0.564.0 - ISC
718
+ * @license lucide-react v0.575.0 - ISC
718
719
  *
719
720
  * This source code is licensed under the ISC license.
720
721
  * See the LICENSE file in the root directory of this source tree.
721
722
  */
722
723
 
723
724
 
724
- const __iconNode$c = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
725
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$c);
725
+ const __iconNode$d = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
726
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$d);
726
727
 
727
728
  /**
728
- * @license lucide-react v0.564.0 - ISC
729
+ * @license lucide-react v0.575.0 - ISC
729
730
  *
730
731
  * This source code is licensed under the ISC license.
731
732
  * See the LICENSE file in the root directory of this source tree.
732
733
  */
733
734
 
734
735
 
735
- const __iconNode$b = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
736
- const ChevronUp = createLucideIcon("chevron-up", __iconNode$b);
736
+ const __iconNode$c = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
737
+ const ChevronUp = createLucideIcon("chevron-up", __iconNode$c);
737
738
 
738
739
  /**
739
- * @license lucide-react v0.564.0 - ISC
740
+ * @license lucide-react v0.575.0 - ISC
740
741
  *
741
742
  * This source code is licensed under the ISC license.
742
743
  * See the LICENSE file in the root directory of this source tree.
743
744
  */
744
745
 
745
746
 
746
- const __iconNode$a = [
747
+ const __iconNode$b = [
747
748
  ["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
748
749
  ["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
749
750
  ];
750
- const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$a);
751
+ const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$b);
751
752
 
752
753
  /**
753
- * @license lucide-react v0.564.0 - ISC
754
+ * @license lucide-react v0.575.0 - ISC
754
755
  *
755
756
  * This source code is licensed under the ISC license.
756
757
  * See the LICENSE file in the root directory of this source tree.
757
758
  */
758
759
 
759
760
 
760
- const __iconNode$9 = [
761
+ const __iconNode$a = [
761
762
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
762
763
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
763
764
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
764
765
  ];
765
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$9);
766
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$a);
766
767
 
767
768
  /**
768
- * @license lucide-react v0.564.0 - ISC
769
+ * @license lucide-react v0.575.0 - ISC
769
770
  *
770
771
  * This source code is licensed under the ISC license.
771
772
  * See the LICENSE file in the root directory of this source tree.
772
773
  */
773
774
 
774
775
 
775
- const __iconNode$8 = [
776
+ const __iconNode$9 = [
776
777
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
777
778
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
778
779
  ];
779
- const CircleCheck = createLucideIcon("circle-check", __iconNode$8);
780
+ const CircleCheck = createLucideIcon("circle-check", __iconNode$9);
780
781
 
781
782
  /**
782
- * @license lucide-react v0.564.0 - ISC
783
+ * @license lucide-react v0.575.0 - ISC
783
784
  *
784
785
  * This source code is licensed under the ISC license.
785
786
  * See the LICENSE file in the root directory of this source tree.
786
787
  */
787
788
 
788
789
 
789
- const __iconNode$7 = [
790
+ const __iconNode$8 = [
790
791
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
791
792
  ["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
792
793
  ["path", { d: "M12 17h.01", key: "p32p05" }]
793
794
  ];
794
- const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$7);
795
+ const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$8);
795
796
 
796
797
  /**
797
- * @license lucide-react v0.564.0 - ISC
798
+ * @license lucide-react v0.575.0 - ISC
798
799
  *
799
800
  * This source code is licensed under the ISC license.
800
801
  * See the LICENSE file in the root directory of this source tree.
801
802
  */
802
803
 
803
804
 
804
- const __iconNode$6 = [
805
+ const __iconNode$7 = [
805
806
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
806
807
  ["path", { d: "M9 3v18", key: "fh3hqa" }],
807
808
  ["path", { d: "M15 3v18", key: "14nvp0" }]
808
809
  ];
809
- const Columns3 = createLucideIcon("columns-3", __iconNode$6);
810
+ const Columns3 = createLucideIcon("columns-3", __iconNode$7);
810
811
 
811
812
  /**
812
- * @license lucide-react v0.564.0 - ISC
813
+ * @license lucide-react v0.575.0 - ISC
814
+ *
815
+ * This source code is licensed under the ISC license.
816
+ * See the LICENSE file in the root directory of this source tree.
817
+ */
818
+
819
+
820
+ const __iconNode$6 = [
821
+ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
822
+ ["path", { d: "M12 16v-4", key: "1dtifu" }],
823
+ ["path", { d: "M12 8h.01", key: "e9boi3" }]
824
+ ];
825
+ const Info = createLucideIcon("info", __iconNode$6);
826
+
827
+ /**
828
+ * @license lucide-react v0.575.0 - ISC
813
829
  *
814
830
  * This source code is licensed under the ISC license.
815
831
  * See the LICENSE file in the root directory of this source tree.
@@ -824,7 +840,7 @@ const __iconNode$5 = [
824
840
  const ListFilter = createLucideIcon("list-filter", __iconNode$5);
825
841
 
826
842
  /**
827
- * @license lucide-react v0.564.0 - ISC
843
+ * @license lucide-react v0.575.0 - ISC
828
844
  *
829
845
  * This source code is licensed under the ISC license.
830
846
  * See the LICENSE file in the root directory of this source tree.
@@ -838,7 +854,7 @@ const __iconNode$4 = [
838
854
  const Plus = createLucideIcon("plus", __iconNode$4);
839
855
 
840
856
  /**
841
- * @license lucide-react v0.564.0 - ISC
857
+ * @license lucide-react v0.575.0 - ISC
842
858
  *
843
859
  * This source code is licensed under the ISC license.
844
860
  * See the LICENSE file in the root directory of this source tree.
@@ -852,7 +868,7 @@ const __iconNode$3 = [
852
868
  const Search = createLucideIcon("search", __iconNode$3);
853
869
 
854
870
  /**
855
- * @license lucide-react v0.564.0 - ISC
871
+ * @license lucide-react v0.575.0 - ISC
856
872
  *
857
873
  * This source code is licensed under the ISC license.
858
874
  * See the LICENSE file in the root directory of this source tree.
@@ -869,7 +885,7 @@ const __iconNode$2 = [
869
885
  const Trash2 = createLucideIcon("trash-2", __iconNode$2);
870
886
 
871
887
  /**
872
- * @license lucide-react v0.564.0 - ISC
888
+ * @license lucide-react v0.575.0 - ISC
873
889
  *
874
890
  * This source code is licensed under the ISC license.
875
891
  * See the LICENSE file in the root directory of this source tree.
@@ -888,7 +904,7 @@ const __iconNode$1 = [
888
904
  const WifiOff = createLucideIcon("wifi-off", __iconNode$1);
889
905
 
890
906
  /**
891
- * @license lucide-react v0.564.0 - ISC
907
+ * @license lucide-react v0.575.0 - ISC
892
908
  *
893
909
  * This source code is licensed under the ISC license.
894
910
  * See the LICENSE file in the root directory of this source tree.
@@ -1377,7 +1393,6 @@ const StyledButtonGroup = styled(MuiButtonGroup)(({ theme, size = 'medium' }) =>
1377
1393
  *
1378
1394
  * Figma Props Mapping:
1379
1395
  * - Size (Sm|Md) → size prop (small|medium)
1380
- * - Icon=False → Icon support not included in this implementation
1381
1396
  * - Active button state → Controlled externally via button props or classes
1382
1397
  *
1383
1398
  * Usage:
@@ -1422,7 +1437,7 @@ const LabelContainer$4 = styled('div')(({ size = 'medium' }) => ({
1422
1437
  flexDirection: 'column',
1423
1438
  gap: size === 'medium' ? 2 : 0,
1424
1439
  }));
1425
- const Label$3 = styled('span')(({ theme, size = 'medium' }) => ({
1440
+ const Label$4 = styled('span')(({ theme, size = 'medium' }) => ({
1426
1441
  fontSize: theme.typography.pxToRem(size === 'xs'
1427
1442
  ? typography.fontSize.xs
1428
1443
  : size === 'small'
@@ -1571,7 +1586,7 @@ const NeoCheckbox = ({ size = 'medium', label, helperText, disabled, icon, check
1571
1586
  return (jsx(StyledCheckbox, { size: size, disabled: disabled, icon: defaultIcon, checkedIcon: defaultCheckedIcon, indeterminateIcon: defaultIndeterminateIcon, className: combinedClassName, ...props }));
1572
1587
  }
1573
1588
  // With label, wrap in container for proper layout
1574
- return (jsxs(CheckboxContainer, { disabled: disabled, children: [jsx(StyledCheckbox, { size: size, disabled: disabled, icon: defaultIcon, checkedIcon: defaultCheckedIcon, indeterminateIcon: defaultIndeterminateIcon, className: combinedClassName, ...props }), jsxs(LabelContainer$4, { size: size, children: [label && jsx(Label$3, { size: size, children: label }), helperText && jsx(HelperText$2, { size: size, children: helperText })] })] }));
1589
+ return (jsxs(CheckboxContainer, { disabled: disabled, children: [jsx(StyledCheckbox, { size: size, disabled: disabled, icon: defaultIcon, checkedIcon: defaultCheckedIcon, indeterminateIcon: defaultIndeterminateIcon, className: combinedClassName, ...props }), jsxs(LabelContainer$4, { size: size, children: [label && jsx(Label$4, { size: size, children: label }), helperText && jsx(HelperText$2, { size: size, children: helperText })] })] }));
1575
1590
  };
1576
1591
  NeoCheckbox.displayName = 'NeoCheckbox';
1577
1592
 
@@ -1598,6 +1613,11 @@ const StyledButtonBase = styled(ButtonBase, {
1598
1613
  paddingMultiline: theme.spacing(3), // 24px all sides
1599
1614
  fontSize: theme.typography.pxToRem(typography.fontSize.sm), // 14px
1600
1615
  },
1616
+ inline: {
1617
+ height: 'auto',
1618
+ paddingSingleLine: `0 ${theme.spacing(0.5)}`, // 4px horizontal
1619
+ fontSize: theme.typography.pxToRem(typography.fontSize.xs), // 12px
1620
+ },
1601
1621
  };
1602
1622
  const sizeStyles = sizeConfig[size];
1603
1623
  // Base styles shared by all variants
@@ -1612,12 +1632,12 @@ const StyledButtonBase = styled(ButtonBase, {
1612
1632
  width: isMultiline ? '100%' : 'fit-content',
1613
1633
  maxWidth: isMultiline ? '100%' : 'none',
1614
1634
  overflowX: isMultiline ? 'auto' : 'visible',
1615
- padding: isMultiline ? sizeStyles.paddingMultiline : sizeStyles.paddingSingleLine,
1635
+ padding: isMultiline && 'paddingMultiline' in sizeStyles ? sizeStyles.paddingMultiline : sizeStyles.paddingSingleLine,
1616
1636
  paddingRight: isMultiline ? theme.spacing(7) : undefined, // Extra space for copy button in multiline only
1617
1637
  fontSize: sizeStyles.fontSize,
1618
1638
  fontFamily: typography.fontFamily.code,
1619
1639
  fontWeight: typography.fontWeight.regular,
1620
- lineHeight: isMultiline ? 1.5 : size === 'xs' ? 1.2 : 'normal',
1640
+ lineHeight: isMultiline ? 1.5 : size === 'xs' || size === 'inline' ? 1.2 : 'normal',
1621
1641
  borderRadius: borderRadius.xS,
1622
1642
  textAlign: 'left',
1623
1643
  textTransform: 'none',
@@ -1668,12 +1688,13 @@ const IconWrapper$2 = styled('span')(({ theme, isMultiline }) => ({
1668
1688
  *
1669
1689
  * Figma Props Mapping:
1670
1690
  * - Color (Light|Dark) → variant (outlined|filled)
1671
- * - size (Single line|multiline) → auto-detected from children
1691
+ * - size (Single line|multiline|inline) → size prop + auto-detected multiline
1672
1692
  * - Copy button → endIcon (ReactNode)
1673
1693
  * - Text content → children prop
1674
1694
  */
1675
1695
  const NeoCodeSnippet = ({ variant = 'outlined', size = 'small', endIcon, children, ...props }) => {
1676
- const isMultiline = String(children).includes('\n');
1696
+ // Inline snippets are never multiline — they sit within a line of text
1697
+ const isMultiline = size !== 'inline' && String(children).includes('\n');
1677
1698
  return (jsxs(StyledButtonBase, { variant: variant, size: size, isMultiline: isMultiline, ...props, children: [isMultiline ? children : jsx("span", { children: children }), endIcon && jsx(IconWrapper$2, { isMultiline: isMultiline, children: endIcon })] }));
1678
1699
  };
1679
1700
  NeoCodeSnippet.displayName = 'NeoCodeSnippet';
@@ -1885,7 +1906,7 @@ const LabelContainer$3 = styled('div')({
1885
1906
  gap: spacing.spacing_1,
1886
1907
  minWidth: 0,
1887
1908
  });
1888
- const Label$2 = styled('span')({
1909
+ const Label$3 = styled('span')({
1889
1910
  color: semanticColors.icons.default,
1890
1911
  flexShrink: 0,
1891
1912
  });
@@ -1911,9 +1932,11 @@ const Shortcut = styled('span')(({ theme }) => ({
1911
1932
  * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4159-8649
1912
1933
  *
1913
1934
  * Figma Props Mapping:
1935
+ * - Figma "Dropdown - Menu" component uses Type (Avatar|Button|Icon) and Open (True|False)
1936
+ * to control the menu trigger. NeoMenuItem is the individual item inside the menu.
1914
1937
  * - Text label → children prop (mapped via figma.children)
1915
- * - State=Selected → selected prop (mapped via figma.enum)
1916
- * - State=Disabled → disabled prop (mapped via figma.enum)
1938
+ * - selected → selected prop (React-controlled)
1939
+ * - disabled → disabled prop (React-controlled)
1917
1940
  * - Hover state → CSS :hover (not mapped)
1918
1941
  * - Icon slot → icon prop (not mappable - ReactNode)
1919
1942
  * - Secondary text → secondaryText prop (not mappable - ReactNode/string)
@@ -1935,7 +1958,7 @@ const Shortcut = styled('span')(({ theme }) => ({
1935
1958
  * ```
1936
1959
  */
1937
1960
  const NeoMenuItem = ({ icon, shortcut, secondaryText, children, ...props }) => {
1938
- return (jsx(StyledMenuItem, { ...props, children: jsxs(MenuItemContent, { children: [icon && jsx(IconWrapper$1, { children: icon }), jsxs(LabelContainer$3, { children: [jsx(Label$2, { children: children }), secondaryText && jsx(SecondaryLabel, { children: secondaryText })] }), shortcut && jsx(Shortcut, { children: shortcut })] }) }));
1961
+ return (jsx(StyledMenuItem, { ...props, children: jsxs(MenuItemContent, { children: [icon && jsx(IconWrapper$1, { children: icon }), jsxs(LabelContainer$3, { children: [jsx(Label$3, { children: children }), secondaryText && jsx(SecondaryLabel, { children: secondaryText })] }), shortcut && jsx(Shortcut, { children: shortcut })] }) }));
1939
1962
  };
1940
1963
  NeoMenuItem.displayName = 'NeoMenuItem';
1941
1964
 
@@ -2451,111 +2474,85 @@ function NeoDataGridColumnsButton() {
2451
2474
  }
2452
2475
  NeoDataGridColumnsButton.displayName = 'NeoDataGridColumnsButton';
2453
2476
 
2454
- const StyledChip = styled(Chip)(({ theme, size, variant, color }) => ({
2455
- padding: 0,
2456
- borderRadius: borderRadius.full,
2457
- fontSize: theme.typography.pxToRem(typography.fontSize.xs),
2458
- fontWeight: typography.fontWeight.medium,
2459
- // Size variants
2460
- ...(size === 'small' && {
2477
+ const sizeStyles = {
2478
+ small: {
2461
2479
  height: 16,
2462
2480
  paddingLeft: spacing.spacing_1_2, // 4px
2463
2481
  paddingRight: spacing.spacing_1_2, // 4px
2464
- }),
2465
- ...(size === 'medium' && {
2482
+ },
2483
+ medium: {
2466
2484
  height: 18,
2467
2485
  paddingLeft: spacing.spacing_3_4, // 6px
2468
2486
  paddingRight: spacing.spacing_3_4, // 6px
2469
- }),
2470
- ...(size === 'large' && {
2487
+ },
2488
+ large: {
2471
2489
  height: 20,
2472
2490
  paddingLeft: spacing.spacing_3_4, // 6px
2473
2491
  paddingRight: spacing.spacing_3_4, // 6px
2474
- }),
2475
- [`& .${chipClasses.label}`]: {
2476
- padding: 0,
2477
2492
  },
2478
- // Outlined variant (light type in Figma) - Neutral/Default
2479
- ...(variant === 'outlined' &&
2480
- color === 'default' && {
2493
+ };
2494
+ const outlinedColorStyles = {
2495
+ default: {
2481
2496
  backgroundColor: semanticColors.status.neutral.light,
2482
2497
  color: semanticColors.status.neutral.dark,
2483
- borderColor: colors.grey[200], // base/grey/200
2484
- }),
2485
- // Outlined variant - Error
2486
- ...(variant === 'outlined' &&
2487
- color === 'error' && {
2498
+ borderColor: colors.grey[200],
2499
+ },
2500
+ error: {
2488
2501
  backgroundColor: semanticColors.status.error.light,
2489
2502
  color: semanticColors.status.error.dark,
2490
- borderColor: colors.red[100], // base/red/100
2491
- }),
2492
- // Outlined variant - Warning
2493
- ...(variant === 'outlined' &&
2494
- color === 'warning' && {
2503
+ borderColor: colors.red[100],
2504
+ },
2505
+ warning: {
2495
2506
  backgroundColor: semanticColors.status.warning.light,
2496
2507
  color: semanticColors.status.warning.dark,
2497
- borderColor: colors.orange[100], // base/orange/100
2498
- }),
2499
- // Outlined variant - Success
2500
- ...(variant === 'outlined' &&
2501
- color === 'success' && {
2508
+ borderColor: colors.orange[100],
2509
+ },
2510
+ success: {
2502
2511
  backgroundColor: semanticColors.status.success.light,
2503
2512
  color: semanticColors.status.success.dark,
2504
- borderColor: 'rgba(94, 196, 111, 0.24)', // rgba from Figma
2505
- }),
2506
- // Outlined variant - Info
2507
- ...(variant === 'outlined' &&
2508
- color === 'info' && {
2513
+ borderColor: 'rgba(94, 196, 111, 0.24)',
2514
+ },
2515
+ info: {
2509
2516
  backgroundColor: semanticColors.status.info.light,
2510
2517
  color: semanticColors.status.info.dark,
2511
- borderColor: colors.digitalBlue[100], // base/digital-blue/100
2512
- }),
2513
- // Outlined variant - Violet
2514
- ...(variant === 'outlined' &&
2515
- color === 'violet' && {
2518
+ borderColor: colors.digitalBlue[100],
2519
+ },
2520
+ violet: {
2516
2521
  backgroundColor: `${colors.violet[100]}66`, // rgba(235,213,241,0.4)
2517
2522
  color: colors.violet[600],
2518
- borderColor: colors.violet[100], // base/violet/100
2519
- }),
2520
- // Filled variant (dark type in Figma) - Neutral/Default
2521
- ...(variant === 'filled' &&
2522
- color === 'default' && {
2523
- backgroundColor: semanticColors.status.neutral.medium,
2524
- color: theme.palette.common.white,
2525
- border: 'none',
2526
- }),
2527
- // Filled variant - Error
2528
- ...(variant === 'filled' &&
2529
- color === 'error' && {
2530
- backgroundColor: semanticColors.status.error.medium,
2531
- color: theme.palette.common.white,
2532
- border: 'none',
2533
- }),
2534
- // Filled variant - Warning
2535
- ...(variant === 'filled' &&
2536
- color === 'warning' && {
2537
- backgroundColor: semanticColors.status.warning.medium,
2538
- color: theme.palette.common.white,
2539
- border: 'none',
2540
- }),
2541
- // Filled variant - Success
2542
- ...(variant === 'filled' &&
2543
- color === 'success' && {
2544
- backgroundColor: semanticColors.status.success.medium,
2545
- color: theme.palette.common.white,
2546
- border: 'none',
2547
- }),
2548
- // Filled variant - Info
2549
- ...(variant === 'filled' &&
2550
- color === 'info' && {
2551
- backgroundColor: semanticColors.status.info.medium,
2552
- color: theme.palette.common.white,
2553
- border: 'none',
2554
- }),
2555
- // Filled variant - Violet
2523
+ borderColor: colors.violet[100],
2524
+ },
2525
+ beta: {
2526
+ backgroundColor: colors.digitalBlue[100],
2527
+ color: colors.digitalBlue[400],
2528
+ borderColor: colors.digitalBlue[100],
2529
+ },
2530
+ };
2531
+ const filledColorStyles = {
2532
+ default: semanticColors.status.neutral.medium,
2533
+ error: semanticColors.status.error.medium,
2534
+ warning: semanticColors.status.warning.medium,
2535
+ success: semanticColors.status.success.medium,
2536
+ info: semanticColors.status.info.medium,
2537
+ violet: colors.violet[500],
2538
+ beta: colors.digitalBlue[300],
2539
+ };
2540
+ const StyledChip$1 = styled(Chip)(({ theme, size, variant, color }) => ({
2541
+ padding: 0,
2542
+ borderRadius: borderRadius.full,
2543
+ fontSize: theme.typography.pxToRem(typography.fontSize.xs),
2544
+ fontWeight: typography.fontWeight.medium,
2545
+ ...(size && sizeStyles[size]),
2546
+ [`& .${chipClasses.label}`]: {
2547
+ padding: 0,
2548
+ },
2549
+ ...(variant === 'outlined' &&
2550
+ color &&
2551
+ outlinedColorStyles[color]),
2556
2552
  ...(variant === 'filled' &&
2557
- color === 'violet' && {
2558
- backgroundColor: colors.violet[500],
2553
+ color &&
2554
+ color in filledColorStyles && {
2555
+ backgroundColor: filledColorStyles[color],
2559
2556
  color: theme.palette.common.white,
2560
2557
  border: 'none',
2561
2558
  }),
@@ -2568,11 +2565,11 @@ const StyledChip = styled(Chip)(({ theme, size, variant, color }) => ({
2568
2565
  * Figma Props Mapping:
2569
2566
  * - m (sm|md|lg) → size (small|medium|large)
2570
2567
  * - type (light|dark) → variant (outlined|filled)
2571
- * - state (Neutral|Error|Warning|Success|Info|Violet) → color (default|error|warning|success|info|violet)
2568
+ * - state (Neutral|Error|Warning|Success|Info|Violet|Beta) → color (default|error|warning|success|info|violet|beta)
2572
2569
  * - Label text → label prop
2573
2570
  */
2574
2571
  const NeoTag = ({ size = 'small', variant = 'outlined', ...props }) => {
2575
- return jsx(StyledChip, { size: size, variant: variant, ...props });
2572
+ return jsx(StyledChip$1, { size: size, variant: variant, ...props });
2576
2573
  };
2577
2574
  NeoTag.displayName = 'NeoTag';
2578
2575
 
@@ -3533,6 +3530,102 @@ const NeoDot = ({ size = 'medium', variant = 'solid', color = 'neutral', ...prop
3533
3530
  };
3534
3531
  NeoDot.displayName = 'NeoDot';
3535
3532
 
3533
+ const focusRing = `${shadows.focusWhite1.x}px ${shadows.focusWhite1.y}px ${shadows.focusWhite1.blur}px ${shadows.focusWhite1.spread}px ${shadows.focusWhite1.shadow}, ${shadows.focusBlue2.x}px ${shadows.focusBlue2.y}px ${shadows.focusBlue2.blur}px ${shadows.focusBlue2.spread}px ${shadows.focusBlue2.shadow}`;
3534
+ const filterChipOnlyProps = ['selected', 'expanded', 'selectedLabel', 'count', 'onClear'];
3535
+ const StyledChip = styled(Chip, {
3536
+ shouldForwardProp: prop => !filterChipOnlyProps.includes(prop),
3537
+ })(({ theme, selected }) => ({
3538
+ borderRadius: borderRadius.full,
3539
+ border: `1px solid ${semanticColors.buttons.secondary.defaultBorder}`,
3540
+ backgroundColor: selected
3541
+ ? semanticColors.buttons.secondary.pressedBackground
3542
+ : semanticColors.surfaces.white,
3543
+ minHeight: 40,
3544
+ padding: `${spacing.spacing_3_4}px ${spacing.spacing_1_1_2}px`,
3545
+ gap: spacing.spacing_1,
3546
+ fontSize: theme.typography.pxToRem(typography.fontSize.sm),
3547
+ fontWeight: typography.fontWeight.medium,
3548
+ lineHeight: 1,
3549
+ color: semanticColors.typography.body,
3550
+ [`& .${chipClasses.label}`]: {
3551
+ padding: 0,
3552
+ overflow: 'visible',
3553
+ display: 'flex',
3554
+ alignItems: 'center',
3555
+ },
3556
+ [`& .${chipClasses.deleteIcon}`]: {
3557
+ color: semanticColors.icons.default,
3558
+ width: 24,
3559
+ height: 24,
3560
+ margin: 0,
3561
+ flexShrink: 0,
3562
+ '&:hover': {
3563
+ color: semanticColors.icons.default,
3564
+ },
3565
+ },
3566
+ '&:hover': {
3567
+ backgroundColor: semanticColors.buttons.secondary.hoverBackground,
3568
+ },
3569
+ [`&.${chipClasses.focusVisible}`]: {
3570
+ boxShadow: focusRing,
3571
+ backgroundColor: selected
3572
+ ? semanticColors.buttons.secondary.pressedBackground
3573
+ : semanticColors.surfaces.white,
3574
+ },
3575
+ }));
3576
+ const LabelContent = styled('span')({
3577
+ display: 'inline-flex',
3578
+ alignItems: 'center',
3579
+ gap: spacing.spacing_1,
3580
+ });
3581
+ const TextStack = styled('span')({
3582
+ display: 'flex',
3583
+ flexDirection: 'column',
3584
+ alignItems: 'flex-start',
3585
+ justifyContent: 'center',
3586
+ gap: spacing.spacing_1_4,
3587
+ });
3588
+ const HeaderLabel = styled('span')(({ theme }) => ({
3589
+ fontSize: theme.typography.pxToRem(typography.fontSize.xxs),
3590
+ fontWeight: typography.fontWeight.regular,
3591
+ lineHeight: '120%',
3592
+ color: semanticColors.typography.bodySecondary,
3593
+ }));
3594
+ const SelectedLabel = styled('span')(({ theme }) => ({
3595
+ fontSize: theme.typography.pxToRem(typography.fontSize.sm),
3596
+ fontWeight: typography.fontWeight.medium,
3597
+ lineHeight: 1,
3598
+ color: semanticColors.buttons.secondary.default,
3599
+ }));
3600
+ const CountBadge = styled('span')(({ theme }) => ({
3601
+ display: 'inline-flex',
3602
+ alignItems: 'center',
3603
+ justifyContent: 'center',
3604
+ minWidth: 16,
3605
+ height: 16,
3606
+ padding: `0 ${spacing.spacing_1_2}px`,
3607
+ borderRadius: borderRadius.full,
3608
+ backgroundColor: semanticColors.brand,
3609
+ color: semanticColors.surfaces.white,
3610
+ fontSize: theme.typography.pxToRem(typography.fontSize.xs),
3611
+ fontWeight: typography.fontWeight.medium,
3612
+ lineHeight: 1,
3613
+ boxSizing: 'border-box',
3614
+ }));
3615
+ /**
3616
+ * NeoFilterChip - Filter chip for filtering data, based on MUI Chip.
3617
+ *
3618
+ * @example
3619
+ * <NeoFilterChip label="Status" selected selectedLabel="Active, Pending" count={2} onClear={handleClear} />
3620
+ *
3621
+ * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC?node-id=8257-239
3622
+ */
3623
+ const NeoFilterChip = ({ label, selected = false, expanded, selectedLabel, count = 0, onClear, onClick, ...props }) => {
3624
+ const chipLabel = selected ? (jsxs(LabelContent, { children: [jsxs(TextStack, { children: [jsx(HeaderLabel, { children: label }), jsx(SelectedLabel, { children: selectedLabel ?? label })] }), count > 0 && jsx(CountBadge, { children: count })] })) : (label);
3625
+ return (jsx(StyledChip, { label: chipLabel, selected: selected, clickable: true, onClick: onClick, onDelete: selected && onClear ? onClear : undefined, deleteIcon: jsx(X, { size: 24 }), "aria-expanded": expanded, ...props }));
3626
+ };
3627
+ NeoFilterChip.displayName = 'NeoFilterChip';
3628
+
3536
3629
  const SpinnerWrapper = styled('div')({
3537
3630
  width: 24,
3538
3631
  height: 24,
@@ -3773,6 +3866,31 @@ const NeoFooter = ({ variant = 'pagination', showShadow = false, loading = false
3773
3866
  };
3774
3867
  NeoFooter.displayName = 'NeoFooter';
3775
3868
 
3869
+ const customProps$1 = ['iconSize'];
3870
+ const StyledIconWrapper = styled('div', {
3871
+ shouldForwardProp: prop => !customProps$1.includes(prop),
3872
+ })(({ iconSize }) => ({
3873
+ display: 'inline-flex',
3874
+ alignItems: 'center',
3875
+ justifyContent: 'center',
3876
+ width: iconSize,
3877
+ height: iconSize,
3878
+ flexShrink: 0,
3879
+ '& svg': {
3880
+ width: iconSize,
3881
+ height: iconSize,
3882
+ },
3883
+ }));
3884
+ /**
3885
+ * NeoIconWrapper - Flex-centered container that sizes icons
3886
+ *
3887
+ * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4061-9955
3888
+ */
3889
+ const NeoIconWrapper = ({ size = 20, children, ...props }) => {
3890
+ return (jsx(StyledIconWrapper, { iconSize: size, ...props, children: children }));
3891
+ };
3892
+ NeoIconWrapper.displayName = 'NeoIconWrapper';
3893
+
3776
3894
  /**
3777
3895
  * NeoInfiniteScrollGrid - DataGrid with infinite scroll and load-more functionality
3778
3896
  *
@@ -4324,6 +4442,22 @@ const StyledListItemButton = styled(ListItemButton)(({ theme }) => ({
4324
4442
  color: semanticColors.typography.button.disabled,
4325
4443
  },
4326
4444
  },
4445
+ // Focus state
4446
+ [`&.${listItemButtonClasses.focusVisible}`]: {
4447
+ outline: `2px solid ${semanticColors.border.tabActive}`,
4448
+ outlineOffset: 2,
4449
+ border: `2px solid ${semanticColors.border.tabActive}`,
4450
+ backgroundColor: theme.palette.common.white,
4451
+ [`& .${listItemIconClasses.root}`]: {
4452
+ color: semanticColors.icons.default,
4453
+ },
4454
+ [`& .${listItemTextClasses.primary}`]: {
4455
+ color: colors.grey[800],
4456
+ },
4457
+ [`& .${listItemTextClasses.secondary}`]: {
4458
+ color: semanticColors.typography.bodySecondary,
4459
+ },
4460
+ },
4327
4461
  // Disabled state
4328
4462
  [`&.${listItemButtonClasses.disabled}`]: {
4329
4463
  backgroundColor: colors.grey[50],
@@ -4343,7 +4477,7 @@ const StyledListItemButton = styled(ListItemButton)(({ theme }) => ({
4343
4477
  * NeoListItemButton - Selectable list item with icon and text
4344
4478
  *
4345
4479
  * A selectable list item component that displays an optional icon with primary
4346
- * and secondary text. Supports active (selected), deselected, and disabled states.
4480
+ * and secondary text. Supports active (selected), deselected, focus, and disabled states.
4347
4481
  *
4348
4482
  * Uses MUI's ListItemButton as base for proper accessibility and interaction.
4349
4483
  * Compose with ListItemIcon and ListItemText for proper structure.
@@ -4364,9 +4498,10 @@ const StyledListItemButton = styled(ListItemButton)(({ theme }) => ({
4364
4498
  * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4925-3764
4365
4499
  *
4366
4500
  * Figma Props Mapping:
4367
- * - property1="Active" → selected={true}
4368
- * - property1="Deselected" → selected={false}
4369
- * - property1="Disabled" → disabled={true}
4501
+ * - state="active" → selected={true}
4502
+ * - state="deselected" → selected={false}
4503
+ * - state="focus" → focus-visible CSS state
4504
+ * - state="disabled" → disabled={true}
4370
4505
  * - showIcon → Conditional rendering of ListItemIcon child
4371
4506
  *
4372
4507
  * Design Tokens Used:
@@ -4781,6 +4916,87 @@ const NeoModalFooter = ({ leadingContent, children }) => {
4781
4916
  };
4782
4917
  NeoModalFooter.displayName = 'NeoModalFooter';
4783
4918
 
4919
+ const customProps = ['selected'];
4920
+ const StyledRoot = styled(ButtonBase, {
4921
+ shouldForwardProp: prop => !customProps.includes(prop),
4922
+ })(({ selected }) => ({
4923
+ display: 'flex',
4924
+ flexDirection: 'column',
4925
+ gap: spacing.spacing_1_4, // 2px
4926
+ alignItems: 'center',
4927
+ justifyContent: 'center',
4928
+ paddingTop: spacing.spacing_1, // 8px
4929
+ paddingBottom: spacing.spacing_1, // 8px
4930
+ paddingLeft: spacing.spacing_1_2, // 4px
4931
+ paddingRight: spacing.spacing_1_2, // 4px
4932
+ borderRadius: borderRadius.xS, // 4px
4933
+ width: 95,
4934
+ cursor: 'pointer',
4935
+ textDecoration: 'none',
4936
+ '&:hover .neo-nav-icon-padding': {
4937
+ backgroundColor: semanticColors.buttons.secondary.hoverBackground, // #F2F3FF
4938
+ },
4939
+ '&:hover .neo-nav-label': {
4940
+ color: semanticColors.buttons.primary.hover, // #1E2EC2
4941
+ },
4942
+ ...(selected && {
4943
+ '& .neo-nav-icon-padding': {
4944
+ backgroundColor: `${colors.digitalBlue[100]}BF`, // rgba(220,224,255,0.75)
4945
+ },
4946
+ '& .neo-nav-label': {
4947
+ color: semanticColors.buttons.primary.pressed, // #131E7A
4948
+ fontWeight: typography.fontWeight.semiBold,
4949
+ },
4950
+ '&:hover .neo-nav-icon-padding': {
4951
+ backgroundColor: `${colors.digitalBlue[100]}BF`,
4952
+ },
4953
+ '&:hover .neo-nav-label': {
4954
+ color: semanticColors.buttons.primary.pressed,
4955
+ },
4956
+ }),
4957
+ }));
4958
+ const IconPadding = styled('span')({
4959
+ display: 'flex',
4960
+ alignItems: 'center',
4961
+ padding: spacing.spacing_1, // 8px
4962
+ borderRadius: spacing.spacing_1, // 8px
4963
+ transition: 'background-color 150ms',
4964
+ });
4965
+ const Label$2 = styled('span')(({ theme }) => ({
4966
+ fontFamily: typography.fontFamily.body,
4967
+ fontWeight: typography.fontWeight.regular,
4968
+ fontSize: theme.typography.pxToRem(10),
4969
+ lineHeight: 1.2,
4970
+ textAlign: 'center',
4971
+ color: semanticColors.typography.navigation.default, // #1F2937
4972
+ width: '100%',
4973
+ transition: 'color 150ms',
4974
+ }));
4975
+ const TagPill = styled('span')(({ theme }) => ({
4976
+ display: 'inline-flex',
4977
+ alignItems: 'center',
4978
+ justifyContent: 'center',
4979
+ height: 18,
4980
+ paddingLeft: spacing.spacing_3_4, // 6px
4981
+ paddingRight: spacing.spacing_3_4, // 6px
4982
+ borderRadius: borderRadius.full,
4983
+ backgroundColor: colors.digitalBlue[300], // #8D99FF
4984
+ color: semanticColors.typography.tooltip, // white
4985
+ fontFamily: typography.fontFamily.body,
4986
+ fontWeight: typography.fontWeight.medium,
4987
+ fontSize: theme.typography.pxToRem(typography.fontSize.xs), // 12px
4988
+ lineHeight: 1,
4989
+ }));
4990
+ /**
4991
+ * NeoNavigationItem - Vertical navigation item with icon, label, and optional tag
4992
+ *
4993
+ * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=8455-6120
4994
+ */
4995
+ const NeoNavigationItem = ({ icon, label, selected = false, tag, children, ...props }) => {
4996
+ return (jsxs(StyledRoot, { selected: selected, disableRipple: true, ...props, children: [jsx(IconPadding, { className: "neo-nav-icon-padding", children: icon }), label && jsx(Label$2, { className: "neo-nav-label", children: label }), tag && jsx(TagPill, { children: tag }), children] }));
4997
+ };
4998
+ NeoNavigationItem.displayName = 'NeoNavigationItem';
4999
+
4784
5000
  /**
4785
5001
  * Sticky header wrapper - sticks to top when scrolling
4786
5002
  */
@@ -5363,7 +5579,7 @@ NeoSkeleton.displayName = 'NeoSkeleton';
5363
5579
 
5364
5580
  /**
5365
5581
  * Styled Alert component with custom severity and variant styling
5366
- * Uses Custom Variants Pattern to add 'neutral' severity
5582
+ * Uses Custom Variants Pattern to add 'neutral' and 'info' severities
5367
5583
  */
5368
5584
  const StyledAlert$1 = styled(Alert, {
5369
5585
  shouldForwardProp: prop => prop !== 'severity' && prop !== 'variant',
@@ -5382,6 +5598,10 @@ const StyledAlert$1 = styled(Alert, {
5382
5598
  light: semanticColors.status.neutral.light,
5383
5599
  medium: semanticColors.status.neutral.medium,
5384
5600
  },
5601
+ info: {
5602
+ light: semanticColors.status.info.light,
5603
+ medium: semanticColors.status.info.medium,
5604
+ },
5385
5605
  };
5386
5606
  const severityColors = colorMap[severity];
5387
5607
  // Variant-specific styles based on Phase 1.1 analysis
@@ -5441,19 +5661,20 @@ const StyledAlert$1 = styled(Alert, {
5441
5661
  /**
5442
5662
  * NeoStatusBanner - Status banner component for displaying system status messages
5443
5663
  *
5444
- * Displays status information with different severity levels (success, error, neutral) and
5664
+ * Displays status information with different severity levels (success, error, info, neutral) and
5445
5665
  * visual modes (outlined for light backgrounds, filled for emphasis).
5446
5666
  *
5447
5667
  * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4921-3427
5448
5668
  *
5449
5669
  * Figma Props Mapping:
5450
- * - Status (Success|Error|Offline) → severity ('success'|'error'|'neutral')
5670
+ * - Status (Success|Error|Info|Offline) → severity ('success'|'error'|'info'|'neutral')
5451
5671
  * - Mode (Light|Dark) → variant ('outlined'|'filled')
5452
5672
  *
5453
5673
  * Design Tokens Used:
5454
5674
  * - status.success.light, status.success.medium
5455
5675
  * - status.error.light, status.error.medium
5456
5676
  * - status.neutral.light, status.neutral.medium
5677
+ * - status.info.light, status.info.medium
5457
5678
  * - typography.tooltip, typography.bodySecondary
5458
5679
  * - grey[800]
5459
5680
  * - fontSize.default, fontSize.sm
@@ -5467,6 +5688,7 @@ const NeoStatusBanner = ({ severity = 'success', variant = 'outlined', icon, chi
5467
5688
  success: jsx(CircleCheck, { size: 24 }),
5468
5689
  error: jsx(CircleAlert, { size: 24 }),
5469
5690
  neutral: jsx(WifiOff, { size: 24 }),
5691
+ info: jsx(Info, { size: 24 }),
5470
5692
  };
5471
5693
  const defaultIcon = iconMap[severity];
5472
5694
  // Type assertion needed: severity and variant are custom props filtered by shouldForwardProp
@@ -6140,5 +6362,5 @@ NeoTypologyControl.displayName = 'NeoTypologyControl';
6140
6362
 
6141
6363
  const version = '0.0.0-development';
6142
6364
 
6143
- export { ActivityScene, CIRCLE_RADIUS, NeoActivityHeader, NeoActivityIndicatorCell, NeoAvatar, NeoBadge, NeoBanner, NeoBreadcrumbLink, NeoBreadcrumbs, NeoButton, NeoButtonGroup, NeoCheckbox, NeoCodeSnippet, NeoDataGrid, NeoDataGridCellContent, NeoDataGridColumnsButton, NeoDataGridColumnsPanel, NeoDataGridFilterPanel, NeoDataGridFilterPanelAddIcon, NeoDataGridFilterPanelDeleteIcon, NeoDataGridFilterPanelRemoveAllIcon, NeoDataGridFiltersButton, NeoDataGridHeaderLabel, NeoSelect as NeoDataGridSelect, NeoDatePicker, NeoDivider, NeoDot, NeoFooter, NeoIconButton, NeoInfiniteScrollGrid, NeoInputField, NeoListItem, NeoListItemButton, NeoLoadingSpinner, NeoMarketplaceCard, NeoMenu, NeoMenuItem, NeoModal, NeoModalContent, NeoModalFooter, NeoModalHeader, NeoMultiBadgesCell, NeoPageContent, NeoPaginatedGrid, NeoProgressbar, NeoQuickFilter, NeoRadio, NeoSelect, NeoMenuItem as NeoSelectOption, NeoSkeleton, NeoStatusBadgeCell, NeoStatusBanner, NeoTab, NeoTabs, NeoTag, NeoToast, NeoToastButton, NeoToggle, NeoToolbar, NeoTooltip, StyledToggleButton as NeoTypologyButton, NeoTypologyControl, NeoUserAvatarCell, SortedAscendingIcon, SortedDescendingIcon, UnsortedIcon, getDataGridHeaderStyles, neoRowHeights, version };
6365
+ export { ActivityScene, CIRCLE_RADIUS, NeoActivityHeader, NeoActivityIndicatorCell, NeoAvatar, NeoBadge, NeoBanner, NeoBreadcrumbLink, NeoBreadcrumbs, NeoButton, NeoButtonGroup, NeoCheckbox, NeoCodeSnippet, NeoDataGrid, NeoDataGridCellContent, NeoDataGridColumnsButton, NeoDataGridColumnsPanel, NeoDataGridFilterPanel, NeoDataGridFilterPanelAddIcon, NeoDataGridFilterPanelDeleteIcon, NeoDataGridFilterPanelRemoveAllIcon, NeoDataGridFiltersButton, NeoDataGridHeaderLabel, NeoSelect as NeoDataGridSelect, NeoDatePicker, NeoDivider, NeoDot, NeoFilterChip, NeoFooter, NeoIconButton, NeoIconWrapper, NeoInfiniteScrollGrid, NeoInputField, NeoListItem, NeoListItemButton, NeoLoadingSpinner, NeoMarketplaceCard, NeoMenu, NeoMenuItem, NeoModal, NeoModalContent, NeoModalFooter, NeoModalHeader, NeoMultiBadgesCell, NeoNavigationItem, NeoPageContent, NeoPaginatedGrid, NeoProgressbar, NeoQuickFilter, NeoRadio, NeoSelect, NeoMenuItem as NeoSelectOption, NeoSkeleton, NeoStatusBadgeCell, NeoStatusBanner, NeoTab, NeoTabs, NeoTag, NeoToast, NeoToastButton, NeoToggle, NeoToolbar, NeoTooltip, StyledToggleButton as NeoTypologyButton, NeoTypologyControl, NeoUserAvatarCell, SortedAscendingIcon, SortedDescendingIcon, UnsortedIcon, getDataGridHeaderStyles, neoRowHeights, version };
6144
6366
  //# sourceMappingURL=index.esm.js.map