@moderneinc/neo-styled-components 2.8.0 → 3.0.0-next.2d959a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Alert/Alert.d.ts +50 -0
- package/dist/Banner/Banner.d.ts +20 -22
- package/dist/Card/Card.d.ts +32 -0
- package/dist/Checkbox/Checkbox.d.ts +2 -2
- package/dist/CodeSnippet/CodeSnippet.d.ts +4 -4
- package/dist/DownloadToast/DownloadToast.d.ts +47 -0
- package/dist/MarketplaceCard/MarketplaceCard.d.ts +10 -72
- package/dist/MarketplaceLargeCard/MarketplaceLargeCard.d.ts +15 -83
- package/dist/NavigationItem/NavigationItem.d.ts +12 -8
- package/dist/Radio/Radio.d.ts +0 -1
- package/dist/Tabs/Tabs.d.ts +1 -4
- package/dist/Tag/Tag.d.ts +12 -7
- package/dist/Toast/Toast.d.ts +3 -12
- package/dist/index.d.ts +135 -158
- package/dist/index.esm.js +622 -639
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +620 -635
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/StatusBanner/StatusBanner.d.ts +0 -55
package/dist/index.js
CHANGED
|
@@ -8,14 +8,15 @@ var Avatar = require('@mui/material/Avatar');
|
|
|
8
8
|
var Chip = require('@mui/material/Chip');
|
|
9
9
|
var SvgIcon = require('@mui/material/SvgIcon');
|
|
10
10
|
var Alert = require('@mui/material/Alert');
|
|
11
|
-
var
|
|
11
|
+
var ButtonBase = require('@mui/material/ButtonBase');
|
|
12
12
|
var React = require('react');
|
|
13
|
+
var IconButton = require('@mui/material/IconButton');
|
|
13
14
|
var Breadcrumbs = require('@mui/material/Breadcrumbs');
|
|
14
15
|
var Link = require('@mui/material/Link');
|
|
15
|
-
var ButtonBase = require('@mui/material/ButtonBase');
|
|
16
16
|
var CircularProgress = require('@mui/material/CircularProgress');
|
|
17
17
|
var MuiToggleButton = require('@mui/material/ToggleButton');
|
|
18
18
|
var MuiToggleButtonGroup = require('@mui/material/ToggleButtonGroup');
|
|
19
|
+
var MuiCard = require('@mui/material/Card');
|
|
19
20
|
var Checkbox = require('@mui/material/Checkbox');
|
|
20
21
|
var xDataGridPro = require('@mui/x-data-grid-pro');
|
|
21
22
|
var Button = require('@mui/material/Button');
|
|
@@ -38,23 +39,22 @@ var PickersShortcuts = require('@mui/x-date-pickers/PickersShortcuts');
|
|
|
38
39
|
var DateRangePicker = require('@mui/x-date-pickers-pro/DateRangePicker');
|
|
39
40
|
var DateRangePickerDay = require('@mui/x-date-pickers-pro/DateRangePickerDay');
|
|
40
41
|
var Badge = require('@mui/material/Badge');
|
|
42
|
+
var LinearProgress = require('@mui/material/LinearProgress');
|
|
43
|
+
var Paper = require('@mui/material/Paper');
|
|
44
|
+
var Stack = require('@mui/material/Stack');
|
|
41
45
|
var List = require('@mui/material/List');
|
|
42
46
|
var Menu = require('@mui/material/Menu');
|
|
43
|
-
var Paper = require('@mui/material/Paper');
|
|
44
47
|
var FormControl = require('@mui/material/FormControl');
|
|
45
48
|
var FormHelperText = require('@mui/material/FormHelperText');
|
|
46
49
|
var ListItemButton = require('@mui/material/ListItemButton');
|
|
47
50
|
var ListItemIcon = require('@mui/material/ListItemIcon');
|
|
48
51
|
var ListItemText = require('@mui/material/ListItemText');
|
|
49
52
|
var Typography = require('@mui/material/Typography');
|
|
50
|
-
var MuiCard = require('@mui/material/Card');
|
|
51
53
|
var Dialog = require('@mui/material/Dialog');
|
|
52
54
|
var DialogActions = require('@mui/material/DialogActions');
|
|
53
55
|
var DialogContent = require('@mui/material/DialogContent');
|
|
54
56
|
var Fab = require('@mui/material/Fab');
|
|
55
57
|
var Fade = require('@mui/material/Fade');
|
|
56
|
-
var Stack = require('@mui/material/Stack');
|
|
57
|
-
var LinearProgress = require('@mui/material/LinearProgress');
|
|
58
58
|
var Radio = require('@mui/material/Radio');
|
|
59
59
|
var Skeleton = require('@mui/material/Skeleton');
|
|
60
60
|
var MuiTab = require('@mui/material/Tab');
|
|
@@ -138,7 +138,7 @@ const AvatarContainer = styles.styled(Box)(({ size = 'medium' }) => ({
|
|
|
138
138
|
alignItems: 'center',
|
|
139
139
|
justifyContent: 'center',
|
|
140
140
|
overflow: 'hidden',
|
|
141
|
-
boxShadow: `${neoDesign.shadows.
|
|
141
|
+
boxShadow: `${neoDesign.shadows.neutral.small.x}px ${neoDesign.shadows.neutral.small.y}px ${neoDesign.shadows.neutral.small.blur}px ${neoDesign.shadows.neutral.small.spread}px ${neoDesign.shadows.neutral.small.shadow}`,
|
|
142
142
|
}),
|
|
143
143
|
'&:focus-within': {
|
|
144
144
|
...focusRingStyles,
|
|
@@ -690,11 +690,11 @@ const createLucideIcon = (iconName, iconNode) => {
|
|
|
690
690
|
*/
|
|
691
691
|
|
|
692
692
|
|
|
693
|
-
const __iconNode$
|
|
693
|
+
const __iconNode$k = [
|
|
694
694
|
["path", { d: "M12 5v14", key: "s699le" }],
|
|
695
695
|
["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
|
|
696
696
|
];
|
|
697
|
-
const ArrowDown = createLucideIcon("arrow-down", __iconNode$
|
|
697
|
+
const ArrowDown = createLucideIcon("arrow-down", __iconNode$k);
|
|
698
698
|
|
|
699
699
|
/**
|
|
700
700
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -704,11 +704,32 @@ const ArrowDown = createLucideIcon("arrow-down", __iconNode$i);
|
|
|
704
704
|
*/
|
|
705
705
|
|
|
706
706
|
|
|
707
|
-
const __iconNode$
|
|
707
|
+
const __iconNode$j = [
|
|
708
708
|
["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
|
|
709
709
|
["path", { d: "M12 19V5", key: "x0mq9r" }]
|
|
710
710
|
];
|
|
711
|
-
const ArrowUp = createLucideIcon("arrow-up", __iconNode$
|
|
711
|
+
const ArrowUp = createLucideIcon("arrow-up", __iconNode$j);
|
|
712
|
+
|
|
713
|
+
/**
|
|
714
|
+
* @license lucide-react v0.577.0 - ISC
|
|
715
|
+
*
|
|
716
|
+
* This source code is licensed under the ISC license.
|
|
717
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
718
|
+
*/
|
|
719
|
+
|
|
720
|
+
|
|
721
|
+
const __iconNode$i = [
|
|
722
|
+
[
|
|
723
|
+
"path",
|
|
724
|
+
{
|
|
725
|
+
d: "M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",
|
|
726
|
+
key: "3c2336"
|
|
727
|
+
}
|
|
728
|
+
],
|
|
729
|
+
["line", { x1: "12", x2: "12", y1: "16", y2: "12", key: "1y1yb1" }],
|
|
730
|
+
["line", { x1: "12", x2: "12.01", y1: "8", y2: "8", key: "110wyk" }]
|
|
731
|
+
];
|
|
732
|
+
const BadgeInfo = createLucideIcon("badge-info", __iconNode$i);
|
|
712
733
|
|
|
713
734
|
/**
|
|
714
735
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -718,7 +739,7 @@ const ArrowUp = createLucideIcon("arrow-up", __iconNode$h);
|
|
|
718
739
|
*/
|
|
719
740
|
|
|
720
741
|
|
|
721
|
-
const __iconNode$
|
|
742
|
+
const __iconNode$h = [
|
|
722
743
|
["path", { d: "M8 2v4", key: "1cmpym" }],
|
|
723
744
|
["path", { d: "M16 2v4", key: "4m81vk" }],
|
|
724
745
|
["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
|
|
@@ -730,7 +751,7 @@ const __iconNode$g = [
|
|
|
730
751
|
["path", { d: "M12 18h.01", key: "mhygvu" }],
|
|
731
752
|
["path", { d: "M16 18h.01", key: "kzsmim" }]
|
|
732
753
|
];
|
|
733
|
-
const CalendarDays = createLucideIcon("calendar-days", __iconNode$
|
|
754
|
+
const CalendarDays = createLucideIcon("calendar-days", __iconNode$h);
|
|
734
755
|
|
|
735
756
|
/**
|
|
736
757
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -740,8 +761,8 @@ const CalendarDays = createLucideIcon("calendar-days", __iconNode$g);
|
|
|
740
761
|
*/
|
|
741
762
|
|
|
742
763
|
|
|
743
|
-
const __iconNode$
|
|
744
|
-
const ChevronDown = createLucideIcon("chevron-down", __iconNode$
|
|
764
|
+
const __iconNode$g = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
|
|
765
|
+
const ChevronDown = createLucideIcon("chevron-down", __iconNode$g);
|
|
745
766
|
|
|
746
767
|
/**
|
|
747
768
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -751,8 +772,8 @@ const ChevronDown = createLucideIcon("chevron-down", __iconNode$f);
|
|
|
751
772
|
*/
|
|
752
773
|
|
|
753
774
|
|
|
754
|
-
const __iconNode$
|
|
755
|
-
const ChevronLeft = createLucideIcon("chevron-left", __iconNode$
|
|
775
|
+
const __iconNode$f = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
|
|
776
|
+
const ChevronLeft = createLucideIcon("chevron-left", __iconNode$f);
|
|
756
777
|
|
|
757
778
|
/**
|
|
758
779
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -762,8 +783,8 @@ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$e);
|
|
|
762
783
|
*/
|
|
763
784
|
|
|
764
785
|
|
|
765
|
-
const __iconNode$
|
|
766
|
-
const ChevronRight = createLucideIcon("chevron-right", __iconNode$
|
|
786
|
+
const __iconNode$e = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
|
|
787
|
+
const ChevronRight = createLucideIcon("chevron-right", __iconNode$e);
|
|
767
788
|
|
|
768
789
|
/**
|
|
769
790
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -773,8 +794,8 @@ const ChevronRight = createLucideIcon("chevron-right", __iconNode$d);
|
|
|
773
794
|
*/
|
|
774
795
|
|
|
775
796
|
|
|
776
|
-
const __iconNode$
|
|
777
|
-
const ChevronUp = createLucideIcon("chevron-up", __iconNode$
|
|
797
|
+
const __iconNode$d = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
|
|
798
|
+
const ChevronUp = createLucideIcon("chevron-up", __iconNode$d);
|
|
778
799
|
|
|
779
800
|
/**
|
|
780
801
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -784,11 +805,11 @@ const ChevronUp = createLucideIcon("chevron-up", __iconNode$c);
|
|
|
784
805
|
*/
|
|
785
806
|
|
|
786
807
|
|
|
787
|
-
const __iconNode$
|
|
808
|
+
const __iconNode$c = [
|
|
788
809
|
["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
|
|
789
810
|
["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
|
|
790
811
|
];
|
|
791
|
-
const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$
|
|
812
|
+
const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$c);
|
|
792
813
|
|
|
793
814
|
/**
|
|
794
815
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -798,12 +819,12 @@ const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$b);
|
|
|
798
819
|
*/
|
|
799
820
|
|
|
800
821
|
|
|
801
|
-
const __iconNode$
|
|
822
|
+
const __iconNode$b = [
|
|
802
823
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
803
824
|
["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
|
|
804
825
|
["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
|
|
805
826
|
];
|
|
806
|
-
const CircleAlert = createLucideIcon("circle-alert", __iconNode$
|
|
827
|
+
const CircleAlert = createLucideIcon("circle-alert", __iconNode$b);
|
|
807
828
|
|
|
808
829
|
/**
|
|
809
830
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -813,11 +834,11 @@ const CircleAlert = createLucideIcon("circle-alert", __iconNode$a);
|
|
|
813
834
|
*/
|
|
814
835
|
|
|
815
836
|
|
|
816
|
-
const __iconNode$
|
|
817
|
-
["
|
|
818
|
-
["path", { d: "m9
|
|
837
|
+
const __iconNode$a = [
|
|
838
|
+
["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }],
|
|
839
|
+
["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }]
|
|
819
840
|
];
|
|
820
|
-
const
|
|
841
|
+
const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$a);
|
|
821
842
|
|
|
822
843
|
/**
|
|
823
844
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -827,12 +848,12 @@ const CircleCheck = createLucideIcon("circle-check", __iconNode$9);
|
|
|
827
848
|
*/
|
|
828
849
|
|
|
829
850
|
|
|
830
|
-
const __iconNode$
|
|
851
|
+
const __iconNode$9 = [
|
|
831
852
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
832
853
|
["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
|
|
833
854
|
["path", { d: "M12 17h.01", key: "p32p05" }]
|
|
834
855
|
];
|
|
835
|
-
const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$
|
|
856
|
+
const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$9);
|
|
836
857
|
|
|
837
858
|
/**
|
|
838
859
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -842,12 +863,12 @@ const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$8
|
|
|
842
863
|
*/
|
|
843
864
|
|
|
844
865
|
|
|
845
|
-
const __iconNode$
|
|
866
|
+
const __iconNode$8 = [
|
|
846
867
|
["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
|
|
847
868
|
["path", { d: "M9 3v18", key: "fh3hqa" }],
|
|
848
869
|
["path", { d: "M15 3v18", key: "14nvp0" }]
|
|
849
870
|
];
|
|
850
|
-
const Columns3 = createLucideIcon("columns-3", __iconNode$
|
|
871
|
+
const Columns3 = createLucideIcon("columns-3", __iconNode$8);
|
|
851
872
|
|
|
852
873
|
/**
|
|
853
874
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -857,12 +878,12 @@ const Columns3 = createLucideIcon("columns-3", __iconNode$7);
|
|
|
857
878
|
*/
|
|
858
879
|
|
|
859
880
|
|
|
860
|
-
const __iconNode$
|
|
861
|
-
["
|
|
862
|
-
["path", { d: "
|
|
863
|
-
["path", { d: "
|
|
881
|
+
const __iconNode$7 = [
|
|
882
|
+
["path", { d: "M2 5h20", key: "1fs1ex" }],
|
|
883
|
+
["path", { d: "M6 12h12", key: "8npq4p" }],
|
|
884
|
+
["path", { d: "M9 19h6", key: "456am0" }]
|
|
864
885
|
];
|
|
865
|
-
const
|
|
886
|
+
const ListFilter = createLucideIcon("list-filter", __iconNode$7);
|
|
866
887
|
|
|
867
888
|
/**
|
|
868
889
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -872,12 +893,8 @@ const Info = createLucideIcon("info", __iconNode$6);
|
|
|
872
893
|
*/
|
|
873
894
|
|
|
874
895
|
|
|
875
|
-
const __iconNode$
|
|
876
|
-
|
|
877
|
-
["path", { d: "M6 12h12", key: "8npq4p" }],
|
|
878
|
-
["path", { d: "M9 19h6", key: "456am0" }]
|
|
879
|
-
];
|
|
880
|
-
const ListFilter = createLucideIcon("list-filter", __iconNode$5);
|
|
896
|
+
const __iconNode$6 = [["path", { d: "M5 12h14", key: "1ays0h" }]];
|
|
897
|
+
const Minus = createLucideIcon("minus", __iconNode$6);
|
|
881
898
|
|
|
882
899
|
/**
|
|
883
900
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -887,11 +904,11 @@ const ListFilter = createLucideIcon("list-filter", __iconNode$5);
|
|
|
887
904
|
*/
|
|
888
905
|
|
|
889
906
|
|
|
890
|
-
const __iconNode$
|
|
907
|
+
const __iconNode$5 = [
|
|
891
908
|
["path", { d: "M5 12h14", key: "1ays0h" }],
|
|
892
909
|
["path", { d: "M12 5v14", key: "s699le" }]
|
|
893
910
|
];
|
|
894
|
-
const Plus = createLucideIcon("plus", __iconNode$
|
|
911
|
+
const Plus = createLucideIcon("plus", __iconNode$5);
|
|
895
912
|
|
|
896
913
|
/**
|
|
897
914
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -901,11 +918,11 @@ const Plus = createLucideIcon("plus", __iconNode$4);
|
|
|
901
918
|
*/
|
|
902
919
|
|
|
903
920
|
|
|
904
|
-
const __iconNode$
|
|
921
|
+
const __iconNode$4 = [
|
|
905
922
|
["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
|
|
906
923
|
["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
|
|
907
924
|
];
|
|
908
|
-
const Search = createLucideIcon("search", __iconNode$
|
|
925
|
+
const Search = createLucideIcon("search", __iconNode$4);
|
|
909
926
|
|
|
910
927
|
/**
|
|
911
928
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -915,14 +932,35 @@ const Search = createLucideIcon("search", __iconNode$3);
|
|
|
915
932
|
*/
|
|
916
933
|
|
|
917
934
|
|
|
918
|
-
const __iconNode$
|
|
935
|
+
const __iconNode$3 = [
|
|
919
936
|
["path", { d: "M10 11v6", key: "nco0om" }],
|
|
920
937
|
["path", { d: "M14 11v6", key: "outv1u" }],
|
|
921
938
|
["path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6", key: "miytrc" }],
|
|
922
939
|
["path", { d: "M3 6h18", key: "d0wm0j" }],
|
|
923
940
|
["path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2", key: "e791ji" }]
|
|
924
941
|
];
|
|
925
|
-
const Trash2 = createLucideIcon("trash-2", __iconNode$
|
|
942
|
+
const Trash2 = createLucideIcon("trash-2", __iconNode$3);
|
|
943
|
+
|
|
944
|
+
/**
|
|
945
|
+
* @license lucide-react v0.577.0 - ISC
|
|
946
|
+
*
|
|
947
|
+
* This source code is licensed under the ISC license.
|
|
948
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
949
|
+
*/
|
|
950
|
+
|
|
951
|
+
|
|
952
|
+
const __iconNode$2 = [
|
|
953
|
+
[
|
|
954
|
+
"path",
|
|
955
|
+
{
|
|
956
|
+
d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",
|
|
957
|
+
key: "wmoenq"
|
|
958
|
+
}
|
|
959
|
+
],
|
|
960
|
+
["path", { d: "M12 9v4", key: "juzpu7" }],
|
|
961
|
+
["path", { d: "M12 17h.01", key: "p32p05" }]
|
|
962
|
+
];
|
|
963
|
+
const TriangleAlert = createLucideIcon("triangle-alert", __iconNode$2);
|
|
926
964
|
|
|
927
965
|
/**
|
|
928
966
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -957,33 +995,113 @@ const __iconNode = [
|
|
|
957
995
|
];
|
|
958
996
|
const X = createLucideIcon("x", __iconNode);
|
|
959
997
|
|
|
998
|
+
const neutralSmallShadow = `${neoDesign.shadows.neutral.small.x}px ${neoDesign.shadows.neutral.small.y}px ${neoDesign.shadows.neutral.small.blur}px ${neoDesign.shadows.neutral.small.spread}px ${neoDesign.shadows.neutral.small.shadow}`;
|
|
999
|
+
const intentColors$1 = {
|
|
1000
|
+
success: neoDesign.semanticColors.status.success,
|
|
1001
|
+
error: neoDesign.semanticColors.status.error,
|
|
1002
|
+
warning: neoDesign.semanticColors.status.warning,
|
|
1003
|
+
offline: neoDesign.semanticColors.status.neutral,
|
|
1004
|
+
info: neoDesign.semanticColors.status.info,
|
|
1005
|
+
};
|
|
960
1006
|
// biome-ignore lint/suspicious/noExplicitAny: Type cast required to override MUI Alert variant type without global augmentation
|
|
961
1007
|
const StyledAlert$2 = styles.styled(Alert, {
|
|
962
|
-
shouldForwardProp: prop => prop !== '
|
|
963
|
-
})(({
|
|
964
|
-
|
|
965
|
-
const
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
1008
|
+
shouldForwardProp: prop => prop !== 'intent' && prop !== 'alertType',
|
|
1009
|
+
})(({ theme, intent = 'success', alertType = 'outlined' }) => {
|
|
1010
|
+
const palette = intentColors$1[intent];
|
|
1011
|
+
const isFilled = alertType === 'filled';
|
|
1012
|
+
const iconColor = isFilled ? neoDesign.semanticColors.typography.tooltip : palette.default;
|
|
1013
|
+
const messageColor = isFilled ? neoDesign.semanticColors.typography.tooltip : neoDesign.semanticColors.typography.body;
|
|
1014
|
+
return {
|
|
1015
|
+
height: neoDesign.spacing.spacing_8,
|
|
1016
|
+
width: '100%',
|
|
1017
|
+
borderRadius: neoDesign.borderRadius.xS,
|
|
1018
|
+
alignItems: 'center',
|
|
1019
|
+
fontFamily: neoDesign.typography.fontFamily.body,
|
|
1020
|
+
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.default),
|
|
1021
|
+
fontWeight: neoDesign.typography.fontWeight.semiBold,
|
|
1022
|
+
lineHeight: 1.5,
|
|
1023
|
+
padding: theme.spacing(0, 2),
|
|
1024
|
+
backgroundColor: isFilled ? palette.dark : palette.light,
|
|
1025
|
+
border: isFilled ? 'none' : `1px solid ${palette.transparent}`,
|
|
1026
|
+
color: isFilled ? neoDesign.semanticColors.typography.tooltip : neoDesign.semanticColors.typography.body,
|
|
1027
|
+
boxShadow: isFilled ? neutralSmallShadow : undefined,
|
|
1028
|
+
[`& .${Alert.alertClasses.icon}`]: {
|
|
1029
|
+
color: iconColor,
|
|
1030
|
+
padding: 0,
|
|
1031
|
+
opacity: 1,
|
|
1032
|
+
marginRight: neoDesign.spacing.spacing_1_1_2,
|
|
977
1033
|
},
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
1034
|
+
[`& .${Alert.alertClasses.message}`]: {
|
|
1035
|
+
color: messageColor,
|
|
1036
|
+
padding: 0,
|
|
1037
|
+
flex: 1,
|
|
1038
|
+
display: 'flex',
|
|
1039
|
+
flexDirection: 'column',
|
|
1040
|
+
justifyContent: 'center',
|
|
1041
|
+
'& span:last-child': {
|
|
1042
|
+
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.sm),
|
|
1043
|
+
fontWeight: neoDesign.typography.fontWeight.medium,
|
|
1044
|
+
color: isFilled
|
|
1045
|
+
? neoDesign.semanticColors.typography.tooltip
|
|
1046
|
+
: neoDesign.semanticColors.typography.bodySecondary,
|
|
1047
|
+
lineHeight: 1.4,
|
|
1048
|
+
},
|
|
981
1049
|
},
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
1050
|
+
[`& .${Alert.alertClasses.action}`]: {
|
|
1051
|
+
padding: 0,
|
|
1052
|
+
marginRight: 0,
|
|
1053
|
+
...(isFilled && {
|
|
1054
|
+
color: neoDesign.semanticColors.typography.tooltip,
|
|
1055
|
+
[`& .${ButtonBase.buttonBaseClasses.root}`]: { color: 'inherit' },
|
|
1056
|
+
}),
|
|
985
1057
|
},
|
|
986
1058
|
};
|
|
1059
|
+
});
|
|
1060
|
+
const iconMap = {
|
|
1061
|
+
success: jsxRuntime.jsx(CircleCheckBig, { size: 24 }),
|
|
1062
|
+
error: jsxRuntime.jsx(CircleAlert, { size: 24 }),
|
|
1063
|
+
warning: jsxRuntime.jsx(TriangleAlert, { size: 24 }),
|
|
1064
|
+
offline: jsxRuntime.jsx(WifiOff, { size: 24 }),
|
|
1065
|
+
info: jsxRuntime.jsx(BadgeInfo, { size: 24 }),
|
|
1066
|
+
};
|
|
1067
|
+
/**
|
|
1068
|
+
* NeoAlert - Alert component for displaying contextual status messages
|
|
1069
|
+
*
|
|
1070
|
+
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4921-3427
|
|
1071
|
+
*
|
|
1072
|
+
* Figma Props Mapping:
|
|
1073
|
+
* - Intent (Success|Error|Warning|Offline|Info) → intent
|
|
1074
|
+
* - Type (Outlined|Filled) → type
|
|
1075
|
+
* - Show supporting text → description prop presence
|
|
1076
|
+
* - Show Button → action prop presence
|
|
1077
|
+
*/
|
|
1078
|
+
const NeoAlert = ({ intent = 'success', type = 'outlined', title, description, icon, action, ...props }) => {
|
|
1079
|
+
const defaultIcon = iconMap[intent];
|
|
1080
|
+
return (jsxRuntime.jsxs(StyledAlert$2, { ...props, intent: intent, alertType: type, icon: icon ?? defaultIcon, action: action, children: [jsxRuntime.jsx("span", { children: title }), description && jsxRuntime.jsx("span", { children: description })] }));
|
|
1081
|
+
};
|
|
1082
|
+
NeoAlert.displayName = 'NeoAlert';
|
|
1083
|
+
|
|
1084
|
+
const intentColors = {
|
|
1085
|
+
info: neoDesign.semanticColors.status.info,
|
|
1086
|
+
success: neoDesign.semanticColors.status.success,
|
|
1087
|
+
error: neoDesign.semanticColors.status.error,
|
|
1088
|
+
warning: neoDesign.semanticColors.status.warning,
|
|
1089
|
+
neutral: neoDesign.semanticColors.status.neutral,
|
|
1090
|
+
};
|
|
1091
|
+
// biome-ignore lint/suspicious/noExplicitAny: Type cast required to override MUI Alert variant type without global augmentation
|
|
1092
|
+
const StyledAlert$1 = styles.styled(Alert, {
|
|
1093
|
+
shouldForwardProp: prop => prop !== 'messagePosition' && prop !== 'intent' && prop !== 'bannerType',
|
|
1094
|
+
})(({ intent = 'info', bannerType = 'outlined', messagePosition = 'left' }) => {
|
|
1095
|
+
const palette = intentColors[intent];
|
|
1096
|
+
const typeStyles = bannerType === 'filled'
|
|
1097
|
+
? {
|
|
1098
|
+
backgroundColor: palette.dark,
|
|
1099
|
+
color: neoDesign.semanticColors.surfaces.white,
|
|
1100
|
+
}
|
|
1101
|
+
: {
|
|
1102
|
+
backgroundColor: palette.light,
|
|
1103
|
+
color: neoDesign.colors.grey['800'],
|
|
1104
|
+
};
|
|
987
1105
|
return {
|
|
988
1106
|
width: '100%',
|
|
989
1107
|
minHeight: 52,
|
|
@@ -995,11 +1113,11 @@ const StyledAlert$2 = styles.styled(Alert, {
|
|
|
995
1113
|
alignItems: 'center',
|
|
996
1114
|
justifyContent: messagePosition === 'center' ? 'center' : 'flex-start',
|
|
997
1115
|
...(messagePosition === 'center' && { position: 'relative' }),
|
|
998
|
-
boxShadow: `${neoDesign.shadows.
|
|
1116
|
+
boxShadow: `${neoDesign.shadows.neutral.small.x}px ${neoDesign.shadows.neutral.small.y}px ${neoDesign.shadows.neutral.small.blur}px ${neoDesign.shadows.neutral.small.spread}px ${neoDesign.shadows.neutral.small.shadow}`,
|
|
999
1117
|
fontSize: neoDesign.typography.fontSize.default,
|
|
1000
|
-
fontWeight: neoDesign.typography.fontWeight.
|
|
1118
|
+
fontWeight: neoDesign.typography.fontWeight.medium,
|
|
1001
1119
|
lineHeight: 1.5,
|
|
1002
|
-
...
|
|
1120
|
+
...typeStyles,
|
|
1003
1121
|
[`& .${Alert.alertClasses.icon}`]: {
|
|
1004
1122
|
padding: 0,
|
|
1005
1123
|
opacity: 1,
|
|
@@ -1022,26 +1140,18 @@ const StyledAlert$2 = styles.styled(Alert, {
|
|
|
1022
1140
|
},
|
|
1023
1141
|
};
|
|
1024
1142
|
});
|
|
1025
|
-
const LinkText = styles.styled('span')(({
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
}
|
|
1036
|
-
|
|
1037
|
-
fontWeight: neoDesign.typography.fontWeight.semiBold,
|
|
1038
|
-
color: getLinkColor(),
|
|
1039
|
-
cursor: 'pointer',
|
|
1040
|
-
'&:hover': {
|
|
1041
|
-
textDecoration: 'underline',
|
|
1042
|
-
},
|
|
1043
|
-
};
|
|
1044
|
-
});
|
|
1143
|
+
const LinkText = styles.styled('span')(({ bannerType = 'outlined' }) => ({
|
|
1144
|
+
marginLeft: 'auto',
|
|
1145
|
+
fontWeight: neoDesign.typography.fontWeight.semiBold,
|
|
1146
|
+
color: bannerType === 'filled'
|
|
1147
|
+
? neoDesign.semanticColors.typography.link.white
|
|
1148
|
+
: neoDesign.semanticColors.typography.link.primary,
|
|
1149
|
+
cursor: 'pointer',
|
|
1150
|
+
whiteSpace: 'nowrap',
|
|
1151
|
+
'&:hover': {
|
|
1152
|
+
textDecoration: 'underline',
|
|
1153
|
+
},
|
|
1154
|
+
}));
|
|
1045
1155
|
const StyledIconButton$1 = styles.styled(IconButton)(({ closeIconColor }) => ({
|
|
1046
1156
|
padding: 0,
|
|
1047
1157
|
color: closeIconColor,
|
|
@@ -1049,35 +1159,17 @@ const StyledIconButton$1 = styles.styled(IconButton)(({ closeIconColor }) => ({
|
|
|
1049
1159
|
backgroundColor: 'transparent',
|
|
1050
1160
|
},
|
|
1051
1161
|
}));
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
* Figma Props Mapping:
|
|
1058
|
-
* - color (Dark|Light|Success|Error|Warning) → variant (dark|light|success|error|warning)
|
|
1059
|
-
* - messagePosition (Left|Center) → messagePosition ("left"|"center")
|
|
1060
|
-
* - closeIcon (boolean) → showClose (boolean)
|
|
1061
|
-
* - link (boolean) → linkText (string)
|
|
1062
|
-
* - {Message} → message (string)
|
|
1063
|
-
*/
|
|
1064
|
-
const NeoBanner = ({ variant = 'light', message, messagePosition = 'left', linkText, showClose = true, icon, onClose, onLinkClick, ...props }) => {
|
|
1065
|
-
const getCloseIconColor = () => {
|
|
1066
|
-
if (variant === 'dark') {
|
|
1067
|
-
return neoDesign.semanticColors.surfaces.white;
|
|
1068
|
-
}
|
|
1069
|
-
if (variant === 'success') {
|
|
1070
|
-
return neoDesign.semanticColors.status.success.default;
|
|
1071
|
-
}
|
|
1072
|
-
if (variant === 'error') {
|
|
1073
|
-
return neoDesign.semanticColors.status.error.default;
|
|
1074
|
-
}
|
|
1075
|
-
if (variant === 'warning') {
|
|
1076
|
-
return neoDesign.semanticColors.status.warning.default;
|
|
1077
|
-
}
|
|
1078
|
-
return neoDesign.colors.grey['800'];
|
|
1162
|
+
const NeoBanner = ({ intent = 'info', type = 'outlined', message, messagePosition = 'left', linkText, showClose = false, icon, onClose, onLinkClick, ...props }) => {
|
|
1163
|
+
const [dismissed, setDismissed] = React.useState(false);
|
|
1164
|
+
const handleClose = () => {
|
|
1165
|
+
setDismissed(true);
|
|
1166
|
+
onClose?.();
|
|
1079
1167
|
};
|
|
1080
|
-
|
|
1168
|
+
if (dismissed) {
|
|
1169
|
+
return null;
|
|
1170
|
+
}
|
|
1171
|
+
const closeIconColor = type === 'filled' ? neoDesign.semanticColors.surfaces.white : intentColors[intent].default;
|
|
1172
|
+
return (jsxRuntime.jsx(StyledAlert$1, { ...props, intent: intent, bannerType: type, messagePosition: messagePosition, icon: messagePosition === 'left' ? icon || false : false, action: showClose ? (jsxRuntime.jsx(StyledIconButton$1, { size: "small", onClick: handleClose, closeIconColor: closeIconColor, children: jsxRuntime.jsx(X, { size: 24 }) })) : undefined, children: messagePosition === 'center' ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [icon, jsxRuntime.jsx("span", { children: message }), linkText && (jsxRuntime.jsx(LinkText, { bannerType: type, onClick: onLinkClick, children: linkText }))] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { children: message }), linkText && (jsxRuntime.jsx(LinkText, { bannerType: type, onClick: onLinkClick, children: linkText }))] })) }));
|
|
1081
1173
|
};
|
|
1082
1174
|
NeoBanner.displayName = 'NeoBanner';
|
|
1083
1175
|
|
|
@@ -1529,51 +1621,242 @@ const NeoButtonTabGroup = ({ size = 'medium', exclusive = true, ...props }) => {
|
|
|
1529
1621
|
};
|
|
1530
1622
|
NeoButtonTabGroup.displayName = 'NeoButtonTabGroup';
|
|
1531
1623
|
|
|
1532
|
-
//
|
|
1533
|
-
const
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
}
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1624
|
+
// ─── Shared ──────────────────────────────────────────────────────────────────
|
|
1625
|
+
const activeShadow = `${neoDesign.shadows.card.x}px ${neoDesign.shadows.card.y}px ${neoDesign.shadows.card.blur}px ${neoDesign.shadows.card.spread}px ${neoDesign.shadows.card.shadow}`;
|
|
1626
|
+
// ─── Small card styled components ────────────────────────────────────────────
|
|
1627
|
+
const SmallStyledCard = styles.styled(MuiCard, {
|
|
1628
|
+
shouldForwardProp: prop => prop !== 'selected' && prop !== 'disabled',
|
|
1629
|
+
})(({ theme, selected, disabled }) => ({
|
|
1630
|
+
width: 160,
|
|
1631
|
+
height: 160,
|
|
1632
|
+
padding: theme.spacing(1.5), // 12px
|
|
1633
|
+
display: 'flex',
|
|
1634
|
+
flexDirection: 'column',
|
|
1635
|
+
gap: theme.spacing(2), // 16px
|
|
1636
|
+
backgroundColor: neoDesign.semanticColors.surfaces.card,
|
|
1637
|
+
border: `1px solid ${selected ? neoDesign.semanticColors.buttons.primary.default : neoDesign.semanticColors.border.primary}`,
|
|
1638
|
+
borderRadius: neoDesign.borderRadius.xS,
|
|
1639
|
+
boxShadow: selected ? activeShadow : 'none',
|
|
1640
|
+
transition: theme.transitions.create(['border-color', 'background-color', 'box-shadow']),
|
|
1641
|
+
cursor: 'pointer',
|
|
1642
|
+
'&:hover': {
|
|
1643
|
+
borderColor: neoDesign.semanticColors.buttons.primary.default,
|
|
1644
|
+
boxShadow: activeShadow,
|
|
1645
|
+
},
|
|
1646
|
+
'&:focus-visible': {
|
|
1647
|
+
borderColor: neoDesign.semanticColors.buttons.primary.default,
|
|
1648
|
+
...focusRingStyles,
|
|
1649
|
+
},
|
|
1650
|
+
...(disabled && {
|
|
1651
|
+
opacity: 0.5,
|
|
1652
|
+
pointerEvents: 'none',
|
|
1653
|
+
cursor: 'not-allowed',
|
|
1654
|
+
}),
|
|
1655
|
+
}));
|
|
1656
|
+
const SmallCardHeader = styles.styled('div')({
|
|
1657
|
+
display: 'flex',
|
|
1548
1658
|
alignItems: 'flex-start',
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1659
|
+
justifyContent: 'space-between',
|
|
1660
|
+
width: '100%',
|
|
1661
|
+
});
|
|
1662
|
+
const SmallLogoContainer = styles.styled('div')({
|
|
1663
|
+
width: neoDesign.spacing.spacing_6,
|
|
1664
|
+
height: neoDesign.spacing.spacing_6,
|
|
1665
|
+
flexShrink: 0,
|
|
1666
|
+
});
|
|
1667
|
+
const SmallRecipeCount = styles.styled('p')(({ theme }) => ({
|
|
1668
|
+
margin: 0,
|
|
1669
|
+
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.xxs), // 10px
|
|
1670
|
+
fontWeight: neoDesign.typography.fontWeight.semiBold, // 600
|
|
1671
|
+
lineHeight: 1.2,
|
|
1672
|
+
color: neoDesign.colors.grey[800],
|
|
1673
|
+
whiteSpace: 'nowrap',
|
|
1552
1674
|
}));
|
|
1553
|
-
const
|
|
1675
|
+
const SmallCardContent = styles.styled('div')(({ theme }) => ({
|
|
1554
1676
|
display: 'flex',
|
|
1555
1677
|
flexDirection: 'column',
|
|
1556
|
-
gap:
|
|
1678
|
+
gap: theme.spacing(2), // 16px
|
|
1679
|
+
width: '100%',
|
|
1557
1680
|
}));
|
|
1558
|
-
const
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
lineHeight: size === 'xs' ? 1.5 : size === 'small' ? 1.4 : 1.5,
|
|
1566
|
-
color: neoDesign.semanticColors.typography.input.default,
|
|
1681
|
+
const SmallTitle = styles.styled('p')(({ theme }) => ({
|
|
1682
|
+
margin: 0,
|
|
1683
|
+
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.h6), // 16px
|
|
1684
|
+
fontWeight: neoDesign.typography.fontWeight.semiBold, // 600
|
|
1685
|
+
lineHeight: 1.4,
|
|
1686
|
+
color: neoDesign.colors.grey[800],
|
|
1687
|
+
width: '100%',
|
|
1567
1688
|
}));
|
|
1568
|
-
const
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1689
|
+
const SmallDescription = styles.styled('p')(({ theme }) => ({
|
|
1690
|
+
margin: 0,
|
|
1691
|
+
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.xs), // 12px
|
|
1692
|
+
fontWeight: neoDesign.typography.fontWeight.regular, // 400
|
|
1693
|
+
lineHeight: 1.5,
|
|
1694
|
+
color: neoDesign.colors.grey[800],
|
|
1695
|
+
width: '100%',
|
|
1696
|
+
display: '-webkit-box',
|
|
1697
|
+
WebkitLineClamp: 2,
|
|
1698
|
+
WebkitBoxOrient: 'vertical',
|
|
1699
|
+
overflow: 'hidden',
|
|
1700
|
+
textOverflow: 'ellipsis',
|
|
1701
|
+
}));
|
|
1702
|
+
const LargeStyledCard = styles.styled(MuiCard, {
|
|
1703
|
+
shouldForwardProp: prop => prop !== 'disabled' && prop !== 'cardTheme',
|
|
1704
|
+
})(({ disabled = false, cardTheme = 'light' }) => {
|
|
1705
|
+
const isLight = cardTheme === 'light';
|
|
1706
|
+
const activeBorderColor = isLight
|
|
1707
|
+
? neoDesign.semanticColors.buttons.primary.default
|
|
1708
|
+
: neoDesign.colors.digitalGreen[300];
|
|
1709
|
+
const defaultBorderColor = isLight
|
|
1710
|
+
? neoDesign.semanticColors.border.primary
|
|
1711
|
+
: `${neoDesign.semanticColors.border.primary}80`;
|
|
1712
|
+
return {
|
|
1713
|
+
width: 340,
|
|
1714
|
+
height: 162,
|
|
1715
|
+
display: 'flex',
|
|
1716
|
+
flexDirection: 'column',
|
|
1717
|
+
justifyContent: 'space-between',
|
|
1718
|
+
alignItems: 'flex-start',
|
|
1719
|
+
padding: neoDesign.spacing.spacing_2,
|
|
1720
|
+
borderRadius: neoDesign.borderRadius.xS,
|
|
1721
|
+
backgroundColor: isLight ? neoDesign.semanticColors.surfaces.card : neoDesign.colors.grey[800],
|
|
1722
|
+
border: `1px solid ${defaultBorderColor}`,
|
|
1723
|
+
boxShadow: 'none',
|
|
1724
|
+
overflow: 'hidden',
|
|
1725
|
+
cursor: 'pointer',
|
|
1726
|
+
transition: 'border-color 0.2s, box-shadow 0.2s',
|
|
1727
|
+
'&:hover': {
|
|
1728
|
+
borderColor: activeBorderColor,
|
|
1729
|
+
boxShadow: activeShadow,
|
|
1730
|
+
},
|
|
1731
|
+
'&:active': {
|
|
1732
|
+
borderColor: activeBorderColor,
|
|
1733
|
+
boxShadow: activeShadow,
|
|
1734
|
+
},
|
|
1735
|
+
'&:focus-visible': {
|
|
1736
|
+
borderColor: activeBorderColor,
|
|
1737
|
+
...focusRingStyles,
|
|
1738
|
+
},
|
|
1739
|
+
...(disabled && {
|
|
1740
|
+
opacity: 0.5,
|
|
1741
|
+
pointerEvents: 'none',
|
|
1742
|
+
cursor: 'not-allowed',
|
|
1743
|
+
}),
|
|
1744
|
+
};
|
|
1745
|
+
});
|
|
1746
|
+
const LargeTopSection = styles.styled('div')({
|
|
1747
|
+
display: 'flex',
|
|
1748
|
+
flexDirection: 'column',
|
|
1749
|
+
gap: neoDesign.spacing.spacing_2,
|
|
1750
|
+
alignItems: 'flex-start',
|
|
1751
|
+
width: '100%',
|
|
1752
|
+
flexShrink: 0,
|
|
1753
|
+
});
|
|
1754
|
+
const LargeHeaderRow = styles.styled('div')({
|
|
1755
|
+
display: 'flex',
|
|
1756
|
+
gap: neoDesign.spacing.spacing_1,
|
|
1757
|
+
alignItems: 'center',
|
|
1758
|
+
flexShrink: 0,
|
|
1759
|
+
});
|
|
1760
|
+
const LargeHeaderSlot = styles.styled('div')({
|
|
1761
|
+
display: 'flex',
|
|
1762
|
+
flexDirection: 'column',
|
|
1763
|
+
alignItems: 'center',
|
|
1764
|
+
justifyContent: 'center',
|
|
1765
|
+
width: 20,
|
|
1766
|
+
height: 20,
|
|
1767
|
+
flexShrink: 0,
|
|
1768
|
+
});
|
|
1769
|
+
const LargeHeaderTitle = styles.styled('span', {
|
|
1770
|
+
shouldForwardProp: prop => prop !== 'cardTheme',
|
|
1771
|
+
})(({ cardTheme = 'light' }) => ({
|
|
1772
|
+
fontFamily: `${neoDesign.typography.fontFamily.heading}, sans-serif`,
|
|
1773
|
+
fontWeight: neoDesign.typography.fontWeight.semiBold,
|
|
1774
|
+
fontSize: neoDesign.typography.fontSize.h6,
|
|
1775
|
+
lineHeight: 1.4,
|
|
1776
|
+
color: cardTheme === 'light' ? neoDesign.colors.grey[800] : neoDesign.semanticColors.surfaces.white,
|
|
1777
|
+
flexShrink: 0,
|
|
1778
|
+
}));
|
|
1779
|
+
const LargeDescription = styles.styled('p', {
|
|
1780
|
+
shouldForwardProp: prop => prop !== 'cardTheme',
|
|
1781
|
+
})(({ cardTheme = 'light' }) => ({
|
|
1782
|
+
fontFamily: `${neoDesign.typography.fontFamily.body}, sans-serif`,
|
|
1783
|
+
fontWeight: neoDesign.typography.fontWeight.regular,
|
|
1784
|
+
fontSize: neoDesign.typography.fontSize.xs,
|
|
1785
|
+
lineHeight: 1.5,
|
|
1786
|
+
color: cardTheme === 'light' ? neoDesign.colors.grey[800] : neoDesign.semanticColors.surfaces.white,
|
|
1787
|
+
margin: 0,
|
|
1788
|
+
minWidth: '100%',
|
|
1789
|
+
wordWrap: 'break-word',
|
|
1790
|
+
}));
|
|
1791
|
+
const LargeButtonsRow = styles.styled('div')({
|
|
1792
|
+
display: 'flex',
|
|
1793
|
+
gap: neoDesign.spacing.spacing_3,
|
|
1794
|
+
alignItems: 'flex-start',
|
|
1795
|
+
flexShrink: 0,
|
|
1796
|
+
});
|
|
1797
|
+
// ─── Internal implementations ────────────────────────────────────────────────
|
|
1798
|
+
const SmallCardImpl = ({ logo, recipeCount, title, description, selected = false, disabled = false, onClick, ...props }) => {
|
|
1799
|
+
return (jsxRuntime.jsxs(SmallStyledCard, { selected: selected, disabled: disabled, onClick: disabled ? undefined : onClick, tabIndex: disabled ? -1 : 0, role: "button", "aria-disabled": disabled, "aria-pressed": selected, ...props, children: [jsxRuntime.jsxs(SmallCardHeader, { children: [jsxRuntime.jsx(SmallLogoContainer, { children: logo }), jsxRuntime.jsx(SmallRecipeCount, { children: recipeCount })] }), jsxRuntime.jsxs(SmallCardContent, { children: [jsxRuntime.jsx(SmallTitle, { children: title }), jsxRuntime.jsx(SmallDescription, { children: description })] })] }));
|
|
1800
|
+
};
|
|
1801
|
+
const LargeCardImpl = ({ disabled = false, cardTheme = 'light', showIcon = true, showGel = true, showButtons = true, icon, gel, title, children, actions, onClick, ...props }) => {
|
|
1802
|
+
return (jsxRuntime.jsxs(LargeStyledCard, { disabled: disabled, cardTheme: cardTheme, onClick: disabled ? undefined : onClick, tabIndex: disabled ? -1 : 0, "aria-disabled": disabled || undefined, ...props, children: [jsxRuntime.jsxs(LargeTopSection, { children: [jsxRuntime.jsxs(LargeHeaderRow, { children: [showIcon && icon && jsxRuntime.jsx(LargeHeaderSlot, { children: icon }), showGel && gel && jsxRuntime.jsx(LargeHeaderSlot, { children: gel }), title && jsxRuntime.jsx(LargeHeaderTitle, { cardTheme: cardTheme, children: title })] }), children && jsxRuntime.jsx(LargeDescription, { cardTheme: cardTheme, children: children })] }), showButtons && actions && jsxRuntime.jsx(LargeButtonsRow, { children: actions })] }));
|
|
1803
|
+
};
|
|
1804
|
+
// ─── Exported component ──────────────────────────────────────────────────────
|
|
1805
|
+
const NeoCard = (props) => {
|
|
1806
|
+
if (props.size === 'small') {
|
|
1807
|
+
const { size: _, ...rest } = props;
|
|
1808
|
+
return jsxRuntime.jsx(SmallCardImpl, { ...rest });
|
|
1809
|
+
}
|
|
1810
|
+
const { size: _, ...rest } = props;
|
|
1811
|
+
return jsxRuntime.jsx(LargeCardImpl, { ...rest });
|
|
1812
|
+
};
|
|
1813
|
+
NeoCard.displayName = 'NeoCard';
|
|
1814
|
+
|
|
1815
|
+
// Border radius per size (from Figma)
|
|
1816
|
+
const borderRadiusConfig = {
|
|
1817
|
+
xs: 2,
|
|
1818
|
+
small: 3,
|
|
1819
|
+
medium: 4,
|
|
1820
|
+
};
|
|
1821
|
+
// Unchecked: Rounded square outline (20x20 viewBox)
|
|
1822
|
+
const UncheckedIcon$1 = ({ size = 'medium' }) => (jsxRuntime.jsx(SvgIcon, { viewBox: "0 0 20 20", children: jsxRuntime.jsx("rect", { x: "1", y: "1", width: "18", height: "18", rx: borderRadiusConfig[size], fill: "none", stroke: "currentColor", strokeWidth: "1.5" }) }));
|
|
1823
|
+
// Checked: Filled rounded square with white checkmark
|
|
1824
|
+
// Path scaled from Untitled UI 24x24 (M20 6L9 17L4 12) to 20x20
|
|
1825
|
+
const CheckedIcon$1 = ({ size = 'medium' }) => (jsxRuntime.jsxs(SvgIcon, { viewBox: "0 0 20 20", children: [jsxRuntime.jsx("rect", { width: "20", height: "20", rx: borderRadiusConfig[size], fill: "currentColor" }), jsxRuntime.jsx("path", { d: "M15 6L8.5 13L5 9.5", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", fill: "none" })] }));
|
|
1826
|
+
// Indeterminate: Filled rounded square with white minus
|
|
1827
|
+
// Path scaled from Untitled UI 24x24 (M5 12H19) to 20x20
|
|
1828
|
+
const IndeterminateIcon = ({ size = 'medium' }) => (jsxRuntime.jsxs(SvgIcon, { viewBox: "0 0 20 20", children: [jsxRuntime.jsx("rect", { width: "20", height: "20", rx: borderRadiusConfig[size], fill: "currentColor" }), jsxRuntime.jsx("path", { d: "M5 10H15", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round", fill: "none" })] }));
|
|
1829
|
+
const CheckboxContainer = styles.styled('label')(({ disabled }) => ({
|
|
1830
|
+
display: 'inline-flex',
|
|
1831
|
+
alignItems: 'flex-start',
|
|
1832
|
+
gap: neoDesign.spacing.spacing_1,
|
|
1833
|
+
cursor: disabled ? 'not-allowed' : 'pointer',
|
|
1834
|
+
userSelect: 'none',
|
|
1835
|
+
}));
|
|
1836
|
+
const LabelContainer$4 = styles.styled('div')(({ size = 'medium' }) => ({
|
|
1837
|
+
display: 'flex',
|
|
1838
|
+
flexDirection: 'column',
|
|
1839
|
+
gap: size === 'medium' ? 2 : 0,
|
|
1840
|
+
}));
|
|
1841
|
+
const Label$4 = styles.styled('span')(({ theme, size = 'medium' }) => ({
|
|
1842
|
+
fontSize: theme.typography.pxToRem(size === 'xs'
|
|
1843
|
+
? neoDesign.typography.fontSize.xs
|
|
1844
|
+
: size === 'small'
|
|
1845
|
+
? neoDesign.typography.fontSize.sm
|
|
1846
|
+
: neoDesign.typography.fontSize.default),
|
|
1847
|
+
fontWeight: neoDesign.typography.fontWeight.medium,
|
|
1848
|
+
lineHeight: size === 'xs' ? 1.5 : size === 'small' ? 1.4 : 1.5,
|
|
1849
|
+
color: neoDesign.semanticColors.typography.input.default,
|
|
1850
|
+
}));
|
|
1851
|
+
const HelperText$2 = styles.styled('span')(({ theme, size = 'medium' }) => ({
|
|
1852
|
+
fontSize: theme.typography.pxToRem(size === 'xs'
|
|
1853
|
+
? neoDesign.typography.fontSize.xs
|
|
1854
|
+
: size === 'small'
|
|
1855
|
+
? neoDesign.typography.fontSize.sm
|
|
1856
|
+
: neoDesign.typography.fontSize.default),
|
|
1857
|
+
fontWeight: neoDesign.typography.fontWeight.regular,
|
|
1858
|
+
lineHeight: size === 'xs' ? 1.5 : size === 'small' ? 1.4 : 1.5,
|
|
1859
|
+
color: neoDesign.semanticColors.typography.bodySecondary,
|
|
1577
1860
|
}));
|
|
1578
1861
|
// Figma-exact border radius for xs checkbox — no matching design token
|
|
1579
1862
|
const FIGMA_XS_BORDER_RADIUS = 1;
|
|
@@ -1602,6 +1885,7 @@ const StyledCheckbox = styles.styled(Checkbox, {
|
|
|
1602
1885
|
padding: 0,
|
|
1603
1886
|
marginTop: size === 'xs' ? 3 : 2,
|
|
1604
1887
|
color: neoDesign.semanticColors.border.primary,
|
|
1888
|
+
borderRadius: config.borderRadius,
|
|
1605
1889
|
flexShrink: 0,
|
|
1606
1890
|
// Root element
|
|
1607
1891
|
[`&.${Checkbox.checkboxClasses.root}`]: {
|
|
@@ -1652,7 +1936,7 @@ const StyledCheckbox = styles.styled(Checkbox, {
|
|
|
1652
1936
|
/**
|
|
1653
1937
|
* NeoCheckbox - Checkbox component based on MUI Checkbox
|
|
1654
1938
|
*
|
|
1655
|
-
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=
|
|
1939
|
+
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=11487-81
|
|
1656
1940
|
*
|
|
1657
1941
|
* Figma Props Mapping:
|
|
1658
1942
|
* - Checked (True|False) → checked prop
|
|
@@ -1808,9 +2092,9 @@ const IconWrapper$2 = styles.styled('span')(({ theme, isMultiline }) => ({
|
|
|
1808
2092
|
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4187-30353
|
|
1809
2093
|
*
|
|
1810
2094
|
* Figma Props Mapping:
|
|
1811
|
-
* -
|
|
1812
|
-
* -
|
|
1813
|
-
* -
|
|
2095
|
+
* - Theme (Dark|Light) → variant (filled|outlined)
|
|
2096
|
+
* - Content (Multi|Inline) → size prop + auto-detected multiline
|
|
2097
|
+
* - Show icon → endIcon (ReactNode, unmappable: boolean vs ReactNode)
|
|
1814
2098
|
* - Text content → children prop
|
|
1815
2099
|
*/
|
|
1816
2100
|
const NeoCodeSnippet = ({ variant = 'outlined', size = 'small', endIcon, children, ...props }) => {
|
|
@@ -2678,9 +2962,9 @@ const StyledChip$1 = styles.styled(Chip)(({ theme, size, variant, color }) => ({
|
|
|
2678
2962
|
* - state (Neutral|Error|Warning|Success|Info|Violet|Beta) → color (default|error|warning|success|info|violet|beta)
|
|
2679
2963
|
* - Label text → label prop
|
|
2680
2964
|
*/
|
|
2681
|
-
|
|
2965
|
+
function NeoTag({ size = 'small', variant = 'outlined', ...props }) {
|
|
2682
2966
|
return jsxRuntime.jsx(StyledChip$1, { size: size, variant: variant, ...props });
|
|
2683
|
-
}
|
|
2967
|
+
}
|
|
2684
2968
|
NeoTag.displayName = 'NeoTag';
|
|
2685
2969
|
|
|
2686
2970
|
/**
|
|
@@ -3640,6 +3924,84 @@ const NeoDot = ({ size = 'medium', variant = 'solid', color = 'neutral', ...prop
|
|
|
3640
3924
|
};
|
|
3641
3925
|
NeoDot.displayName = 'NeoDot';
|
|
3642
3926
|
|
|
3927
|
+
const StyledRoot$1 = styles.styled(Paper)({
|
|
3928
|
+
padding: neoDesign.spacing.spacing_2,
|
|
3929
|
+
borderRadius: neoDesign.borderRadius.s,
|
|
3930
|
+
backgroundColor: neoDesign.semanticColors.surfaces.snackbarDarkMode,
|
|
3931
|
+
color: neoDesign.colors.grey['800'],
|
|
3932
|
+
border: `1px solid ${neoDesign.semanticColors.border.primary}`,
|
|
3933
|
+
display: 'flex',
|
|
3934
|
+
flexDirection: 'column',
|
|
3935
|
+
gap: neoDesign.spacing.spacing_3,
|
|
3936
|
+
});
|
|
3937
|
+
const Title = styles.styled('p')(({ theme }) => ({
|
|
3938
|
+
margin: 0,
|
|
3939
|
+
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.sm),
|
|
3940
|
+
fontWeight: neoDesign.typography.fontWeight.semiBold,
|
|
3941
|
+
lineHeight: 1.4,
|
|
3942
|
+
color: neoDesign.colors.grey['700'],
|
|
3943
|
+
}));
|
|
3944
|
+
const FileName = styles.styled('p')(({ theme }) => ({
|
|
3945
|
+
margin: 0,
|
|
3946
|
+
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.xs),
|
|
3947
|
+
fontWeight: neoDesign.typography.fontWeight.medium,
|
|
3948
|
+
lineHeight: 1.5,
|
|
3949
|
+
color: neoDesign.colors.grey['800'],
|
|
3950
|
+
overflow: 'hidden',
|
|
3951
|
+
textOverflow: 'ellipsis',
|
|
3952
|
+
whiteSpace: 'nowrap',
|
|
3953
|
+
minWidth: 0,
|
|
3954
|
+
}));
|
|
3955
|
+
const ProgressLabel$1 = styles.styled('p')(({ theme }) => ({
|
|
3956
|
+
margin: 0,
|
|
3957
|
+
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.xs),
|
|
3958
|
+
fontWeight: neoDesign.typography.fontWeight.medium,
|
|
3959
|
+
lineHeight: 1.5,
|
|
3960
|
+
color: neoDesign.colors.grey['800'],
|
|
3961
|
+
flexShrink: 0,
|
|
3962
|
+
}));
|
|
3963
|
+
const StyledLinearProgress$1 = styles.styled(LinearProgress)({
|
|
3964
|
+
width: '100%',
|
|
3965
|
+
height: neoDesign.spacing.spacing_1,
|
|
3966
|
+
borderRadius: neoDesign.borderRadius.s,
|
|
3967
|
+
backgroundColor: neoDesign.colors.grey['200'],
|
|
3968
|
+
[`& .${LinearProgress.linearProgressClasses.bar}`]: {
|
|
3969
|
+
backgroundColor: neoDesign.semanticColors.buttons.primary.default,
|
|
3970
|
+
borderRadius: `${neoDesign.borderRadius.xS}px 0 0 ${neoDesign.borderRadius.xS}px`,
|
|
3971
|
+
},
|
|
3972
|
+
});
|
|
3973
|
+
const ActionButton = styles.styled(IconButton)({
|
|
3974
|
+
padding: 0,
|
|
3975
|
+
width: neoDesign.spacing.spacing_2,
|
|
3976
|
+
height: neoDesign.spacing.spacing_2,
|
|
3977
|
+
color: neoDesign.colors.grey['500'],
|
|
3978
|
+
'&:hover': {
|
|
3979
|
+
backgroundColor: 'transparent',
|
|
3980
|
+
},
|
|
3981
|
+
});
|
|
3982
|
+
/**
|
|
3983
|
+
* NeoDownloadToast - Standalone download progress toast notification
|
|
3984
|
+
*
|
|
3985
|
+
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=3377-26954
|
|
3986
|
+
*/
|
|
3987
|
+
const NeoDownloadToast = ({ title, fileName, progress, showClose = true, showPause = true, onClose, onPause, actions, ...props }) => {
|
|
3988
|
+
const renderActions = () => {
|
|
3989
|
+
if (actions)
|
|
3990
|
+
return actions;
|
|
3991
|
+
const hasActions = showPause || showClose;
|
|
3992
|
+
if (!hasActions)
|
|
3993
|
+
return null;
|
|
3994
|
+
return (jsxRuntime.jsxs(Stack, { direction: "row", gap: `${neoDesign.spacing.spacing_2}px`, sx: { alignItems: 'center' }, children: [showPause && (jsxRuntime.jsx(ActionButton, { size: "small", onClick: onPause, "aria-label": "Pause download", children: jsxRuntime.jsx(Minus, { size: neoDesign.spacing.spacing_2 }) })), showClose && (jsxRuntime.jsx(ActionButton, { size: "small", onClick: onClose, "aria-label": "Close", children: jsxRuntime.jsx(X, { size: neoDesign.spacing.spacing_2 }) }))] }));
|
|
3995
|
+
};
|
|
3996
|
+
return (jsxRuntime.jsxs(StyledRoot$1, { elevation: 0, role: "status", ...props, children: [jsxRuntime.jsxs(Stack, { direction: "row", sx: {
|
|
3997
|
+
alignItems: 'flex-start',
|
|
3998
|
+
justifyContent: 'space-between',
|
|
3999
|
+
width: '100%',
|
|
4000
|
+
gap: `${neoDesign.spacing.spacing_4}px`,
|
|
4001
|
+
}, children: [title && jsxRuntime.jsx(Title, { children: title }), renderActions()] }), jsxRuntime.jsxs(Stack, { gap: `${neoDesign.spacing.spacing_1}px`, sx: { width: '100%' }, children: [jsxRuntime.jsxs(Stack, { direction: "row", gap: `${neoDesign.spacing.spacing_2}px`, sx: { alignItems: 'flex-end', justifyContent: 'space-between', width: '100%' }, children: [fileName && jsxRuntime.jsx(FileName, { children: fileName }), progress !== undefined && jsxRuntime.jsxs(ProgressLabel$1, { children: [progress, "%"] })] }), jsxRuntime.jsx(StyledLinearProgress$1, { variant: "determinate", value: progress ?? 0 })] })] }));
|
|
4002
|
+
};
|
|
4003
|
+
NeoDownloadToast.displayName = 'NeoDownloadToast';
|
|
4004
|
+
|
|
3643
4005
|
const StyledMenu = styles.styled(Menu)(({ theme }) => ({
|
|
3644
4006
|
[`& .${Paper.paperClasses.root}`]: {
|
|
3645
4007
|
backgroundColor: neoDesign.semanticColors.surfaces.white,
|
|
@@ -3824,11 +4186,11 @@ const StyledFooter = styles.styled(Box, {
|
|
|
3824
4186
|
'&::before': {
|
|
3825
4187
|
content: showShadow ? '""' : 'none',
|
|
3826
4188
|
position: 'absolute',
|
|
3827
|
-
top: `-${neoDesign.shadows.
|
|
4189
|
+
top: `-${neoDesign.shadows.neutral.regular.blur}px`, // -4px
|
|
3828
4190
|
left: 0,
|
|
3829
4191
|
right: 0,
|
|
3830
|
-
height: `${neoDesign.shadows.
|
|
3831
|
-
background: `linear-gradient(to top, ${neoDesign.shadows.
|
|
4192
|
+
height: `${neoDesign.shadows.neutral.regular.blur}px`, // 4px
|
|
4193
|
+
background: `linear-gradient(to top, ${neoDesign.shadows.neutral.regular.shadow}, transparent)`, // rgba(31, 41, 55, 0.1)
|
|
3832
4194
|
pointerEvents: 'none',
|
|
3833
4195
|
},
|
|
3834
4196
|
[theme.breakpoints.down('sm')]: {
|
|
@@ -4247,7 +4609,7 @@ const InfoIconWrapper = styles.styled('span')({
|
|
|
4247
4609
|
});
|
|
4248
4610
|
const StyledInputBase = styles.styled(InputBase, {
|
|
4249
4611
|
shouldForwardProp: prop => prop !== 'size' && prop !== 'destructive',
|
|
4250
|
-
})(({ theme, size = 'medium', destructive, startAdornment }) => {
|
|
4612
|
+
})(({ theme, size = 'medium', destructive, startAdornment, multiline }) => {
|
|
4251
4613
|
const sizeConfig = {
|
|
4252
4614
|
small: {
|
|
4253
4615
|
height: neoDesign.spacing.spacing_5,
|
|
@@ -4264,7 +4626,7 @@ const StyledInputBase = styles.styled(InputBase, {
|
|
|
4264
4626
|
};
|
|
4265
4627
|
const sizeStyles = sizeConfig[size];
|
|
4266
4628
|
return {
|
|
4267
|
-
height: sizeStyles.height,
|
|
4629
|
+
height: multiline ? 'auto' : sizeStyles.height,
|
|
4268
4630
|
fontSize: sizeStyles.fontSize,
|
|
4269
4631
|
borderRadius: sizeStyles.borderRadius,
|
|
4270
4632
|
backgroundColor: neoDesign.semanticColors.input.background,
|
|
@@ -4734,271 +5096,36 @@ const NeoListItemButton = ({ children, selected = false, disabled = false, ...pr
|
|
|
4734
5096
|
NeoListItemButton.displayName = 'NeoListItemButton';
|
|
4735
5097
|
|
|
4736
5098
|
/**
|
|
4737
|
-
*
|
|
4738
|
-
*/
|
|
4739
|
-
const activeShadow$1 = `${neoDesign.shadows.card.x}px ${neoDesign.shadows.card.y}px ${neoDesign.shadows.card.blur}px ${neoDesign.shadows.card.spread}px ${neoDesign.shadows.card.shadow}`;
|
|
4740
|
-
/**
|
|
4741
|
-
* Styled Card component with Neo design tokens
|
|
4742
|
-
*/
|
|
4743
|
-
const StyledCard = styles.styled(MuiCard, {
|
|
4744
|
-
shouldForwardProp: prop => prop !== 'selected' && prop !== 'disabled',
|
|
4745
|
-
})(({ theme, selected, disabled }) => ({
|
|
4746
|
-
width: 160,
|
|
4747
|
-
height: 160,
|
|
4748
|
-
padding: theme.spacing(1.5), // 12px
|
|
4749
|
-
display: 'flex',
|
|
4750
|
-
flexDirection: 'column',
|
|
4751
|
-
gap: theme.spacing(2), // 16px
|
|
4752
|
-
backgroundColor: neoDesign.semanticColors.surfaces.card,
|
|
4753
|
-
border: `1px solid ${selected ? neoDesign.semanticColors.buttons.primary.default : neoDesign.semanticColors.border.primary}`,
|
|
4754
|
-
borderRadius: neoDesign.borderRadius.xS,
|
|
4755
|
-
boxShadow: selected ? activeShadow$1 : 'none',
|
|
4756
|
-
transition: theme.transitions.create(['border-color', 'background-color', 'box-shadow']),
|
|
4757
|
-
cursor: 'pointer',
|
|
4758
|
-
'&:hover': {
|
|
4759
|
-
borderColor: neoDesign.semanticColors.buttons.primary.default,
|
|
4760
|
-
boxShadow: activeShadow$1,
|
|
4761
|
-
},
|
|
4762
|
-
'&:focus-visible': {
|
|
4763
|
-
borderColor: neoDesign.semanticColors.buttons.primary.default,
|
|
4764
|
-
...focusRingStyles,
|
|
4765
|
-
},
|
|
4766
|
-
...(disabled && {
|
|
4767
|
-
opacity: 0.5,
|
|
4768
|
-
pointerEvents: 'none',
|
|
4769
|
-
cursor: 'not-allowed',
|
|
4770
|
-
}),
|
|
4771
|
-
}));
|
|
4772
|
-
/**
|
|
4773
|
-
* Header section containing logo and recipe count
|
|
4774
|
-
*/
|
|
4775
|
-
const CardHeader = styles.styled('div')({
|
|
4776
|
-
display: 'flex',
|
|
4777
|
-
alignItems: 'flex-start',
|
|
4778
|
-
justifyContent: 'space-between',
|
|
4779
|
-
width: '100%',
|
|
4780
|
-
});
|
|
4781
|
-
/**
|
|
4782
|
-
* Logo container
|
|
4783
|
-
*/
|
|
4784
|
-
const LogoContainer = styles.styled('div')({
|
|
4785
|
-
width: neoDesign.spacing.spacing_6,
|
|
4786
|
-
height: neoDesign.spacing.spacing_6,
|
|
4787
|
-
flexShrink: 0,
|
|
4788
|
-
});
|
|
4789
|
-
/**
|
|
4790
|
-
* Recipe count badge
|
|
4791
|
-
*/
|
|
4792
|
-
const RecipeCount = styles.styled('p')(({ theme }) => ({
|
|
4793
|
-
margin: 0,
|
|
4794
|
-
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.xxs), // 10px
|
|
4795
|
-
fontWeight: neoDesign.typography.fontWeight.semiBold, // 600
|
|
4796
|
-
lineHeight: 1.2,
|
|
4797
|
-
color: neoDesign.colors.grey[800],
|
|
4798
|
-
whiteSpace: 'nowrap',
|
|
4799
|
-
}));
|
|
4800
|
-
/**
|
|
4801
|
-
* Content section containing title and description
|
|
4802
|
-
*/
|
|
4803
|
-
const CardContent = styles.styled('div')(({ theme }) => ({
|
|
4804
|
-
display: 'flex',
|
|
4805
|
-
flexDirection: 'column',
|
|
4806
|
-
gap: theme.spacing(2), // 16px
|
|
4807
|
-
width: '100%',
|
|
4808
|
-
}));
|
|
4809
|
-
/**
|
|
4810
|
-
* Title text
|
|
4811
|
-
*/
|
|
4812
|
-
const Title = styles.styled('p')(({ theme }) => ({
|
|
4813
|
-
margin: 0,
|
|
4814
|
-
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.h6), // 16px
|
|
4815
|
-
fontWeight: neoDesign.typography.fontWeight.semiBold, // 600
|
|
4816
|
-
lineHeight: 1.4,
|
|
4817
|
-
color: neoDesign.colors.grey[800],
|
|
4818
|
-
width: '100%',
|
|
4819
|
-
}));
|
|
4820
|
-
/**
|
|
4821
|
-
* Description text
|
|
4822
|
-
*/
|
|
4823
|
-
const Description$1 = styles.styled('p')(({ theme }) => ({
|
|
4824
|
-
margin: 0,
|
|
4825
|
-
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.xs), // 12px
|
|
4826
|
-
fontWeight: neoDesign.typography.fontWeight.regular, // 400
|
|
4827
|
-
lineHeight: 1.5,
|
|
4828
|
-
color: neoDesign.colors.grey[800],
|
|
4829
|
-
width: '100%',
|
|
4830
|
-
display: '-webkit-box',
|
|
4831
|
-
WebkitLineClamp: 2,
|
|
4832
|
-
WebkitBoxOrient: 'vertical',
|
|
4833
|
-
overflow: 'hidden',
|
|
4834
|
-
textOverflow: 'ellipsis',
|
|
4835
|
-
}));
|
|
4836
|
-
/**
|
|
4837
|
-
* NeoMarketplaceCard - Selectable card component for marketplace items
|
|
4838
|
-
*
|
|
4839
|
-
* A fixed-size card (160x160px) displaying a logo, recipe count, title, and description.
|
|
4840
|
-
* Supports selected (active), disabled, and focused states.
|
|
5099
|
+
* @deprecated Use `NeoCard` with `size="small"` instead.
|
|
4841
5100
|
*
|
|
4842
5101
|
* @example
|
|
4843
5102
|
* ```tsx
|
|
4844
|
-
*
|
|
4845
|
-
*
|
|
4846
|
-
* recipeCount="1,260 recipes"
|
|
4847
|
-
* title="Java"
|
|
4848
|
-
* description="Basic building blocks for transforming Java..."
|
|
4849
|
-
* selected={false}
|
|
4850
|
-
* disabled={false}
|
|
4851
|
-
* onClick={() => console.log('clicked')}
|
|
4852
|
-
* />
|
|
4853
|
-
* ```
|
|
5103
|
+
* // Before
|
|
5104
|
+
* <NeoMarketplaceCard logo={...} title="Java" ... />
|
|
4854
5105
|
*
|
|
4855
|
-
*
|
|
4856
|
-
*
|
|
4857
|
-
*
|
|
4858
|
-
|
|
4859
|
-
|
|
4860
|
-
|
|
4861
|
-
* - State="Hover" → CSS :hover state (not a prop)
|
|
4862
|
-
* - State="Default" → Base state (no props)
|
|
4863
|
-
*
|
|
4864
|
-
* Design Tokens Used:
|
|
4865
|
-
* - semanticColors.surfaces.card (#FFFFFF) - Default card background
|
|
4866
|
-
* - semanticColors.status.info.light (#f2f3ff) - Active/focused card background
|
|
4867
|
-
* - semanticColors.border.primary (#d1d5db) - Default border
|
|
4868
|
-
* - semanticColors.buttons.primary.default (#2f42ff) - Active/focused border
|
|
4869
|
-
* - shadows.focusWhite1 - Inner white focus ring (2px spread)
|
|
4870
|
-
* - shadows.focusBlue2 - Outer blue focus ring (4px spread)
|
|
4871
|
-
* - colors.grey[800] (#1F2937) - Text color
|
|
4872
|
-
* - typography.fontSize.xxs (10px) - Recipe count
|
|
4873
|
-
* - typography.fontSize.xs (12px) - Description
|
|
4874
|
-
* - typography.fontSize.h6 (16px) - Title
|
|
4875
|
-
* - typography.fontWeight.semiBold (600) - Title and recipe count
|
|
4876
|
-
* - typography.fontWeight.regular (400) - Description
|
|
4877
|
-
*/
|
|
4878
|
-
const NeoMarketplaceCard = ({ logo, recipeCount, title, description, selected = false, disabled = false, onClick, ...props }) => {
|
|
4879
|
-
return (jsxRuntime.jsxs(StyledCard, { selected: selected, disabled: disabled, onClick: disabled ? undefined : onClick, tabIndex: disabled ? -1 : 0, role: "button", "aria-disabled": disabled, "aria-pressed": selected, ...props, children: [jsxRuntime.jsxs(CardHeader, { children: [jsxRuntime.jsx(LogoContainer, { children: logo }), jsxRuntime.jsx(RecipeCount, { children: recipeCount })] }), jsxRuntime.jsxs(CardContent, { children: [jsxRuntime.jsx(Title, { children: title }), jsxRuntime.jsx(Description$1, { children: description })] })] }));
|
|
5106
|
+
* // After
|
|
5107
|
+
* <NeoCard size="small" logo={...} title="Java" ... />
|
|
5108
|
+
* ```
|
|
5109
|
+
*/
|
|
5110
|
+
const NeoMarketplaceCard = (props) => {
|
|
5111
|
+
return jsxRuntime.jsx(NeoCard, { size: "small", ...props });
|
|
4880
5112
|
};
|
|
4881
5113
|
NeoMarketplaceCard.displayName = 'NeoMarketplaceCard';
|
|
4882
5114
|
|
|
4883
|
-
const activeShadow = `${neoDesign.shadows.card.x}px ${neoDesign.shadows.card.y}px ${neoDesign.shadows.card.blur}px ${neoDesign.shadows.card.spread}px ${neoDesign.shadows.card.shadow}`;
|
|
4884
|
-
const StyledLargeCard = styles.styled(MuiCard, {
|
|
4885
|
-
shouldForwardProp: prop => prop !== 'cardState' && prop !== 'cardTheme',
|
|
4886
|
-
})(({ cardState = 'default', cardTheme = 'light' }) => {
|
|
4887
|
-
const isLight = cardTheme === 'light';
|
|
4888
|
-
const isActive = cardState === 'active';
|
|
4889
|
-
const isDisabled = cardState === 'disabled';
|
|
4890
|
-
const isFocused = cardState === 'focused';
|
|
4891
|
-
const activeBorderColor = isLight
|
|
4892
|
-
? neoDesign.semanticColors.buttons.primary.default
|
|
4893
|
-
: neoDesign.colors.digitalGreen[300];
|
|
4894
|
-
const defaultBorderColor = isLight
|
|
4895
|
-
? neoDesign.semanticColors.border.primary
|
|
4896
|
-
: `${neoDesign.semanticColors.border.primary}80`;
|
|
4897
|
-
return {
|
|
4898
|
-
width: 340,
|
|
4899
|
-
height: 162,
|
|
4900
|
-
display: 'flex',
|
|
4901
|
-
flexDirection: 'column',
|
|
4902
|
-
justifyContent: 'space-between',
|
|
4903
|
-
alignItems: 'flex-start',
|
|
4904
|
-
padding: neoDesign.spacing.spacing_2,
|
|
4905
|
-
borderRadius: neoDesign.borderRadius.xS,
|
|
4906
|
-
backgroundColor: isLight ? neoDesign.semanticColors.surfaces.card : neoDesign.colors.grey[800],
|
|
4907
|
-
border: `1px solid ${isActive || isFocused ? activeBorderColor : defaultBorderColor}`,
|
|
4908
|
-
boxShadow: isActive ? activeShadow : 'none',
|
|
4909
|
-
overflow: 'hidden',
|
|
4910
|
-
...(isFocused && focusRingStyles),
|
|
4911
|
-
'&:focus-visible': {
|
|
4912
|
-
borderColor: isLight ? neoDesign.semanticColors.buttons.primary.default : neoDesign.colors.digitalGreen[300],
|
|
4913
|
-
...focusRingStyles,
|
|
4914
|
-
},
|
|
4915
|
-
...(isDisabled && {
|
|
4916
|
-
opacity: 0.5,
|
|
4917
|
-
pointerEvents: 'none',
|
|
4918
|
-
cursor: 'not-allowed',
|
|
4919
|
-
}),
|
|
4920
|
-
};
|
|
4921
|
-
});
|
|
4922
|
-
const TopSection = styles.styled('div')({
|
|
4923
|
-
display: 'flex',
|
|
4924
|
-
flexDirection: 'column',
|
|
4925
|
-
gap: neoDesign.spacing.spacing_2,
|
|
4926
|
-
alignItems: 'flex-start',
|
|
4927
|
-
width: '100%',
|
|
4928
|
-
flexShrink: 0,
|
|
4929
|
-
});
|
|
4930
|
-
const HeaderRow = styles.styled('div')({
|
|
4931
|
-
display: 'flex',
|
|
4932
|
-
gap: neoDesign.spacing.spacing_1,
|
|
4933
|
-
alignItems: 'center',
|
|
4934
|
-
flexShrink: 0,
|
|
4935
|
-
});
|
|
4936
|
-
const HeaderSlot = styles.styled('div')({
|
|
4937
|
-
display: 'flex',
|
|
4938
|
-
flexDirection: 'column',
|
|
4939
|
-
alignItems: 'center',
|
|
4940
|
-
justifyContent: 'center',
|
|
4941
|
-
width: 20,
|
|
4942
|
-
height: 20,
|
|
4943
|
-
flexShrink: 0,
|
|
4944
|
-
});
|
|
4945
|
-
const HeaderTitle = styles.styled('span', {
|
|
4946
|
-
shouldForwardProp: prop => prop !== 'cardTheme',
|
|
4947
|
-
})(({ cardTheme = 'light' }) => ({
|
|
4948
|
-
fontFamily: `${neoDesign.typography.fontFamily.heading}, sans-serif`,
|
|
4949
|
-
fontWeight: neoDesign.typography.fontWeight.semiBold,
|
|
4950
|
-
fontSize: neoDesign.typography.fontSize.h6,
|
|
4951
|
-
lineHeight: 1.4,
|
|
4952
|
-
color: cardTheme === 'light' ? neoDesign.colors.grey[800] : neoDesign.semanticColors.surfaces.white,
|
|
4953
|
-
flexShrink: 0,
|
|
4954
|
-
}));
|
|
4955
|
-
const Description = styles.styled('p', {
|
|
4956
|
-
shouldForwardProp: prop => prop !== 'cardTheme',
|
|
4957
|
-
})(({ cardTheme = 'light' }) => ({
|
|
4958
|
-
fontFamily: `${neoDesign.typography.fontFamily.body}, sans-serif`,
|
|
4959
|
-
fontWeight: neoDesign.typography.fontWeight.regular,
|
|
4960
|
-
fontSize: neoDesign.typography.fontSize.xs,
|
|
4961
|
-
lineHeight: 1.5,
|
|
4962
|
-
color: cardTheme === 'light' ? neoDesign.colors.grey[800] : neoDesign.semanticColors.surfaces.white,
|
|
4963
|
-
margin: 0,
|
|
4964
|
-
minWidth: '100%',
|
|
4965
|
-
wordWrap: 'break-word',
|
|
4966
|
-
}));
|
|
4967
|
-
const ButtonsRow = styles.styled('div')({
|
|
4968
|
-
display: 'flex',
|
|
4969
|
-
gap: neoDesign.spacing.spacing_3,
|
|
4970
|
-
alignItems: 'flex-start',
|
|
4971
|
-
flexShrink: 0,
|
|
4972
|
-
});
|
|
4973
5115
|
/**
|
|
4974
|
-
*
|
|
4975
|
-
*
|
|
4976
|
-
* A 340x162px card with optional icon, gel brand icon, title, description, and action buttons.
|
|
4977
|
-
* Icon, gel, and title display inline in a header row.
|
|
4978
|
-
* Supports 4 states (default, active, disabled, focused) and 2 themes (light, dark).
|
|
4979
|
-
*
|
|
4980
|
-
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC?node-id=5925-11
|
|
5116
|
+
* @deprecated Use `NeoCard` with `size="large"` instead.
|
|
4981
5117
|
*
|
|
4982
|
-
*
|
|
4983
|
-
*
|
|
4984
|
-
*
|
|
4985
|
-
*
|
|
4986
|
-
* - Show Gel → showGel
|
|
4987
|
-
* - Show Buttons → showButtons
|
|
5118
|
+
* @example
|
|
5119
|
+
* ```tsx
|
|
5120
|
+
* // Before
|
|
5121
|
+
* <NeoMarketplaceLargeCard cardTheme="light" ... />
|
|
4988
5122
|
*
|
|
4989
|
-
*
|
|
4990
|
-
*
|
|
4991
|
-
*
|
|
4992
|
-
|
|
4993
|
-
|
|
4994
|
-
|
|
4995
|
-
* - borderRadius.xS (4px) - Corner radius
|
|
4996
|
-
* - shadows.focusWhite1 + shadows.focusBlue2 - Focus ring
|
|
4997
|
-
* - shadows.card - Active state shadow
|
|
4998
|
-
*/
|
|
4999
|
-
const NeoMarketplaceLargeCard = ({ state = 'default', cardTheme = 'light', showIcon = true, showGel = true, showButtons = true, icon, gel, title, children, actions, onClick, ...props }) => {
|
|
5000
|
-
const isDisabled = state === 'disabled';
|
|
5001
|
-
return (jsxRuntime.jsxs(StyledLargeCard, { cardState: state, cardTheme: cardTheme, onClick: isDisabled ? undefined : onClick, tabIndex: isDisabled ? -1 : 0, "aria-disabled": isDisabled || undefined, ...props, children: [jsxRuntime.jsxs(TopSection, { children: [jsxRuntime.jsxs(HeaderRow, { children: [showIcon && icon && jsxRuntime.jsx(HeaderSlot, { children: icon }), showGel && gel && jsxRuntime.jsx(HeaderSlot, { children: gel }), title && jsxRuntime.jsx(HeaderTitle, { cardTheme: cardTheme, children: title })] }), children && jsxRuntime.jsx(Description, { cardTheme: cardTheme, children: children })] }), showButtons && actions && jsxRuntime.jsx(ButtonsRow, { children: actions })] }));
|
|
5123
|
+
* // After
|
|
5124
|
+
* <NeoCard size="large" cardTheme="light" ... />
|
|
5125
|
+
* ```
|
|
5126
|
+
*/
|
|
5127
|
+
const NeoMarketplaceLargeCard = (props) => {
|
|
5128
|
+
return jsxRuntime.jsx(NeoCard, { size: "large", ...props });
|
|
5002
5129
|
};
|
|
5003
5130
|
NeoMarketplaceLargeCard.displayName = 'NeoMarketplaceLargeCard';
|
|
5004
5131
|
|
|
@@ -5225,15 +5352,14 @@ const StyledRoot = styles.styled(ButtonBase, {
|
|
|
5225
5352
|
})(({ selected }) => ({
|
|
5226
5353
|
display: 'flex',
|
|
5227
5354
|
flexDirection: 'column',
|
|
5228
|
-
gap: neoDesign.spacing.
|
|
5355
|
+
gap: neoDesign.spacing.spacing_1_2, // 4px
|
|
5229
5356
|
alignItems: 'center',
|
|
5230
5357
|
justifyContent: 'center',
|
|
5231
5358
|
paddingTop: neoDesign.spacing.spacing_1, // 8px
|
|
5232
5359
|
paddingBottom: neoDesign.spacing.spacing_1, // 8px
|
|
5233
5360
|
paddingLeft: neoDesign.spacing.spacing_1_2, // 4px
|
|
5234
5361
|
paddingRight: neoDesign.spacing.spacing_1_2, // 4px
|
|
5235
|
-
borderRadius: neoDesign.borderRadius.
|
|
5236
|
-
width: 95,
|
|
5362
|
+
borderRadius: neoDesign.borderRadius.s, // 8px
|
|
5237
5363
|
cursor: 'pointer',
|
|
5238
5364
|
textDecoration: 'none',
|
|
5239
5365
|
'&:hover .neo-nav-icon-padding': {
|
|
@@ -5279,7 +5405,7 @@ const IconPadding = styles.styled('span')({
|
|
|
5279
5405
|
display: 'flex',
|
|
5280
5406
|
alignItems: 'center',
|
|
5281
5407
|
padding: neoDesign.spacing.spacing_1, // 8px
|
|
5282
|
-
borderRadius: neoDesign.
|
|
5408
|
+
borderRadius: neoDesign.borderRadius.s, // 8px
|
|
5283
5409
|
border: '1px solid transparent',
|
|
5284
5410
|
transition: 'background-color 150ms, border-color 150ms',
|
|
5285
5411
|
});
|
|
@@ -5313,9 +5439,9 @@ const TagPill = styles.styled('span')(({ theme }) => ({
|
|
|
5313
5439
|
*
|
|
5314
5440
|
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=8455-6120
|
|
5315
5441
|
*/
|
|
5316
|
-
|
|
5442
|
+
function NeoNavigationItem({ icon, label, selected = false, tag, children, ...props }) {
|
|
5317
5443
|
return (jsxRuntime.jsxs(StyledRoot, { selected: selected, disableRipple: true, ...props, children: [jsxRuntime.jsx(IconPadding, { className: "neo-nav-icon-padding", children: icon }), label && jsxRuntime.jsx(Label$2, { className: "neo-nav-label", children: label }), tag && jsxRuntime.jsx(TagPill, { children: tag }), children] }));
|
|
5318
|
-
}
|
|
5444
|
+
}
|
|
5319
5445
|
NeoNavigationItem.displayName = 'NeoNavigationItem';
|
|
5320
5446
|
|
|
5321
5447
|
/**
|
|
@@ -5539,7 +5665,7 @@ function NeoPaginatedGrid({ slots, pageSizeOptions, slotProps: userSlotProps, ..
|
|
|
5539
5665
|
}
|
|
5540
5666
|
NeoPaginatedGrid.displayName = 'NeoPaginatedGrid';
|
|
5541
5667
|
|
|
5542
|
-
const StyledLinearProgress
|
|
5668
|
+
const StyledLinearProgress = styles.styled(LinearProgress, {
|
|
5543
5669
|
shouldForwardProp: prop => prop !== 'labelPosition',
|
|
5544
5670
|
})(() => ({
|
|
5545
5671
|
height: 8,
|
|
@@ -5584,7 +5710,7 @@ const ProgressWrapper = styles.styled('div')(({ labelPosition }) => ({
|
|
|
5584
5710
|
flexDirection: 'row',
|
|
5585
5711
|
}),
|
|
5586
5712
|
}));
|
|
5587
|
-
const ProgressLabel
|
|
5713
|
+
const ProgressLabel = styles.styled(Typography)(({ theme }) => ({
|
|
5588
5714
|
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.sm),
|
|
5589
5715
|
fontWeight: neoDesign.typography.fontWeight.medium,
|
|
5590
5716
|
color: neoDesign.colors.grey[800],
|
|
@@ -5613,7 +5739,7 @@ const ProgressBarContainer = styles.styled('div')(({ labelPosition }) => ({
|
|
|
5613
5739
|
const NeoProgressbar = ({ value = 0, labelPosition = 'none', variant = 'default', labelText, ...props }) => {
|
|
5614
5740
|
const showLabel = labelPosition !== 'none';
|
|
5615
5741
|
const displayLabel = labelText || (variant === 'cancelled' ? 'Canceled' : `${Math.round(value)}%`);
|
|
5616
|
-
return (jsxRuntime.jsxs(ProgressWrapper, { labelPosition: labelPosition, children: [jsxRuntime.jsx(ProgressBarContainer, { labelPosition: labelPosition, children: jsxRuntime.jsx(StyledLinearProgress
|
|
5742
|
+
return (jsxRuntime.jsxs(ProgressWrapper, { labelPosition: labelPosition, children: [jsxRuntime.jsx(ProgressBarContainer, { labelPosition: labelPosition, children: jsxRuntime.jsx(StyledLinearProgress, { variant: "determinate", value: variant === 'cancelled' ? 100 : value, "data-variant": variant, labelPosition: labelPosition, ...props }) }), showLabel && jsxRuntime.jsx(ProgressLabel, { children: displayLabel })] }));
|
|
5617
5743
|
};
|
|
5618
5744
|
NeoProgressbar.displayName = 'NeoProgressbar';
|
|
5619
5745
|
|
|
@@ -5715,17 +5841,19 @@ const NeoQuickFilter = ({ placeholder = 'Search...', onKeyDown, autoFocus = fals
|
|
|
5715
5841
|
NeoQuickFilter.displayName = 'NeoQuickFilter';
|
|
5716
5842
|
|
|
5717
5843
|
// Custom radio icons to match Figma design
|
|
5718
|
-
const UncheckedIcon = ({ size }) => {
|
|
5844
|
+
const UncheckedIcon = ({ size, disabled }) => {
|
|
5719
5845
|
const dimensions = size === 'small' ? 16 : 20;
|
|
5720
5846
|
const radius = size === 'small' ? 8 : 10;
|
|
5721
|
-
return (jsxRuntime.jsxs("svg", { width: dimensions, height: dimensions, viewBox: `0 0 ${dimensions} ${dimensions}`, fill: "none", "aria-hidden": "true", children: [jsxRuntime.jsx("title", { children: "Unchecked radio button" }), jsxRuntime.jsx("circle", { cx: dimensions / 2, cy: dimensions / 2, r: radius - 0.5, stroke: neoDesign.semanticColors.border.primary, strokeWidth: "1", fill:
|
|
5847
|
+
return (jsxRuntime.jsxs("svg", { width: dimensions, height: dimensions, viewBox: `0 0 ${dimensions} ${dimensions}`, fill: "none", "aria-hidden": "true", children: [jsxRuntime.jsx("title", { children: "Unchecked radio button" }), jsxRuntime.jsx("circle", { cx: dimensions / 2, cy: dimensions / 2, r: radius - 0.5, stroke: neoDesign.semanticColors.border.primary, strokeWidth: "1", fill: disabled ? neoDesign.semanticColors.buttons.primary.disabled : 'transparent' })] }));
|
|
5722
5848
|
};
|
|
5723
|
-
const CheckedIcon = ({ size }) => {
|
|
5849
|
+
const CheckedIcon = ({ size, disabled }) => {
|
|
5724
5850
|
const dimensions = size === 'small' ? 16 : 20;
|
|
5725
5851
|
const radius = size === 'small' ? 8 : 10;
|
|
5726
5852
|
const inset = size === 'small' ? 0.3125 : 0.3; // 31.25% or 30%
|
|
5727
5853
|
const innerRadius = radius * (1 - 2 * inset);
|
|
5728
|
-
return (jsxRuntime.jsxs("svg", { width: dimensions, height: dimensions, viewBox: `0 0 ${dimensions} ${dimensions}`, fill: "none", "aria-hidden": "true", children: [jsxRuntime.jsx("title", { children: "Checked radio button" }), jsxRuntime.jsx("circle", { cx: dimensions / 2, cy: dimensions / 2, r: radius - 0.5, fill:
|
|
5854
|
+
return (jsxRuntime.jsxs("svg", { width: dimensions, height: dimensions, viewBox: `0 0 ${dimensions} ${dimensions}`, fill: "none", "aria-hidden": "true", children: [jsxRuntime.jsx("title", { children: "Checked radio button" }), jsxRuntime.jsx("circle", { cx: dimensions / 2, cy: dimensions / 2, r: radius - 0.5, fill: disabled
|
|
5855
|
+
? neoDesign.semanticColors.buttons.primary.disabled
|
|
5856
|
+
: neoDesign.semanticColors.buttons.primary.default, stroke: disabled ? neoDesign.semanticColors.border.primary : neoDesign.semanticColors.buttons.primary.default, strokeWidth: "1" }), jsxRuntime.jsx("circle", { cx: dimensions / 2, cy: dimensions / 2, r: innerRadius, fill: disabled ? neoDesign.semanticColors.icons.disabled : neoDesign.semanticColors.surfaces.white })] }));
|
|
5729
5857
|
};
|
|
5730
5858
|
const RadioContainer = styles.styled('label')(({ disabled }) => ({
|
|
5731
5859
|
display: 'inline-flex',
|
|
@@ -5770,6 +5898,10 @@ const StyledRadio = styles.styled(Radio, {
|
|
|
5770
5898
|
height: dimensions,
|
|
5771
5899
|
flexShrink: 0,
|
|
5772
5900
|
borderRadius: radius,
|
|
5901
|
+
color: neoDesign.semanticColors.border.primary,
|
|
5902
|
+
[`&.${Radio.radioClasses.checked}`]: {
|
|
5903
|
+
color: neoDesign.semanticColors.buttons.primary.default,
|
|
5904
|
+
},
|
|
5773
5905
|
'&:hover': {
|
|
5774
5906
|
backgroundColor: 'transparent',
|
|
5775
5907
|
},
|
|
@@ -5787,9 +5919,12 @@ const StyledRadio = styles.styled(Radio, {
|
|
|
5787
5919
|
backgroundColor: 'transparent',
|
|
5788
5920
|
},
|
|
5789
5921
|
},
|
|
5790
|
-
// Disabled state
|
|
5922
|
+
// Disabled state — icons handle their own disabled colors
|
|
5791
5923
|
[`&.${Radio.radioClasses.disabled}`]: {
|
|
5792
|
-
|
|
5924
|
+
color: neoDesign.semanticColors.border.primary,
|
|
5925
|
+
[`&.${Radio.radioClasses.checked}`]: {
|
|
5926
|
+
color: neoDesign.semanticColors.border.primary,
|
|
5927
|
+
},
|
|
5793
5928
|
},
|
|
5794
5929
|
};
|
|
5795
5930
|
});
|
|
@@ -5797,7 +5932,6 @@ const StyledRadio = styles.styled(Radio, {
|
|
|
5797
5932
|
* NeoRadio - Radio button component based on MUI Radio
|
|
5798
5933
|
*
|
|
5799
5934
|
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4122-40039
|
|
5800
|
-
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4122-40150
|
|
5801
5935
|
*
|
|
5802
5936
|
* Figma Props Mapping:
|
|
5803
5937
|
* - Checked (True|False) → checked prop
|
|
@@ -5837,9 +5971,9 @@ const StyledRadio = styles.styled(Radio, {
|
|
|
5837
5971
|
* </RadioGroup>
|
|
5838
5972
|
*/
|
|
5839
5973
|
const NeoRadio = ({ size = 'medium', label, helperText, disabled, ...props }) => {
|
|
5840
|
-
// Custom icons based on size
|
|
5841
|
-
const uncheckedIcon = jsxRuntime.jsx(UncheckedIcon, { size: size });
|
|
5842
|
-
const checkedIcon = jsxRuntime.jsx(CheckedIcon, { size: size });
|
|
5974
|
+
// Custom icons based on size and disabled state
|
|
5975
|
+
const uncheckedIcon = jsxRuntime.jsx(UncheckedIcon, { size: size, disabled: disabled });
|
|
5976
|
+
const checkedIcon = jsxRuntime.jsx(CheckedIcon, { size: size, disabled: disabled });
|
|
5843
5977
|
// If no label, return just the radio button
|
|
5844
5978
|
if (!label && !helperText) {
|
|
5845
5979
|
return (jsxRuntime.jsx(StyledRadio, { size: size, disabled: disabled, icon: uncheckedIcon, checkedIcon: checkedIcon, ...props }));
|
|
@@ -5963,127 +6097,6 @@ const NeoSkeleton = ({ colorTheme = 'light', position = 'start', ...props }) =>
|
|
|
5963
6097
|
};
|
|
5964
6098
|
NeoSkeleton.displayName = 'NeoSkeleton';
|
|
5965
6099
|
|
|
5966
|
-
/**
|
|
5967
|
-
* Styled Alert component with custom severity and variant styling
|
|
5968
|
-
* Uses Custom Variants Pattern to add 'neutral' and 'info' severities
|
|
5969
|
-
*/
|
|
5970
|
-
const StyledAlert$1 = styles.styled(Alert, {
|
|
5971
|
-
shouldForwardProp: prop => prop !== 'severity' && prop !== 'variant',
|
|
5972
|
-
})(({ theme, severity = 'success', variant = 'outlined' }) => {
|
|
5973
|
-
// Color mapping for different severities
|
|
5974
|
-
const colorMap = {
|
|
5975
|
-
success: {
|
|
5976
|
-
light: neoDesign.semanticColors.status.success.light,
|
|
5977
|
-
medium: neoDesign.semanticColors.status.success.default,
|
|
5978
|
-
},
|
|
5979
|
-
error: {
|
|
5980
|
-
light: neoDesign.semanticColors.status.error.light,
|
|
5981
|
-
medium: neoDesign.semanticColors.status.error.default,
|
|
5982
|
-
},
|
|
5983
|
-
neutral: {
|
|
5984
|
-
light: neoDesign.semanticColors.status.neutral.light,
|
|
5985
|
-
medium: neoDesign.semanticColors.status.neutral.default,
|
|
5986
|
-
},
|
|
5987
|
-
info: {
|
|
5988
|
-
light: neoDesign.semanticColors.status.info.light,
|
|
5989
|
-
medium: neoDesign.semanticColors.status.info.default,
|
|
5990
|
-
},
|
|
5991
|
-
};
|
|
5992
|
-
const severityColors = colorMap[severity];
|
|
5993
|
-
// Variant-specific styles based on Phase 1.1 analysis
|
|
5994
|
-
const variantStyles = (() => {
|
|
5995
|
-
if (variant === 'filled') {
|
|
5996
|
-
// Dark mode: solid background with white text
|
|
5997
|
-
return {
|
|
5998
|
-
backgroundColor: severityColors.medium,
|
|
5999
|
-
border: 'none',
|
|
6000
|
-
color: neoDesign.semanticColors.typography.tooltip,
|
|
6001
|
-
padding: theme.spacing(0.75, 3),
|
|
6002
|
-
boxShadow: `0px 1px 3px ${neoDesign.semanticColors.surfaces.shadowNeutral}1a`, // 1a = 10% opacity
|
|
6003
|
-
[`& .${Alert.alertClasses.icon}`]: {
|
|
6004
|
-
color: neoDesign.semanticColors.typography.tooltip,
|
|
6005
|
-
},
|
|
6006
|
-
[`& .${Alert.alertClasses.message}`]: {
|
|
6007
|
-
color: neoDesign.semanticColors.typography.tooltip,
|
|
6008
|
-
},
|
|
6009
|
-
};
|
|
6010
|
-
}
|
|
6011
|
-
// Light mode: light background with border
|
|
6012
|
-
return {
|
|
6013
|
-
backgroundColor: severityColors.light,
|
|
6014
|
-
border: `1px solid ${severityColors.medium}`,
|
|
6015
|
-
color: neoDesign.colors.grey[800],
|
|
6016
|
-
padding: theme.spacing(0.125, 2),
|
|
6017
|
-
[`& .${Alert.alertClasses.icon}`]: {
|
|
6018
|
-
color: severityColors.medium,
|
|
6019
|
-
},
|
|
6020
|
-
[`& .${Alert.alertClasses.message}`]: {
|
|
6021
|
-
color: neoDesign.colors.grey[800],
|
|
6022
|
-
},
|
|
6023
|
-
};
|
|
6024
|
-
})();
|
|
6025
|
-
return {
|
|
6026
|
-
height: neoDesign.spacing.spacing_8,
|
|
6027
|
-
width: '100%',
|
|
6028
|
-
borderRadius: neoDesign.borderRadius.xS,
|
|
6029
|
-
alignItems: 'center',
|
|
6030
|
-
fontFamily: neoDesign.typography.fontFamily.body,
|
|
6031
|
-
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.default),
|
|
6032
|
-
fontWeight: neoDesign.typography.fontWeight.medium,
|
|
6033
|
-
lineHeight: 1.5,
|
|
6034
|
-
...variantStyles,
|
|
6035
|
-
// Supporting text styling
|
|
6036
|
-
[`& .${Alert.alertClasses.message} > *:not(:first-child)`]: {
|
|
6037
|
-
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.sm),
|
|
6038
|
-
fontWeight: neoDesign.typography.fontWeight.regular,
|
|
6039
|
-
color: variant === 'filled'
|
|
6040
|
-
? neoDesign.semanticColors.typography.tooltip
|
|
6041
|
-
: neoDesign.semanticColors.typography.bodySecondary,
|
|
6042
|
-
lineHeight: 1.4,
|
|
6043
|
-
marginTop: theme.spacing(0.25),
|
|
6044
|
-
},
|
|
6045
|
-
};
|
|
6046
|
-
});
|
|
6047
|
-
/**
|
|
6048
|
-
* NeoStatusBanner - Status banner component for displaying system status messages
|
|
6049
|
-
*
|
|
6050
|
-
* Displays status information with different severity levels (success, error, info, neutral) and
|
|
6051
|
-
* visual modes (outlined for light backgrounds, filled for emphasis).
|
|
6052
|
-
*
|
|
6053
|
-
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4921-3427
|
|
6054
|
-
*
|
|
6055
|
-
* Figma Props Mapping:
|
|
6056
|
-
* - Status (Success|Error|Info|Offline) → severity ('success'|'error'|'info'|'neutral')
|
|
6057
|
-
* - Mode (Light|Dark) → variant ('outlined'|'filled')
|
|
6058
|
-
*
|
|
6059
|
-
* Design Tokens Used:
|
|
6060
|
-
* - status.success.light, status.success.default
|
|
6061
|
-
* - status.error.light, status.error.default
|
|
6062
|
-
* - status.neutral.light, status.neutral.default
|
|
6063
|
-
* - status.info.light, status.info.default
|
|
6064
|
-
* - typography.tooltip, typography.bodySecondary
|
|
6065
|
-
* - grey[800]
|
|
6066
|
-
* - fontSize.default, fontSize.sm
|
|
6067
|
-
* - fontWeight.medium, fontWeight.regular
|
|
6068
|
-
* - fontFamily.body
|
|
6069
|
-
* - surfaces.shadowNeutral
|
|
6070
|
-
*/
|
|
6071
|
-
const NeoStatusBanner = ({ severity = 'success', variant = 'outlined', icon, children, ...props }) => {
|
|
6072
|
-
// Icon mapping for different severities
|
|
6073
|
-
const iconMap = {
|
|
6074
|
-
success: jsxRuntime.jsx(CircleCheck, { size: 24 }),
|
|
6075
|
-
error: jsxRuntime.jsx(CircleAlert, { size: 24 }),
|
|
6076
|
-
neutral: jsxRuntime.jsx(WifiOff, { size: 24 }),
|
|
6077
|
-
info: jsxRuntime.jsx(Info, { size: 24 }),
|
|
6078
|
-
};
|
|
6079
|
-
const defaultIcon = iconMap[severity];
|
|
6080
|
-
// Type assertion needed: severity and variant are custom props filtered by shouldForwardProp
|
|
6081
|
-
// biome-ignore lint/suspicious/noExplicitAny: Custom props pattern requires any cast
|
|
6082
|
-
const StyledAlertAny = StyledAlert$1;
|
|
6083
|
-
return (jsxRuntime.jsx(StyledAlertAny, { ...props, severity: severity, variant: variant, icon: icon ?? defaultIcon, children: children }));
|
|
6084
|
-
};
|
|
6085
|
-
NeoStatusBanner.displayName = 'NeoStatusBanner';
|
|
6086
|
-
|
|
6087
6100
|
/**
|
|
6088
6101
|
* NeoTabs - Tabs container component based on MUI Tabs
|
|
6089
6102
|
*
|
|
@@ -6118,7 +6131,20 @@ const StyledTab = styles.styled(MuiTab)(({ theme }) => ({
|
|
|
6118
6131
|
color: neoDesign.semanticColors.typography.tab.active,
|
|
6119
6132
|
fontWeight: neoDesign.typography.fontWeight.semiBold,
|
|
6120
6133
|
},
|
|
6134
|
+
'&:hover': {
|
|
6135
|
+
backgroundColor: neoDesign.semanticColors.buttons.secondary.hoverBackground,
|
|
6136
|
+
[`&.${MuiTab.tabClasses.selected}::after`]: {
|
|
6137
|
+
content: '""',
|
|
6138
|
+
position: 'absolute',
|
|
6139
|
+
bottom: 0,
|
|
6140
|
+
left: 0,
|
|
6141
|
+
right: 0,
|
|
6142
|
+
height: 2,
|
|
6143
|
+
backgroundColor: neoDesign.semanticColors.buttons.primary.hover,
|
|
6144
|
+
},
|
|
6145
|
+
},
|
|
6121
6146
|
[`&.${ButtonBase.buttonBaseClasses.focusVisible}`]: {
|
|
6147
|
+
color: neoDesign.semanticColors.typography.tab.active,
|
|
6122
6148
|
outline: `2px solid ${neoDesign.semanticColors.border.focus}`,
|
|
6123
6149
|
outlineOffset: -2,
|
|
6124
6150
|
},
|
|
@@ -6126,6 +6152,21 @@ const StyledTab = styles.styled(MuiTab)(({ theme }) => ({
|
|
|
6126
6152
|
color: neoDesign.semanticColors.typography.button.disabled,
|
|
6127
6153
|
cursor: 'not-allowed',
|
|
6128
6154
|
pointerEvents: 'auto',
|
|
6155
|
+
'&:hover': {
|
|
6156
|
+
backgroundColor: 'transparent',
|
|
6157
|
+
},
|
|
6158
|
+
[`&.${MuiTab.tabClasses.selected}`]: {
|
|
6159
|
+
color: neoDesign.semanticColors.typography.button.disabled,
|
|
6160
|
+
'&::after': {
|
|
6161
|
+
content: '""',
|
|
6162
|
+
position: 'absolute',
|
|
6163
|
+
bottom: 0,
|
|
6164
|
+
left: 0,
|
|
6165
|
+
right: 0,
|
|
6166
|
+
height: 2,
|
|
6167
|
+
backgroundColor: neoDesign.semanticColors.buttons.tertiary.disabled,
|
|
6168
|
+
},
|
|
6169
|
+
},
|
|
6129
6170
|
},
|
|
6130
6171
|
}));
|
|
6131
6172
|
const TabLabelContainer = styles.styled('span')(({ theme }) => ({
|
|
@@ -6140,10 +6181,7 @@ const TabLabelContainer = styles.styled('span')(({ theme }) => ({
|
|
|
6140
6181
|
*
|
|
6141
6182
|
* Figma Props Mapping:
|
|
6142
6183
|
* - Current=True/False → Controlled by parent NeoTabs value
|
|
6143
|
-
* -
|
|
6144
|
-
* - State=Hover → CSS :hover
|
|
6145
|
-
* - State=Focus → CSS :focus-visible
|
|
6146
|
-
* - Tag count → count prop (renders NeoTag)
|
|
6184
|
+
* - Show tag → count prop (renders NeoTag)
|
|
6147
6185
|
* - Text label → label prop
|
|
6148
6186
|
*/
|
|
6149
6187
|
const NeoTab = ({ label, count, ...props }) => {
|
|
@@ -6154,7 +6192,7 @@ NeoTab.displayName = 'NeoTab';
|
|
|
6154
6192
|
|
|
6155
6193
|
// biome-ignore lint/suspicious/noExplicitAny: Type cast required to override MUI Alert variant type without global augmentation
|
|
6156
6194
|
const StyledAlert = styles.styled(Alert, {
|
|
6157
|
-
shouldForwardProp: prop => prop !== 'variant'
|
|
6195
|
+
shouldForwardProp: prop => prop !== 'variant',
|
|
6158
6196
|
})(({ theme, variant = 'default' }) => {
|
|
6159
6197
|
// Base styles
|
|
6160
6198
|
const baseStyles = {
|
|
@@ -6211,11 +6249,6 @@ const StyledAlert = styles.styled(Alert, {
|
|
|
6211
6249
|
color: neoDesign.semanticColors.status.info.dark,
|
|
6212
6250
|
border: `1px solid ${neoDesign.semanticColors.status.info.default}`,
|
|
6213
6251
|
},
|
|
6214
|
-
download: {
|
|
6215
|
-
backgroundColor: neoDesign.semanticColors.surfaces.snackbarDarkMode,
|
|
6216
|
-
color: neoDesign.colors.grey['800'],
|
|
6217
|
-
border: `1px solid ${neoDesign.semanticColors.border.primary}`,
|
|
6218
|
-
},
|
|
6219
6252
|
};
|
|
6220
6253
|
return {
|
|
6221
6254
|
...baseStyles,
|
|
@@ -6230,7 +6263,6 @@ const ToastTitle = styles.styled('p')(({ theme, variant = 'default' }) => {
|
|
|
6230
6263
|
error: neoDesign.semanticColors.status.error.dark,
|
|
6231
6264
|
success: neoDesign.semanticColors.status.success.dark,
|
|
6232
6265
|
info: neoDesign.semanticColors.status.info.dark,
|
|
6233
|
-
download: neoDesign.colors.grey['700'],
|
|
6234
6266
|
};
|
|
6235
6267
|
return {
|
|
6236
6268
|
margin: 0,
|
|
@@ -6248,7 +6280,6 @@ const ToastMessage = styles.styled('p')(({ theme, variant = 'default' }) => {
|
|
|
6248
6280
|
error: neoDesign.semanticColors.status.error.dark,
|
|
6249
6281
|
success: neoDesign.semanticColors.status.success.dark,
|
|
6250
6282
|
info: neoDesign.semanticColors.status.info.dark,
|
|
6251
|
-
download: neoDesign.colors.grey['800'],
|
|
6252
6283
|
};
|
|
6253
6284
|
return {
|
|
6254
6285
|
margin: 0,
|
|
@@ -6286,7 +6317,7 @@ const ToastButton = styles.styled(Button, {
|
|
|
6286
6317
|
if (toastVariant === 'info') {
|
|
6287
6318
|
return neoDesign.semanticColors.status.info.dark;
|
|
6288
6319
|
}
|
|
6289
|
-
// default
|
|
6320
|
+
// default variant uses icon placeholder color
|
|
6290
6321
|
return neoDesign.semanticColors.icons.placeholder;
|
|
6291
6322
|
};
|
|
6292
6323
|
return {
|
|
@@ -6303,68 +6334,20 @@ const ToastButton = styles.styled(Button, {
|
|
|
6303
6334
|
},
|
|
6304
6335
|
};
|
|
6305
6336
|
});
|
|
6306
|
-
const ProgressSection = styles.styled(Stack)({
|
|
6307
|
-
gap: neoDesign.spacing.spacing_1,
|
|
6308
|
-
width: '100%',
|
|
6309
|
-
});
|
|
6310
|
-
const FileName = styles.styled('p')(({ theme }) => ({
|
|
6311
|
-
margin: 0,
|
|
6312
|
-
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.xs),
|
|
6313
|
-
fontWeight: neoDesign.typography.fontWeight.medium,
|
|
6314
|
-
lineHeight: 1.5,
|
|
6315
|
-
color: neoDesign.colors.grey['800'],
|
|
6316
|
-
}));
|
|
6317
|
-
const ProgressLabel = styles.styled('p')(({ theme }) => ({
|
|
6318
|
-
margin: 0,
|
|
6319
|
-
fontSize: theme.typography.pxToRem(neoDesign.typography.fontSize.xs),
|
|
6320
|
-
fontWeight: neoDesign.typography.fontWeight.medium,
|
|
6321
|
-
lineHeight: 1.5,
|
|
6322
|
-
color: neoDesign.colors.grey['800'],
|
|
6323
|
-
}));
|
|
6324
|
-
const StyledLinearProgress = styles.styled(LinearProgress)({
|
|
6325
|
-
width: '100%',
|
|
6326
|
-
height: neoDesign.spacing.spacing_2,
|
|
6327
|
-
borderRadius: neoDesign.borderRadius.s,
|
|
6328
|
-
backgroundColor: neoDesign.colors.grey['200'],
|
|
6329
|
-
[`& .${LinearProgress.linearProgressClasses.bar}`]: {
|
|
6330
|
-
backgroundColor: neoDesign.semanticColors.buttons.primary.default,
|
|
6331
|
-
borderRadius: `${neoDesign.borderRadius.xS}px 0 0 ${neoDesign.borderRadius.xS}px`,
|
|
6332
|
-
},
|
|
6333
|
-
});
|
|
6334
|
-
const DownloadActions = styles.styled(Stack)({
|
|
6335
|
-
gap: `${neoDesign.spacing.spacing_4}px`,
|
|
6336
|
-
alignItems: 'center',
|
|
6337
|
-
});
|
|
6338
|
-
const DownloadIconButton = styles.styled(IconButton)({
|
|
6339
|
-
padding: 0,
|
|
6340
|
-
width: 16,
|
|
6341
|
-
height: 16,
|
|
6342
|
-
color: neoDesign.colors.grey['800'],
|
|
6343
|
-
'&:hover': {
|
|
6344
|
-
backgroundColor: 'transparent',
|
|
6345
|
-
},
|
|
6346
|
-
});
|
|
6347
6337
|
/**
|
|
6348
6338
|
* NeoToast - Notification/Toast component based on MUI Alert
|
|
6349
6339
|
*
|
|
6350
6340
|
* @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4122-37223
|
|
6351
6341
|
*
|
|
6352
6342
|
* Figma Props Mapping:
|
|
6353
|
-
* - type (Light mode|Dark mode|Brand color|Error|Success|Info
|
|
6343
|
+
* - type (Light mode|Dark mode|Brand color|Error|Success|Info) → variant (default|dark|brand|error|success|info)
|
|
6354
6344
|
* - header → title (string)
|
|
6355
6345
|
* - supportingText → message (string)
|
|
6356
6346
|
* - xCloseButton → showClose (boolean)
|
|
6357
6347
|
* - actions → actions (ReactNode)
|
|
6358
|
-
|
|
6359
|
-
|
|
6360
|
-
|
|
6361
|
-
const isDownloadVariant = variant === 'download';
|
|
6362
|
-
return (jsxRuntime.jsx(StyledAlert, { ...props, variant: variant, showProgress: isDownloadVariant, action: showClose && !isDownloadVariant ? (jsxRuntime.jsx(IconButton, { size: "small", onClick: onClose, sx: { color: neoDesign.semanticColors.icons.placeholder }, children: jsxRuntime.jsx(X, { size: 16 }) })) : undefined, children: isDownloadVariant ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(Stack, { direction: "row", sx: {
|
|
6363
|
-
alignItems: 'flex-start',
|
|
6364
|
-
justifyContent: 'space-between',
|
|
6365
|
-
width: '100%',
|
|
6366
|
-
gap: `${neoDesign.spacing.spacing_4}px`,
|
|
6367
|
-
}, children: [title && jsxRuntime.jsx(ToastTitle, { variant: variant, children: title }), showClose && (jsxRuntime.jsxs(DownloadActions, { direction: "row", children: [jsxRuntime.jsx(DownloadIconButton, { size: "small", children: jsxRuntime.jsx(Stack, { sx: { width: 16, height: 16 } }) }), jsxRuntime.jsx(DownloadIconButton, { size: "small", onClick: onClose, children: jsxRuntime.jsx(X, { size: 16 }) })] }))] }), jsxRuntime.jsxs(ProgressSection, { children: [jsxRuntime.jsxs(Stack, { direction: "row", sx: { alignItems: 'flex-end', justifyContent: 'space-between', width: '100%' }, children: [fileName && jsxRuntime.jsx(FileName, { children: fileName }), progress !== undefined && jsxRuntime.jsxs(ProgressLabel, { children: [progress, "%"] })] }), jsxRuntime.jsx(StyledLinearProgress, { variant: "determinate", value: progress ?? 0 })] })] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(Stack, { sx: { gap: `${neoDesign.spacing.spacing_1}px`, width: '100%' }, children: [title && jsxRuntime.jsx(ToastTitle, { variant: variant, children: title }), message && jsxRuntime.jsx(ToastMessage, { variant: variant, children: message })] }), actions && jsxRuntime.jsx(ToastActions, { direction: "row", children: actions })] })) }));
|
|
6348
|
+
*/
|
|
6349
|
+
const NeoToast = ({ variant = 'default', title, message, showClose = true, actions, onClose, ...props }) => {
|
|
6350
|
+
return (jsxRuntime.jsxs(StyledAlert, { ...props, variant: variant, action: showClose ? (jsxRuntime.jsx(IconButton, { size: "small", onClick: onClose, sx: { color: neoDesign.semanticColors.icons.placeholder }, children: jsxRuntime.jsx(X, { size: 16 }) })) : undefined, children: [jsxRuntime.jsxs(Stack, { sx: { gap: `${neoDesign.spacing.spacing_1}px`, width: '100%' }, children: [title && jsxRuntime.jsx(ToastTitle, { variant: variant, children: title }), message && jsxRuntime.jsx(ToastMessage, { variant: variant, children: message })] }), actions && jsxRuntime.jsx(ToastActions, { direction: "row", children: actions })] }));
|
|
6368
6351
|
};
|
|
6369
6352
|
/**
|
|
6370
6353
|
* Helper component for creating toast action buttons with proper styling
|
|
@@ -6471,7 +6454,7 @@ const StyledSwitch = styles.styled(Switch, {
|
|
|
6471
6454
|
[`& .${Switch.switchClasses.thumb}`]: {
|
|
6472
6455
|
width: config.thumbSize,
|
|
6473
6456
|
height: config.thumbSize,
|
|
6474
|
-
boxShadow: `${neoDesign.shadows.
|
|
6457
|
+
boxShadow: `${neoDesign.shadows.neutral.small.x}px ${neoDesign.shadows.neutral.small.y}px ${neoDesign.shadows.neutral.small.blur}px ${neoDesign.shadows.neutral.small.spread}px ${neoDesign.shadows.neutral.small.shadow}`,
|
|
6475
6458
|
transition: theme.transitions.create(['width'], {
|
|
6476
6459
|
duration: theme.transitions.duration.shortest,
|
|
6477
6460
|
}),
|
|
@@ -6640,7 +6623,7 @@ const StyledTooltip = styles.styled(Tooltip, {
|
|
|
6640
6623
|
justifyContent: 'center',
|
|
6641
6624
|
}),
|
|
6642
6625
|
// Apply shadow
|
|
6643
|
-
boxShadow: `${neoDesign.shadows.
|
|
6626
|
+
boxShadow: `${neoDesign.shadows.neutral.medium.x}px ${neoDesign.shadows.neutral.medium.y}px ${neoDesign.shadows.neutral.medium.blur}px ${neoDesign.shadows.neutral.medium.spread}px ${neoDesign.shadows.neutral.medium.shadow}`,
|
|
6644
6627
|
},
|
|
6645
6628
|
// Style the arrow
|
|
6646
6629
|
[`& .${Tooltip.tooltipClasses.arrow}`]: {
|
|
@@ -6884,6 +6867,7 @@ const version = '0.0.0-development';
|
|
|
6884
6867
|
exports.CIRCLE_RADIUS = CIRCLE_RADIUS;
|
|
6885
6868
|
exports.NeoActivityHeader = NeoActivityHeader;
|
|
6886
6869
|
exports.NeoActivityIndicatorCell = NeoActivityIndicatorCell;
|
|
6870
|
+
exports.NeoAlert = NeoAlert;
|
|
6887
6871
|
exports.NeoAvatar = NeoAvatar;
|
|
6888
6872
|
exports.NeoBadge = NeoBadge;
|
|
6889
6873
|
exports.NeoBanner = NeoBanner;
|
|
@@ -6892,6 +6876,7 @@ exports.NeoBreadcrumbs = NeoBreadcrumbs;
|
|
|
6892
6876
|
exports.NeoButton = NeoButton;
|
|
6893
6877
|
exports.NeoButtonTab = NeoButtonTab;
|
|
6894
6878
|
exports.NeoButtonTabGroup = NeoButtonTabGroup;
|
|
6879
|
+
exports.NeoCard = NeoCard;
|
|
6895
6880
|
exports.NeoCheckbox = NeoCheckbox;
|
|
6896
6881
|
exports.NeoCodeSnippet = NeoCodeSnippet;
|
|
6897
6882
|
exports.NeoDataGrid = NeoDataGrid;
|
|
@@ -6908,6 +6893,7 @@ exports.NeoDataGridSelect = NeoDropdown;
|
|
|
6908
6893
|
exports.NeoDatePicker = NeoDatePicker;
|
|
6909
6894
|
exports.NeoDivider = NeoDivider;
|
|
6910
6895
|
exports.NeoDot = NeoDot;
|
|
6896
|
+
exports.NeoDownloadToast = NeoDownloadToast;
|
|
6911
6897
|
exports.NeoDropdown = NeoDropdown;
|
|
6912
6898
|
exports.NeoDropdownMenu = NeoDropdownMenu;
|
|
6913
6899
|
exports.NeoDropdownMenuItem = NeoDropdownMenuItem;
|
|
@@ -6943,7 +6929,6 @@ exports.NeoSelect = NeoDropdown;
|
|
|
6943
6929
|
exports.NeoSelectOption = NeoDropdownMenuItem;
|
|
6944
6930
|
exports.NeoSkeleton = NeoSkeleton;
|
|
6945
6931
|
exports.NeoStatusBadgeCell = NeoStatusBadgeCell;
|
|
6946
|
-
exports.NeoStatusBanner = NeoStatusBanner;
|
|
6947
6932
|
exports.NeoTab = NeoTab;
|
|
6948
6933
|
exports.NeoTabs = NeoTabs;
|
|
6949
6934
|
exports.NeoTag = NeoTag;
|