@moderneinc/neo-styled-components 2.5.0-next.f8ed7e → 2.5.0-next.fbda18
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/Avatar/Avatar.d.ts +2 -1
- package/dist/FilterChip/FilterChip.d.ts +42 -0
- package/dist/IconWrapper/IconWrapper.d.ts +23 -0
- package/dist/MarketplaceLargeCard/MarketplaceLargeCard.d.ts +91 -0
- package/dist/NavigationItem/NavigationItem.d.ts +36 -0
- package/dist/Tag/Tag.d.ts +4 -3
- package/dist/index.d.ts +28 -19
- package/dist/index.esm.js +422 -175
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +424 -174
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/FilterChips/FilterChips.d.ts +0 -34
- package/dist/LargeCard/LargeCard.d.ts +0 -26
package/dist/index.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import { semanticColors, colors, spacing, typography, borderRadius
|
|
2
|
+
import { shadows, semanticColors, colors, spacing, typography, borderRadius } from '@moderneinc/neo-design';
|
|
3
3
|
import Box from '@mui/material/Box';
|
|
4
4
|
import { styled, alpha } from '@mui/material/styles';
|
|
5
5
|
import Avatar from '@mui/material/Avatar';
|
|
@@ -60,21 +60,39 @@ import Switch, { switchClasses } from '@mui/material/Switch';
|
|
|
60
60
|
import ToggleButton, { toggleButtonClasses } from '@mui/material/ToggleButton';
|
|
61
61
|
import ToggleButtonGroup, { toggleButtonGroupClasses } from '@mui/material/ToggleButtonGroup';
|
|
62
62
|
|
|
63
|
+
const focusRingShadow$2 = `${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}`;
|
|
63
64
|
// biome-ignore lint/suspicious/noExplicitAny: Type cast required to override MUI Avatar variant type without global augmentation
|
|
64
65
|
const StyledAvatar = styled(Avatar, {
|
|
65
66
|
shouldForwardProp: prop => prop !== 'size' && prop !== 'variant',
|
|
66
67
|
})(({ theme, size = 'medium', variant = 'circular' }) => ({
|
|
68
|
+
boxSizing: 'border-box',
|
|
67
69
|
borderRadius: borderRadius.full,
|
|
68
70
|
fontSize: theme.typography.pxToRem(typography.fontSize.xs),
|
|
69
71
|
fontWeight: typography.fontWeight.regular,
|
|
70
72
|
lineHeight: 1.5,
|
|
71
|
-
// Size variants
|
|
72
|
-
...(size === 'small' &&
|
|
73
|
+
// Size variants — dimensions match Figma bounding boxes (border-box)
|
|
74
|
+
...(size === 'small' &&
|
|
75
|
+
variant === 'circular' && {
|
|
76
|
+
width: spacing.spacing_4,
|
|
77
|
+
height: spacing.spacing_4,
|
|
78
|
+
fontSize: theme.typography.pxToRem(typography.fontSize.xs),
|
|
79
|
+
}),
|
|
80
|
+
...(size === 'small' &&
|
|
81
|
+
variant === 'initials' && {
|
|
73
82
|
width: spacing.spacing_2_1_2,
|
|
74
83
|
height: spacing.spacing_2_1_2,
|
|
75
84
|
fontSize: theme.typography.pxToRem(typography.fontSize.xs),
|
|
76
85
|
}),
|
|
77
|
-
|
|
86
|
+
// Medium circular fills its AvatarContainer (container owns the 44px dimension)
|
|
87
|
+
...(size === 'medium' &&
|
|
88
|
+
variant === 'circular' && {
|
|
89
|
+
width: '100%',
|
|
90
|
+
height: '100%',
|
|
91
|
+
fontSize: theme.typography.pxToRem(typography.fontSize.sm),
|
|
92
|
+
}),
|
|
93
|
+
// Medium initials has no container, so it owns its 44px dimension
|
|
94
|
+
...(size === 'medium' &&
|
|
95
|
+
variant === 'initials' && {
|
|
78
96
|
width: spacing.spacing_5_1_2,
|
|
79
97
|
height: spacing.spacing_5_1_2,
|
|
80
98
|
fontSize: theme.typography.pxToRem(typography.fontSize.sm),
|
|
@@ -90,20 +108,29 @@ const StyledAvatar = styled(Avatar, {
|
|
|
90
108
|
backgroundColor: 'transparent',
|
|
91
109
|
border: `2px solid ${semanticColors.surfaces.white}`,
|
|
92
110
|
}),
|
|
111
|
+
'&:focus-visible': {
|
|
112
|
+
outline: 'none',
|
|
113
|
+
boxShadow: focusRingShadow$2,
|
|
114
|
+
},
|
|
93
115
|
}));
|
|
94
116
|
const AvatarContainer = styled(Box)(({ size = 'medium' }) => ({
|
|
117
|
+
boxSizing: 'border-box',
|
|
95
118
|
...(size === 'medium' && {
|
|
96
119
|
width: spacing.spacing_5_1_2,
|
|
97
120
|
height: spacing.spacing_5_1_2,
|
|
98
121
|
backgroundColor: semanticColors.surfaces.white,
|
|
99
122
|
borderRadius: borderRadius.full,
|
|
100
|
-
padding: spacing.
|
|
123
|
+
padding: spacing.spacing_1_4,
|
|
101
124
|
display: 'flex',
|
|
102
125
|
alignItems: 'center',
|
|
103
126
|
justifyContent: 'center',
|
|
104
127
|
overflow: 'hidden',
|
|
105
128
|
boxShadow: `${shadows.neutralSmall.x}px ${shadows.neutralSmall.y}px ${shadows.neutralSmall.blur}px ${shadows.neutralSmall.spread}px ${shadows.neutralSmall.shadow}`,
|
|
106
129
|
}),
|
|
130
|
+
'&:focus-within': {
|
|
131
|
+
outline: 'none',
|
|
132
|
+
boxShadow: focusRingShadow$2,
|
|
133
|
+
},
|
|
107
134
|
}));
|
|
108
135
|
/**
|
|
109
136
|
* NeoAvatar - User avatar component based on MUI Avatar
|
|
@@ -112,8 +139,9 @@ const AvatarContainer = styled(Box)(({ size = 'medium' }) => ({
|
|
|
112
139
|
*
|
|
113
140
|
* Figma Props Mapping:
|
|
114
141
|
* - Figma Type "Initials" → variant="initials", size="small" (20px)
|
|
115
|
-
* - Figma Type "Small" → variant="circular", size="small" (
|
|
142
|
+
* - Figma Type "Small" → variant="circular", size="small" (32px with image)
|
|
116
143
|
* - Figma Type "Medium" → variant="circular", size="medium" (44px white container with image)
|
|
144
|
+
* - State: Focus → CSS :focus-visible ring (2px white inner + 4px blue outer)
|
|
117
145
|
* - State: Hover (tooltip) → Wrap component with MUI Tooltip
|
|
118
146
|
*
|
|
119
147
|
* Usage:
|
|
@@ -147,7 +175,7 @@ const NeoAvatar = ({ size = 'medium', variant = 'circular', ...props }) => {
|
|
|
147
175
|
};
|
|
148
176
|
NeoAvatar.displayName = 'NeoAvatar';
|
|
149
177
|
|
|
150
|
-
const StyledChip$
|
|
178
|
+
const StyledChip$2 = styled(Chip)(({ theme }) => ({
|
|
151
179
|
height: 24,
|
|
152
180
|
paddingTop: spacing.spacing_1_4,
|
|
153
181
|
paddingBottom: spacing.spacing_1_4,
|
|
@@ -234,7 +262,7 @@ const StyledChip$1 = styled(Chip)(({ theme }) => ({
|
|
|
234
262
|
* - Label → label prop
|
|
235
263
|
*/
|
|
236
264
|
const NeoBadge = (props) => {
|
|
237
|
-
return jsx(StyledChip$
|
|
265
|
+
return jsx(StyledChip$2, { ...props });
|
|
238
266
|
};
|
|
239
267
|
NeoBadge.displayName = 'NeoBadge';
|
|
240
268
|
|
|
@@ -500,7 +528,7 @@ const NeoActivityIndicatorCell = ({ event = 'commit-job', secondaryEvent, scene
|
|
|
500
528
|
NeoActivityIndicatorCell.displayName = 'NeoActivityIndicatorCell';
|
|
501
529
|
|
|
502
530
|
/**
|
|
503
|
-
* @license lucide-react v0.
|
|
531
|
+
* @license lucide-react v0.575.0 - ISC
|
|
504
532
|
*
|
|
505
533
|
* This source code is licensed under the ISC license.
|
|
506
534
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -511,7 +539,7 @@ const mergeClasses = (...classes) => classes.filter((className, index, array) =>
|
|
|
511
539
|
}).join(" ").trim();
|
|
512
540
|
|
|
513
541
|
/**
|
|
514
|
-
* @license lucide-react v0.
|
|
542
|
+
* @license lucide-react v0.575.0 - ISC
|
|
515
543
|
*
|
|
516
544
|
* This source code is licensed under the ISC license.
|
|
517
545
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -520,7 +548,7 @@ const mergeClasses = (...classes) => classes.filter((className, index, array) =>
|
|
|
520
548
|
const toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
521
549
|
|
|
522
550
|
/**
|
|
523
|
-
* @license lucide-react v0.
|
|
551
|
+
* @license lucide-react v0.575.0 - ISC
|
|
524
552
|
*
|
|
525
553
|
* This source code is licensed under the ISC license.
|
|
526
554
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -532,7 +560,7 @@ const toCamelCase = (string) => string.replace(
|
|
|
532
560
|
);
|
|
533
561
|
|
|
534
562
|
/**
|
|
535
|
-
* @license lucide-react v0.
|
|
563
|
+
* @license lucide-react v0.575.0 - ISC
|
|
536
564
|
*
|
|
537
565
|
* This source code is licensed under the ISC license.
|
|
538
566
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -545,7 +573,7 @@ const toPascalCase = (string) => {
|
|
|
545
573
|
};
|
|
546
574
|
|
|
547
575
|
/**
|
|
548
|
-
* @license lucide-react v0.
|
|
576
|
+
* @license lucide-react v0.575.0 - ISC
|
|
549
577
|
*
|
|
550
578
|
* This source code is licensed under the ISC license.
|
|
551
579
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -564,7 +592,7 @@ var defaultAttributes = {
|
|
|
564
592
|
};
|
|
565
593
|
|
|
566
594
|
/**
|
|
567
|
-
* @license lucide-react v0.
|
|
595
|
+
* @license lucide-react v0.575.0 - ISC
|
|
568
596
|
*
|
|
569
597
|
* This source code is licensed under the ISC license.
|
|
570
598
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -580,7 +608,7 @@ const hasA11yProp = (props) => {
|
|
|
580
608
|
};
|
|
581
609
|
|
|
582
610
|
/**
|
|
583
|
-
* @license lucide-react v0.
|
|
611
|
+
* @license lucide-react v0.575.0 - ISC
|
|
584
612
|
*
|
|
585
613
|
* This source code is licensed under the ISC license.
|
|
586
614
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -618,7 +646,7 @@ const Icon = forwardRef(
|
|
|
618
646
|
);
|
|
619
647
|
|
|
620
648
|
/**
|
|
621
|
-
* @license lucide-react v0.
|
|
649
|
+
* @license lucide-react v0.575.0 - ISC
|
|
622
650
|
*
|
|
623
651
|
* This source code is licensed under the ISC license.
|
|
624
652
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -643,7 +671,7 @@ const createLucideIcon = (iconName, iconNode) => {
|
|
|
643
671
|
};
|
|
644
672
|
|
|
645
673
|
/**
|
|
646
|
-
* @license lucide-react v0.
|
|
674
|
+
* @license lucide-react v0.575.0 - ISC
|
|
647
675
|
*
|
|
648
676
|
* This source code is licensed under the ISC license.
|
|
649
677
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -657,7 +685,7 @@ const __iconNode$i = [
|
|
|
657
685
|
const ArrowDown = createLucideIcon("arrow-down", __iconNode$i);
|
|
658
686
|
|
|
659
687
|
/**
|
|
660
|
-
* @license lucide-react v0.
|
|
688
|
+
* @license lucide-react v0.575.0 - ISC
|
|
661
689
|
*
|
|
662
690
|
* This source code is licensed under the ISC license.
|
|
663
691
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -671,7 +699,7 @@ const __iconNode$h = [
|
|
|
671
699
|
const ArrowUp = createLucideIcon("arrow-up", __iconNode$h);
|
|
672
700
|
|
|
673
701
|
/**
|
|
674
|
-
* @license lucide-react v0.
|
|
702
|
+
* @license lucide-react v0.575.0 - ISC
|
|
675
703
|
*
|
|
676
704
|
* This source code is licensed under the ISC license.
|
|
677
705
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -693,7 +721,7 @@ const __iconNode$g = [
|
|
|
693
721
|
const CalendarDays = createLucideIcon("calendar-days", __iconNode$g);
|
|
694
722
|
|
|
695
723
|
/**
|
|
696
|
-
* @license lucide-react v0.
|
|
724
|
+
* @license lucide-react v0.575.0 - ISC
|
|
697
725
|
*
|
|
698
726
|
* This source code is licensed under the ISC license.
|
|
699
727
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -704,7 +732,7 @@ const __iconNode$f = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
|
|
|
704
732
|
const ChevronDown = createLucideIcon("chevron-down", __iconNode$f);
|
|
705
733
|
|
|
706
734
|
/**
|
|
707
|
-
* @license lucide-react v0.
|
|
735
|
+
* @license lucide-react v0.575.0 - ISC
|
|
708
736
|
*
|
|
709
737
|
* This source code is licensed under the ISC license.
|
|
710
738
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -715,7 +743,7 @@ const __iconNode$e = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
|
|
|
715
743
|
const ChevronLeft = createLucideIcon("chevron-left", __iconNode$e);
|
|
716
744
|
|
|
717
745
|
/**
|
|
718
|
-
* @license lucide-react v0.
|
|
746
|
+
* @license lucide-react v0.575.0 - ISC
|
|
719
747
|
*
|
|
720
748
|
* This source code is licensed under the ISC license.
|
|
721
749
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -726,7 +754,7 @@ const __iconNode$d = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
|
|
|
726
754
|
const ChevronRight = createLucideIcon("chevron-right", __iconNode$d);
|
|
727
755
|
|
|
728
756
|
/**
|
|
729
|
-
* @license lucide-react v0.
|
|
757
|
+
* @license lucide-react v0.575.0 - ISC
|
|
730
758
|
*
|
|
731
759
|
* This source code is licensed under the ISC license.
|
|
732
760
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -737,7 +765,7 @@ const __iconNode$c = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
|
|
|
737
765
|
const ChevronUp = createLucideIcon("chevron-up", __iconNode$c);
|
|
738
766
|
|
|
739
767
|
/**
|
|
740
|
-
* @license lucide-react v0.
|
|
768
|
+
* @license lucide-react v0.575.0 - ISC
|
|
741
769
|
*
|
|
742
770
|
* This source code is licensed under the ISC license.
|
|
743
771
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -751,7 +779,7 @@ const __iconNode$b = [
|
|
|
751
779
|
const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$b);
|
|
752
780
|
|
|
753
781
|
/**
|
|
754
|
-
* @license lucide-react v0.
|
|
782
|
+
* @license lucide-react v0.575.0 - ISC
|
|
755
783
|
*
|
|
756
784
|
* This source code is licensed under the ISC license.
|
|
757
785
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -766,7 +794,7 @@ const __iconNode$a = [
|
|
|
766
794
|
const CircleAlert = createLucideIcon("circle-alert", __iconNode$a);
|
|
767
795
|
|
|
768
796
|
/**
|
|
769
|
-
* @license lucide-react v0.
|
|
797
|
+
* @license lucide-react v0.575.0 - ISC
|
|
770
798
|
*
|
|
771
799
|
* This source code is licensed under the ISC license.
|
|
772
800
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -780,7 +808,7 @@ const __iconNode$9 = [
|
|
|
780
808
|
const CircleCheck = createLucideIcon("circle-check", __iconNode$9);
|
|
781
809
|
|
|
782
810
|
/**
|
|
783
|
-
* @license lucide-react v0.
|
|
811
|
+
* @license lucide-react v0.575.0 - ISC
|
|
784
812
|
*
|
|
785
813
|
* This source code is licensed under the ISC license.
|
|
786
814
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -795,7 +823,7 @@ const __iconNode$8 = [
|
|
|
795
823
|
const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$8);
|
|
796
824
|
|
|
797
825
|
/**
|
|
798
|
-
* @license lucide-react v0.
|
|
826
|
+
* @license lucide-react v0.575.0 - ISC
|
|
799
827
|
*
|
|
800
828
|
* This source code is licensed under the ISC license.
|
|
801
829
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -810,7 +838,7 @@ const __iconNode$7 = [
|
|
|
810
838
|
const Columns3 = createLucideIcon("columns-3", __iconNode$7);
|
|
811
839
|
|
|
812
840
|
/**
|
|
813
|
-
* @license lucide-react v0.
|
|
841
|
+
* @license lucide-react v0.575.0 - ISC
|
|
814
842
|
*
|
|
815
843
|
* This source code is licensed under the ISC license.
|
|
816
844
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -825,7 +853,7 @@ const __iconNode$6 = [
|
|
|
825
853
|
const Info = createLucideIcon("info", __iconNode$6);
|
|
826
854
|
|
|
827
855
|
/**
|
|
828
|
-
* @license lucide-react v0.
|
|
856
|
+
* @license lucide-react v0.575.0 - ISC
|
|
829
857
|
*
|
|
830
858
|
* This source code is licensed under the ISC license.
|
|
831
859
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -840,7 +868,7 @@ const __iconNode$5 = [
|
|
|
840
868
|
const ListFilter = createLucideIcon("list-filter", __iconNode$5);
|
|
841
869
|
|
|
842
870
|
/**
|
|
843
|
-
* @license lucide-react v0.
|
|
871
|
+
* @license lucide-react v0.575.0 - ISC
|
|
844
872
|
*
|
|
845
873
|
* This source code is licensed under the ISC license.
|
|
846
874
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -854,7 +882,7 @@ const __iconNode$4 = [
|
|
|
854
882
|
const Plus = createLucideIcon("plus", __iconNode$4);
|
|
855
883
|
|
|
856
884
|
/**
|
|
857
|
-
* @license lucide-react v0.
|
|
885
|
+
* @license lucide-react v0.575.0 - ISC
|
|
858
886
|
*
|
|
859
887
|
* This source code is licensed under the ISC license.
|
|
860
888
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -868,7 +896,7 @@ const __iconNode$3 = [
|
|
|
868
896
|
const Search = createLucideIcon("search", __iconNode$3);
|
|
869
897
|
|
|
870
898
|
/**
|
|
871
|
-
* @license lucide-react v0.
|
|
899
|
+
* @license lucide-react v0.575.0 - ISC
|
|
872
900
|
*
|
|
873
901
|
* This source code is licensed under the ISC license.
|
|
874
902
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -885,7 +913,7 @@ const __iconNode$2 = [
|
|
|
885
913
|
const Trash2 = createLucideIcon("trash-2", __iconNode$2);
|
|
886
914
|
|
|
887
915
|
/**
|
|
888
|
-
* @license lucide-react v0.
|
|
916
|
+
* @license lucide-react v0.575.0 - ISC
|
|
889
917
|
*
|
|
890
918
|
* This source code is licensed under the ISC license.
|
|
891
919
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -904,7 +932,7 @@ const __iconNode$1 = [
|
|
|
904
932
|
const WifiOff = createLucideIcon("wifi-off", __iconNode$1);
|
|
905
933
|
|
|
906
934
|
/**
|
|
907
|
-
* @license lucide-react v0.
|
|
935
|
+
* @license lucide-react v0.575.0 - ISC
|
|
908
936
|
*
|
|
909
937
|
* This source code is licensed under the ISC license.
|
|
910
938
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -1457,6 +1485,8 @@ const HelperText$2 = styled('span')(({ theme, size = 'medium' }) => ({
|
|
|
1457
1485
|
lineHeight: size === 'xs' ? 1.5 : size === 'small' ? 1.4 : 1.5,
|
|
1458
1486
|
color: semanticColors.typography.bodySecondary,
|
|
1459
1487
|
}));
|
|
1488
|
+
// Figma-exact border radius for xs checkbox — no matching design token
|
|
1489
|
+
const FIGMA_XS_BORDER_RADIUS = 1;
|
|
1460
1490
|
const StyledCheckbox = styled(Checkbox, {
|
|
1461
1491
|
shouldForwardProp: prop => prop !== 'size',
|
|
1462
1492
|
})(({ size = 'medium' }) => {
|
|
@@ -1464,8 +1494,7 @@ const StyledCheckbox = styled(Checkbox, {
|
|
|
1464
1494
|
const sizeConfig = {
|
|
1465
1495
|
xs: {
|
|
1466
1496
|
size: 12,
|
|
1467
|
-
|
|
1468
|
-
borderRadius: 1, // From Figma: 1px for xs
|
|
1497
|
+
borderRadius: FIGMA_XS_BORDER_RADIUS,
|
|
1469
1498
|
},
|
|
1470
1499
|
small: {
|
|
1471
1500
|
size: 16,
|
|
@@ -1632,7 +1661,9 @@ const StyledButtonBase = styled(ButtonBase, {
|
|
|
1632
1661
|
width: isMultiline ? '100%' : 'fit-content',
|
|
1633
1662
|
maxWidth: isMultiline ? '100%' : 'none',
|
|
1634
1663
|
overflowX: isMultiline ? 'auto' : 'visible',
|
|
1635
|
-
padding: isMultiline && 'paddingMultiline' in sizeStyles
|
|
1664
|
+
padding: isMultiline && 'paddingMultiline' in sizeStyles
|
|
1665
|
+
? sizeStyles.paddingMultiline
|
|
1666
|
+
: sizeStyles.paddingSingleLine,
|
|
1636
1667
|
paddingRight: isMultiline ? theme.spacing(7) : undefined, // Extra space for copy button in multiline only
|
|
1637
1668
|
fontSize: sizeStyles.fontSize,
|
|
1638
1669
|
fontFamily: typography.fontFamily.code,
|
|
@@ -1756,13 +1787,14 @@ const ColumnItemContainer = styled(Box)(({ theme }) => ({
|
|
|
1756
1787
|
paddingLeft: theme.spacing(0.75),
|
|
1757
1788
|
paddingRight: theme.spacing(0.75),
|
|
1758
1789
|
}));
|
|
1790
|
+
// Figma-exact border radius for menu items — no matching design token
|
|
1791
|
+
const MENU_ITEM_BORDER_RADIUS = 6;
|
|
1759
1792
|
const MenuItemContent$1 = styled('div')(({ theme }) => ({
|
|
1760
1793
|
display: 'flex',
|
|
1761
1794
|
alignItems: 'center',
|
|
1762
1795
|
gap: theme.spacing(1),
|
|
1763
1796
|
padding: theme.spacing(1),
|
|
1764
|
-
|
|
1765
|
-
borderRadius: 6,
|
|
1797
|
+
borderRadius: MENU_ITEM_BORDER_RADIUS,
|
|
1766
1798
|
width: '100%',
|
|
1767
1799
|
'&:hover': {
|
|
1768
1800
|
backgroundColor: semanticColors.surfaces.listHover,
|
|
@@ -2474,111 +2506,85 @@ function NeoDataGridColumnsButton() {
|
|
|
2474
2506
|
}
|
|
2475
2507
|
NeoDataGridColumnsButton.displayName = 'NeoDataGridColumnsButton';
|
|
2476
2508
|
|
|
2477
|
-
const
|
|
2478
|
-
|
|
2479
|
-
borderRadius: borderRadius.full,
|
|
2480
|
-
fontSize: theme.typography.pxToRem(typography.fontSize.xs),
|
|
2481
|
-
fontWeight: typography.fontWeight.medium,
|
|
2482
|
-
// Size variants
|
|
2483
|
-
...(size === 'small' && {
|
|
2509
|
+
const sizeStyles = {
|
|
2510
|
+
small: {
|
|
2484
2511
|
height: 16,
|
|
2485
2512
|
paddingLeft: spacing.spacing_1_2, // 4px
|
|
2486
2513
|
paddingRight: spacing.spacing_1_2, // 4px
|
|
2487
|
-
}
|
|
2488
|
-
|
|
2514
|
+
},
|
|
2515
|
+
medium: {
|
|
2489
2516
|
height: 18,
|
|
2490
2517
|
paddingLeft: spacing.spacing_3_4, // 6px
|
|
2491
2518
|
paddingRight: spacing.spacing_3_4, // 6px
|
|
2492
|
-
}
|
|
2493
|
-
|
|
2519
|
+
},
|
|
2520
|
+
large: {
|
|
2494
2521
|
height: 20,
|
|
2495
2522
|
paddingLeft: spacing.spacing_3_4, // 6px
|
|
2496
2523
|
paddingRight: spacing.spacing_3_4, // 6px
|
|
2497
|
-
}),
|
|
2498
|
-
[`& .${chipClasses.label}`]: {
|
|
2499
|
-
padding: 0,
|
|
2500
2524
|
},
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2525
|
+
};
|
|
2526
|
+
const outlinedColorStyles = {
|
|
2527
|
+
default: {
|
|
2504
2528
|
backgroundColor: semanticColors.status.neutral.light,
|
|
2505
2529
|
color: semanticColors.status.neutral.dark,
|
|
2506
|
-
borderColor: colors.grey[200],
|
|
2507
|
-
}
|
|
2508
|
-
|
|
2509
|
-
...(variant === 'outlined' &&
|
|
2510
|
-
color === 'error' && {
|
|
2530
|
+
borderColor: colors.grey[200],
|
|
2531
|
+
},
|
|
2532
|
+
error: {
|
|
2511
2533
|
backgroundColor: semanticColors.status.error.light,
|
|
2512
2534
|
color: semanticColors.status.error.dark,
|
|
2513
|
-
borderColor: colors.red[100],
|
|
2514
|
-
}
|
|
2515
|
-
|
|
2516
|
-
...(variant === 'outlined' &&
|
|
2517
|
-
color === 'warning' && {
|
|
2535
|
+
borderColor: colors.red[100],
|
|
2536
|
+
},
|
|
2537
|
+
warning: {
|
|
2518
2538
|
backgroundColor: semanticColors.status.warning.light,
|
|
2519
2539
|
color: semanticColors.status.warning.dark,
|
|
2520
|
-
borderColor: colors.orange[100],
|
|
2521
|
-
}
|
|
2522
|
-
|
|
2523
|
-
...(variant === 'outlined' &&
|
|
2524
|
-
color === 'success' && {
|
|
2540
|
+
borderColor: colors.orange[100],
|
|
2541
|
+
},
|
|
2542
|
+
success: {
|
|
2525
2543
|
backgroundColor: semanticColors.status.success.light,
|
|
2526
2544
|
color: semanticColors.status.success.dark,
|
|
2527
|
-
borderColor: 'rgba(94, 196, 111, 0.24)',
|
|
2528
|
-
}
|
|
2529
|
-
|
|
2530
|
-
...(variant === 'outlined' &&
|
|
2531
|
-
color === 'info' && {
|
|
2545
|
+
borderColor: 'rgba(94, 196, 111, 0.24)',
|
|
2546
|
+
},
|
|
2547
|
+
info: {
|
|
2532
2548
|
backgroundColor: semanticColors.status.info.light,
|
|
2533
2549
|
color: semanticColors.status.info.dark,
|
|
2534
|
-
borderColor: colors.digitalBlue[100],
|
|
2535
|
-
}
|
|
2536
|
-
|
|
2537
|
-
...(variant === 'outlined' &&
|
|
2538
|
-
color === 'violet' && {
|
|
2550
|
+
borderColor: colors.digitalBlue[100],
|
|
2551
|
+
},
|
|
2552
|
+
violet: {
|
|
2539
2553
|
backgroundColor: `${colors.violet[100]}66`, // rgba(235,213,241,0.4)
|
|
2540
2554
|
color: colors.violet[600],
|
|
2541
|
-
borderColor: colors.violet[100],
|
|
2542
|
-
}
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
color
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
color
|
|
2569
|
-
|
|
2570
|
-
}),
|
|
2571
|
-
// Filled variant - Info
|
|
2572
|
-
...(variant === 'filled' &&
|
|
2573
|
-
color === 'info' && {
|
|
2574
|
-
backgroundColor: semanticColors.status.info.medium,
|
|
2575
|
-
color: theme.palette.common.white,
|
|
2576
|
-
border: 'none',
|
|
2577
|
-
}),
|
|
2578
|
-
// Filled variant - Violet
|
|
2555
|
+
borderColor: colors.violet[100],
|
|
2556
|
+
},
|
|
2557
|
+
beta: {
|
|
2558
|
+
backgroundColor: colors.digitalBlue[100],
|
|
2559
|
+
color: colors.digitalBlue[400],
|
|
2560
|
+
borderColor: colors.digitalBlue[100],
|
|
2561
|
+
},
|
|
2562
|
+
};
|
|
2563
|
+
const filledColorStyles = {
|
|
2564
|
+
default: semanticColors.status.neutral.medium,
|
|
2565
|
+
error: semanticColors.status.error.medium,
|
|
2566
|
+
warning: semanticColors.status.warning.medium,
|
|
2567
|
+
success: semanticColors.status.success.medium,
|
|
2568
|
+
info: semanticColors.status.info.medium,
|
|
2569
|
+
violet: colors.violet[500],
|
|
2570
|
+
beta: colors.digitalBlue[300],
|
|
2571
|
+
};
|
|
2572
|
+
const StyledChip$1 = styled(Chip)(({ theme, size, variant, color }) => ({
|
|
2573
|
+
padding: 0,
|
|
2574
|
+
borderRadius: borderRadius.full,
|
|
2575
|
+
fontSize: theme.typography.pxToRem(typography.fontSize.xs),
|
|
2576
|
+
fontWeight: typography.fontWeight.medium,
|
|
2577
|
+
...(size && sizeStyles[size]),
|
|
2578
|
+
[`& .${chipClasses.label}`]: {
|
|
2579
|
+
padding: 0,
|
|
2580
|
+
},
|
|
2581
|
+
...(variant === 'outlined' &&
|
|
2582
|
+
color &&
|
|
2583
|
+
outlinedColorStyles[color]),
|
|
2579
2584
|
...(variant === 'filled' &&
|
|
2580
|
-
color
|
|
2581
|
-
|
|
2585
|
+
color &&
|
|
2586
|
+
color in filledColorStyles && {
|
|
2587
|
+
backgroundColor: filledColorStyles[color],
|
|
2582
2588
|
color: theme.palette.common.white,
|
|
2583
2589
|
border: 'none',
|
|
2584
2590
|
}),
|
|
@@ -2591,11 +2597,11 @@ const StyledChip = styled(Chip)(({ theme, size, variant, color }) => ({
|
|
|
2591
2597
|
* Figma Props Mapping:
|
|
2592
2598
|
* - m (sm|md|lg) → size (small|medium|large)
|
|
2593
2599
|
* - type (light|dark) → variant (outlined|filled)
|
|
2594
|
-
* - state (Neutral|Error|Warning|Success|Info|Violet) → color (default|error|warning|success|info|violet)
|
|
2600
|
+
* - state (Neutral|Error|Warning|Success|Info|Violet|Beta) → color (default|error|warning|success|info|violet|beta)
|
|
2595
2601
|
* - Label text → label prop
|
|
2596
2602
|
*/
|
|
2597
2603
|
const NeoTag = ({ size = 'small', variant = 'outlined', ...props }) => {
|
|
2598
|
-
return jsx(StyledChip, { size: size, variant: variant, ...props });
|
|
2604
|
+
return jsx(StyledChip$1, { size: size, variant: variant, ...props });
|
|
2599
2605
|
};
|
|
2600
2606
|
NeoTag.displayName = 'NeoTag';
|
|
2601
2607
|
|
|
@@ -3557,49 +3563,70 @@ const NeoDot = ({ size = 'medium', variant = 'solid', color = 'neutral', ...prop
|
|
|
3557
3563
|
NeoDot.displayName = 'NeoDot';
|
|
3558
3564
|
|
|
3559
3565
|
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}`;
|
|
3560
|
-
const
|
|
3561
|
-
|
|
3562
|
-
|
|
3563
|
-
|
|
3564
|
-
alignItems: active ? 'flex-end' : 'center',
|
|
3565
|
-
gap: spacing.spacing_1_2,
|
|
3566
|
-
padding: active ? `${spacing.spacing_3_4}px ${spacing.spacing_1_1_2}px` : `0 ${spacing.spacing_1_1_2}px`,
|
|
3567
|
-
minHeight: 40,
|
|
3568
|
-
border: `1px solid ${semanticColors.buttons.secondary.defaultBorder}`,
|
|
3566
|
+
const filterChipOnlyProps = ['selected', 'expanded', 'selectedLabel', 'count', 'onClear'];
|
|
3567
|
+
const StyledChip = styled(Chip, {
|
|
3568
|
+
shouldForwardProp: prop => !filterChipOnlyProps.includes(prop),
|
|
3569
|
+
})(({ theme, selected }) => ({
|
|
3569
3570
|
borderRadius: borderRadius.full,
|
|
3570
|
-
|
|
3571
|
-
|
|
3571
|
+
border: `1px solid ${semanticColors.buttons.secondary.defaultBorder}`,
|
|
3572
|
+
backgroundColor: selected
|
|
3573
|
+
? semanticColors.buttons.secondary.pressedBackground
|
|
3572
3574
|
: semanticColors.surfaces.white,
|
|
3573
|
-
|
|
3574
|
-
|
|
3575
|
-
|
|
3576
|
-
|
|
3575
|
+
minHeight: 40,
|
|
3576
|
+
padding: `${spacing.spacing_3_4}px ${spacing.spacing_1_1_2}px`,
|
|
3577
|
+
gap: spacing.spacing_1,
|
|
3578
|
+
fontSize: theme.typography.pxToRem(typography.fontSize.sm),
|
|
3579
|
+
fontWeight: typography.fontWeight.medium,
|
|
3580
|
+
lineHeight: 1,
|
|
3581
|
+
color: semanticColors.typography.body,
|
|
3582
|
+
[`& .${chipClasses.label}`]: {
|
|
3583
|
+
padding: 0,
|
|
3584
|
+
overflow: 'visible',
|
|
3585
|
+
display: 'flex',
|
|
3586
|
+
alignItems: 'center',
|
|
3587
|
+
},
|
|
3588
|
+
[`& .${chipClasses.deleteIcon}`]: {
|
|
3589
|
+
color: semanticColors.icons.default,
|
|
3590
|
+
width: 24,
|
|
3591
|
+
height: 24,
|
|
3592
|
+
margin: 0,
|
|
3593
|
+
flexShrink: 0,
|
|
3594
|
+
'&:hover': {
|
|
3595
|
+
color: semanticColors.icons.default,
|
|
3596
|
+
},
|
|
3597
|
+
},
|
|
3577
3598
|
'&:hover': {
|
|
3578
3599
|
backgroundColor: semanticColors.buttons.secondary.hoverBackground,
|
|
3579
3600
|
},
|
|
3580
|
-
|
|
3601
|
+
[`&.${chipClasses.focusVisible}`]: {
|
|
3581
3602
|
boxShadow: focusRing,
|
|
3603
|
+
backgroundColor: selected
|
|
3604
|
+
? semanticColors.buttons.secondary.pressedBackground
|
|
3605
|
+
: semanticColors.surfaces.white,
|
|
3582
3606
|
},
|
|
3583
3607
|
}));
|
|
3584
|
-
const
|
|
3585
|
-
|
|
3586
|
-
|
|
3608
|
+
const LabelContent = styled('span')({
|
|
3609
|
+
display: 'inline-flex',
|
|
3610
|
+
alignItems: 'center',
|
|
3611
|
+
gap: spacing.spacing_1,
|
|
3612
|
+
});
|
|
3613
|
+
const TextStack = styled('span')({
|
|
3587
3614
|
display: 'flex',
|
|
3588
3615
|
flexDirection: 'column',
|
|
3589
3616
|
alignItems: 'flex-start',
|
|
3590
3617
|
justifyContent: 'center',
|
|
3591
|
-
gap:
|
|
3592
|
-
})
|
|
3618
|
+
gap: spacing.spacing_1_4,
|
|
3619
|
+
});
|
|
3593
3620
|
const HeaderLabel = styled('span')(({ theme }) => ({
|
|
3594
3621
|
fontSize: theme.typography.pxToRem(typography.fontSize.xxs),
|
|
3595
3622
|
fontWeight: typography.fontWeight.regular,
|
|
3596
3623
|
lineHeight: '120%',
|
|
3597
3624
|
color: semanticColors.typography.bodySecondary,
|
|
3598
3625
|
}));
|
|
3599
|
-
const
|
|
3626
|
+
const SelectedLabel = styled('span')(({ theme }) => ({
|
|
3600
3627
|
fontSize: theme.typography.pxToRem(typography.fontSize.sm),
|
|
3601
3628
|
fontWeight: typography.fontWeight.medium,
|
|
3602
|
-
lineHeight:
|
|
3629
|
+
lineHeight: 1,
|
|
3603
3630
|
color: semanticColors.buttons.secondary.default,
|
|
3604
3631
|
}));
|
|
3605
3632
|
const CountBadge = styled('span')(({ theme }) => ({
|
|
@@ -3610,7 +3637,6 @@ const CountBadge = styled('span')(({ theme }) => ({
|
|
|
3610
3637
|
height: 16,
|
|
3611
3638
|
padding: `0 ${spacing.spacing_1_2}px`,
|
|
3612
3639
|
borderRadius: borderRadius.full,
|
|
3613
|
-
border: `1px solid ${semanticColors.buttons.secondary.defaultBorder}`,
|
|
3614
3640
|
backgroundColor: semanticColors.brand,
|
|
3615
3641
|
color: semanticColors.surfaces.white,
|
|
3616
3642
|
fontSize: theme.typography.pxToRem(typography.fontSize.xs),
|
|
@@ -3618,24 +3644,19 @@ const CountBadge = styled('span')(({ theme }) => ({
|
|
|
3618
3644
|
lineHeight: 1,
|
|
3619
3645
|
boxSizing: 'border-box',
|
|
3620
3646
|
}));
|
|
3621
|
-
const ChevronIcon = styled(ChevronDown)({
|
|
3622
|
-
width: 16,
|
|
3623
|
-
height: 16,
|
|
3624
|
-
color: semanticColors.brand,
|
|
3625
|
-
flexShrink: 0,
|
|
3626
|
-
});
|
|
3627
3647
|
/**
|
|
3628
|
-
*
|
|
3648
|
+
* NeoFilterChip - Filter chip for filtering data, based on MUI Chip.
|
|
3629
3649
|
*
|
|
3630
|
-
* @
|
|
3650
|
+
* @example
|
|
3651
|
+
* <NeoFilterChip label="Status" selected selectedLabel="Active, Pending" count={2} onClear={handleClear} />
|
|
3631
3652
|
*
|
|
3632
|
-
*
|
|
3633
|
-
* - Property 1 (default|hover ope|focused|Active|active focused) → active boolean + CSS states
|
|
3653
|
+
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC?node-id=8257-239
|
|
3634
3654
|
*/
|
|
3635
|
-
const
|
|
3636
|
-
|
|
3655
|
+
const NeoFilterChip = ({ label, selected = false, expanded, selectedLabel, count = 0, onClear, onClick, ...props }) => {
|
|
3656
|
+
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);
|
|
3657
|
+
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 }));
|
|
3637
3658
|
};
|
|
3638
|
-
|
|
3659
|
+
NeoFilterChip.displayName = 'NeoFilterChip';
|
|
3639
3660
|
|
|
3640
3661
|
const SpinnerWrapper = styled('div')({
|
|
3641
3662
|
width: 24,
|
|
@@ -3877,6 +3898,31 @@ const NeoFooter = ({ variant = 'pagination', showShadow = false, loading = false
|
|
|
3877
3898
|
};
|
|
3878
3899
|
NeoFooter.displayName = 'NeoFooter';
|
|
3879
3900
|
|
|
3901
|
+
const customProps$1 = ['iconSize'];
|
|
3902
|
+
const StyledIconWrapper = styled('div', {
|
|
3903
|
+
shouldForwardProp: prop => !customProps$1.includes(prop),
|
|
3904
|
+
})(({ iconSize }) => ({
|
|
3905
|
+
display: 'inline-flex',
|
|
3906
|
+
alignItems: 'center',
|
|
3907
|
+
justifyContent: 'center',
|
|
3908
|
+
width: iconSize,
|
|
3909
|
+
height: iconSize,
|
|
3910
|
+
flexShrink: 0,
|
|
3911
|
+
'& svg': {
|
|
3912
|
+
width: iconSize,
|
|
3913
|
+
height: iconSize,
|
|
3914
|
+
},
|
|
3915
|
+
}));
|
|
3916
|
+
/**
|
|
3917
|
+
* NeoIconWrapper - Flex-centered container that sizes icons
|
|
3918
|
+
*
|
|
3919
|
+
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4061-9955
|
|
3920
|
+
*/
|
|
3921
|
+
const NeoIconWrapper = ({ size = 20, children, ...props }) => {
|
|
3922
|
+
return (jsx(StyledIconWrapper, { iconSize: size, ...props, children: children }));
|
|
3923
|
+
};
|
|
3924
|
+
NeoIconWrapper.displayName = 'NeoIconWrapper';
|
|
3925
|
+
|
|
3880
3926
|
/**
|
|
3881
3927
|
* NeoInfiniteScrollGrid - DataGrid with infinite scroll and load-more functionality
|
|
3882
3928
|
*
|
|
@@ -4511,11 +4557,11 @@ NeoListItemButton.displayName = 'NeoListItemButton';
|
|
|
4511
4557
|
* Focus ring box-shadow using Neo design tokens
|
|
4512
4558
|
* Combines focusWhite1 (inner white ring) and focusBlue2 (outer blue ring)
|
|
4513
4559
|
*/
|
|
4514
|
-
const focusRingShadow = `${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}`;
|
|
4560
|
+
const focusRingShadow$1 = `${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}`;
|
|
4515
4561
|
/**
|
|
4516
4562
|
* Card box-shadow using Neo design tokens for hover and selected states
|
|
4517
4563
|
*/
|
|
4518
|
-
const activeShadow = `${shadows.card.x}px ${shadows.card.y}px ${shadows.card.blur}px ${shadows.card.spread}px ${shadows.card.shadow}`;
|
|
4564
|
+
const activeShadow$1 = `${shadows.card.x}px ${shadows.card.y}px ${shadows.card.blur}px ${shadows.card.spread}px ${shadows.card.shadow}`;
|
|
4519
4565
|
/**
|
|
4520
4566
|
* Styled Card component with Neo design tokens
|
|
4521
4567
|
*/
|
|
@@ -4531,16 +4577,16 @@ const StyledCard = styled(MuiCard, {
|
|
|
4531
4577
|
backgroundColor: semanticColors.surfaces.card,
|
|
4532
4578
|
border: `1px solid ${selected ? semanticColors.border.tabActive : semanticColors.border.card}`,
|
|
4533
4579
|
borderRadius: borderRadius.xS,
|
|
4534
|
-
boxShadow: selected ? activeShadow : 'none',
|
|
4580
|
+
boxShadow: selected ? activeShadow$1 : 'none',
|
|
4535
4581
|
transition: theme.transitions.create(['border-color', 'background-color', 'box-shadow']),
|
|
4536
4582
|
cursor: 'pointer',
|
|
4537
4583
|
'&:hover': {
|
|
4538
4584
|
borderColor: semanticColors.border.tabActive,
|
|
4539
|
-
boxShadow: activeShadow,
|
|
4585
|
+
boxShadow: activeShadow$1,
|
|
4540
4586
|
},
|
|
4541
4587
|
'&:focus-visible': {
|
|
4542
4588
|
borderColor: semanticColors.border.tabActive,
|
|
4543
|
-
boxShadow: focusRingShadow,
|
|
4589
|
+
boxShadow: focusRingShadow$1,
|
|
4544
4590
|
outline: 'none',
|
|
4545
4591
|
},
|
|
4546
4592
|
...(disabled && {
|
|
@@ -4600,7 +4646,7 @@ const Title = styled('p')(({ theme }) => ({
|
|
|
4600
4646
|
/**
|
|
4601
4647
|
* Description text
|
|
4602
4648
|
*/
|
|
4603
|
-
const Description = styled('p')(({ theme }) => ({
|
|
4649
|
+
const Description$1 = styled('p')(({ theme }) => ({
|
|
4604
4650
|
margin: 0,
|
|
4605
4651
|
fontSize: theme.typography.pxToRem(typography.fontSize.xs), // 12px
|
|
4606
4652
|
fontWeight: typography.fontWeight.regular, // 400
|
|
@@ -4655,10 +4701,131 @@ const Description = styled('p')(({ theme }) => ({
|
|
|
4655
4701
|
* - typography.fontWeight.regular (400) - Description
|
|
4656
4702
|
*/
|
|
4657
4703
|
const NeoMarketplaceCard = ({ logo, recipeCount, title, description, selected = false, disabled = false, onClick, ...props }) => {
|
|
4658
|
-
return (jsxs(StyledCard, { selected: selected, disabled: disabled, onClick: disabled ? undefined : onClick, tabIndex: disabled ? -1 : 0, role: "button", "aria-disabled": disabled, "aria-pressed": selected, ...props, children: [jsxs(CardHeader, { children: [jsx(LogoContainer, { children: logo }), jsx(RecipeCount, { children: recipeCount })] }), jsxs(CardContent, { children: [jsx(Title, { children: title }), jsx(Description, { children: description })] })] }));
|
|
4704
|
+
return (jsxs(StyledCard, { selected: selected, disabled: disabled, onClick: disabled ? undefined : onClick, tabIndex: disabled ? -1 : 0, role: "button", "aria-disabled": disabled, "aria-pressed": selected, ...props, children: [jsxs(CardHeader, { children: [jsx(LogoContainer, { children: logo }), jsx(RecipeCount, { children: recipeCount })] }), jsxs(CardContent, { children: [jsx(Title, { children: title }), jsx(Description$1, { children: description })] })] }));
|
|
4659
4705
|
};
|
|
4660
4706
|
NeoMarketplaceCard.displayName = 'NeoMarketplaceCard';
|
|
4661
4707
|
|
|
4708
|
+
const focusRingShadow = `${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}`;
|
|
4709
|
+
const activeShadow = `${shadows.card.x}px ${shadows.card.y}px ${shadows.card.blur}px ${shadows.card.spread}px ${shadows.card.shadow}`;
|
|
4710
|
+
const StyledLargeCard = styled(MuiCard, {
|
|
4711
|
+
shouldForwardProp: prop => prop !== 'cardState' && prop !== 'cardTheme',
|
|
4712
|
+
})(({ cardState = 'default', cardTheme = 'light' }) => {
|
|
4713
|
+
const isLight = cardTheme === 'light';
|
|
4714
|
+
const isActive = cardState === 'active';
|
|
4715
|
+
const isDisabled = cardState === 'disabled';
|
|
4716
|
+
const isFocused = cardState === 'focused';
|
|
4717
|
+
const activeBorderColor = isLight ? semanticColors.border.tabActive : colors.digitalGreen[300];
|
|
4718
|
+
const defaultBorderColor = isLight
|
|
4719
|
+
? semanticColors.border.card
|
|
4720
|
+
: `${semanticColors.border.card}80`;
|
|
4721
|
+
return {
|
|
4722
|
+
width: 340,
|
|
4723
|
+
height: 162,
|
|
4724
|
+
display: 'flex',
|
|
4725
|
+
flexDirection: 'column',
|
|
4726
|
+
justifyContent: 'space-between',
|
|
4727
|
+
alignItems: 'flex-start',
|
|
4728
|
+
padding: spacing.spacing_2,
|
|
4729
|
+
borderRadius: borderRadius.xS,
|
|
4730
|
+
backgroundColor: isLight ? semanticColors.surfaces.card : colors.grey[800],
|
|
4731
|
+
border: `1px solid ${isActive || isFocused ? activeBorderColor : defaultBorderColor}`,
|
|
4732
|
+
boxShadow: isActive ? activeShadow : isFocused ? focusRingShadow : 'none',
|
|
4733
|
+
overflow: 'hidden',
|
|
4734
|
+
'&:focus-visible': {
|
|
4735
|
+
borderColor: isLight ? semanticColors.border.tabActive : colors.digitalGreen[300],
|
|
4736
|
+
boxShadow: focusRingShadow,
|
|
4737
|
+
outline: 'none',
|
|
4738
|
+
},
|
|
4739
|
+
...(isDisabled && {
|
|
4740
|
+
opacity: 0.5,
|
|
4741
|
+
pointerEvents: 'none',
|
|
4742
|
+
cursor: 'not-allowed',
|
|
4743
|
+
}),
|
|
4744
|
+
};
|
|
4745
|
+
});
|
|
4746
|
+
const TopSection = styled('div')({
|
|
4747
|
+
display: 'flex',
|
|
4748
|
+
flexDirection: 'column',
|
|
4749
|
+
gap: spacing.spacing_2,
|
|
4750
|
+
alignItems: 'flex-start',
|
|
4751
|
+
width: '100%',
|
|
4752
|
+
flexShrink: 0,
|
|
4753
|
+
});
|
|
4754
|
+
const HeaderRow = styled('div')({
|
|
4755
|
+
display: 'flex',
|
|
4756
|
+
gap: spacing.spacing_1,
|
|
4757
|
+
alignItems: 'center',
|
|
4758
|
+
flexShrink: 0,
|
|
4759
|
+
});
|
|
4760
|
+
const HeaderSlot = styled('div')({
|
|
4761
|
+
display: 'flex',
|
|
4762
|
+
flexDirection: 'column',
|
|
4763
|
+
alignItems: 'center',
|
|
4764
|
+
justifyContent: 'center',
|
|
4765
|
+
width: 20,
|
|
4766
|
+
height: 20,
|
|
4767
|
+
flexShrink: 0,
|
|
4768
|
+
});
|
|
4769
|
+
const HeaderTitle = styled('span', {
|
|
4770
|
+
shouldForwardProp: prop => prop !== 'cardTheme',
|
|
4771
|
+
})(({ cardTheme = 'light' }) => ({
|
|
4772
|
+
fontFamily: `${typography.fontFamily.heading}, sans-serif`,
|
|
4773
|
+
fontWeight: typography.fontWeight.semiBold,
|
|
4774
|
+
fontSize: typography.fontSize.h6,
|
|
4775
|
+
lineHeight: 1.4,
|
|
4776
|
+
color: cardTheme === 'light' ? colors.grey[800] : semanticColors.surfaces.white,
|
|
4777
|
+
flexShrink: 0,
|
|
4778
|
+
}));
|
|
4779
|
+
const Description = styled('p', {
|
|
4780
|
+
shouldForwardProp: prop => prop !== 'cardTheme',
|
|
4781
|
+
})(({ cardTheme = 'light' }) => ({
|
|
4782
|
+
fontFamily: `${typography.fontFamily.body}, sans-serif`,
|
|
4783
|
+
fontWeight: typography.fontWeight.regular,
|
|
4784
|
+
fontSize: typography.fontSize.xs,
|
|
4785
|
+
lineHeight: 1.5,
|
|
4786
|
+
color: cardTheme === 'light' ? colors.grey[800] : semanticColors.surfaces.white,
|
|
4787
|
+
margin: 0,
|
|
4788
|
+
minWidth: '100%',
|
|
4789
|
+
wordWrap: 'break-word',
|
|
4790
|
+
}));
|
|
4791
|
+
const ButtonsRow = styled('div')({
|
|
4792
|
+
display: 'flex',
|
|
4793
|
+
gap: spacing.spacing_3,
|
|
4794
|
+
alignItems: 'flex-start',
|
|
4795
|
+
flexShrink: 0,
|
|
4796
|
+
});
|
|
4797
|
+
/**
|
|
4798
|
+
* NeoMarketplaceLargeCard - A large marketplace card with state and theme variants
|
|
4799
|
+
*
|
|
4800
|
+
* A 340x162px card with optional icon, gel brand icon, title, description, and action buttons.
|
|
4801
|
+
* Icon, gel, and title display inline in a header row.
|
|
4802
|
+
* Supports 4 states (default, active, disabled, focused) and 2 themes (light, dark).
|
|
4803
|
+
*
|
|
4804
|
+
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC?node-id=5925-11
|
|
4805
|
+
*
|
|
4806
|
+
* Figma Props Mapping:
|
|
4807
|
+
* - Property 1 → state (default/active/disabled/focused)
|
|
4808
|
+
* - Property 2 → cardTheme (light/dark)
|
|
4809
|
+
* - Show Icon → showIcon
|
|
4810
|
+
* - Show gel → showGel
|
|
4811
|
+
* - show buttons → showButtons
|
|
4812
|
+
*
|
|
4813
|
+
* Design Tokens Used:
|
|
4814
|
+
* - semanticColors.surfaces.card (#ffffff) - Light theme background
|
|
4815
|
+
* - colors.grey[800] (#1f2937) - Dark theme background
|
|
4816
|
+
* - semanticColors.border.card (#d1d5db) - Default border (50% opacity on dark)
|
|
4817
|
+
* - semanticColors.border.tabActive (#2f42ff) - Active/focused border (light theme)
|
|
4818
|
+
* - colors.digitalGreen[300] (#88fe9b) - Active/focused border (dark theme)
|
|
4819
|
+
* - borderRadius.xS (4px) - Corner radius
|
|
4820
|
+
* - shadows.focusWhite1 + shadows.focusBlue2 - Focus ring
|
|
4821
|
+
* - shadows.card - Active state shadow
|
|
4822
|
+
*/
|
|
4823
|
+
const NeoMarketplaceLargeCard = ({ state = 'default', cardTheme = 'light', showIcon = true, showGel = true, showButtons = true, icon, gel, title, children, actions, onClick, ...props }) => {
|
|
4824
|
+
const isDisabled = state === 'disabled';
|
|
4825
|
+
return (jsxs(StyledLargeCard, { cardState: state, cardTheme: cardTheme, onClick: isDisabled ? undefined : onClick, tabIndex: isDisabled ? -1 : 0, "aria-disabled": isDisabled || undefined, ...props, children: [jsxs(TopSection, { children: [jsxs(HeaderRow, { children: [showIcon && icon && jsx(HeaderSlot, { children: icon }), showGel && gel && jsx(HeaderSlot, { children: gel }), title && jsx(HeaderTitle, { cardTheme: cardTheme, children: title })] }), children && jsx(Description, { cardTheme: cardTheme, children: children })] }), showButtons && actions && jsx(ButtonsRow, { children: actions })] }));
|
|
4826
|
+
};
|
|
4827
|
+
NeoMarketplaceLargeCard.displayName = 'NeoMarketplaceLargeCard';
|
|
4828
|
+
|
|
4662
4829
|
const StyledMenu = styled(Menu)(({ theme }) => ({
|
|
4663
4830
|
[`& .${paperClasses.root}`]: {
|
|
4664
4831
|
backgroundColor: semanticColors.surfaces.white,
|
|
@@ -4902,6 +5069,87 @@ const NeoModalFooter = ({ leadingContent, children }) => {
|
|
|
4902
5069
|
};
|
|
4903
5070
|
NeoModalFooter.displayName = 'NeoModalFooter';
|
|
4904
5071
|
|
|
5072
|
+
const customProps = ['selected'];
|
|
5073
|
+
const StyledRoot = styled(ButtonBase, {
|
|
5074
|
+
shouldForwardProp: prop => !customProps.includes(prop),
|
|
5075
|
+
})(({ selected }) => ({
|
|
5076
|
+
display: 'flex',
|
|
5077
|
+
flexDirection: 'column',
|
|
5078
|
+
gap: spacing.spacing_1_4, // 2px
|
|
5079
|
+
alignItems: 'center',
|
|
5080
|
+
justifyContent: 'center',
|
|
5081
|
+
paddingTop: spacing.spacing_1, // 8px
|
|
5082
|
+
paddingBottom: spacing.spacing_1, // 8px
|
|
5083
|
+
paddingLeft: spacing.spacing_1_2, // 4px
|
|
5084
|
+
paddingRight: spacing.spacing_1_2, // 4px
|
|
5085
|
+
borderRadius: borderRadius.xS, // 4px
|
|
5086
|
+
width: 95,
|
|
5087
|
+
cursor: 'pointer',
|
|
5088
|
+
textDecoration: 'none',
|
|
5089
|
+
'&:hover .neo-nav-icon-padding': {
|
|
5090
|
+
backgroundColor: semanticColors.buttons.secondary.hoverBackground, // #F2F3FF
|
|
5091
|
+
},
|
|
5092
|
+
'&:hover .neo-nav-label': {
|
|
5093
|
+
color: semanticColors.buttons.primary.hover, // #1E2EC2
|
|
5094
|
+
},
|
|
5095
|
+
...(selected && {
|
|
5096
|
+
'& .neo-nav-icon-padding': {
|
|
5097
|
+
backgroundColor: `${colors.digitalBlue[100]}BF`, // rgba(220,224,255,0.75)
|
|
5098
|
+
},
|
|
5099
|
+
'& .neo-nav-label': {
|
|
5100
|
+
color: semanticColors.buttons.primary.pressed, // #131E7A
|
|
5101
|
+
fontWeight: typography.fontWeight.semiBold,
|
|
5102
|
+
},
|
|
5103
|
+
'&:hover .neo-nav-icon-padding': {
|
|
5104
|
+
backgroundColor: `${colors.digitalBlue[100]}BF`,
|
|
5105
|
+
},
|
|
5106
|
+
'&:hover .neo-nav-label': {
|
|
5107
|
+
color: semanticColors.buttons.primary.pressed,
|
|
5108
|
+
},
|
|
5109
|
+
}),
|
|
5110
|
+
}));
|
|
5111
|
+
const IconPadding = styled('span')({
|
|
5112
|
+
display: 'flex',
|
|
5113
|
+
alignItems: 'center',
|
|
5114
|
+
padding: spacing.spacing_1, // 8px
|
|
5115
|
+
borderRadius: spacing.spacing_1, // 8px
|
|
5116
|
+
transition: 'background-color 150ms',
|
|
5117
|
+
});
|
|
5118
|
+
const Label$2 = styled('span')(({ theme }) => ({
|
|
5119
|
+
fontFamily: typography.fontFamily.body,
|
|
5120
|
+
fontWeight: typography.fontWeight.regular,
|
|
5121
|
+
fontSize: theme.typography.pxToRem(10),
|
|
5122
|
+
lineHeight: 1.2,
|
|
5123
|
+
textAlign: 'center',
|
|
5124
|
+
color: semanticColors.typography.navigation.default, // #1F2937
|
|
5125
|
+
width: '100%',
|
|
5126
|
+
transition: 'color 150ms',
|
|
5127
|
+
}));
|
|
5128
|
+
const TagPill = styled('span')(({ theme }) => ({
|
|
5129
|
+
display: 'inline-flex',
|
|
5130
|
+
alignItems: 'center',
|
|
5131
|
+
justifyContent: 'center',
|
|
5132
|
+
height: 18,
|
|
5133
|
+
paddingLeft: spacing.spacing_3_4, // 6px
|
|
5134
|
+
paddingRight: spacing.spacing_3_4, // 6px
|
|
5135
|
+
borderRadius: borderRadius.full,
|
|
5136
|
+
backgroundColor: colors.digitalBlue[300], // #8D99FF
|
|
5137
|
+
color: semanticColors.typography.tooltip, // white
|
|
5138
|
+
fontFamily: typography.fontFamily.body,
|
|
5139
|
+
fontWeight: typography.fontWeight.medium,
|
|
5140
|
+
fontSize: theme.typography.pxToRem(typography.fontSize.xs), // 12px
|
|
5141
|
+
lineHeight: 1,
|
|
5142
|
+
}));
|
|
5143
|
+
/**
|
|
5144
|
+
* NeoNavigationItem - Vertical navigation item with icon, label, and optional tag
|
|
5145
|
+
*
|
|
5146
|
+
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=8455-6120
|
|
5147
|
+
*/
|
|
5148
|
+
const NeoNavigationItem = ({ icon, label, selected = false, tag, children, ...props }) => {
|
|
5149
|
+
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] }));
|
|
5150
|
+
};
|
|
5151
|
+
NeoNavigationItem.displayName = 'NeoNavigationItem';
|
|
5152
|
+
|
|
4905
5153
|
/**
|
|
4906
5154
|
* Sticky header wrapper - sticks to top when scrolling
|
|
4907
5155
|
*/
|
|
@@ -6197,6 +6445,8 @@ const NeoTooltip = ({ variant = 'light', title, description, children, arrow = f
|
|
|
6197
6445
|
};
|
|
6198
6446
|
NeoTooltip.displayName = 'NeoTooltip';
|
|
6199
6447
|
|
|
6448
|
+
// Figma-exact border radius for toggle buttons — no matching design token
|
|
6449
|
+
const TOGGLE_BUTTON_BORDER_RADIUS = 14;
|
|
6200
6450
|
const StyledToggleButtonGroup = styled(ToggleButtonGroup)(({ theme }) => ({
|
|
6201
6451
|
backgroundColor: colors.grey[50],
|
|
6202
6452
|
padding: theme.spacing(0.625, 0.875),
|
|
@@ -6204,17 +6454,14 @@ const StyledToggleButtonGroup = styled(ToggleButtonGroup)(({ theme }) => ({
|
|
|
6204
6454
|
gap: 0,
|
|
6205
6455
|
[`& .${toggleButtonGroupClasses.grouped}`]: {
|
|
6206
6456
|
border: 'none',
|
|
6207
|
-
|
|
6208
|
-
borderRadius: 14,
|
|
6457
|
+
borderRadius: TOGGLE_BUTTON_BORDER_RADIUS,
|
|
6209
6458
|
margin: 0,
|
|
6210
6459
|
'&:not(:first-of-type)': {
|
|
6211
|
-
|
|
6212
|
-
borderRadius: 14,
|
|
6460
|
+
borderRadius: TOGGLE_BUTTON_BORDER_RADIUS,
|
|
6213
6461
|
marginLeft: 0,
|
|
6214
6462
|
},
|
|
6215
6463
|
'&:not(:last-of-type)': {
|
|
6216
|
-
|
|
6217
|
-
borderRadius: 14,
|
|
6464
|
+
borderRadius: TOGGLE_BUTTON_BORDER_RADIUS,
|
|
6218
6465
|
},
|
|
6219
6466
|
},
|
|
6220
6467
|
}));
|
|
@@ -6267,5 +6514,5 @@ NeoTypologyControl.displayName = 'NeoTypologyControl';
|
|
|
6267
6514
|
|
|
6268
6515
|
const version = '0.0.0-development';
|
|
6269
6516
|
|
|
6270
|
-
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,
|
|
6517
|
+
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, NeoMarketplaceLargeCard, 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 };
|
|
6271
6518
|
//# sourceMappingURL=index.esm.js.map
|