@moderneinc/neo-styled-components 2.4.0-next.df8e26 → 2.5.0-next.00efee
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ActivityHeader/ActivityHeader.d.ts +1 -0
- package/dist/ButtonGroup/ButtonGroup.d.ts +0 -1
- package/dist/CodeSnippet/CodeSnippet.d.ts +3 -3
- package/dist/FilterChip/FilterChip.d.ts +42 -0
- package/dist/IconWrapper/IconWrapper.d.ts +23 -0
- package/dist/ListItemButton/ListItemButton.d.ts +5 -4
- package/dist/MarketplaceLargeCard/MarketplaceLargeCard.d.ts +91 -0
- package/dist/MenuItem/MenuItem.d.ts +4 -2
- package/dist/NavigationItem/NavigationItem.d.ts +36 -0
- package/dist/StatusBanner/StatusBanner.d.ts +4 -3
- package/dist/Tag/Tag.d.ts +4 -3
- package/dist/index.d.ts +65 -18
- package/dist/index.esm.js +564 -207
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +566 -205
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/LargeCard/LargeCard.d.ts +0 -26
package/dist/index.esm.js
CHANGED
|
@@ -4,7 +4,7 @@ import Box from '@mui/material/Box';
|
|
|
4
4
|
import { styled, alpha } from '@mui/material/styles';
|
|
5
5
|
import Avatar from '@mui/material/Avatar';
|
|
6
6
|
import Chip, { chipClasses } from '@mui/material/Chip';
|
|
7
|
-
import SvgIcon from '@mui/material/SvgIcon';
|
|
7
|
+
import SvgIcon, { svgIconClasses } from '@mui/material/SvgIcon';
|
|
8
8
|
import Alert, { alertClasses } from '@mui/material/Alert';
|
|
9
9
|
import IconButton, { iconButtonClasses } from '@mui/material/IconButton';
|
|
10
10
|
import { forwardRef, createElement, useState, useMemo, useRef, useEffect } from 'react';
|
|
@@ -147,9 +147,12 @@ const NeoAvatar = ({ size = 'medium', variant = 'circular', ...props }) => {
|
|
|
147
147
|
};
|
|
148
148
|
NeoAvatar.displayName = 'NeoAvatar';
|
|
149
149
|
|
|
150
|
-
const StyledChip$
|
|
150
|
+
const StyledChip$2 = styled(Chip)(({ theme }) => ({
|
|
151
151
|
height: 24,
|
|
152
|
-
|
|
152
|
+
paddingTop: spacing.spacing_1_4,
|
|
153
|
+
paddingBottom: spacing.spacing_1_4,
|
|
154
|
+
paddingLeft: spacing.spacing_1,
|
|
155
|
+
paddingRight: spacing.spacing_1,
|
|
153
156
|
borderRadius: borderRadius.full,
|
|
154
157
|
fontSize: theme.typography.pxToRem(typography.fontSize.xs),
|
|
155
158
|
lineHeight: 1,
|
|
@@ -157,16 +160,19 @@ const StyledChip$1 = styled(Chip)(({ theme }) => ({
|
|
|
157
160
|
gap: spacing.spacing_1_2,
|
|
158
161
|
overflow: 'visible',
|
|
159
162
|
[`& .${chipClasses.label}`]: {
|
|
160
|
-
|
|
163
|
+
paddingLeft: 0,
|
|
164
|
+
paddingRight: 0,
|
|
161
165
|
overflow: 'visible',
|
|
162
166
|
},
|
|
163
167
|
[`& .${chipClasses.icon}`]: {
|
|
164
|
-
|
|
168
|
+
marginLeft: 0,
|
|
169
|
+
marginRight: 0,
|
|
165
170
|
width: 12,
|
|
166
171
|
height: 12,
|
|
167
172
|
},
|
|
168
173
|
[`& .${chipClasses.deleteIcon}`]: {
|
|
169
|
-
|
|
174
|
+
marginLeft: 0,
|
|
175
|
+
marginRight: 0,
|
|
170
176
|
width: 12,
|
|
171
177
|
height: 12,
|
|
172
178
|
},
|
|
@@ -228,7 +234,7 @@ const StyledChip$1 = styled(Chip)(({ theme }) => ({
|
|
|
228
234
|
* - Label → label prop
|
|
229
235
|
*/
|
|
230
236
|
const NeoBadge = (props) => {
|
|
231
|
-
return jsx(StyledChip$
|
|
237
|
+
return jsx(StyledChip$2, { ...props });
|
|
232
238
|
};
|
|
233
239
|
NeoBadge.displayName = 'NeoBadge';
|
|
234
240
|
|
|
@@ -378,6 +384,7 @@ const ActivityDot = styled('div')(({ color }) => ({
|
|
|
378
384
|
*
|
|
379
385
|
* **Figma Props Mapping:**
|
|
380
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)
|
|
381
388
|
*
|
|
382
389
|
* **Design Tokens:**
|
|
383
390
|
* - `semanticColors.activity.commitJob` - Blue dot for commit job events (#2F42FF)
|
|
@@ -493,7 +500,7 @@ const NeoActivityIndicatorCell = ({ event = 'commit-job', secondaryEvent, scene
|
|
|
493
500
|
NeoActivityIndicatorCell.displayName = 'NeoActivityIndicatorCell';
|
|
494
501
|
|
|
495
502
|
/**
|
|
496
|
-
* @license lucide-react v0.
|
|
503
|
+
* @license lucide-react v0.575.0 - ISC
|
|
497
504
|
*
|
|
498
505
|
* This source code is licensed under the ISC license.
|
|
499
506
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -504,7 +511,7 @@ const mergeClasses = (...classes) => classes.filter((className, index, array) =>
|
|
|
504
511
|
}).join(" ").trim();
|
|
505
512
|
|
|
506
513
|
/**
|
|
507
|
-
* @license lucide-react v0.
|
|
514
|
+
* @license lucide-react v0.575.0 - ISC
|
|
508
515
|
*
|
|
509
516
|
* This source code is licensed under the ISC license.
|
|
510
517
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -513,7 +520,7 @@ const mergeClasses = (...classes) => classes.filter((className, index, array) =>
|
|
|
513
520
|
const toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
514
521
|
|
|
515
522
|
/**
|
|
516
|
-
* @license lucide-react v0.
|
|
523
|
+
* @license lucide-react v0.575.0 - ISC
|
|
517
524
|
*
|
|
518
525
|
* This source code is licensed under the ISC license.
|
|
519
526
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -525,7 +532,7 @@ const toCamelCase = (string) => string.replace(
|
|
|
525
532
|
);
|
|
526
533
|
|
|
527
534
|
/**
|
|
528
|
-
* @license lucide-react v0.
|
|
535
|
+
* @license lucide-react v0.575.0 - ISC
|
|
529
536
|
*
|
|
530
537
|
* This source code is licensed under the ISC license.
|
|
531
538
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -538,7 +545,7 @@ const toPascalCase = (string) => {
|
|
|
538
545
|
};
|
|
539
546
|
|
|
540
547
|
/**
|
|
541
|
-
* @license lucide-react v0.
|
|
548
|
+
* @license lucide-react v0.575.0 - ISC
|
|
542
549
|
*
|
|
543
550
|
* This source code is licensed under the ISC license.
|
|
544
551
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -557,7 +564,7 @@ var defaultAttributes = {
|
|
|
557
564
|
};
|
|
558
565
|
|
|
559
566
|
/**
|
|
560
|
-
* @license lucide-react v0.
|
|
567
|
+
* @license lucide-react v0.575.0 - ISC
|
|
561
568
|
*
|
|
562
569
|
* This source code is licensed under the ISC license.
|
|
563
570
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -573,7 +580,7 @@ const hasA11yProp = (props) => {
|
|
|
573
580
|
};
|
|
574
581
|
|
|
575
582
|
/**
|
|
576
|
-
* @license lucide-react v0.
|
|
583
|
+
* @license lucide-react v0.575.0 - ISC
|
|
577
584
|
*
|
|
578
585
|
* This source code is licensed under the ISC license.
|
|
579
586
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -611,7 +618,7 @@ const Icon = forwardRef(
|
|
|
611
618
|
);
|
|
612
619
|
|
|
613
620
|
/**
|
|
614
|
-
* @license lucide-react v0.
|
|
621
|
+
* @license lucide-react v0.575.0 - ISC
|
|
615
622
|
*
|
|
616
623
|
* This source code is licensed under the ISC license.
|
|
617
624
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -636,42 +643,42 @@ const createLucideIcon = (iconName, iconNode) => {
|
|
|
636
643
|
};
|
|
637
644
|
|
|
638
645
|
/**
|
|
639
|
-
* @license lucide-react v0.
|
|
646
|
+
* @license lucide-react v0.575.0 - ISC
|
|
640
647
|
*
|
|
641
648
|
* This source code is licensed under the ISC license.
|
|
642
649
|
* See the LICENSE file in the root directory of this source tree.
|
|
643
650
|
*/
|
|
644
651
|
|
|
645
652
|
|
|
646
|
-
const __iconNode$
|
|
653
|
+
const __iconNode$i = [
|
|
647
654
|
["path", { d: "M12 5v14", key: "s699le" }],
|
|
648
655
|
["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
|
|
649
656
|
];
|
|
650
|
-
const ArrowDown = createLucideIcon("arrow-down", __iconNode$
|
|
657
|
+
const ArrowDown = createLucideIcon("arrow-down", __iconNode$i);
|
|
651
658
|
|
|
652
659
|
/**
|
|
653
|
-
* @license lucide-react v0.
|
|
660
|
+
* @license lucide-react v0.575.0 - ISC
|
|
654
661
|
*
|
|
655
662
|
* This source code is licensed under the ISC license.
|
|
656
663
|
* See the LICENSE file in the root directory of this source tree.
|
|
657
664
|
*/
|
|
658
665
|
|
|
659
666
|
|
|
660
|
-
const __iconNode$
|
|
667
|
+
const __iconNode$h = [
|
|
661
668
|
["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
|
|
662
669
|
["path", { d: "M12 19V5", key: "x0mq9r" }]
|
|
663
670
|
];
|
|
664
|
-
const ArrowUp = createLucideIcon("arrow-up", __iconNode$
|
|
671
|
+
const ArrowUp = createLucideIcon("arrow-up", __iconNode$h);
|
|
665
672
|
|
|
666
673
|
/**
|
|
667
|
-
* @license lucide-react v0.
|
|
674
|
+
* @license lucide-react v0.575.0 - ISC
|
|
668
675
|
*
|
|
669
676
|
* This source code is licensed under the ISC license.
|
|
670
677
|
* See the LICENSE file in the root directory of this source tree.
|
|
671
678
|
*/
|
|
672
679
|
|
|
673
680
|
|
|
674
|
-
const __iconNode$
|
|
681
|
+
const __iconNode$g = [
|
|
675
682
|
["path", { d: "M8 2v4", key: "1cmpym" }],
|
|
676
683
|
["path", { d: "M16 2v4", key: "4m81vk" }],
|
|
677
684
|
["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
|
|
@@ -683,127 +690,142 @@ const __iconNode$f = [
|
|
|
683
690
|
["path", { d: "M12 18h.01", key: "mhygvu" }],
|
|
684
691
|
["path", { d: "M16 18h.01", key: "kzsmim" }]
|
|
685
692
|
];
|
|
686
|
-
const CalendarDays = createLucideIcon("calendar-days", __iconNode$
|
|
693
|
+
const CalendarDays = createLucideIcon("calendar-days", __iconNode$g);
|
|
687
694
|
|
|
688
695
|
/**
|
|
689
|
-
* @license lucide-react v0.
|
|
696
|
+
* @license lucide-react v0.575.0 - ISC
|
|
690
697
|
*
|
|
691
698
|
* This source code is licensed under the ISC license.
|
|
692
699
|
* See the LICENSE file in the root directory of this source tree.
|
|
693
700
|
*/
|
|
694
701
|
|
|
695
702
|
|
|
696
|
-
const __iconNode$
|
|
697
|
-
const ChevronDown = createLucideIcon("chevron-down", __iconNode$
|
|
703
|
+
const __iconNode$f = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
|
|
704
|
+
const ChevronDown = createLucideIcon("chevron-down", __iconNode$f);
|
|
698
705
|
|
|
699
706
|
/**
|
|
700
|
-
* @license lucide-react v0.
|
|
707
|
+
* @license lucide-react v0.575.0 - ISC
|
|
701
708
|
*
|
|
702
709
|
* This source code is licensed under the ISC license.
|
|
703
710
|
* See the LICENSE file in the root directory of this source tree.
|
|
704
711
|
*/
|
|
705
712
|
|
|
706
713
|
|
|
707
|
-
const __iconNode$
|
|
708
|
-
const ChevronLeft = createLucideIcon("chevron-left", __iconNode$
|
|
714
|
+
const __iconNode$e = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
|
|
715
|
+
const ChevronLeft = createLucideIcon("chevron-left", __iconNode$e);
|
|
709
716
|
|
|
710
717
|
/**
|
|
711
|
-
* @license lucide-react v0.
|
|
718
|
+
* @license lucide-react v0.575.0 - ISC
|
|
712
719
|
*
|
|
713
720
|
* This source code is licensed under the ISC license.
|
|
714
721
|
* See the LICENSE file in the root directory of this source tree.
|
|
715
722
|
*/
|
|
716
723
|
|
|
717
724
|
|
|
718
|
-
const __iconNode$
|
|
719
|
-
const ChevronRight = createLucideIcon("chevron-right", __iconNode$
|
|
725
|
+
const __iconNode$d = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
|
|
726
|
+
const ChevronRight = createLucideIcon("chevron-right", __iconNode$d);
|
|
720
727
|
|
|
721
728
|
/**
|
|
722
|
-
* @license lucide-react v0.
|
|
729
|
+
* @license lucide-react v0.575.0 - ISC
|
|
723
730
|
*
|
|
724
731
|
* This source code is licensed under the ISC license.
|
|
725
732
|
* See the LICENSE file in the root directory of this source tree.
|
|
726
733
|
*/
|
|
727
734
|
|
|
728
735
|
|
|
729
|
-
const __iconNode$
|
|
730
|
-
const ChevronUp = createLucideIcon("chevron-up", __iconNode$
|
|
736
|
+
const __iconNode$c = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
|
|
737
|
+
const ChevronUp = createLucideIcon("chevron-up", __iconNode$c);
|
|
731
738
|
|
|
732
739
|
/**
|
|
733
|
-
* @license lucide-react v0.
|
|
740
|
+
* @license lucide-react v0.575.0 - ISC
|
|
734
741
|
*
|
|
735
742
|
* This source code is licensed under the ISC license.
|
|
736
743
|
* See the LICENSE file in the root directory of this source tree.
|
|
737
744
|
*/
|
|
738
745
|
|
|
739
746
|
|
|
740
|
-
const __iconNode$
|
|
747
|
+
const __iconNode$b = [
|
|
741
748
|
["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
|
|
742
749
|
["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
|
|
743
750
|
];
|
|
744
|
-
const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$
|
|
751
|
+
const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$b);
|
|
745
752
|
|
|
746
753
|
/**
|
|
747
|
-
* @license lucide-react v0.
|
|
754
|
+
* @license lucide-react v0.575.0 - ISC
|
|
748
755
|
*
|
|
749
756
|
* This source code is licensed under the ISC license.
|
|
750
757
|
* See the LICENSE file in the root directory of this source tree.
|
|
751
758
|
*/
|
|
752
759
|
|
|
753
760
|
|
|
754
|
-
const __iconNode$
|
|
761
|
+
const __iconNode$a = [
|
|
755
762
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
756
763
|
["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
|
|
757
764
|
["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
|
|
758
765
|
];
|
|
759
|
-
const CircleAlert = createLucideIcon("circle-alert", __iconNode$
|
|
766
|
+
const CircleAlert = createLucideIcon("circle-alert", __iconNode$a);
|
|
760
767
|
|
|
761
768
|
/**
|
|
762
|
-
* @license lucide-react v0.
|
|
769
|
+
* @license lucide-react v0.575.0 - ISC
|
|
763
770
|
*
|
|
764
771
|
* This source code is licensed under the ISC license.
|
|
765
772
|
* See the LICENSE file in the root directory of this source tree.
|
|
766
773
|
*/
|
|
767
774
|
|
|
768
775
|
|
|
769
|
-
const __iconNode$
|
|
776
|
+
const __iconNode$9 = [
|
|
770
777
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
771
778
|
["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
|
|
772
779
|
];
|
|
773
|
-
const CircleCheck = createLucideIcon("circle-check", __iconNode$
|
|
780
|
+
const CircleCheck = createLucideIcon("circle-check", __iconNode$9);
|
|
774
781
|
|
|
775
782
|
/**
|
|
776
|
-
* @license lucide-react v0.
|
|
783
|
+
* @license lucide-react v0.575.0 - ISC
|
|
777
784
|
*
|
|
778
785
|
* This source code is licensed under the ISC license.
|
|
779
786
|
* See the LICENSE file in the root directory of this source tree.
|
|
780
787
|
*/
|
|
781
788
|
|
|
782
789
|
|
|
783
|
-
const __iconNode$
|
|
790
|
+
const __iconNode$8 = [
|
|
784
791
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
785
792
|
["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
|
|
786
793
|
["path", { d: "M12 17h.01", key: "p32p05" }]
|
|
787
794
|
];
|
|
788
|
-
const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$
|
|
795
|
+
const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$8);
|
|
789
796
|
|
|
790
797
|
/**
|
|
791
|
-
* @license lucide-react v0.
|
|
798
|
+
* @license lucide-react v0.575.0 - ISC
|
|
792
799
|
*
|
|
793
800
|
* This source code is licensed under the ISC license.
|
|
794
801
|
* See the LICENSE file in the root directory of this source tree.
|
|
795
802
|
*/
|
|
796
803
|
|
|
797
804
|
|
|
798
|
-
const __iconNode$
|
|
805
|
+
const __iconNode$7 = [
|
|
799
806
|
["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
|
|
800
807
|
["path", { d: "M9 3v18", key: "fh3hqa" }],
|
|
801
808
|
["path", { d: "M15 3v18", key: "14nvp0" }]
|
|
802
809
|
];
|
|
803
|
-
const Columns3 = createLucideIcon("columns-3", __iconNode$
|
|
810
|
+
const Columns3 = createLucideIcon("columns-3", __iconNode$7);
|
|
804
811
|
|
|
805
812
|
/**
|
|
806
|
-
* @license lucide-react v0.
|
|
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
|
|
807
829
|
*
|
|
808
830
|
* This source code is licensed under the ISC license.
|
|
809
831
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -818,7 +840,7 @@ const __iconNode$5 = [
|
|
|
818
840
|
const ListFilter = createLucideIcon("list-filter", __iconNode$5);
|
|
819
841
|
|
|
820
842
|
/**
|
|
821
|
-
* @license lucide-react v0.
|
|
843
|
+
* @license lucide-react v0.575.0 - ISC
|
|
822
844
|
*
|
|
823
845
|
* This source code is licensed under the ISC license.
|
|
824
846
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -832,7 +854,7 @@ const __iconNode$4 = [
|
|
|
832
854
|
const Plus = createLucideIcon("plus", __iconNode$4);
|
|
833
855
|
|
|
834
856
|
/**
|
|
835
|
-
* @license lucide-react v0.
|
|
857
|
+
* @license lucide-react v0.575.0 - ISC
|
|
836
858
|
*
|
|
837
859
|
* This source code is licensed under the ISC license.
|
|
838
860
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -846,7 +868,7 @@ const __iconNode$3 = [
|
|
|
846
868
|
const Search = createLucideIcon("search", __iconNode$3);
|
|
847
869
|
|
|
848
870
|
/**
|
|
849
|
-
* @license lucide-react v0.
|
|
871
|
+
* @license lucide-react v0.575.0 - ISC
|
|
850
872
|
*
|
|
851
873
|
* This source code is licensed under the ISC license.
|
|
852
874
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -863,7 +885,7 @@ const __iconNode$2 = [
|
|
|
863
885
|
const Trash2 = createLucideIcon("trash-2", __iconNode$2);
|
|
864
886
|
|
|
865
887
|
/**
|
|
866
|
-
* @license lucide-react v0.
|
|
888
|
+
* @license lucide-react v0.575.0 - ISC
|
|
867
889
|
*
|
|
868
890
|
* This source code is licensed under the ISC license.
|
|
869
891
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -882,7 +904,7 @@ const __iconNode$1 = [
|
|
|
882
904
|
const WifiOff = createLucideIcon("wifi-off", __iconNode$1);
|
|
883
905
|
|
|
884
906
|
/**
|
|
885
|
-
* @license lucide-react v0.
|
|
907
|
+
* @license lucide-react v0.575.0 - ISC
|
|
886
908
|
*
|
|
887
909
|
* This source code is licensed under the ISC license.
|
|
888
910
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -972,7 +994,7 @@ const LinkText = styled('span')(({ variant = 'light' }) => {
|
|
|
972
994
|
return colors.grey['800'];
|
|
973
995
|
};
|
|
974
996
|
return {
|
|
975
|
-
fontWeight:
|
|
997
|
+
fontWeight: typography.fontWeight.semiBold,
|
|
976
998
|
color: getLinkColor(),
|
|
977
999
|
cursor: 'pointer',
|
|
978
1000
|
'&:hover': {
|
|
@@ -1116,7 +1138,7 @@ const StyledButtonBase$1 = styled(ButtonBase, {
|
|
|
1116
1138
|
height: sizeStyles.height,
|
|
1117
1139
|
padding: sizeStyles.padding,
|
|
1118
1140
|
fontSize: sizeStyles.fontSize,
|
|
1119
|
-
fontWeight:
|
|
1141
|
+
fontWeight: typography.fontWeight.medium,
|
|
1120
1142
|
lineHeight: '1.25rem',
|
|
1121
1143
|
borderRadius: borderRadius.button,
|
|
1122
1144
|
textTransform: 'none',
|
|
@@ -1371,7 +1393,6 @@ const StyledButtonGroup = styled(MuiButtonGroup)(({ theme, size = 'medium' }) =>
|
|
|
1371
1393
|
*
|
|
1372
1394
|
* Figma Props Mapping:
|
|
1373
1395
|
* - Size (Sm|Md) → size prop (small|medium)
|
|
1374
|
-
* - Icon=False → Icon support not included in this implementation
|
|
1375
1396
|
* - Active button state → Controlled externally via button props or classes
|
|
1376
1397
|
*
|
|
1377
1398
|
* Usage:
|
|
@@ -1407,7 +1428,7 @@ const IndeterminateIcon = ({ size = 'medium' }) => (jsxs(SvgIcon, { viewBox: "0
|
|
|
1407
1428
|
const CheckboxContainer = styled('label')(({ disabled }) => ({
|
|
1408
1429
|
display: 'inline-flex',
|
|
1409
1430
|
alignItems: 'flex-start',
|
|
1410
|
-
gap:
|
|
1431
|
+
gap: spacing.spacing_1,
|
|
1411
1432
|
cursor: disabled ? 'not-allowed' : 'pointer',
|
|
1412
1433
|
userSelect: 'none',
|
|
1413
1434
|
}));
|
|
@@ -1416,7 +1437,7 @@ const LabelContainer$4 = styled('div')(({ size = 'medium' }) => ({
|
|
|
1416
1437
|
flexDirection: 'column',
|
|
1417
1438
|
gap: size === 'medium' ? 2 : 0,
|
|
1418
1439
|
}));
|
|
1419
|
-
const Label$
|
|
1440
|
+
const Label$4 = styled('span')(({ theme, size = 'medium' }) => ({
|
|
1420
1441
|
fontSize: theme.typography.pxToRem(size === 'xs'
|
|
1421
1442
|
? typography.fontSize.xs
|
|
1422
1443
|
: size === 'small'
|
|
@@ -1436,6 +1457,8 @@ const HelperText$2 = styled('span')(({ theme, size = 'medium' }) => ({
|
|
|
1436
1457
|
lineHeight: size === 'xs' ? 1.5 : size === 'small' ? 1.4 : 1.5,
|
|
1437
1458
|
color: semanticColors.typography.bodySecondary,
|
|
1438
1459
|
}));
|
|
1460
|
+
// Figma-exact border radius for xs checkbox — no matching design token
|
|
1461
|
+
const FIGMA_XS_BORDER_RADIUS = 1;
|
|
1439
1462
|
const StyledCheckbox = styled(Checkbox, {
|
|
1440
1463
|
shouldForwardProp: prop => prop !== 'size',
|
|
1441
1464
|
})(({ size = 'medium' }) => {
|
|
@@ -1443,7 +1466,7 @@ const StyledCheckbox = styled(Checkbox, {
|
|
|
1443
1466
|
const sizeConfig = {
|
|
1444
1467
|
xs: {
|
|
1445
1468
|
size: 12,
|
|
1446
|
-
borderRadius:
|
|
1469
|
+
borderRadius: FIGMA_XS_BORDER_RADIUS,
|
|
1447
1470
|
},
|
|
1448
1471
|
small: {
|
|
1449
1472
|
size: 16,
|
|
@@ -1564,7 +1587,7 @@ const NeoCheckbox = ({ size = 'medium', label, helperText, disabled, icon, check
|
|
|
1564
1587
|
return (jsx(StyledCheckbox, { size: size, disabled: disabled, icon: defaultIcon, checkedIcon: defaultCheckedIcon, indeterminateIcon: defaultIndeterminateIcon, className: combinedClassName, ...props }));
|
|
1565
1588
|
}
|
|
1566
1589
|
// With label, wrap in container for proper layout
|
|
1567
|
-
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$
|
|
1590
|
+
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 })] })] }));
|
|
1568
1591
|
};
|
|
1569
1592
|
NeoCheckbox.displayName = 'NeoCheckbox';
|
|
1570
1593
|
|
|
@@ -1591,6 +1614,11 @@ const StyledButtonBase = styled(ButtonBase, {
|
|
|
1591
1614
|
paddingMultiline: theme.spacing(3), // 24px all sides
|
|
1592
1615
|
fontSize: theme.typography.pxToRem(typography.fontSize.sm), // 14px
|
|
1593
1616
|
},
|
|
1617
|
+
inline: {
|
|
1618
|
+
height: 'auto',
|
|
1619
|
+
paddingSingleLine: `0 ${theme.spacing(0.5)}`, // 4px horizontal
|
|
1620
|
+
fontSize: theme.typography.pxToRem(typography.fontSize.xs), // 12px
|
|
1621
|
+
},
|
|
1594
1622
|
};
|
|
1595
1623
|
const sizeStyles = sizeConfig[size];
|
|
1596
1624
|
// Base styles shared by all variants
|
|
@@ -1605,13 +1633,15 @@ const StyledButtonBase = styled(ButtonBase, {
|
|
|
1605
1633
|
width: isMultiline ? '100%' : 'fit-content',
|
|
1606
1634
|
maxWidth: isMultiline ? '100%' : 'none',
|
|
1607
1635
|
overflowX: isMultiline ? 'auto' : 'visible',
|
|
1608
|
-
padding: isMultiline
|
|
1636
|
+
padding: isMultiline && 'paddingMultiline' in sizeStyles
|
|
1637
|
+
? sizeStyles.paddingMultiline
|
|
1638
|
+
: sizeStyles.paddingSingleLine,
|
|
1609
1639
|
paddingRight: isMultiline ? theme.spacing(7) : undefined, // Extra space for copy button in multiline only
|
|
1610
1640
|
fontSize: sizeStyles.fontSize,
|
|
1611
1641
|
fontFamily: typography.fontFamily.code,
|
|
1612
1642
|
fontWeight: typography.fontWeight.regular,
|
|
1613
|
-
lineHeight: isMultiline ? 1.5 : size === 'xs' ? 1.2 : 'normal',
|
|
1614
|
-
borderRadius:
|
|
1643
|
+
lineHeight: isMultiline ? 1.5 : size === 'xs' || size === 'inline' ? 1.2 : 'normal',
|
|
1644
|
+
borderRadius: borderRadius.xS,
|
|
1615
1645
|
textAlign: 'left',
|
|
1616
1646
|
textTransform: 'none',
|
|
1617
1647
|
gap: isMultiline ? undefined : theme.spacing(1.25), // 10px gap only for single-line
|
|
@@ -1661,12 +1691,13 @@ const IconWrapper$2 = styled('span')(({ theme, isMultiline }) => ({
|
|
|
1661
1691
|
*
|
|
1662
1692
|
* Figma Props Mapping:
|
|
1663
1693
|
* - Color (Light|Dark) → variant (outlined|filled)
|
|
1664
|
-
* - size (Single line|multiline) → auto-detected
|
|
1694
|
+
* - size (Single line|multiline|inline) → size prop + auto-detected multiline
|
|
1665
1695
|
* - Copy button → endIcon (ReactNode)
|
|
1666
1696
|
* - Text content → children prop
|
|
1667
1697
|
*/
|
|
1668
1698
|
const NeoCodeSnippet = ({ variant = 'outlined', size = 'small', endIcon, children, ...props }) => {
|
|
1669
|
-
|
|
1699
|
+
// Inline snippets are never multiline — they sit within a line of text
|
|
1700
|
+
const isMultiline = size !== 'inline' && String(children).includes('\n');
|
|
1670
1701
|
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 })] }));
|
|
1671
1702
|
};
|
|
1672
1703
|
NeoCodeSnippet.displayName = 'NeoCodeSnippet';
|
|
@@ -1714,7 +1745,7 @@ const StyledSearchField = styled(TextField)(({ theme }) => ({
|
|
|
1714
1745
|
borderColor: semanticColors.buttons.primary.default,
|
|
1715
1746
|
},
|
|
1716
1747
|
},
|
|
1717
|
-
|
|
1748
|
+
[`& .${inputAdornmentClasses.root}`]: {
|
|
1718
1749
|
color: semanticColors.icons.placeholder,
|
|
1719
1750
|
'& svg': {
|
|
1720
1751
|
width: 20,
|
|
@@ -1728,12 +1759,14 @@ const ColumnItemContainer = styled(Box)(({ theme }) => ({
|
|
|
1728
1759
|
paddingLeft: theme.spacing(0.75),
|
|
1729
1760
|
paddingRight: theme.spacing(0.75),
|
|
1730
1761
|
}));
|
|
1762
|
+
// Figma-exact border radius for menu items — no matching design token
|
|
1763
|
+
const MENU_ITEM_BORDER_RADIUS = 6;
|
|
1731
1764
|
const MenuItemContent$1 = styled('div')(({ theme }) => ({
|
|
1732
1765
|
display: 'flex',
|
|
1733
1766
|
alignItems: 'center',
|
|
1734
1767
|
gap: theme.spacing(1),
|
|
1735
1768
|
padding: theme.spacing(1),
|
|
1736
|
-
borderRadius:
|
|
1769
|
+
borderRadius: MENU_ITEM_BORDER_RADIUS,
|
|
1737
1770
|
width: '100%',
|
|
1738
1771
|
'&:hover': {
|
|
1739
1772
|
backgroundColor: semanticColors.surfaces.listHover,
|
|
@@ -1762,7 +1795,7 @@ const FooterRow = styled(Box)(({ theme }) => ({
|
|
|
1762
1795
|
}));
|
|
1763
1796
|
const ResetButton = styled(Button)(({ theme }) => ({
|
|
1764
1797
|
fontSize: theme.typography.pxToRem(16),
|
|
1765
|
-
fontWeight:
|
|
1798
|
+
fontWeight: typography.fontWeight.regular,
|
|
1766
1799
|
color: semanticColors.buttons.primary.default,
|
|
1767
1800
|
textTransform: 'none',
|
|
1768
1801
|
padding: theme.spacing(1),
|
|
@@ -1874,10 +1907,10 @@ const LabelContainer$3 = styled('div')({
|
|
|
1874
1907
|
flex: 1,
|
|
1875
1908
|
display: 'flex',
|
|
1876
1909
|
alignItems: 'center',
|
|
1877
|
-
gap:
|
|
1910
|
+
gap: spacing.spacing_1,
|
|
1878
1911
|
minWidth: 0,
|
|
1879
1912
|
});
|
|
1880
|
-
const Label$
|
|
1913
|
+
const Label$3 = styled('span')({
|
|
1881
1914
|
color: semanticColors.icons.default,
|
|
1882
1915
|
flexShrink: 0,
|
|
1883
1916
|
});
|
|
@@ -1893,7 +1926,7 @@ const Shortcut = styled('span')(({ theme }) => ({
|
|
|
1893
1926
|
marginLeft: 'auto',
|
|
1894
1927
|
flexShrink: 0,
|
|
1895
1928
|
border: `1px solid ${semanticColors.border.secondary}`,
|
|
1896
|
-
borderRadius:
|
|
1929
|
+
borderRadius: borderRadius.xS,
|
|
1897
1930
|
padding: `${theme.spacing(0.25)} ${theme.spacing(0.75)}`,
|
|
1898
1931
|
backgroundColor: semanticColors.surfaces.white,
|
|
1899
1932
|
}));
|
|
@@ -1903,9 +1936,11 @@ const Shortcut = styled('span')(({ theme }) => ({
|
|
|
1903
1936
|
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4159-8649
|
|
1904
1937
|
*
|
|
1905
1938
|
* Figma Props Mapping:
|
|
1939
|
+
* - Figma "Dropdown - Menu" component uses Type (Avatar|Button|Icon) and Open (True|False)
|
|
1940
|
+
* to control the menu trigger. NeoMenuItem is the individual item inside the menu.
|
|
1906
1941
|
* - Text label → children prop (mapped via figma.children)
|
|
1907
|
-
* -
|
|
1908
|
-
* -
|
|
1942
|
+
* - selected → selected prop (React-controlled)
|
|
1943
|
+
* - disabled → disabled prop (React-controlled)
|
|
1909
1944
|
* - Hover state → CSS :hover (not mapped)
|
|
1910
1945
|
* - Icon slot → icon prop (not mappable - ReactNode)
|
|
1911
1946
|
* - Secondary text → secondaryText prop (not mappable - ReactNode/string)
|
|
@@ -1927,7 +1962,7 @@ const Shortcut = styled('span')(({ theme }) => ({
|
|
|
1927
1962
|
* ```
|
|
1928
1963
|
*/
|
|
1929
1964
|
const NeoMenuItem = ({ icon, shortcut, secondaryText, children, ...props }) => {
|
|
1930
|
-
return (jsx(StyledMenuItem, { ...props, children: jsxs(MenuItemContent, { children: [icon && jsx(IconWrapper$1, { children: icon }), jsxs(LabelContainer$3, { children: [jsx(Label$
|
|
1965
|
+
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 })] }) }));
|
|
1931
1966
|
};
|
|
1932
1967
|
NeoMenuItem.displayName = 'NeoMenuItem';
|
|
1933
1968
|
|
|
@@ -1996,7 +2031,7 @@ const NeoSelect = (props) => {
|
|
|
1996
2031
|
backgroundColor: semanticColors.surfaces.white,
|
|
1997
2032
|
borderRadius: `${borderRadius.s}px`,
|
|
1998
2033
|
border: `1px solid ${semanticColors.border.primary}`,
|
|
1999
|
-
boxShadow:
|
|
2034
|
+
boxShadow: `${shadows.dropdown.x}px ${shadows.dropdown.y}px ${shadows.dropdown.blur}px ${shadows.dropdown.spread}px ${shadows.dropdown.shadow}`,
|
|
2000
2035
|
marginTop: 1,
|
|
2001
2036
|
...props.MenuProps?.PaperProps?.sx,
|
|
2002
2037
|
},
|
|
@@ -2160,14 +2195,14 @@ const StyledGridFilterPanel = styled(GridFilterPanel)({
|
|
|
2160
2195
|
height: 32, // NeoButton small size
|
|
2161
2196
|
padding: `0 ${spacing.spacing_1}px`, // NeoButton link variant padding
|
|
2162
2197
|
fontSize: typography.fontSize.sm,
|
|
2163
|
-
fontWeight:
|
|
2198
|
+
fontWeight: typography.fontWeight.medium,
|
|
2164
2199
|
lineHeight: 1.5,
|
|
2165
2200
|
textTransform: 'none',
|
|
2166
2201
|
minHeight: 'auto',
|
|
2167
2202
|
backgroundColor: 'transparent',
|
|
2168
2203
|
color: semanticColors.buttons.tertiary.default,
|
|
2169
2204
|
border: 'none',
|
|
2170
|
-
|
|
2205
|
+
[`& .${buttonClasses.startIcon}`]: {
|
|
2171
2206
|
display: 'none', // Hide the trash icon
|
|
2172
2207
|
},
|
|
2173
2208
|
'&:hover': {
|
|
@@ -2276,7 +2311,7 @@ const getDataGridHeaderStyles = () => {
|
|
|
2276
2311
|
// Style the checkbox in header to match Neo design (16x16 from Figma)
|
|
2277
2312
|
[`& .${gridClasses.columnHeaderCheckbox}`]: {
|
|
2278
2313
|
padding: 0,
|
|
2279
|
-
|
|
2314
|
+
[`& .${checkboxClasses.root}`]: {
|
|
2280
2315
|
padding: 0,
|
|
2281
2316
|
width: 16,
|
|
2282
2317
|
height: 16,
|
|
@@ -2381,7 +2416,7 @@ function NeoDataGrid({ autoHeight = false, toolbar, slots, sx, density = 'standa
|
|
|
2381
2416
|
// Fix for MUI X 8.15.0+ scroll shadow issue - backgroundColor must be on main, not root
|
|
2382
2417
|
// See: https://github.com/mui/mui-x/issues/20107
|
|
2383
2418
|
// This must be set to prevent scroll shadow artifacts
|
|
2384
|
-
|
|
2419
|
+
[`& .${gridClasses$1.main}`]: {
|
|
2385
2420
|
backgroundColor: semanticColors.surfaces.white,
|
|
2386
2421
|
},
|
|
2387
2422
|
// White background for empty/loading overlays
|
|
@@ -2392,9 +2427,9 @@ function NeoDataGrid({ autoHeight = false, toolbar, slots, sx, density = 'standa
|
|
|
2392
2427
|
border: `1px solid ${semanticColors.border.primary}`,
|
|
2393
2428
|
// Style row selection checkboxes to match header (16px, proper spacing)
|
|
2394
2429
|
[`& .${gridClasses$1.cellCheckbox}`]: {
|
|
2395
|
-
|
|
2430
|
+
[`& .${checkboxClasses.root}`]: {
|
|
2396
2431
|
padding: `${spacing.spacing_1}px`,
|
|
2397
|
-
|
|
2432
|
+
[`& .${svgIconClasses.root}`]: {
|
|
2398
2433
|
width: 16,
|
|
2399
2434
|
height: 16,
|
|
2400
2435
|
},
|
|
@@ -2443,111 +2478,85 @@ function NeoDataGridColumnsButton() {
|
|
|
2443
2478
|
}
|
|
2444
2479
|
NeoDataGridColumnsButton.displayName = 'NeoDataGridColumnsButton';
|
|
2445
2480
|
|
|
2446
|
-
const
|
|
2447
|
-
|
|
2448
|
-
borderRadius: borderRadius.full,
|
|
2449
|
-
fontSize: theme.typography.pxToRem(typography.fontSize.xs),
|
|
2450
|
-
fontWeight: typography.fontWeight.medium,
|
|
2451
|
-
// Size variants
|
|
2452
|
-
...(size === 'small' && {
|
|
2481
|
+
const sizeStyles = {
|
|
2482
|
+
small: {
|
|
2453
2483
|
height: 16,
|
|
2454
2484
|
paddingLeft: spacing.spacing_1_2, // 4px
|
|
2455
2485
|
paddingRight: spacing.spacing_1_2, // 4px
|
|
2456
|
-
}
|
|
2457
|
-
|
|
2486
|
+
},
|
|
2487
|
+
medium: {
|
|
2458
2488
|
height: 18,
|
|
2459
2489
|
paddingLeft: spacing.spacing_3_4, // 6px
|
|
2460
2490
|
paddingRight: spacing.spacing_3_4, // 6px
|
|
2461
|
-
}
|
|
2462
|
-
|
|
2491
|
+
},
|
|
2492
|
+
large: {
|
|
2463
2493
|
height: 20,
|
|
2464
2494
|
paddingLeft: spacing.spacing_3_4, // 6px
|
|
2465
2495
|
paddingRight: spacing.spacing_3_4, // 6px
|
|
2466
|
-
}),
|
|
2467
|
-
[`& .${chipClasses.label}`]: {
|
|
2468
|
-
padding: 0,
|
|
2469
2496
|
},
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2497
|
+
};
|
|
2498
|
+
const outlinedColorStyles = {
|
|
2499
|
+
default: {
|
|
2473
2500
|
backgroundColor: semanticColors.status.neutral.light,
|
|
2474
2501
|
color: semanticColors.status.neutral.dark,
|
|
2475
|
-
borderColor: colors.grey[200],
|
|
2476
|
-
}
|
|
2477
|
-
|
|
2478
|
-
...(variant === 'outlined' &&
|
|
2479
|
-
color === 'error' && {
|
|
2502
|
+
borderColor: colors.grey[200],
|
|
2503
|
+
},
|
|
2504
|
+
error: {
|
|
2480
2505
|
backgroundColor: semanticColors.status.error.light,
|
|
2481
2506
|
color: semanticColors.status.error.dark,
|
|
2482
|
-
borderColor: colors.red[100],
|
|
2483
|
-
}
|
|
2484
|
-
|
|
2485
|
-
...(variant === 'outlined' &&
|
|
2486
|
-
color === 'warning' && {
|
|
2507
|
+
borderColor: colors.red[100],
|
|
2508
|
+
},
|
|
2509
|
+
warning: {
|
|
2487
2510
|
backgroundColor: semanticColors.status.warning.light,
|
|
2488
2511
|
color: semanticColors.status.warning.dark,
|
|
2489
|
-
borderColor: colors.orange[100],
|
|
2490
|
-
}
|
|
2491
|
-
|
|
2492
|
-
...(variant === 'outlined' &&
|
|
2493
|
-
color === 'success' && {
|
|
2512
|
+
borderColor: colors.orange[100],
|
|
2513
|
+
},
|
|
2514
|
+
success: {
|
|
2494
2515
|
backgroundColor: semanticColors.status.success.light,
|
|
2495
2516
|
color: semanticColors.status.success.dark,
|
|
2496
|
-
borderColor: 'rgba(94, 196, 111, 0.24)',
|
|
2497
|
-
}
|
|
2498
|
-
|
|
2499
|
-
...(variant === 'outlined' &&
|
|
2500
|
-
color === 'info' && {
|
|
2517
|
+
borderColor: 'rgba(94, 196, 111, 0.24)',
|
|
2518
|
+
},
|
|
2519
|
+
info: {
|
|
2501
2520
|
backgroundColor: semanticColors.status.info.light,
|
|
2502
2521
|
color: semanticColors.status.info.dark,
|
|
2503
|
-
borderColor: colors.digitalBlue[100],
|
|
2504
|
-
}
|
|
2505
|
-
|
|
2506
|
-
...(variant === 'outlined' &&
|
|
2507
|
-
color === 'violet' && {
|
|
2522
|
+
borderColor: colors.digitalBlue[100],
|
|
2523
|
+
},
|
|
2524
|
+
violet: {
|
|
2508
2525
|
backgroundColor: `${colors.violet[100]}66`, // rgba(235,213,241,0.4)
|
|
2509
2526
|
color: colors.violet[600],
|
|
2510
|
-
borderColor: colors.violet[100],
|
|
2511
|
-
}
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
color
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
color
|
|
2538
|
-
|
|
2539
|
-
}),
|
|
2540
|
-
// Filled variant - Info
|
|
2541
|
-
...(variant === 'filled' &&
|
|
2542
|
-
color === 'info' && {
|
|
2543
|
-
backgroundColor: semanticColors.status.info.medium,
|
|
2544
|
-
color: theme.palette.common.white,
|
|
2545
|
-
border: 'none',
|
|
2546
|
-
}),
|
|
2547
|
-
// Filled variant - Violet
|
|
2527
|
+
borderColor: colors.violet[100],
|
|
2528
|
+
},
|
|
2529
|
+
beta: {
|
|
2530
|
+
backgroundColor: colors.digitalBlue[100],
|
|
2531
|
+
color: colors.digitalBlue[400],
|
|
2532
|
+
borderColor: colors.digitalBlue[100],
|
|
2533
|
+
},
|
|
2534
|
+
};
|
|
2535
|
+
const filledColorStyles = {
|
|
2536
|
+
default: semanticColors.status.neutral.medium,
|
|
2537
|
+
error: semanticColors.status.error.medium,
|
|
2538
|
+
warning: semanticColors.status.warning.medium,
|
|
2539
|
+
success: semanticColors.status.success.medium,
|
|
2540
|
+
info: semanticColors.status.info.medium,
|
|
2541
|
+
violet: colors.violet[500],
|
|
2542
|
+
beta: colors.digitalBlue[300],
|
|
2543
|
+
};
|
|
2544
|
+
const StyledChip$1 = styled(Chip)(({ theme, size, variant, color }) => ({
|
|
2545
|
+
padding: 0,
|
|
2546
|
+
borderRadius: borderRadius.full,
|
|
2547
|
+
fontSize: theme.typography.pxToRem(typography.fontSize.xs),
|
|
2548
|
+
fontWeight: typography.fontWeight.medium,
|
|
2549
|
+
...(size && sizeStyles[size]),
|
|
2550
|
+
[`& .${chipClasses.label}`]: {
|
|
2551
|
+
padding: 0,
|
|
2552
|
+
},
|
|
2553
|
+
...(variant === 'outlined' &&
|
|
2554
|
+
color &&
|
|
2555
|
+
outlinedColorStyles[color]),
|
|
2548
2556
|
...(variant === 'filled' &&
|
|
2549
|
-
color
|
|
2550
|
-
|
|
2557
|
+
color &&
|
|
2558
|
+
color in filledColorStyles && {
|
|
2559
|
+
backgroundColor: filledColorStyles[color],
|
|
2551
2560
|
color: theme.palette.common.white,
|
|
2552
2561
|
border: 'none',
|
|
2553
2562
|
}),
|
|
@@ -2560,11 +2569,11 @@ const StyledChip = styled(Chip)(({ theme, size, variant, color }) => ({
|
|
|
2560
2569
|
* Figma Props Mapping:
|
|
2561
2570
|
* - m (sm|md|lg) → size (small|medium|large)
|
|
2562
2571
|
* - type (light|dark) → variant (outlined|filled)
|
|
2563
|
-
* - state (Neutral|Error|Warning|Success|Info|Violet) → color (default|error|warning|success|info|violet)
|
|
2572
|
+
* - state (Neutral|Error|Warning|Success|Info|Violet|Beta) → color (default|error|warning|success|info|violet|beta)
|
|
2564
2573
|
* - Label text → label prop
|
|
2565
2574
|
*/
|
|
2566
2575
|
const NeoTag = ({ size = 'small', variant = 'outlined', ...props }) => {
|
|
2567
|
-
return jsx(StyledChip, { size: size, variant: variant, ...props });
|
|
2576
|
+
return jsx(StyledChip$1, { size: size, variant: variant, ...props });
|
|
2568
2577
|
};
|
|
2569
2578
|
NeoTag.displayName = 'NeoTag';
|
|
2570
2579
|
|
|
@@ -3331,7 +3340,7 @@ const shortcutChipStyles = {
|
|
|
3331
3340
|
paddingY: `${spacing.spacing_1}px`,
|
|
3332
3341
|
justifyContent: 'flex-start',
|
|
3333
3342
|
width: '100%',
|
|
3334
|
-
|
|
3343
|
+
[`& .${chipClasses.label}`]: {
|
|
3335
3344
|
padding: 0,
|
|
3336
3345
|
},
|
|
3337
3346
|
'&:hover': {
|
|
@@ -3525,6 +3534,102 @@ const NeoDot = ({ size = 'medium', variant = 'solid', color = 'neutral', ...prop
|
|
|
3525
3534
|
};
|
|
3526
3535
|
NeoDot.displayName = 'NeoDot';
|
|
3527
3536
|
|
|
3537
|
+
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}`;
|
|
3538
|
+
const filterChipOnlyProps = ['selected', 'expanded', 'selectedLabel', 'count', 'onClear'];
|
|
3539
|
+
const StyledChip = styled(Chip, {
|
|
3540
|
+
shouldForwardProp: prop => !filterChipOnlyProps.includes(prop),
|
|
3541
|
+
})(({ theme, selected }) => ({
|
|
3542
|
+
borderRadius: borderRadius.full,
|
|
3543
|
+
border: `1px solid ${semanticColors.buttons.secondary.defaultBorder}`,
|
|
3544
|
+
backgroundColor: selected
|
|
3545
|
+
? semanticColors.buttons.secondary.pressedBackground
|
|
3546
|
+
: semanticColors.surfaces.white,
|
|
3547
|
+
minHeight: 40,
|
|
3548
|
+
padding: `${spacing.spacing_3_4}px ${spacing.spacing_1_1_2}px`,
|
|
3549
|
+
gap: spacing.spacing_1,
|
|
3550
|
+
fontSize: theme.typography.pxToRem(typography.fontSize.sm),
|
|
3551
|
+
fontWeight: typography.fontWeight.medium,
|
|
3552
|
+
lineHeight: 1,
|
|
3553
|
+
color: semanticColors.typography.body,
|
|
3554
|
+
[`& .${chipClasses.label}`]: {
|
|
3555
|
+
padding: 0,
|
|
3556
|
+
overflow: 'visible',
|
|
3557
|
+
display: 'flex',
|
|
3558
|
+
alignItems: 'center',
|
|
3559
|
+
},
|
|
3560
|
+
[`& .${chipClasses.deleteIcon}`]: {
|
|
3561
|
+
color: semanticColors.icons.default,
|
|
3562
|
+
width: 24,
|
|
3563
|
+
height: 24,
|
|
3564
|
+
margin: 0,
|
|
3565
|
+
flexShrink: 0,
|
|
3566
|
+
'&:hover': {
|
|
3567
|
+
color: semanticColors.icons.default,
|
|
3568
|
+
},
|
|
3569
|
+
},
|
|
3570
|
+
'&:hover': {
|
|
3571
|
+
backgroundColor: semanticColors.buttons.secondary.hoverBackground,
|
|
3572
|
+
},
|
|
3573
|
+
[`&.${chipClasses.focusVisible}`]: {
|
|
3574
|
+
boxShadow: focusRing,
|
|
3575
|
+
backgroundColor: selected
|
|
3576
|
+
? semanticColors.buttons.secondary.pressedBackground
|
|
3577
|
+
: semanticColors.surfaces.white,
|
|
3578
|
+
},
|
|
3579
|
+
}));
|
|
3580
|
+
const LabelContent = styled('span')({
|
|
3581
|
+
display: 'inline-flex',
|
|
3582
|
+
alignItems: 'center',
|
|
3583
|
+
gap: spacing.spacing_1,
|
|
3584
|
+
});
|
|
3585
|
+
const TextStack = styled('span')({
|
|
3586
|
+
display: 'flex',
|
|
3587
|
+
flexDirection: 'column',
|
|
3588
|
+
alignItems: 'flex-start',
|
|
3589
|
+
justifyContent: 'center',
|
|
3590
|
+
gap: spacing.spacing_1_4,
|
|
3591
|
+
});
|
|
3592
|
+
const HeaderLabel = styled('span')(({ theme }) => ({
|
|
3593
|
+
fontSize: theme.typography.pxToRem(typography.fontSize.xxs),
|
|
3594
|
+
fontWeight: typography.fontWeight.regular,
|
|
3595
|
+
lineHeight: '120%',
|
|
3596
|
+
color: semanticColors.typography.bodySecondary,
|
|
3597
|
+
}));
|
|
3598
|
+
const SelectedLabel = styled('span')(({ theme }) => ({
|
|
3599
|
+
fontSize: theme.typography.pxToRem(typography.fontSize.sm),
|
|
3600
|
+
fontWeight: typography.fontWeight.medium,
|
|
3601
|
+
lineHeight: 1,
|
|
3602
|
+
color: semanticColors.buttons.secondary.default,
|
|
3603
|
+
}));
|
|
3604
|
+
const CountBadge = styled('span')(({ theme }) => ({
|
|
3605
|
+
display: 'inline-flex',
|
|
3606
|
+
alignItems: 'center',
|
|
3607
|
+
justifyContent: 'center',
|
|
3608
|
+
minWidth: 16,
|
|
3609
|
+
height: 16,
|
|
3610
|
+
padding: `0 ${spacing.spacing_1_2}px`,
|
|
3611
|
+
borderRadius: borderRadius.full,
|
|
3612
|
+
backgroundColor: semanticColors.brand,
|
|
3613
|
+
color: semanticColors.surfaces.white,
|
|
3614
|
+
fontSize: theme.typography.pxToRem(typography.fontSize.xs),
|
|
3615
|
+
fontWeight: typography.fontWeight.medium,
|
|
3616
|
+
lineHeight: 1,
|
|
3617
|
+
boxSizing: 'border-box',
|
|
3618
|
+
}));
|
|
3619
|
+
/**
|
|
3620
|
+
* NeoFilterChip - Filter chip for filtering data, based on MUI Chip.
|
|
3621
|
+
*
|
|
3622
|
+
* @example
|
|
3623
|
+
* <NeoFilterChip label="Status" selected selectedLabel="Active, Pending" count={2} onClear={handleClear} />
|
|
3624
|
+
*
|
|
3625
|
+
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC?node-id=8257-239
|
|
3626
|
+
*/
|
|
3627
|
+
const NeoFilterChip = ({ label, selected = false, expanded, selectedLabel, count = 0, onClear, onClick, ...props }) => {
|
|
3628
|
+
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);
|
|
3629
|
+
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 }));
|
|
3630
|
+
};
|
|
3631
|
+
NeoFilterChip.displayName = 'NeoFilterChip';
|
|
3632
|
+
|
|
3528
3633
|
const SpinnerWrapper = styled('div')({
|
|
3529
3634
|
width: 24,
|
|
3530
3635
|
height: 24,
|
|
@@ -3765,6 +3870,31 @@ const NeoFooter = ({ variant = 'pagination', showShadow = false, loading = false
|
|
|
3765
3870
|
};
|
|
3766
3871
|
NeoFooter.displayName = 'NeoFooter';
|
|
3767
3872
|
|
|
3873
|
+
const customProps$1 = ['iconSize'];
|
|
3874
|
+
const StyledIconWrapper = styled('div', {
|
|
3875
|
+
shouldForwardProp: prop => !customProps$1.includes(prop),
|
|
3876
|
+
})(({ iconSize }) => ({
|
|
3877
|
+
display: 'inline-flex',
|
|
3878
|
+
alignItems: 'center',
|
|
3879
|
+
justifyContent: 'center',
|
|
3880
|
+
width: iconSize,
|
|
3881
|
+
height: iconSize,
|
|
3882
|
+
flexShrink: 0,
|
|
3883
|
+
'& svg': {
|
|
3884
|
+
width: iconSize,
|
|
3885
|
+
height: iconSize,
|
|
3886
|
+
},
|
|
3887
|
+
}));
|
|
3888
|
+
/**
|
|
3889
|
+
* NeoIconWrapper - Flex-centered container that sizes icons
|
|
3890
|
+
*
|
|
3891
|
+
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4061-9955
|
|
3892
|
+
*/
|
|
3893
|
+
const NeoIconWrapper = ({ size = 20, children, ...props }) => {
|
|
3894
|
+
return (jsx(StyledIconWrapper, { iconSize: size, ...props, children: children }));
|
|
3895
|
+
};
|
|
3896
|
+
NeoIconWrapper.displayName = 'NeoIconWrapper';
|
|
3897
|
+
|
|
3768
3898
|
/**
|
|
3769
3899
|
* NeoInfiniteScrollGrid - DataGrid with infinite scroll and load-more functionality
|
|
3770
3900
|
*
|
|
@@ -3889,7 +4019,7 @@ const StyledInputLabel = styled(InputLabel, {
|
|
|
3889
4019
|
position: 'static',
|
|
3890
4020
|
transform: 'none',
|
|
3891
4021
|
fontSize: theme.typography.pxToRem(typography.fontSize.sm),
|
|
3892
|
-
fontWeight:
|
|
4022
|
+
fontWeight: typography.fontWeight.medium,
|
|
3893
4023
|
color: semanticColors.typography.input.label,
|
|
3894
4024
|
display: 'flex',
|
|
3895
4025
|
alignItems: 'center',
|
|
@@ -3969,7 +4099,7 @@ const StyledInputBase = styled(InputBase, {
|
|
|
3969
4099
|
borderColor: semanticColors.status.error.medium,
|
|
3970
4100
|
},
|
|
3971
4101
|
// Adornment styling
|
|
3972
|
-
|
|
4102
|
+
[`& .${inputAdornmentClasses.root}`]: {
|
|
3973
4103
|
color: destructive ? semanticColors.status.error.medium : semanticColors.icons.placeholder,
|
|
3974
4104
|
},
|
|
3975
4105
|
};
|
|
@@ -4274,7 +4404,7 @@ const StyledListItemButton = styled(ListItemButton)(({ theme }) => ({
|
|
|
4274
4404
|
display: 'flex',
|
|
4275
4405
|
alignItems: 'center',
|
|
4276
4406
|
gap: spacing.spacing_2,
|
|
4277
|
-
borderRadius:
|
|
4407
|
+
borderRadius: borderRadius.m,
|
|
4278
4408
|
paddingTop: spacing.spacing_1,
|
|
4279
4409
|
paddingBottom: spacing.spacing_1,
|
|
4280
4410
|
paddingLeft: spacing.spacing_3_4,
|
|
@@ -4316,6 +4446,22 @@ const StyledListItemButton = styled(ListItemButton)(({ theme }) => ({
|
|
|
4316
4446
|
color: semanticColors.typography.button.disabled,
|
|
4317
4447
|
},
|
|
4318
4448
|
},
|
|
4449
|
+
// Focus state
|
|
4450
|
+
[`&.${listItemButtonClasses.focusVisible}`]: {
|
|
4451
|
+
outline: `2px solid ${semanticColors.border.tabActive}`,
|
|
4452
|
+
outlineOffset: 2,
|
|
4453
|
+
border: `2px solid ${semanticColors.border.tabActive}`,
|
|
4454
|
+
backgroundColor: theme.palette.common.white,
|
|
4455
|
+
[`& .${listItemIconClasses.root}`]: {
|
|
4456
|
+
color: semanticColors.icons.default,
|
|
4457
|
+
},
|
|
4458
|
+
[`& .${listItemTextClasses.primary}`]: {
|
|
4459
|
+
color: colors.grey[800],
|
|
4460
|
+
},
|
|
4461
|
+
[`& .${listItemTextClasses.secondary}`]: {
|
|
4462
|
+
color: semanticColors.typography.bodySecondary,
|
|
4463
|
+
},
|
|
4464
|
+
},
|
|
4319
4465
|
// Disabled state
|
|
4320
4466
|
[`&.${listItemButtonClasses.disabled}`]: {
|
|
4321
4467
|
backgroundColor: colors.grey[50],
|
|
@@ -4335,7 +4481,7 @@ const StyledListItemButton = styled(ListItemButton)(({ theme }) => ({
|
|
|
4335
4481
|
* NeoListItemButton - Selectable list item with icon and text
|
|
4336
4482
|
*
|
|
4337
4483
|
* A selectable list item component that displays an optional icon with primary
|
|
4338
|
-
* and secondary text. Supports active (selected), deselected, and disabled states.
|
|
4484
|
+
* and secondary text. Supports active (selected), deselected, focus, and disabled states.
|
|
4339
4485
|
*
|
|
4340
4486
|
* Uses MUI's ListItemButton as base for proper accessibility and interaction.
|
|
4341
4487
|
* Compose with ListItemIcon and ListItemText for proper structure.
|
|
@@ -4356,9 +4502,10 @@ const StyledListItemButton = styled(ListItemButton)(({ theme }) => ({
|
|
|
4356
4502
|
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4925-3764
|
|
4357
4503
|
*
|
|
4358
4504
|
* Figma Props Mapping:
|
|
4359
|
-
* -
|
|
4360
|
-
* -
|
|
4361
|
-
* -
|
|
4505
|
+
* - state="active" → selected={true}
|
|
4506
|
+
* - state="deselected" → selected={false}
|
|
4507
|
+
* - state="focus" → focus-visible CSS state
|
|
4508
|
+
* - state="disabled" → disabled={true}
|
|
4362
4509
|
* - showIcon → Conditional rendering of ListItemIcon child
|
|
4363
4510
|
*
|
|
4364
4511
|
* Design Tokens Used:
|
|
@@ -4382,36 +4529,36 @@ NeoListItemButton.displayName = 'NeoListItemButton';
|
|
|
4382
4529
|
* Focus ring box-shadow using Neo design tokens
|
|
4383
4530
|
* Combines focusWhite1 (inner white ring) and focusBlue2 (outer blue ring)
|
|
4384
4531
|
*/
|
|
4385
|
-
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}`;
|
|
4532
|
+
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}`;
|
|
4386
4533
|
/**
|
|
4387
4534
|
* Card box-shadow using Neo design tokens for hover and selected states
|
|
4388
4535
|
*/
|
|
4389
|
-
const activeShadow = `${shadows.card.x}px ${shadows.card.y}px ${shadows.card.blur}px ${shadows.card.spread}px ${shadows.card.shadow}`;
|
|
4536
|
+
const activeShadow$1 = `${shadows.card.x}px ${shadows.card.y}px ${shadows.card.blur}px ${shadows.card.spread}px ${shadows.card.shadow}`;
|
|
4390
4537
|
/**
|
|
4391
4538
|
* Styled Card component with Neo design tokens
|
|
4392
4539
|
*/
|
|
4393
4540
|
const StyledCard = styled(MuiCard, {
|
|
4394
4541
|
shouldForwardProp: prop => prop !== 'selected' && prop !== 'disabled',
|
|
4395
4542
|
})(({ theme, selected, disabled }) => ({
|
|
4396
|
-
width:
|
|
4397
|
-
height:
|
|
4543
|
+
width: 160,
|
|
4544
|
+
height: 160,
|
|
4398
4545
|
padding: theme.spacing(1.5), // 12px
|
|
4399
4546
|
display: 'flex',
|
|
4400
4547
|
flexDirection: 'column',
|
|
4401
4548
|
gap: theme.spacing(2), // 16px
|
|
4402
4549
|
backgroundColor: semanticColors.surfaces.card,
|
|
4403
4550
|
border: `1px solid ${selected ? semanticColors.border.tabActive : semanticColors.border.card}`,
|
|
4404
|
-
borderRadius:
|
|
4405
|
-
boxShadow: selected ? activeShadow : 'none',
|
|
4551
|
+
borderRadius: borderRadius.xS,
|
|
4552
|
+
boxShadow: selected ? activeShadow$1 : 'none',
|
|
4406
4553
|
transition: theme.transitions.create(['border-color', 'background-color', 'box-shadow']),
|
|
4407
4554
|
cursor: 'pointer',
|
|
4408
4555
|
'&:hover': {
|
|
4409
4556
|
borderColor: semanticColors.border.tabActive,
|
|
4410
|
-
boxShadow: activeShadow,
|
|
4557
|
+
boxShadow: activeShadow$1,
|
|
4411
4558
|
},
|
|
4412
4559
|
'&:focus-visible': {
|
|
4413
4560
|
borderColor: semanticColors.border.tabActive,
|
|
4414
|
-
boxShadow: focusRingShadow,
|
|
4561
|
+
boxShadow: focusRingShadow$1,
|
|
4415
4562
|
outline: 'none',
|
|
4416
4563
|
},
|
|
4417
4564
|
...(disabled && {
|
|
@@ -4432,11 +4579,11 @@ const CardHeader = styled('div')({
|
|
|
4432
4579
|
/**
|
|
4433
4580
|
* Logo container
|
|
4434
4581
|
*/
|
|
4435
|
-
const LogoContainer = styled('div')(
|
|
4436
|
-
width:
|
|
4437
|
-
height:
|
|
4582
|
+
const LogoContainer = styled('div')({
|
|
4583
|
+
width: spacing.spacing_6,
|
|
4584
|
+
height: spacing.spacing_6,
|
|
4438
4585
|
flexShrink: 0,
|
|
4439
|
-
})
|
|
4586
|
+
});
|
|
4440
4587
|
/**
|
|
4441
4588
|
* Recipe count badge
|
|
4442
4589
|
*/
|
|
@@ -4471,7 +4618,7 @@ const Title = styled('p')(({ theme }) => ({
|
|
|
4471
4618
|
/**
|
|
4472
4619
|
* Description text
|
|
4473
4620
|
*/
|
|
4474
|
-
const Description = styled('p')(({ theme }) => ({
|
|
4621
|
+
const Description$1 = styled('p')(({ theme }) => ({
|
|
4475
4622
|
margin: 0,
|
|
4476
4623
|
fontSize: theme.typography.pxToRem(typography.fontSize.xs), // 12px
|
|
4477
4624
|
fontWeight: typography.fontWeight.regular, // 400
|
|
@@ -4526,10 +4673,131 @@ const Description = styled('p')(({ theme }) => ({
|
|
|
4526
4673
|
* - typography.fontWeight.regular (400) - Description
|
|
4527
4674
|
*/
|
|
4528
4675
|
const NeoMarketplaceCard = ({ logo, recipeCount, title, description, selected = false, disabled = false, onClick, ...props }) => {
|
|
4529
|
-
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 })] })] }));
|
|
4676
|
+
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 })] })] }));
|
|
4530
4677
|
};
|
|
4531
4678
|
NeoMarketplaceCard.displayName = 'NeoMarketplaceCard';
|
|
4532
4679
|
|
|
4680
|
+
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}`;
|
|
4681
|
+
const activeShadow = `${shadows.card.x}px ${shadows.card.y}px ${shadows.card.blur}px ${shadows.card.spread}px ${shadows.card.shadow}`;
|
|
4682
|
+
const StyledLargeCard = styled(MuiCard, {
|
|
4683
|
+
shouldForwardProp: prop => prop !== 'cardState' && prop !== 'cardTheme',
|
|
4684
|
+
})(({ cardState = 'default', cardTheme = 'light' }) => {
|
|
4685
|
+
const isLight = cardTheme === 'light';
|
|
4686
|
+
const isActive = cardState === 'active';
|
|
4687
|
+
const isDisabled = cardState === 'disabled';
|
|
4688
|
+
const isFocused = cardState === 'focused';
|
|
4689
|
+
const activeBorderColor = isLight ? semanticColors.border.tabActive : colors.digitalGreen[300];
|
|
4690
|
+
const defaultBorderColor = isLight
|
|
4691
|
+
? semanticColors.border.card
|
|
4692
|
+
: `${semanticColors.border.card}80`;
|
|
4693
|
+
return {
|
|
4694
|
+
width: 340,
|
|
4695
|
+
height: 162,
|
|
4696
|
+
display: 'flex',
|
|
4697
|
+
flexDirection: 'column',
|
|
4698
|
+
justifyContent: 'space-between',
|
|
4699
|
+
alignItems: 'flex-start',
|
|
4700
|
+
padding: spacing.spacing_2,
|
|
4701
|
+
borderRadius: borderRadius.xS,
|
|
4702
|
+
backgroundColor: isLight ? semanticColors.surfaces.card : colors.grey[800],
|
|
4703
|
+
border: `1px solid ${isActive || isFocused ? activeBorderColor : defaultBorderColor}`,
|
|
4704
|
+
boxShadow: isActive ? activeShadow : isFocused ? focusRingShadow : 'none',
|
|
4705
|
+
overflow: 'hidden',
|
|
4706
|
+
'&:focus-visible': {
|
|
4707
|
+
borderColor: isLight ? semanticColors.border.tabActive : colors.digitalGreen[300],
|
|
4708
|
+
boxShadow: focusRingShadow,
|
|
4709
|
+
outline: 'none',
|
|
4710
|
+
},
|
|
4711
|
+
...(isDisabled && {
|
|
4712
|
+
opacity: 0.5,
|
|
4713
|
+
pointerEvents: 'none',
|
|
4714
|
+
cursor: 'not-allowed',
|
|
4715
|
+
}),
|
|
4716
|
+
};
|
|
4717
|
+
});
|
|
4718
|
+
const TopSection = styled('div')({
|
|
4719
|
+
display: 'flex',
|
|
4720
|
+
flexDirection: 'column',
|
|
4721
|
+
gap: spacing.spacing_2,
|
|
4722
|
+
alignItems: 'flex-start',
|
|
4723
|
+
width: '100%',
|
|
4724
|
+
flexShrink: 0,
|
|
4725
|
+
});
|
|
4726
|
+
const HeaderRow = styled('div')({
|
|
4727
|
+
display: 'flex',
|
|
4728
|
+
gap: spacing.spacing_1,
|
|
4729
|
+
alignItems: 'center',
|
|
4730
|
+
flexShrink: 0,
|
|
4731
|
+
});
|
|
4732
|
+
const HeaderSlot = styled('div')({
|
|
4733
|
+
display: 'flex',
|
|
4734
|
+
flexDirection: 'column',
|
|
4735
|
+
alignItems: 'center',
|
|
4736
|
+
justifyContent: 'center',
|
|
4737
|
+
width: 20,
|
|
4738
|
+
height: 20,
|
|
4739
|
+
flexShrink: 0,
|
|
4740
|
+
});
|
|
4741
|
+
const HeaderTitle = styled('span', {
|
|
4742
|
+
shouldForwardProp: prop => prop !== 'cardTheme',
|
|
4743
|
+
})(({ cardTheme = 'light' }) => ({
|
|
4744
|
+
fontFamily: `${typography.fontFamily.heading}, sans-serif`,
|
|
4745
|
+
fontWeight: typography.fontWeight.semiBold,
|
|
4746
|
+
fontSize: typography.fontSize.h6,
|
|
4747
|
+
lineHeight: 1.4,
|
|
4748
|
+
color: cardTheme === 'light' ? colors.grey[800] : semanticColors.surfaces.white,
|
|
4749
|
+
flexShrink: 0,
|
|
4750
|
+
}));
|
|
4751
|
+
const Description = styled('p', {
|
|
4752
|
+
shouldForwardProp: prop => prop !== 'cardTheme',
|
|
4753
|
+
})(({ cardTheme = 'light' }) => ({
|
|
4754
|
+
fontFamily: `${typography.fontFamily.body}, sans-serif`,
|
|
4755
|
+
fontWeight: typography.fontWeight.regular,
|
|
4756
|
+
fontSize: typography.fontSize.xs,
|
|
4757
|
+
lineHeight: 1.5,
|
|
4758
|
+
color: cardTheme === 'light' ? colors.grey[800] : semanticColors.surfaces.white,
|
|
4759
|
+
margin: 0,
|
|
4760
|
+
minWidth: '100%',
|
|
4761
|
+
wordWrap: 'break-word',
|
|
4762
|
+
}));
|
|
4763
|
+
const ButtonsRow = styled('div')({
|
|
4764
|
+
display: 'flex',
|
|
4765
|
+
gap: spacing.spacing_3,
|
|
4766
|
+
alignItems: 'flex-start',
|
|
4767
|
+
flexShrink: 0,
|
|
4768
|
+
});
|
|
4769
|
+
/**
|
|
4770
|
+
* NeoMarketplaceLargeCard - A large marketplace card with state and theme variants
|
|
4771
|
+
*
|
|
4772
|
+
* A 340x162px card with optional icon, gel brand icon, title, description, and action buttons.
|
|
4773
|
+
* Icon, gel, and title display inline in a header row.
|
|
4774
|
+
* Supports 4 states (default, active, disabled, focused) and 2 themes (light, dark).
|
|
4775
|
+
*
|
|
4776
|
+
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC?node-id=5925-11
|
|
4777
|
+
*
|
|
4778
|
+
* Figma Props Mapping:
|
|
4779
|
+
* - Property 1 → state (default/active/disabled/focused)
|
|
4780
|
+
* - Property 2 → cardTheme (light/dark)
|
|
4781
|
+
* - Show Icon → showIcon
|
|
4782
|
+
* - Show gel → showGel
|
|
4783
|
+
* - show buttons → showButtons
|
|
4784
|
+
*
|
|
4785
|
+
* Design Tokens Used:
|
|
4786
|
+
* - semanticColors.surfaces.card (#ffffff) - Light theme background
|
|
4787
|
+
* - colors.grey[800] (#1f2937) - Dark theme background
|
|
4788
|
+
* - semanticColors.border.card (#d1d5db) - Default border (50% opacity on dark)
|
|
4789
|
+
* - semanticColors.border.tabActive (#2f42ff) - Active/focused border (light theme)
|
|
4790
|
+
* - colors.digitalGreen[300] (#88fe9b) - Active/focused border (dark theme)
|
|
4791
|
+
* - borderRadius.xS (4px) - Corner radius
|
|
4792
|
+
* - shadows.focusWhite1 + shadows.focusBlue2 - Focus ring
|
|
4793
|
+
* - shadows.card - Active state shadow
|
|
4794
|
+
*/
|
|
4795
|
+
const NeoMarketplaceLargeCard = ({ state = 'default', cardTheme = 'light', showIcon = true, showGel = true, showButtons = true, icon, gel, title, children, actions, onClick, ...props }) => {
|
|
4796
|
+
const isDisabled = state === 'disabled';
|
|
4797
|
+
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 })] }));
|
|
4798
|
+
};
|
|
4799
|
+
NeoMarketplaceLargeCard.displayName = 'NeoMarketplaceLargeCard';
|
|
4800
|
+
|
|
4533
4801
|
const StyledMenu = styled(Menu)(({ theme }) => ({
|
|
4534
4802
|
[`& .${paperClasses.root}`]: {
|
|
4535
4803
|
backgroundColor: semanticColors.surfaces.white,
|
|
@@ -4773,6 +5041,87 @@ const NeoModalFooter = ({ leadingContent, children }) => {
|
|
|
4773
5041
|
};
|
|
4774
5042
|
NeoModalFooter.displayName = 'NeoModalFooter';
|
|
4775
5043
|
|
|
5044
|
+
const customProps = ['selected'];
|
|
5045
|
+
const StyledRoot = styled(ButtonBase, {
|
|
5046
|
+
shouldForwardProp: prop => !customProps.includes(prop),
|
|
5047
|
+
})(({ selected }) => ({
|
|
5048
|
+
display: 'flex',
|
|
5049
|
+
flexDirection: 'column',
|
|
5050
|
+
gap: spacing.spacing_1_4, // 2px
|
|
5051
|
+
alignItems: 'center',
|
|
5052
|
+
justifyContent: 'center',
|
|
5053
|
+
paddingTop: spacing.spacing_1, // 8px
|
|
5054
|
+
paddingBottom: spacing.spacing_1, // 8px
|
|
5055
|
+
paddingLeft: spacing.spacing_1_2, // 4px
|
|
5056
|
+
paddingRight: spacing.spacing_1_2, // 4px
|
|
5057
|
+
borderRadius: borderRadius.xS, // 4px
|
|
5058
|
+
width: 95,
|
|
5059
|
+
cursor: 'pointer',
|
|
5060
|
+
textDecoration: 'none',
|
|
5061
|
+
'&:hover .neo-nav-icon-padding': {
|
|
5062
|
+
backgroundColor: semanticColors.buttons.secondary.hoverBackground, // #F2F3FF
|
|
5063
|
+
},
|
|
5064
|
+
'&:hover .neo-nav-label': {
|
|
5065
|
+
color: semanticColors.buttons.primary.hover, // #1E2EC2
|
|
5066
|
+
},
|
|
5067
|
+
...(selected && {
|
|
5068
|
+
'& .neo-nav-icon-padding': {
|
|
5069
|
+
backgroundColor: `${colors.digitalBlue[100]}BF`, // rgba(220,224,255,0.75)
|
|
5070
|
+
},
|
|
5071
|
+
'& .neo-nav-label': {
|
|
5072
|
+
color: semanticColors.buttons.primary.pressed, // #131E7A
|
|
5073
|
+
fontWeight: typography.fontWeight.semiBold,
|
|
5074
|
+
},
|
|
5075
|
+
'&:hover .neo-nav-icon-padding': {
|
|
5076
|
+
backgroundColor: `${colors.digitalBlue[100]}BF`,
|
|
5077
|
+
},
|
|
5078
|
+
'&:hover .neo-nav-label': {
|
|
5079
|
+
color: semanticColors.buttons.primary.pressed,
|
|
5080
|
+
},
|
|
5081
|
+
}),
|
|
5082
|
+
}));
|
|
5083
|
+
const IconPadding = styled('span')({
|
|
5084
|
+
display: 'flex',
|
|
5085
|
+
alignItems: 'center',
|
|
5086
|
+
padding: spacing.spacing_1, // 8px
|
|
5087
|
+
borderRadius: spacing.spacing_1, // 8px
|
|
5088
|
+
transition: 'background-color 150ms',
|
|
5089
|
+
});
|
|
5090
|
+
const Label$2 = styled('span')(({ theme }) => ({
|
|
5091
|
+
fontFamily: typography.fontFamily.body,
|
|
5092
|
+
fontWeight: typography.fontWeight.regular,
|
|
5093
|
+
fontSize: theme.typography.pxToRem(10),
|
|
5094
|
+
lineHeight: 1.2,
|
|
5095
|
+
textAlign: 'center',
|
|
5096
|
+
color: semanticColors.typography.navigation.default, // #1F2937
|
|
5097
|
+
width: '100%',
|
|
5098
|
+
transition: 'color 150ms',
|
|
5099
|
+
}));
|
|
5100
|
+
const TagPill = styled('span')(({ theme }) => ({
|
|
5101
|
+
display: 'inline-flex',
|
|
5102
|
+
alignItems: 'center',
|
|
5103
|
+
justifyContent: 'center',
|
|
5104
|
+
height: 18,
|
|
5105
|
+
paddingLeft: spacing.spacing_3_4, // 6px
|
|
5106
|
+
paddingRight: spacing.spacing_3_4, // 6px
|
|
5107
|
+
borderRadius: borderRadius.full,
|
|
5108
|
+
backgroundColor: colors.digitalBlue[300], // #8D99FF
|
|
5109
|
+
color: semanticColors.typography.tooltip, // white
|
|
5110
|
+
fontFamily: typography.fontFamily.body,
|
|
5111
|
+
fontWeight: typography.fontWeight.medium,
|
|
5112
|
+
fontSize: theme.typography.pxToRem(typography.fontSize.xs), // 12px
|
|
5113
|
+
lineHeight: 1,
|
|
5114
|
+
}));
|
|
5115
|
+
/**
|
|
5116
|
+
* NeoNavigationItem - Vertical navigation item with icon, label, and optional tag
|
|
5117
|
+
*
|
|
5118
|
+
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=8455-6120
|
|
5119
|
+
*/
|
|
5120
|
+
const NeoNavigationItem = ({ icon, label, selected = false, tag, children, ...props }) => {
|
|
5121
|
+
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] }));
|
|
5122
|
+
};
|
|
5123
|
+
NeoNavigationItem.displayName = 'NeoNavigationItem';
|
|
5124
|
+
|
|
4776
5125
|
/**
|
|
4777
5126
|
* Sticky header wrapper - sticks to top when scrolling
|
|
4778
5127
|
*/
|
|
@@ -5355,7 +5704,7 @@ NeoSkeleton.displayName = 'NeoSkeleton';
|
|
|
5355
5704
|
|
|
5356
5705
|
/**
|
|
5357
5706
|
* Styled Alert component with custom severity and variant styling
|
|
5358
|
-
* Uses Custom Variants Pattern to add 'neutral'
|
|
5707
|
+
* Uses Custom Variants Pattern to add 'neutral' and 'info' severities
|
|
5359
5708
|
*/
|
|
5360
5709
|
const StyledAlert$1 = styled(Alert, {
|
|
5361
5710
|
shouldForwardProp: prop => prop !== 'severity' && prop !== 'variant',
|
|
@@ -5374,6 +5723,10 @@ const StyledAlert$1 = styled(Alert, {
|
|
|
5374
5723
|
light: semanticColors.status.neutral.light,
|
|
5375
5724
|
medium: semanticColors.status.neutral.medium,
|
|
5376
5725
|
},
|
|
5726
|
+
info: {
|
|
5727
|
+
light: semanticColors.status.info.light,
|
|
5728
|
+
medium: semanticColors.status.info.medium,
|
|
5729
|
+
},
|
|
5377
5730
|
};
|
|
5378
5731
|
const severityColors = colorMap[severity];
|
|
5379
5732
|
// Variant-specific styles based on Phase 1.1 analysis
|
|
@@ -5433,19 +5786,20 @@ const StyledAlert$1 = styled(Alert, {
|
|
|
5433
5786
|
/**
|
|
5434
5787
|
* NeoStatusBanner - Status banner component for displaying system status messages
|
|
5435
5788
|
*
|
|
5436
|
-
* Displays status information with different severity levels (success, error, neutral) and
|
|
5789
|
+
* Displays status information with different severity levels (success, error, info, neutral) and
|
|
5437
5790
|
* visual modes (outlined for light backgrounds, filled for emphasis).
|
|
5438
5791
|
*
|
|
5439
5792
|
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4921-3427
|
|
5440
5793
|
*
|
|
5441
5794
|
* Figma Props Mapping:
|
|
5442
|
-
* - Status (Success|Error|Offline) → severity ('success'|'error'|'neutral')
|
|
5795
|
+
* - Status (Success|Error|Info|Offline) → severity ('success'|'error'|'info'|'neutral')
|
|
5443
5796
|
* - Mode (Light|Dark) → variant ('outlined'|'filled')
|
|
5444
5797
|
*
|
|
5445
5798
|
* Design Tokens Used:
|
|
5446
5799
|
* - status.success.light, status.success.medium
|
|
5447
5800
|
* - status.error.light, status.error.medium
|
|
5448
5801
|
* - status.neutral.light, status.neutral.medium
|
|
5802
|
+
* - status.info.light, status.info.medium
|
|
5449
5803
|
* - typography.tooltip, typography.bodySecondary
|
|
5450
5804
|
* - grey[800]
|
|
5451
5805
|
* - fontSize.default, fontSize.sm
|
|
@@ -5459,6 +5813,7 @@ const NeoStatusBanner = ({ severity = 'success', variant = 'outlined', icon, chi
|
|
|
5459
5813
|
success: jsx(CircleCheck, { size: 24 }),
|
|
5460
5814
|
error: jsx(CircleAlert, { size: 24 }),
|
|
5461
5815
|
neutral: jsx(WifiOff, { size: 24 }),
|
|
5816
|
+
info: jsx(Info, { size: 24 }),
|
|
5462
5817
|
};
|
|
5463
5818
|
const defaultIcon = iconMap[severity];
|
|
5464
5819
|
// Type assertion needed: severity and variant are custom props filtered by shouldForwardProp
|
|
@@ -5493,14 +5848,14 @@ const StyledTab = styled(MuiTab)(({ theme }) => ({
|
|
|
5493
5848
|
minHeight: spacing.spacing_5,
|
|
5494
5849
|
padding: `${theme.spacing(1)} ${theme.spacing(2)}`,
|
|
5495
5850
|
textTransform: 'none',
|
|
5496
|
-
fontWeight:
|
|
5851
|
+
fontWeight: typography.fontWeight.regular,
|
|
5497
5852
|
fontSize: theme.typography.pxToRem(14),
|
|
5498
5853
|
lineHeight: '1.5rem',
|
|
5499
5854
|
color: semanticColors.typography.tab.inactive,
|
|
5500
5855
|
transition: 'none', // Remove animation
|
|
5501
5856
|
[`&.${tabClasses.selected}`]: {
|
|
5502
5857
|
color: semanticColors.typography.tab.active,
|
|
5503
|
-
fontWeight:
|
|
5858
|
+
fontWeight: typography.fontWeight.semiBold,
|
|
5504
5859
|
},
|
|
5505
5860
|
[`&.${buttonBaseClasses.focusVisible}`]: {
|
|
5506
5861
|
outline: `2px solid ${semanticColors.buttons.primary.focus}`,
|
|
@@ -5619,7 +5974,7 @@ const ToastTitle = styled('p')(({ theme, variant = 'default' }) => {
|
|
|
5619
5974
|
return {
|
|
5620
5975
|
margin: 0,
|
|
5621
5976
|
fontSize: theme.typography.pxToRem(typography.fontSize.sm),
|
|
5622
|
-
fontWeight:
|
|
5977
|
+
fontWeight: typography.fontWeight.semiBold,
|
|
5623
5978
|
lineHeight: 1.4,
|
|
5624
5979
|
color: colorMap[variant],
|
|
5625
5980
|
};
|
|
@@ -5637,7 +5992,7 @@ const ToastMessage = styled('p')(({ theme, variant = 'default' }) => {
|
|
|
5637
5992
|
return {
|
|
5638
5993
|
margin: 0,
|
|
5639
5994
|
fontSize: theme.typography.pxToRem(typography.fontSize.sm),
|
|
5640
|
-
fontWeight:
|
|
5995
|
+
fontWeight: typography.fontWeight.regular,
|
|
5641
5996
|
lineHeight: 1.4,
|
|
5642
5997
|
color: colorMap[variant],
|
|
5643
5998
|
};
|
|
@@ -5677,7 +6032,7 @@ const ToastButton = styled(Button, {
|
|
|
5677
6032
|
padding: 0,
|
|
5678
6033
|
minWidth: 'auto',
|
|
5679
6034
|
fontSize: typography.fontSize.sm,
|
|
5680
|
-
fontWeight:
|
|
6035
|
+
fontWeight: typography.fontWeight.medium,
|
|
5681
6036
|
lineHeight: 'normal',
|
|
5682
6037
|
textTransform: 'none',
|
|
5683
6038
|
color: getColor(),
|
|
@@ -5694,14 +6049,14 @@ const ProgressSection = styled(Stack)({
|
|
|
5694
6049
|
const FileName = styled('p')(({ theme }) => ({
|
|
5695
6050
|
margin: 0,
|
|
5696
6051
|
fontSize: theme.typography.pxToRem(typography.fontSize.xs),
|
|
5697
|
-
fontWeight:
|
|
6052
|
+
fontWeight: typography.fontWeight.medium,
|
|
5698
6053
|
lineHeight: 1.5,
|
|
5699
6054
|
color: colors.grey['800'],
|
|
5700
6055
|
}));
|
|
5701
6056
|
const ProgressLabel = styled('p')(({ theme }) => ({
|
|
5702
6057
|
margin: 0,
|
|
5703
6058
|
fontSize: theme.typography.pxToRem(typography.fontSize.xs),
|
|
5704
|
-
fontWeight:
|
|
6059
|
+
fontWeight: typography.fontWeight.medium,
|
|
5705
6060
|
lineHeight: 1.5,
|
|
5706
6061
|
color: colors.grey['800'],
|
|
5707
6062
|
}));
|
|
@@ -5773,13 +6128,13 @@ const LabelContainer = styled('div')({
|
|
|
5773
6128
|
});
|
|
5774
6129
|
const Label = styled('span')(({ theme, size = 'medium' }) => ({
|
|
5775
6130
|
fontSize: theme.typography.pxToRem(size === 'small' ? typography.fontSize.sm : typography.fontSize.default),
|
|
5776
|
-
fontWeight:
|
|
6131
|
+
fontWeight: typography.fontWeight.medium,
|
|
5777
6132
|
lineHeight: size === 'small' ? 1.4 : 1.5,
|
|
5778
6133
|
color: semanticColors.typography.input.default,
|
|
5779
6134
|
}));
|
|
5780
6135
|
const HelperText = styled('span')(({ theme, size = 'medium' }) => ({
|
|
5781
6136
|
fontSize: theme.typography.pxToRem(size === 'small' ? typography.fontSize.sm : typography.fontSize.default),
|
|
5782
|
-
fontWeight:
|
|
6137
|
+
fontWeight: typography.fontWeight.regular,
|
|
5783
6138
|
lineHeight: size === 'small' ? 1.4 : 1.5,
|
|
5784
6139
|
color: semanticColors.typography.bodySecondary,
|
|
5785
6140
|
}));
|
|
@@ -6062,6 +6417,8 @@ const NeoTooltip = ({ variant = 'light', title, description, children, arrow = f
|
|
|
6062
6417
|
};
|
|
6063
6418
|
NeoTooltip.displayName = 'NeoTooltip';
|
|
6064
6419
|
|
|
6420
|
+
// Figma-exact border radius for toggle buttons — no matching design token
|
|
6421
|
+
const TOGGLE_BUTTON_BORDER_RADIUS = 14;
|
|
6065
6422
|
const StyledToggleButtonGroup = styled(ToggleButtonGroup)(({ theme }) => ({
|
|
6066
6423
|
backgroundColor: colors.grey[50],
|
|
6067
6424
|
padding: theme.spacing(0.625, 0.875),
|
|
@@ -6069,14 +6426,14 @@ const StyledToggleButtonGroup = styled(ToggleButtonGroup)(({ theme }) => ({
|
|
|
6069
6426
|
gap: 0,
|
|
6070
6427
|
[`& .${toggleButtonGroupClasses.grouped}`]: {
|
|
6071
6428
|
border: 'none',
|
|
6072
|
-
borderRadius:
|
|
6429
|
+
borderRadius: TOGGLE_BUTTON_BORDER_RADIUS,
|
|
6073
6430
|
margin: 0,
|
|
6074
6431
|
'&:not(:first-of-type)': {
|
|
6075
|
-
borderRadius:
|
|
6432
|
+
borderRadius: TOGGLE_BUTTON_BORDER_RADIUS,
|
|
6076
6433
|
marginLeft: 0,
|
|
6077
6434
|
},
|
|
6078
6435
|
'&:not(:last-of-type)': {
|
|
6079
|
-
borderRadius:
|
|
6436
|
+
borderRadius: TOGGLE_BUTTON_BORDER_RADIUS,
|
|
6080
6437
|
},
|
|
6081
6438
|
},
|
|
6082
6439
|
}));
|
|
@@ -6129,5 +6486,5 @@ NeoTypologyControl.displayName = 'NeoTypologyControl';
|
|
|
6129
6486
|
|
|
6130
6487
|
const version = '0.0.0-development';
|
|
6131
6488
|
|
|
6132
|
-
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 };
|
|
6489
|
+
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 };
|
|
6133
6490
|
//# sourceMappingURL=index.esm.js.map
|