@marwes-ui/core 1.3.0 → 1.4.1
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/README.md +22 -17
- package/dist/index.d.ts +1197 -249
- package/dist/index.js +1557 -71
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,8 +1,24 @@
|
|
|
1
|
+
// src/theme/text-variant.ts
|
|
2
|
+
var TextVariant = {
|
|
3
|
+
display: "display",
|
|
4
|
+
label: "label",
|
|
5
|
+
labelSmall: "label-small",
|
|
6
|
+
caption: "caption",
|
|
7
|
+
overline: "overline",
|
|
8
|
+
micro: "micro"
|
|
9
|
+
};
|
|
10
|
+
|
|
1
11
|
// src/theme/theme-types.ts
|
|
2
12
|
var ThemeMode = {
|
|
3
13
|
light: "light",
|
|
4
14
|
dark: "dark"
|
|
5
15
|
};
|
|
16
|
+
var defaultThemeBreakpoints = {
|
|
17
|
+
mobile: 640,
|
|
18
|
+
tablet: 900,
|
|
19
|
+
desktop: 1200,
|
|
20
|
+
wideDesktop: 1440
|
|
21
|
+
};
|
|
6
22
|
|
|
7
23
|
// src/theme/theme-mode.ts
|
|
8
24
|
function isThemeMode(value) {
|
|
@@ -90,9 +106,24 @@ function statusColorVars(role, tokens) {
|
|
|
90
106
|
[`--mw-color-status-${role}-text`]: tokens.text,
|
|
91
107
|
[`--mw-color-status-${role}-icon`]: tokens.icon,
|
|
92
108
|
[`--mw-color-status-${role}-border`]: tokens.border,
|
|
109
|
+
...tokens.borderAccessible ? { [`--mw-color-status-${role}-border-accessible`]: tokens.borderAccessible } : {},
|
|
93
110
|
[`--mw-color-status-${role}-border-strong`]: tokens.borderStrong
|
|
94
111
|
};
|
|
95
112
|
}
|
|
113
|
+
function typographyStyleVars(prefix, style) {
|
|
114
|
+
return {
|
|
115
|
+
[`${prefix}-font-size`]: `${style.fontSize}px`,
|
|
116
|
+
[`${prefix}-line-height`]: `${style.lineHeight}`,
|
|
117
|
+
[`${prefix}-font-weight`]: `${style.fontWeight}`,
|
|
118
|
+
[`${prefix}-letter-spacing`]: `${style.letterSpacing}px`
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function textTypographyStyleVars(variant, style) {
|
|
122
|
+
return {
|
|
123
|
+
...typographyStyleVars(`--mw-typography-text-${variant}`, style),
|
|
124
|
+
[`--mw-typography-text-${variant}-transform`]: style.textTransform ?? "none"
|
|
125
|
+
};
|
|
126
|
+
}
|
|
96
127
|
function themeToCSSVars(theme) {
|
|
97
128
|
const { color, font, ui, typography } = theme;
|
|
98
129
|
return {
|
|
@@ -106,10 +137,12 @@ function themeToCSSVars(theme) {
|
|
|
106
137
|
...colorRoleVars("secondary", color.secondary),
|
|
107
138
|
"--mw-color-secondary-border": color.secondary.border,
|
|
108
139
|
"--mw-color-secondary-border-disabled": color.secondary.borderDisabled,
|
|
109
|
-
// Surface / semantic neutrals (
|
|
140
|
+
// Surface / semantic neutrals (24)
|
|
110
141
|
"--mw-color-background": color.background,
|
|
111
142
|
"--mw-color-surface": color.surface,
|
|
143
|
+
"--mw-color-surface-primary": color.surfacePrimary,
|
|
112
144
|
"--mw-color-surface-subtle": color.surfaceSubtle,
|
|
145
|
+
"--mw-color-surface-brand": color.surfaceBrand,
|
|
113
146
|
"--mw-color-surface-elevated": color.surfaceElevated,
|
|
114
147
|
"--mw-color-surface-disabled": color.surfaceDisabled,
|
|
115
148
|
"--mw-color-surface-inverted": color.surfaceInverted,
|
|
@@ -119,13 +152,17 @@ function themeToCSSVars(theme) {
|
|
|
119
152
|
"--mw-color-text-disabled": color.textDisabled,
|
|
120
153
|
"--mw-color-text-inverted": color.textInverted,
|
|
121
154
|
"--mw-color-text-brand": color.textBrand,
|
|
155
|
+
"--mw-color-text-link": color.textLink,
|
|
156
|
+
"--mw-color-icon-muted": color.iconMuted,
|
|
157
|
+
"--mw-color-border-low": color.borderLow,
|
|
122
158
|
"--mw-color-border": color.border,
|
|
123
159
|
"--mw-color-border-subtle": color.borderSubtle,
|
|
124
160
|
"--mw-color-border-strong": color.borderStrong,
|
|
125
161
|
"--mw-color-border-disabled": color.borderDisabled,
|
|
126
162
|
"--mw-color-border-brand": color.borderBrand,
|
|
163
|
+
"--mw-color-border-full": color.borderFull,
|
|
127
164
|
"--mw-color-focus": color.focus,
|
|
128
|
-
// Status role tokens (4 × 5 =
|
|
165
|
+
// Status role tokens (4 × 5 + optional accessible warning border = 21)
|
|
129
166
|
...statusColorVars("success", color.status.success),
|
|
130
167
|
...statusColorVars("warning", color.status.warning),
|
|
131
168
|
...statusColorVars("error", color.status.error),
|
|
@@ -138,19 +175,17 @@ function themeToCSSVars(theme) {
|
|
|
138
175
|
"--mw-ui-radius": `${ui.radius}px`,
|
|
139
176
|
// Density (10)
|
|
140
177
|
...densityToCSSVars(ui.density),
|
|
141
|
-
// Typography
|
|
142
|
-
"--mw-typography-
|
|
143
|
-
"--mw-typography-h1
|
|
144
|
-
"--mw-typography-
|
|
145
|
-
"--mw-typography-
|
|
146
|
-
"
|
|
147
|
-
"
|
|
148
|
-
"
|
|
149
|
-
"
|
|
150
|
-
"
|
|
151
|
-
"
|
|
152
|
-
"--mw-typography-h3-font-weight": `${typography.h3.fontWeight}`,
|
|
153
|
-
"--mw-typography-h3-letter-spacing": `${typography.h3.letterSpacing}px`,
|
|
178
|
+
// Typography
|
|
179
|
+
...typographyStyleVars("--mw-typography-display", typography.display),
|
|
180
|
+
...typographyStyleVars("--mw-typography-h1", typography.h1),
|
|
181
|
+
...typographyStyleVars("--mw-typography-h2", typography.h2),
|
|
182
|
+
...typographyStyleVars("--mw-typography-h3", typography.h3),
|
|
183
|
+
...textTypographyStyleVars("display", typography.text.display),
|
|
184
|
+
...textTypographyStyleVars("label", typography.text.label),
|
|
185
|
+
...textTypographyStyleVars("label-small", typography.text["label-small"]),
|
|
186
|
+
...textTypographyStyleVars("caption", typography.text.caption),
|
|
187
|
+
...textTypographyStyleVars("overline", typography.text.overline),
|
|
188
|
+
...textTypographyStyleVars("micro", typography.text.micro),
|
|
154
189
|
// Typography — paragraph (3 × 2 = 6)
|
|
155
190
|
"--mw-typography-paragraph-sm-font-size": `${typography.paragraph.sm.fontSize}px`,
|
|
156
191
|
"--mw-typography-paragraph-sm-line-height": `${typography.paragraph.sm.lineHeight}`,
|
|
@@ -365,7 +400,9 @@ var lightThemeDefaults = {
|
|
|
365
400
|
// Background & Surface
|
|
366
401
|
background: "#FFFFFF",
|
|
367
402
|
surface: "#F8F8F8",
|
|
403
|
+
surfacePrimary: "#FFFFFF",
|
|
368
404
|
surfaceSubtle: "#F5F5F5",
|
|
405
|
+
surfaceBrand: "#EEEEFF",
|
|
369
406
|
surfaceElevated: "#FFFFFF",
|
|
370
407
|
surfaceDisabled: "#F5F5F5",
|
|
371
408
|
surfaceInverted: "#141414",
|
|
@@ -376,12 +413,16 @@ var lightThemeDefaults = {
|
|
|
376
413
|
textDisabled: "#737373",
|
|
377
414
|
textInverted: "#FFFFFF",
|
|
378
415
|
textBrand: "#2F31FC",
|
|
416
|
+
textLink: "#2527CA",
|
|
417
|
+
iconMuted: "#A3A3A3",
|
|
379
418
|
// Borders
|
|
419
|
+
borderLow: "#00000026",
|
|
380
420
|
border: "#D8D8D8",
|
|
381
421
|
borderSubtle: "#D8D8D8",
|
|
382
422
|
borderStrong: "#A3A3A3",
|
|
383
423
|
borderDisabled: "#D8D8D8",
|
|
384
424
|
borderBrand: "#2F31FC",
|
|
425
|
+
borderFull: "#000000",
|
|
385
426
|
// Focus
|
|
386
427
|
focus: "#2F31FC",
|
|
387
428
|
// Semantic colors
|
|
@@ -401,6 +442,7 @@ var lightThemeDefaults = {
|
|
|
401
442
|
text: "#B45309",
|
|
402
443
|
icon: "#D97706",
|
|
403
444
|
border: "#FDE08A",
|
|
445
|
+
borderAccessible: "#B45309",
|
|
404
446
|
borderStrong: "#E46F00"
|
|
405
447
|
},
|
|
406
448
|
error: {
|
|
@@ -428,7 +470,14 @@ var lightThemeDefaults = {
|
|
|
428
470
|
radius: 4,
|
|
429
471
|
density: "comfortable"
|
|
430
472
|
},
|
|
473
|
+
breakpoint: defaultThemeBreakpoints,
|
|
431
474
|
typography: {
|
|
475
|
+
display: {
|
|
476
|
+
fontSize: 44,
|
|
477
|
+
lineHeight: 1.1818181818,
|
|
478
|
+
fontWeight: 700,
|
|
479
|
+
letterSpacing: -1.32
|
|
480
|
+
},
|
|
432
481
|
h1: {
|
|
433
482
|
fontSize: 32,
|
|
434
483
|
lineHeight: 1.1875,
|
|
@@ -447,6 +496,45 @@ var lightThemeDefaults = {
|
|
|
447
496
|
fontWeight: 500,
|
|
448
497
|
letterSpacing: -0.6
|
|
449
498
|
},
|
|
499
|
+
text: {
|
|
500
|
+
display: {
|
|
501
|
+
fontSize: 44,
|
|
502
|
+
lineHeight: 1.1818181818,
|
|
503
|
+
fontWeight: 700,
|
|
504
|
+
letterSpacing: -1.32
|
|
505
|
+
},
|
|
506
|
+
label: {
|
|
507
|
+
fontSize: 14,
|
|
508
|
+
lineHeight: 1.1428571429,
|
|
509
|
+
fontWeight: 500,
|
|
510
|
+
letterSpacing: -0.42
|
|
511
|
+
},
|
|
512
|
+
"label-small": {
|
|
513
|
+
fontSize: 12,
|
|
514
|
+
lineHeight: 1,
|
|
515
|
+
fontWeight: 500,
|
|
516
|
+
letterSpacing: -0.36
|
|
517
|
+
},
|
|
518
|
+
caption: {
|
|
519
|
+
fontSize: 12,
|
|
520
|
+
lineHeight: 1.3333333333,
|
|
521
|
+
fontWeight: 500,
|
|
522
|
+
letterSpacing: 0
|
|
523
|
+
},
|
|
524
|
+
overline: {
|
|
525
|
+
fontSize: 11,
|
|
526
|
+
lineHeight: 1.4545454545,
|
|
527
|
+
fontWeight: 500,
|
|
528
|
+
letterSpacing: 0.88,
|
|
529
|
+
textTransform: "uppercase"
|
|
530
|
+
},
|
|
531
|
+
micro: {
|
|
532
|
+
fontSize: 11,
|
|
533
|
+
lineHeight: 1.2727272727,
|
|
534
|
+
fontWeight: 400,
|
|
535
|
+
letterSpacing: -0.33
|
|
536
|
+
}
|
|
537
|
+
},
|
|
450
538
|
paragraph: {
|
|
451
539
|
sm: {
|
|
452
540
|
fontSize: 14,
|
|
@@ -471,7 +559,9 @@ var darkThemeDefaults = {
|
|
|
471
559
|
// Background & Surface
|
|
472
560
|
background: "#0F0F0F",
|
|
473
561
|
surface: "#1A1A1A",
|
|
562
|
+
surfacePrimary: "#0F0F0F",
|
|
474
563
|
surfaceSubtle: "#050505",
|
|
564
|
+
surfaceBrand: "#090A32",
|
|
475
565
|
surfaceElevated: "#2B2B2B",
|
|
476
566
|
surfaceDisabled: "#1A1A1A",
|
|
477
567
|
surfaceInverted: "#FFFFFF",
|
|
@@ -482,12 +572,16 @@ var darkThemeDefaults = {
|
|
|
482
572
|
textDisabled: "#595959",
|
|
483
573
|
textInverted: "#141414",
|
|
484
574
|
textBrand: "#8182FC",
|
|
575
|
+
textLink: "#8182FC",
|
|
576
|
+
iconMuted: "#595959",
|
|
485
577
|
// Borders
|
|
578
|
+
borderLow: "#FFFFFF26",
|
|
486
579
|
border: "#474747",
|
|
487
580
|
borderSubtle: "#474747",
|
|
488
581
|
borderStrong: "#A3A3A3",
|
|
489
582
|
borderDisabled: "#474747",
|
|
490
583
|
borderBrand: "#5859FC",
|
|
584
|
+
borderFull: "#FFFFFF",
|
|
491
585
|
// Focus
|
|
492
586
|
focus: "#8182FC",
|
|
493
587
|
// Semantic colors
|
|
@@ -507,6 +601,7 @@ var darkThemeDefaults = {
|
|
|
507
601
|
text: "#FCC94A",
|
|
508
602
|
icon: "#F9B21A",
|
|
509
603
|
border: "#E46F00",
|
|
604
|
+
borderAccessible: "#B45309",
|
|
510
605
|
borderStrong: "#B45308"
|
|
511
606
|
},
|
|
512
607
|
error: {
|
|
@@ -534,7 +629,14 @@ var darkThemeDefaults = {
|
|
|
534
629
|
radius: 4,
|
|
535
630
|
density: "comfortable"
|
|
536
631
|
},
|
|
632
|
+
breakpoint: defaultThemeBreakpoints,
|
|
537
633
|
typography: {
|
|
634
|
+
display: {
|
|
635
|
+
fontSize: 44,
|
|
636
|
+
lineHeight: 1.1818181818,
|
|
637
|
+
fontWeight: 700,
|
|
638
|
+
letterSpacing: -1.32
|
|
639
|
+
},
|
|
538
640
|
h1: {
|
|
539
641
|
fontSize: 32,
|
|
540
642
|
lineHeight: 1.1875,
|
|
@@ -553,6 +655,45 @@ var darkThemeDefaults = {
|
|
|
553
655
|
fontWeight: 500,
|
|
554
656
|
letterSpacing: -0.6
|
|
555
657
|
},
|
|
658
|
+
text: {
|
|
659
|
+
display: {
|
|
660
|
+
fontSize: 44,
|
|
661
|
+
lineHeight: 1.1818181818,
|
|
662
|
+
fontWeight: 700,
|
|
663
|
+
letterSpacing: -1.32
|
|
664
|
+
},
|
|
665
|
+
label: {
|
|
666
|
+
fontSize: 14,
|
|
667
|
+
lineHeight: 1.1428571429,
|
|
668
|
+
fontWeight: 500,
|
|
669
|
+
letterSpacing: -0.42
|
|
670
|
+
},
|
|
671
|
+
"label-small": {
|
|
672
|
+
fontSize: 12,
|
|
673
|
+
lineHeight: 1,
|
|
674
|
+
fontWeight: 500,
|
|
675
|
+
letterSpacing: -0.36
|
|
676
|
+
},
|
|
677
|
+
caption: {
|
|
678
|
+
fontSize: 12,
|
|
679
|
+
lineHeight: 1.3333333333,
|
|
680
|
+
fontWeight: 500,
|
|
681
|
+
letterSpacing: 0
|
|
682
|
+
},
|
|
683
|
+
overline: {
|
|
684
|
+
fontSize: 11,
|
|
685
|
+
lineHeight: 1.4545454545,
|
|
686
|
+
fontWeight: 500,
|
|
687
|
+
letterSpacing: 0.88,
|
|
688
|
+
textTransform: "uppercase"
|
|
689
|
+
},
|
|
690
|
+
micro: {
|
|
691
|
+
fontSize: 11,
|
|
692
|
+
lineHeight: 1.2727272727,
|
|
693
|
+
fontWeight: 400,
|
|
694
|
+
letterSpacing: -0.33
|
|
695
|
+
}
|
|
696
|
+
},
|
|
556
697
|
paragraph: {
|
|
557
698
|
sm: {
|
|
558
699
|
fontSize: 14,
|
|
@@ -705,6 +846,7 @@ var darkDefaultColorRoles = {
|
|
|
705
846
|
};
|
|
706
847
|
function resolveThemeInput(input) {
|
|
707
848
|
const mode = input.mode ?? ThemeMode.light;
|
|
849
|
+
const personality = input.personality ?? "flat";
|
|
708
850
|
const colorBase = mode === ThemeMode.dark ? darkThemeDefaults.color : lightThemeDefaults.color;
|
|
709
851
|
const defaultColorRoles = mode === ThemeMode.dark ? darkDefaultColorRoles : lightDefaultColorRoles;
|
|
710
852
|
const base = lightThemeDefaults;
|
|
@@ -717,6 +859,7 @@ function resolveThemeInput(input) {
|
|
|
717
859
|
const info = input.color?.primary === void 0 ? normalizeColorInput(defaultColorRoles.info) : resolveInfoRole(primary);
|
|
718
860
|
return {
|
|
719
861
|
mode,
|
|
862
|
+
personality,
|
|
720
863
|
color: {
|
|
721
864
|
primary,
|
|
722
865
|
secondary,
|
|
@@ -726,7 +869,9 @@ function resolveThemeInput(input) {
|
|
|
726
869
|
info,
|
|
727
870
|
background: input.color?.background ?? colorBase.background,
|
|
728
871
|
surface: input.color?.surface ?? colorBase.surface,
|
|
872
|
+
surfacePrimary: input.color?.surfacePrimary ?? colorBase.surfacePrimary,
|
|
729
873
|
surfaceSubtle: input.color?.surfaceSubtle ?? colorBase.surfaceSubtle,
|
|
874
|
+
surfaceBrand: input.color?.surfaceBrand ?? colorBase.surfaceBrand,
|
|
730
875
|
surfaceElevated: input.color?.surfaceElevated ?? colorBase.surfaceElevated,
|
|
731
876
|
surfaceDisabled: input.color?.surfaceDisabled ?? colorBase.surfaceDisabled,
|
|
732
877
|
surfaceInverted: input.color?.surfaceInverted ?? colorBase.surfaceInverted,
|
|
@@ -736,20 +881,62 @@ function resolveThemeInput(input) {
|
|
|
736
881
|
textDisabled: input.color?.textDisabled ?? colorBase.textDisabled,
|
|
737
882
|
textInverted: input.color?.textInverted ?? colorBase.textInverted,
|
|
738
883
|
textBrand: colorBase.textBrand,
|
|
884
|
+
textLink: input.color?.textLink ?? colorBase.textLink,
|
|
885
|
+
iconMuted: input.color?.iconMuted ?? colorBase.iconMuted,
|
|
886
|
+
borderLow: input.color?.borderLow ?? colorBase.borderLow,
|
|
739
887
|
border: input.color?.border ?? colorBase.border,
|
|
740
888
|
borderSubtle: input.color?.borderSubtle ?? colorBase.borderSubtle,
|
|
741
889
|
borderStrong: input.color?.borderStrong ?? colorBase.borderStrong,
|
|
742
890
|
borderDisabled: input.color?.borderDisabled ?? colorBase.borderDisabled,
|
|
743
891
|
borderBrand: colorBase.borderBrand,
|
|
892
|
+
borderFull: input.color?.borderFull ?? colorBase.borderFull,
|
|
744
893
|
focus: input.color?.focus ?? colorBase.focus,
|
|
745
894
|
status: colorBase.status
|
|
746
895
|
},
|
|
747
896
|
font: { ...base.font, ...tone.font, ...input.font },
|
|
748
897
|
ui: { ...base.ui, ...tone.ui, ...input.ui },
|
|
898
|
+
breakpoint: { ...defaultThemeBreakpoints, ...input.breakpoint },
|
|
749
899
|
typography: {
|
|
900
|
+
display: {
|
|
901
|
+
...base.typography.display,
|
|
902
|
+
...tone.typography?.display,
|
|
903
|
+
...input.typography?.display
|
|
904
|
+
},
|
|
750
905
|
h1: { ...base.typography.h1, ...tone.typography?.h1, ...input.typography?.h1 },
|
|
751
906
|
h2: { ...base.typography.h2, ...tone.typography?.h2, ...input.typography?.h2 },
|
|
752
907
|
h3: { ...base.typography.h3, ...tone.typography?.h3, ...input.typography?.h3 },
|
|
908
|
+
text: {
|
|
909
|
+
display: {
|
|
910
|
+
...base.typography.text.display,
|
|
911
|
+
...tone.typography?.text?.display,
|
|
912
|
+
...input.typography?.text?.display
|
|
913
|
+
},
|
|
914
|
+
label: {
|
|
915
|
+
...base.typography.text.label,
|
|
916
|
+
...tone.typography?.text?.label,
|
|
917
|
+
...input.typography?.text?.label
|
|
918
|
+
},
|
|
919
|
+
"label-small": {
|
|
920
|
+
...base.typography.text["label-small"],
|
|
921
|
+
...tone.typography?.text?.["label-small"],
|
|
922
|
+
...input.typography?.text?.["label-small"]
|
|
923
|
+
},
|
|
924
|
+
caption: {
|
|
925
|
+
...base.typography.text.caption,
|
|
926
|
+
...tone.typography?.text?.caption,
|
|
927
|
+
...input.typography?.text?.caption
|
|
928
|
+
},
|
|
929
|
+
overline: {
|
|
930
|
+
...base.typography.text.overline,
|
|
931
|
+
...tone.typography?.text?.overline,
|
|
932
|
+
...input.typography?.text?.overline
|
|
933
|
+
},
|
|
934
|
+
micro: {
|
|
935
|
+
...base.typography.text.micro,
|
|
936
|
+
...tone.typography?.text?.micro,
|
|
937
|
+
...input.typography?.text?.micro
|
|
938
|
+
}
|
|
939
|
+
},
|
|
753
940
|
paragraph: {
|
|
754
941
|
sm: {
|
|
755
942
|
...base.typography.paragraph.sm,
|
|
@@ -822,6 +1009,21 @@ function serializeScriptData(value) {
|
|
|
822
1009
|
function mwVar(name, fallback) {
|
|
823
1010
|
return fallback === void 0 ? `var(${name})` : `var(${name}, ${fallback})`;
|
|
824
1011
|
}
|
|
1012
|
+
function createMwThemeMedia(breakpoint) {
|
|
1013
|
+
return {
|
|
1014
|
+
mobileAndAbove: `@media (min-width: ${breakpoint.mobile}px)`,
|
|
1015
|
+
tabletAndAbove: `@media (min-width: ${breakpoint.tablet}px)`,
|
|
1016
|
+
desktopAndAbove: `@media (min-width: ${breakpoint.desktop}px)`,
|
|
1017
|
+
wideDesktopAndAbove: `@media (min-width: ${breakpoint.wideDesktop}px)`,
|
|
1018
|
+
mobileAndBelow: `@media (max-width: ${formatMaxBreakpoint(breakpoint.mobile)}px)`,
|
|
1019
|
+
tabletAndBelow: `@media (max-width: ${formatMaxBreakpoint(breakpoint.tablet)}px)`,
|
|
1020
|
+
desktopAndBelow: `@media (max-width: ${formatMaxBreakpoint(breakpoint.desktop)}px)`,
|
|
1021
|
+
wideDesktopAndBelow: `@media (max-width: ${formatMaxBreakpoint(breakpoint.wideDesktop)}px)`
|
|
1022
|
+
};
|
|
1023
|
+
}
|
|
1024
|
+
function formatMaxBreakpoint(value) {
|
|
1025
|
+
return `${Number((value - 0.02).toFixed(2))}`;
|
|
1026
|
+
}
|
|
825
1027
|
var mwThemeVarNames = {
|
|
826
1028
|
color: {
|
|
827
1029
|
primary: {
|
|
@@ -876,7 +1078,9 @@ var mwThemeVarNames = {
|
|
|
876
1078
|
},
|
|
877
1079
|
background: "--mw-color-background",
|
|
878
1080
|
surface: "--mw-color-surface",
|
|
1081
|
+
surfacePrimary: "--mw-color-surface-primary",
|
|
879
1082
|
surfaceSubtle: "--mw-color-surface-subtle",
|
|
1083
|
+
surfaceBrand: "--mw-color-surface-brand",
|
|
880
1084
|
surfaceElevated: "--mw-color-surface-elevated",
|
|
881
1085
|
surfaceDisabled: "--mw-color-surface-disabled",
|
|
882
1086
|
surfaceInverted: "--mw-color-surface-inverted",
|
|
@@ -886,11 +1090,15 @@ var mwThemeVarNames = {
|
|
|
886
1090
|
textDisabled: "--mw-color-text-disabled",
|
|
887
1091
|
textInverted: "--mw-color-text-inverted",
|
|
888
1092
|
textBrand: "--mw-color-text-brand",
|
|
1093
|
+
textLink: "--mw-color-text-link",
|
|
1094
|
+
iconMuted: "--mw-color-icon-muted",
|
|
1095
|
+
borderLow: "--mw-color-border-low",
|
|
889
1096
|
border: "--mw-color-border",
|
|
890
1097
|
borderSubtle: "--mw-color-border-subtle",
|
|
891
1098
|
borderStrong: "--mw-color-border-strong",
|
|
892
1099
|
borderDisabled: "--mw-color-border-disabled",
|
|
893
1100
|
borderBrand: "--mw-color-border-brand",
|
|
1101
|
+
borderFull: "--mw-color-border-full",
|
|
894
1102
|
focus: "--mw-color-focus",
|
|
895
1103
|
status: {
|
|
896
1104
|
success: {
|
|
@@ -905,6 +1113,7 @@ var mwThemeVarNames = {
|
|
|
905
1113
|
text: "--mw-color-status-warning-text",
|
|
906
1114
|
icon: "--mw-color-status-warning-icon",
|
|
907
1115
|
border: "--mw-color-status-warning-border",
|
|
1116
|
+
borderAccessible: "--mw-color-status-warning-border-accessible",
|
|
908
1117
|
borderStrong: "--mw-color-status-warning-border-strong"
|
|
909
1118
|
},
|
|
910
1119
|
error: {
|
|
@@ -928,6 +1137,7 @@ var mwThemeVarNames = {
|
|
|
928
1137
|
sp2: "--mw-spacing-sp-2",
|
|
929
1138
|
sp4: "--mw-spacing-sp-4",
|
|
930
1139
|
sp8: "--mw-spacing-sp-8",
|
|
1140
|
+
sp12: "--mw-spacing-sp-12",
|
|
931
1141
|
sp16: "--mw-spacing-sp-16",
|
|
932
1142
|
sp24: "--mw-spacing-sp-24",
|
|
933
1143
|
sp32: "--mw-spacing-sp-32",
|
|
@@ -964,6 +1174,12 @@ var mwThemeVarNames = {
|
|
|
964
1174
|
fontSizeSm: "--mw-density-font-size-sm"
|
|
965
1175
|
},
|
|
966
1176
|
typography: {
|
|
1177
|
+
display: {
|
|
1178
|
+
fontSize: "--mw-typography-display-font-size",
|
|
1179
|
+
lineHeight: "--mw-typography-display-line-height",
|
|
1180
|
+
fontWeight: "--mw-typography-display-font-weight",
|
|
1181
|
+
letterSpacing: "--mw-typography-display-letter-spacing"
|
|
1182
|
+
},
|
|
967
1183
|
h1: {
|
|
968
1184
|
fontSize: "--mw-typography-h1-font-size",
|
|
969
1185
|
lineHeight: "--mw-typography-h1-line-height",
|
|
@@ -982,6 +1198,50 @@ var mwThemeVarNames = {
|
|
|
982
1198
|
fontWeight: "--mw-typography-h3-font-weight",
|
|
983
1199
|
letterSpacing: "--mw-typography-h3-letter-spacing"
|
|
984
1200
|
},
|
|
1201
|
+
text: {
|
|
1202
|
+
display: {
|
|
1203
|
+
fontSize: "--mw-typography-text-display-font-size",
|
|
1204
|
+
lineHeight: "--mw-typography-text-display-line-height",
|
|
1205
|
+
fontWeight: "--mw-typography-text-display-font-weight",
|
|
1206
|
+
letterSpacing: "--mw-typography-text-display-letter-spacing",
|
|
1207
|
+
textTransform: "--mw-typography-text-display-transform"
|
|
1208
|
+
},
|
|
1209
|
+
label: {
|
|
1210
|
+
fontSize: "--mw-typography-text-label-font-size",
|
|
1211
|
+
lineHeight: "--mw-typography-text-label-line-height",
|
|
1212
|
+
fontWeight: "--mw-typography-text-label-font-weight",
|
|
1213
|
+
letterSpacing: "--mw-typography-text-label-letter-spacing",
|
|
1214
|
+
textTransform: "--mw-typography-text-label-transform"
|
|
1215
|
+
},
|
|
1216
|
+
"label-small": {
|
|
1217
|
+
fontSize: "--mw-typography-text-label-small-font-size",
|
|
1218
|
+
lineHeight: "--mw-typography-text-label-small-line-height",
|
|
1219
|
+
fontWeight: "--mw-typography-text-label-small-font-weight",
|
|
1220
|
+
letterSpacing: "--mw-typography-text-label-small-letter-spacing",
|
|
1221
|
+
textTransform: "--mw-typography-text-label-small-transform"
|
|
1222
|
+
},
|
|
1223
|
+
caption: {
|
|
1224
|
+
fontSize: "--mw-typography-text-caption-font-size",
|
|
1225
|
+
lineHeight: "--mw-typography-text-caption-line-height",
|
|
1226
|
+
fontWeight: "--mw-typography-text-caption-font-weight",
|
|
1227
|
+
letterSpacing: "--mw-typography-text-caption-letter-spacing",
|
|
1228
|
+
textTransform: "--mw-typography-text-caption-transform"
|
|
1229
|
+
},
|
|
1230
|
+
overline: {
|
|
1231
|
+
fontSize: "--mw-typography-text-overline-font-size",
|
|
1232
|
+
lineHeight: "--mw-typography-text-overline-line-height",
|
|
1233
|
+
fontWeight: "--mw-typography-text-overline-font-weight",
|
|
1234
|
+
letterSpacing: "--mw-typography-text-overline-letter-spacing",
|
|
1235
|
+
textTransform: "--mw-typography-text-overline-transform"
|
|
1236
|
+
},
|
|
1237
|
+
micro: {
|
|
1238
|
+
fontSize: "--mw-typography-text-micro-font-size",
|
|
1239
|
+
lineHeight: "--mw-typography-text-micro-line-height",
|
|
1240
|
+
fontWeight: "--mw-typography-text-micro-font-weight",
|
|
1241
|
+
letterSpacing: "--mw-typography-text-micro-letter-spacing",
|
|
1242
|
+
textTransform: "--mw-typography-text-micro-transform"
|
|
1243
|
+
}
|
|
1244
|
+
},
|
|
985
1245
|
paragraph: {
|
|
986
1246
|
sm: {
|
|
987
1247
|
fontSize: "--mw-typography-paragraph-sm-font-size",
|
|
@@ -1052,7 +1312,9 @@ var mwThemeVars = {
|
|
|
1052
1312
|
},
|
|
1053
1313
|
background: "var(--mw-color-background)",
|
|
1054
1314
|
surface: "var(--mw-color-surface)",
|
|
1315
|
+
surfacePrimary: "var(--mw-color-surface-primary)",
|
|
1055
1316
|
surfaceSubtle: "var(--mw-color-surface-subtle)",
|
|
1317
|
+
surfaceBrand: "var(--mw-color-surface-brand)",
|
|
1056
1318
|
surfaceElevated: "var(--mw-color-surface-elevated)",
|
|
1057
1319
|
surfaceDisabled: "var(--mw-color-surface-disabled)",
|
|
1058
1320
|
surfaceInverted: "var(--mw-color-surface-inverted)",
|
|
@@ -1062,11 +1324,15 @@ var mwThemeVars = {
|
|
|
1062
1324
|
textDisabled: "var(--mw-color-text-disabled)",
|
|
1063
1325
|
textInverted: "var(--mw-color-text-inverted)",
|
|
1064
1326
|
textBrand: "var(--mw-color-text-brand)",
|
|
1327
|
+
textLink: "var(--mw-color-text-link)",
|
|
1328
|
+
iconMuted: "var(--mw-color-icon-muted)",
|
|
1329
|
+
borderLow: "var(--mw-color-border-low)",
|
|
1065
1330
|
border: "var(--mw-color-border)",
|
|
1066
1331
|
borderSubtle: "var(--mw-color-border-subtle)",
|
|
1067
1332
|
borderStrong: "var(--mw-color-border-strong)",
|
|
1068
1333
|
borderDisabled: "var(--mw-color-border-disabled)",
|
|
1069
1334
|
borderBrand: "var(--mw-color-border-brand)",
|
|
1335
|
+
borderFull: "var(--mw-color-border-full)",
|
|
1070
1336
|
focus: "var(--mw-color-focus)",
|
|
1071
1337
|
status: {
|
|
1072
1338
|
success: {
|
|
@@ -1081,6 +1347,7 @@ var mwThemeVars = {
|
|
|
1081
1347
|
text: "var(--mw-color-status-warning-text)",
|
|
1082
1348
|
icon: "var(--mw-color-status-warning-icon)",
|
|
1083
1349
|
border: "var(--mw-color-status-warning-border)",
|
|
1350
|
+
borderAccessible: "var(--mw-color-status-warning-border-accessible)",
|
|
1084
1351
|
borderStrong: "var(--mw-color-status-warning-border-strong)"
|
|
1085
1352
|
},
|
|
1086
1353
|
error: {
|
|
@@ -1104,6 +1371,7 @@ var mwThemeVars = {
|
|
|
1104
1371
|
sp2: "var(--mw-spacing-sp-2)",
|
|
1105
1372
|
sp4: "var(--mw-spacing-sp-4)",
|
|
1106
1373
|
sp8: "var(--mw-spacing-sp-8)",
|
|
1374
|
+
sp12: "var(--mw-spacing-sp-12)",
|
|
1107
1375
|
sp16: "var(--mw-spacing-sp-16)",
|
|
1108
1376
|
sp24: "var(--mw-spacing-sp-24)",
|
|
1109
1377
|
sp32: "var(--mw-spacing-sp-32)",
|
|
@@ -1140,6 +1408,12 @@ var mwThemeVars = {
|
|
|
1140
1408
|
fontSizeSm: "var(--mw-density-font-size-sm)"
|
|
1141
1409
|
},
|
|
1142
1410
|
typography: {
|
|
1411
|
+
display: {
|
|
1412
|
+
fontSize: "var(--mw-typography-display-font-size)",
|
|
1413
|
+
lineHeight: "var(--mw-typography-display-line-height)",
|
|
1414
|
+
fontWeight: "var(--mw-typography-display-font-weight)",
|
|
1415
|
+
letterSpacing: "var(--mw-typography-display-letter-spacing)"
|
|
1416
|
+
},
|
|
1143
1417
|
h1: {
|
|
1144
1418
|
fontSize: "var(--mw-typography-h1-font-size)",
|
|
1145
1419
|
lineHeight: "var(--mw-typography-h1-line-height)",
|
|
@@ -1158,6 +1432,50 @@ var mwThemeVars = {
|
|
|
1158
1432
|
fontWeight: "var(--mw-typography-h3-font-weight)",
|
|
1159
1433
|
letterSpacing: "var(--mw-typography-h3-letter-spacing)"
|
|
1160
1434
|
},
|
|
1435
|
+
text: {
|
|
1436
|
+
display: {
|
|
1437
|
+
fontSize: "var(--mw-typography-text-display-font-size)",
|
|
1438
|
+
lineHeight: "var(--mw-typography-text-display-line-height)",
|
|
1439
|
+
fontWeight: "var(--mw-typography-text-display-font-weight)",
|
|
1440
|
+
letterSpacing: "var(--mw-typography-text-display-letter-spacing)",
|
|
1441
|
+
textTransform: "var(--mw-typography-text-display-transform)"
|
|
1442
|
+
},
|
|
1443
|
+
label: {
|
|
1444
|
+
fontSize: "var(--mw-typography-text-label-font-size)",
|
|
1445
|
+
lineHeight: "var(--mw-typography-text-label-line-height)",
|
|
1446
|
+
fontWeight: "var(--mw-typography-text-label-font-weight)",
|
|
1447
|
+
letterSpacing: "var(--mw-typography-text-label-letter-spacing)",
|
|
1448
|
+
textTransform: "var(--mw-typography-text-label-transform)"
|
|
1449
|
+
},
|
|
1450
|
+
"label-small": {
|
|
1451
|
+
fontSize: "var(--mw-typography-text-label-small-font-size)",
|
|
1452
|
+
lineHeight: "var(--mw-typography-text-label-small-line-height)",
|
|
1453
|
+
fontWeight: "var(--mw-typography-text-label-small-font-weight)",
|
|
1454
|
+
letterSpacing: "var(--mw-typography-text-label-small-letter-spacing)",
|
|
1455
|
+
textTransform: "var(--mw-typography-text-label-small-transform)"
|
|
1456
|
+
},
|
|
1457
|
+
caption: {
|
|
1458
|
+
fontSize: "var(--mw-typography-text-caption-font-size)",
|
|
1459
|
+
lineHeight: "var(--mw-typography-text-caption-line-height)",
|
|
1460
|
+
fontWeight: "var(--mw-typography-text-caption-font-weight)",
|
|
1461
|
+
letterSpacing: "var(--mw-typography-text-caption-letter-spacing)",
|
|
1462
|
+
textTransform: "var(--mw-typography-text-caption-transform)"
|
|
1463
|
+
},
|
|
1464
|
+
overline: {
|
|
1465
|
+
fontSize: "var(--mw-typography-text-overline-font-size)",
|
|
1466
|
+
lineHeight: "var(--mw-typography-text-overline-line-height)",
|
|
1467
|
+
fontWeight: "var(--mw-typography-text-overline-font-weight)",
|
|
1468
|
+
letterSpacing: "var(--mw-typography-text-overline-letter-spacing)",
|
|
1469
|
+
textTransform: "var(--mw-typography-text-overline-transform)"
|
|
1470
|
+
},
|
|
1471
|
+
micro: {
|
|
1472
|
+
fontSize: "var(--mw-typography-text-micro-font-size)",
|
|
1473
|
+
lineHeight: "var(--mw-typography-text-micro-line-height)",
|
|
1474
|
+
fontWeight: "var(--mw-typography-text-micro-font-weight)",
|
|
1475
|
+
letterSpacing: "var(--mw-typography-text-micro-letter-spacing)",
|
|
1476
|
+
textTransform: "var(--mw-typography-text-micro-transform)"
|
|
1477
|
+
}
|
|
1478
|
+
},
|
|
1161
1479
|
paragraph: {
|
|
1162
1480
|
sm: {
|
|
1163
1481
|
fontSize: "var(--mw-typography-paragraph-sm-font-size)",
|
|
@@ -1174,7 +1492,19 @@ var mwThemeVars = {
|
|
|
1174
1492
|
}
|
|
1175
1493
|
}
|
|
1176
1494
|
};
|
|
1177
|
-
|
|
1495
|
+
function createMwTheme(theme) {
|
|
1496
|
+
return {
|
|
1497
|
+
...mwThemeVars,
|
|
1498
|
+
breakpoint: theme.breakpoint,
|
|
1499
|
+
media: createMwThemeMedia(theme.breakpoint)
|
|
1500
|
+
};
|
|
1501
|
+
}
|
|
1502
|
+
var mwTheme = {
|
|
1503
|
+
...mwThemeVars,
|
|
1504
|
+
breakpoint: defaultThemeBreakpoints,
|
|
1505
|
+
media: createMwThemeMedia(defaultThemeBreakpoints)
|
|
1506
|
+
};
|
|
1507
|
+
var mwStyledTheme = mwTheme;
|
|
1178
1508
|
|
|
1179
1509
|
// src/theme/font-loader.ts
|
|
1180
1510
|
var mwFontFallbacks = {
|
|
@@ -1291,9 +1621,13 @@ function shouldLoadGoogleFont(name, config = "auto") {
|
|
|
1291
1621
|
}
|
|
1292
1622
|
function extractUsedWeights(typography) {
|
|
1293
1623
|
const weights = /* @__PURE__ */ new Set([400, 500]);
|
|
1624
|
+
if (typography.display) weights.add(typography.display.fontWeight);
|
|
1294
1625
|
weights.add(typography.h1.fontWeight);
|
|
1295
1626
|
weights.add(typography.h2.fontWeight);
|
|
1296
1627
|
weights.add(typography.h3.fontWeight);
|
|
1628
|
+
for (const textStyle of Object.values(typography.text ?? {})) {
|
|
1629
|
+
weights.add(textStyle.fontWeight);
|
|
1630
|
+
}
|
|
1297
1631
|
return [...weights].sort((a, b) => a - b);
|
|
1298
1632
|
}
|
|
1299
1633
|
|
|
@@ -1314,7 +1648,17 @@ var canonicalSemanticAttributeNames = [
|
|
|
1314
1648
|
"data-orientation"
|
|
1315
1649
|
];
|
|
1316
1650
|
var semanticLayers = ["atom", "molecule", "purpose"];
|
|
1317
|
-
var semanticFamilies = [
|
|
1651
|
+
var semanticFamilies = [
|
|
1652
|
+
"button",
|
|
1653
|
+
"badge",
|
|
1654
|
+
"banner",
|
|
1655
|
+
"avatar",
|
|
1656
|
+
"toast",
|
|
1657
|
+
"dialog",
|
|
1658
|
+
"drawer",
|
|
1659
|
+
"context-menu",
|
|
1660
|
+
"breadcrumb"
|
|
1661
|
+
];
|
|
1318
1662
|
var semanticIntents = [
|
|
1319
1663
|
"success",
|
|
1320
1664
|
"error",
|
|
@@ -1354,12 +1698,19 @@ var toastPurposes = [
|
|
|
1354
1698
|
"warning-toast",
|
|
1355
1699
|
"info-toast"
|
|
1356
1700
|
];
|
|
1701
|
+
var bannerPurposes = [
|
|
1702
|
+
"info-banner",
|
|
1703
|
+
"success-banner",
|
|
1704
|
+
"warning-banner",
|
|
1705
|
+
"error-banner"
|
|
1706
|
+
];
|
|
1357
1707
|
var dialogPurposes = ["confirm-dialog", "destructive-dialog", "info-dialog"];
|
|
1358
1708
|
var semanticPurposes = [
|
|
1359
1709
|
...buttonPurposes,
|
|
1360
1710
|
...badgePurposes,
|
|
1361
1711
|
...avatarPurposes,
|
|
1362
1712
|
...toastPurposes,
|
|
1713
|
+
...bannerPurposes,
|
|
1363
1714
|
...dialogPurposes
|
|
1364
1715
|
];
|
|
1365
1716
|
|
|
@@ -1428,7 +1779,7 @@ var canonicalSemanticAttributes = {
|
|
|
1428
1779
|
name: "data-destructive",
|
|
1429
1780
|
description: "Boolean marker for destructive actions or flows.",
|
|
1430
1781
|
allowedValues: ["true", "false"],
|
|
1431
|
-
applicableFamilies: ["button", "dialog"],
|
|
1782
|
+
applicableFamilies: ["button", "dialog", "context-menu"],
|
|
1432
1783
|
applicableLayers: semanticLayers
|
|
1433
1784
|
},
|
|
1434
1785
|
"data-confirmation-required": {
|
|
@@ -1502,6 +1853,16 @@ var familySemanticsRegistry = {
|
|
|
1502
1853
|
allowedPurposes: ["status", "priority", "notification"],
|
|
1503
1854
|
notes: "Badge needs base family identity normalized before full parity governance."
|
|
1504
1855
|
},
|
|
1856
|
+
banner: {
|
|
1857
|
+
family: "banner",
|
|
1858
|
+
defaultLayer: "atom",
|
|
1859
|
+
baseAttributes: {
|
|
1860
|
+
"data-component": "banner"
|
|
1861
|
+
},
|
|
1862
|
+
canonicalAttributes: ["data-component", "data-variant"],
|
|
1863
|
+
allowedPurposes: ["info-banner", "success-banner", "warning-banner", "error-banner"],
|
|
1864
|
+
notes: "Banner is a single-atom family with thin purpose variants that preset the variant prop and emit canonical data-purpose metadata."
|
|
1865
|
+
},
|
|
1505
1866
|
avatar: {
|
|
1506
1867
|
family: "avatar",
|
|
1507
1868
|
defaultLayer: "atom",
|
|
@@ -1531,6 +1892,36 @@ var familySemanticsRegistry = {
|
|
|
1531
1892
|
canonicalAttributes: ["data-component", "data-size", "data-intent"],
|
|
1532
1893
|
allowedPurposes: ["confirm-dialog", "destructive-dialog", "info-dialog"],
|
|
1533
1894
|
notes: "Dialog already has a strong purpose mapping and workflow semantics in adapters."
|
|
1895
|
+
},
|
|
1896
|
+
drawer: {
|
|
1897
|
+
family: "drawer",
|
|
1898
|
+
defaultLayer: "atom",
|
|
1899
|
+
baseAttributes: {
|
|
1900
|
+
"data-component": "drawer"
|
|
1901
|
+
},
|
|
1902
|
+
canonicalAttributes: ["data-component", "data-size"],
|
|
1903
|
+
allowedPurposes: [],
|
|
1904
|
+
notes: "Drawer shares dialog semantics while adding panel placement and scrim composition at the family level."
|
|
1905
|
+
},
|
|
1906
|
+
"context-menu": {
|
|
1907
|
+
family: "context-menu",
|
|
1908
|
+
defaultLayer: "atom",
|
|
1909
|
+
baseAttributes: {
|
|
1910
|
+
"data-component": "context-menu"
|
|
1911
|
+
},
|
|
1912
|
+
canonicalAttributes: ["data-component", "data-destructive"],
|
|
1913
|
+
allowedPurposes: [],
|
|
1914
|
+
notes: "ContextMenu exposes a menu surface and button-backed menu items while popover/open-state orchestration stays adapter-owned."
|
|
1915
|
+
},
|
|
1916
|
+
breadcrumb: {
|
|
1917
|
+
family: "breadcrumb",
|
|
1918
|
+
defaultLayer: "atom",
|
|
1919
|
+
baseAttributes: {
|
|
1920
|
+
"data-component": "breadcrumb"
|
|
1921
|
+
},
|
|
1922
|
+
canonicalAttributes: ["data-component"],
|
|
1923
|
+
allowedPurposes: [],
|
|
1924
|
+
notes: "Breadcrumb exposes navigation hierarchy while routing, link resolution, and page ownership stay consumer-owned."
|
|
1534
1925
|
}
|
|
1535
1926
|
};
|
|
1536
1927
|
|
|
@@ -1834,6 +2225,48 @@ var toastPurposeSemantics = {
|
|
|
1834
2225
|
supportedFrameworks: frameworks
|
|
1835
2226
|
}
|
|
1836
2227
|
};
|
|
2228
|
+
var bannerPurposeSemantics = {
|
|
2229
|
+
infoBanner: {
|
|
2230
|
+
purpose: "info-banner",
|
|
2231
|
+
family: "banner",
|
|
2232
|
+
layer: "purpose",
|
|
2233
|
+
attributes: {
|
|
2234
|
+
"data-purpose": "info-banner",
|
|
2235
|
+
"data-intent": "info"
|
|
2236
|
+
},
|
|
2237
|
+
supportedFrameworks: frameworks
|
|
2238
|
+
},
|
|
2239
|
+
successBanner: {
|
|
2240
|
+
purpose: "success-banner",
|
|
2241
|
+
family: "banner",
|
|
2242
|
+
layer: "purpose",
|
|
2243
|
+
attributes: {
|
|
2244
|
+
"data-purpose": "success-banner",
|
|
2245
|
+
"data-intent": "success"
|
|
2246
|
+
},
|
|
2247
|
+
supportedFrameworks: frameworks
|
|
2248
|
+
},
|
|
2249
|
+
warningBanner: {
|
|
2250
|
+
purpose: "warning-banner",
|
|
2251
|
+
family: "banner",
|
|
2252
|
+
layer: "purpose",
|
|
2253
|
+
attributes: {
|
|
2254
|
+
"data-purpose": "warning-banner",
|
|
2255
|
+
"data-intent": "warning"
|
|
2256
|
+
},
|
|
2257
|
+
supportedFrameworks: frameworks
|
|
2258
|
+
},
|
|
2259
|
+
errorBanner: {
|
|
2260
|
+
purpose: "error-banner",
|
|
2261
|
+
family: "banner",
|
|
2262
|
+
layer: "purpose",
|
|
2263
|
+
attributes: {
|
|
2264
|
+
"data-purpose": "error-banner",
|
|
2265
|
+
"data-intent": "error"
|
|
2266
|
+
},
|
|
2267
|
+
supportedFrameworks: frameworks
|
|
2268
|
+
}
|
|
2269
|
+
};
|
|
1837
2270
|
var dialogPurposeSemantics = {
|
|
1838
2271
|
confirmDialog: {
|
|
1839
2272
|
purpose: "confirm-dialog",
|
|
@@ -1873,6 +2306,7 @@ var purposeSemanticsRegistry = {
|
|
|
1873
2306
|
...badgePurposeSemantics,
|
|
1874
2307
|
...avatarPurposeSemantics,
|
|
1875
2308
|
...toastPurposeSemantics,
|
|
2309
|
+
...bannerPurposeSemantics,
|
|
1876
2310
|
...dialogPurposeSemantics
|
|
1877
2311
|
};
|
|
1878
2312
|
|
|
@@ -3889,7 +4323,8 @@ var buttonVariantVisualStyles = [
|
|
|
3889
4323
|
{ label: "secondary", text: "Outlined, brand-accent emphasis (action utilities)" },
|
|
3890
4324
|
{ label: "neutral", text: "Outlined, low-chroma emphasis (cancel/close/filter actions)" },
|
|
3891
4325
|
{ label: "text", text: "Minimal, low emphasis (tertiary/inline actions)" },
|
|
3892
|
-
{ label: "success", text: "Filled, positive emphasis (confirm actions)" }
|
|
4326
|
+
{ label: "success", text: "Filled, positive emphasis (confirm actions)" },
|
|
4327
|
+
{ label: "danger", text: "Filled, destructive emphasis (delete/discard actions)" }
|
|
3893
4328
|
];
|
|
3894
4329
|
var buttonActionSemanticPurposes = [
|
|
3895
4330
|
{ label: "submit", text: "Form submission" },
|
|
@@ -4355,14 +4790,15 @@ function resolveAvatarA11y(options, resolvedType, normalizedInitials) {
|
|
|
4355
4790
|
};
|
|
4356
4791
|
}
|
|
4357
4792
|
if (resolvedType === AvatarType.image) {
|
|
4358
|
-
|
|
4793
|
+
const imageAccessibleLabel = options.ariaLabel ?? options.label;
|
|
4794
|
+
if (__DEV__ && !options.alt && !imageAccessibleLabel) {
|
|
4359
4795
|
console.warn(
|
|
4360
|
-
"[marwes] Avatar: an image avatar was rendered without alt text or
|
|
4796
|
+
"[marwes] Avatar: an image avatar was rendered without alt text, ariaLabel, or label. Provide alt to describe the person, ariaLabel/label as a fallback, or use decorative={true} to explicitly mark it as presentational."
|
|
4361
4797
|
);
|
|
4362
4798
|
}
|
|
4363
4799
|
return {};
|
|
4364
4800
|
}
|
|
4365
|
-
const accessibleLabel = options.ariaLabel ?? normalizedInitials ?? "Avatar";
|
|
4801
|
+
const accessibleLabel = options.ariaLabel ?? options.label ?? normalizedInitials ?? "Avatar";
|
|
4366
4802
|
return {
|
|
4367
4803
|
role: "img",
|
|
4368
4804
|
ariaLabel: accessibleLabel
|
|
@@ -4515,6 +4951,305 @@ function createDialogRecipe(opts = {}) {
|
|
|
4515
4951
|
};
|
|
4516
4952
|
}
|
|
4517
4953
|
|
|
4954
|
+
// src/components/atoms/drawer/drawer-a11y.ts
|
|
4955
|
+
function resolveDrawerA11y(opts) {
|
|
4956
|
+
const a11y = {
|
|
4957
|
+
role: "dialog"
|
|
4958
|
+
};
|
|
4959
|
+
if (opts.modal) {
|
|
4960
|
+
a11y.ariaModal = true;
|
|
4961
|
+
}
|
|
4962
|
+
if (opts.ariaLabel) {
|
|
4963
|
+
a11y.ariaLabel = opts.ariaLabel;
|
|
4964
|
+
}
|
|
4965
|
+
if (opts.ariaLabelledBy) {
|
|
4966
|
+
a11y.ariaLabelledBy = opts.ariaLabelledBy;
|
|
4967
|
+
}
|
|
4968
|
+
if (opts.ariaDescribedBy) {
|
|
4969
|
+
a11y.ariaDescribedBy = opts.ariaDescribedBy;
|
|
4970
|
+
}
|
|
4971
|
+
return a11y;
|
|
4972
|
+
}
|
|
4973
|
+
|
|
4974
|
+
// src/components/atoms/drawer/drawer-recipe.ts
|
|
4975
|
+
function cx4(...parts) {
|
|
4976
|
+
return parts.filter(Boolean).join(" ");
|
|
4977
|
+
}
|
|
4978
|
+
function createDrawerRecipe(opts = {}) {
|
|
4979
|
+
const size = opts.size ?? "medium";
|
|
4980
|
+
const placement = opts.placement ?? "right";
|
|
4981
|
+
const showFooter = opts.showFooter ?? true;
|
|
4982
|
+
const showCloseButton = opts.dismissible ?? true;
|
|
4983
|
+
const showScrim = opts.showScrim ?? true;
|
|
4984
|
+
const rootDataAttributes = {
|
|
4985
|
+
...createFamilySemanticAttributes("drawer", {
|
|
4986
|
+
"data-size": size
|
|
4987
|
+
}),
|
|
4988
|
+
"data-placement": placement,
|
|
4989
|
+
"data-footer": showFooter ? "true" : "false",
|
|
4990
|
+
"data-dismissible": showCloseButton ? "true" : "false",
|
|
4991
|
+
"data-scrim": showScrim ? "true" : "false",
|
|
4992
|
+
...opts.dataAttributes
|
|
4993
|
+
};
|
|
4994
|
+
return {
|
|
4995
|
+
tag: "div",
|
|
4996
|
+
className: cx4(
|
|
4997
|
+
"mw-drawer",
|
|
4998
|
+
`mw-drawer--${placement}`,
|
|
4999
|
+
`mw-drawer--${size}`,
|
|
5000
|
+
showFooter ? "mw-drawer--with-footer" : "mw-drawer--without-footer",
|
|
5001
|
+
showScrim && "mw-drawer--with-scrim",
|
|
5002
|
+
showCloseButton && "mw-drawer--dismissible"
|
|
5003
|
+
),
|
|
5004
|
+
vars: {},
|
|
5005
|
+
size,
|
|
5006
|
+
placement,
|
|
5007
|
+
showFooter,
|
|
5008
|
+
showCloseButton,
|
|
5009
|
+
showScrim,
|
|
5010
|
+
dataAttributes: rootDataAttributes,
|
|
5011
|
+
panel: {
|
|
5012
|
+
tag: "div",
|
|
5013
|
+
className: "mw-drawer__panel",
|
|
5014
|
+
vars: {},
|
|
5015
|
+
a11y: resolveDrawerA11y(opts),
|
|
5016
|
+
dataAttributes: {
|
|
5017
|
+
...rootDataAttributes,
|
|
5018
|
+
"data-part": "panel"
|
|
5019
|
+
}
|
|
5020
|
+
},
|
|
5021
|
+
scrim: {
|
|
5022
|
+
tag: "div",
|
|
5023
|
+
className: "mw-drawer__scrim",
|
|
5024
|
+
vars: {},
|
|
5025
|
+
dataAttributes: {
|
|
5026
|
+
"data-component": "drawer",
|
|
5027
|
+
"data-part": "scrim",
|
|
5028
|
+
"data-placement": placement
|
|
5029
|
+
}
|
|
5030
|
+
}
|
|
5031
|
+
};
|
|
5032
|
+
}
|
|
5033
|
+
|
|
5034
|
+
// src/components/atoms/context-menu/context-menu-a11y.ts
|
|
5035
|
+
function resolveContextMenuA11y(options = {}) {
|
|
5036
|
+
return {
|
|
5037
|
+
role: "menu",
|
|
5038
|
+
ariaLabel: options.ariaLabel ?? "Context menu"
|
|
5039
|
+
};
|
|
5040
|
+
}
|
|
5041
|
+
function resolveContextMenuItemA11y(disabled = false) {
|
|
5042
|
+
return {
|
|
5043
|
+
role: "menuitem",
|
|
5044
|
+
type: "button",
|
|
5045
|
+
...disabled ? {
|
|
5046
|
+
disabled: true,
|
|
5047
|
+
ariaDisabled: "true"
|
|
5048
|
+
} : {}
|
|
5049
|
+
};
|
|
5050
|
+
}
|
|
5051
|
+
function resolveContextMenuDividerA11y() {
|
|
5052
|
+
return {
|
|
5053
|
+
role: "separator",
|
|
5054
|
+
ariaOrientation: "horizontal"
|
|
5055
|
+
};
|
|
5056
|
+
}
|
|
5057
|
+
|
|
5058
|
+
// src/components/atoms/context-menu/context-menu-recipe.ts
|
|
5059
|
+
function cx5(...parts) {
|
|
5060
|
+
return parts.filter(Boolean).join(" ");
|
|
5061
|
+
}
|
|
5062
|
+
function isActionItem(item) {
|
|
5063
|
+
return item.kind !== "divider";
|
|
5064
|
+
}
|
|
5065
|
+
function createContextMenuItemKey(item, index) {
|
|
5066
|
+
if (isActionItem(item)) {
|
|
5067
|
+
return `item-${item.value}`;
|
|
5068
|
+
}
|
|
5069
|
+
return item.id ?? `divider-${index}`;
|
|
5070
|
+
}
|
|
5071
|
+
function createContextMenuRecipe(options = {}) {
|
|
5072
|
+
const rootDataAttributes = {
|
|
5073
|
+
...createFamilySemanticAttributes("context-menu"),
|
|
5074
|
+
...options.dataAttributes
|
|
5075
|
+
};
|
|
5076
|
+
return {
|
|
5077
|
+
tag: "div",
|
|
5078
|
+
className: "mw-context-menu",
|
|
5079
|
+
vars: {},
|
|
5080
|
+
a11y: resolveContextMenuA11y(options),
|
|
5081
|
+
dataAttributes: rootDataAttributes,
|
|
5082
|
+
items: (options.items ?? []).map((item, index) => {
|
|
5083
|
+
const key = createContextMenuItemKey(item, index);
|
|
5084
|
+
if (!isActionItem(item)) {
|
|
5085
|
+
return {
|
|
5086
|
+
kind: "divider",
|
|
5087
|
+
key,
|
|
5088
|
+
item,
|
|
5089
|
+
className: "mw-context-menu__divider",
|
|
5090
|
+
vars: {},
|
|
5091
|
+
a11y: resolveContextMenuDividerA11y(),
|
|
5092
|
+
dataAttributes: {
|
|
5093
|
+
"data-component": "context-menu",
|
|
5094
|
+
"data-part": "divider",
|
|
5095
|
+
...item.dataAttributes
|
|
5096
|
+
}
|
|
5097
|
+
};
|
|
5098
|
+
}
|
|
5099
|
+
const disabled = item.disabled ?? false;
|
|
5100
|
+
const destructive = item.destructive ?? false;
|
|
5101
|
+
return {
|
|
5102
|
+
kind: "item",
|
|
5103
|
+
key,
|
|
5104
|
+
item,
|
|
5105
|
+
label: item.label,
|
|
5106
|
+
value: item.value,
|
|
5107
|
+
...item.icon ? { icon: item.icon } : {},
|
|
5108
|
+
className: cx5(
|
|
5109
|
+
"mw-context-menu__item",
|
|
5110
|
+
destructive && "mw-context-menu__item--destructive",
|
|
5111
|
+
disabled && "mw-context-menu__item--disabled"
|
|
5112
|
+
),
|
|
5113
|
+
vars: {},
|
|
5114
|
+
a11y: resolveContextMenuItemA11y(disabled),
|
|
5115
|
+
dataAttributes: {
|
|
5116
|
+
"data-component": "context-menu",
|
|
5117
|
+
"data-part": "item",
|
|
5118
|
+
"data-value": item.value,
|
|
5119
|
+
"data-disabled": disabled ? "true" : void 0,
|
|
5120
|
+
"data-destructive": destructive ? "true" : void 0,
|
|
5121
|
+
...item.dataAttributes
|
|
5122
|
+
}
|
|
5123
|
+
};
|
|
5124
|
+
})
|
|
5125
|
+
};
|
|
5126
|
+
}
|
|
5127
|
+
|
|
5128
|
+
// src/components/atoms/breadcrumb/breadcrumb-a11y.ts
|
|
5129
|
+
function resolveBreadcrumbA11y(options = {}) {
|
|
5130
|
+
return {
|
|
5131
|
+
ariaLabel: options.ariaLabel ?? "Breadcrumb"
|
|
5132
|
+
};
|
|
5133
|
+
}
|
|
5134
|
+
function resolveBreadcrumbListA11y() {
|
|
5135
|
+
return {
|
|
5136
|
+
role: "list"
|
|
5137
|
+
};
|
|
5138
|
+
}
|
|
5139
|
+
function resolveBreadcrumbSeparatorA11y() {
|
|
5140
|
+
return {
|
|
5141
|
+
ariaHidden: true
|
|
5142
|
+
};
|
|
5143
|
+
}
|
|
5144
|
+
function resolveBreadcrumbHomeA11y(homeLabel) {
|
|
5145
|
+
return {
|
|
5146
|
+
ariaLabel: homeLabel
|
|
5147
|
+
};
|
|
5148
|
+
}
|
|
5149
|
+
function resolveBreadcrumbItemA11y(item, current) {
|
|
5150
|
+
return {
|
|
5151
|
+
...current ? { ariaCurrent: "page" } : {},
|
|
5152
|
+
...item.ariaLabel ? { ariaLabel: item.ariaLabel } : {}
|
|
5153
|
+
};
|
|
5154
|
+
}
|
|
5155
|
+
|
|
5156
|
+
// src/components/atoms/breadcrumb/breadcrumb-recipe.ts
|
|
5157
|
+
function cx6(...parts) {
|
|
5158
|
+
return parts.filter(Boolean).join(" ");
|
|
5159
|
+
}
|
|
5160
|
+
function createItemKey(item, index) {
|
|
5161
|
+
return item.id ?? item.value ?? `${index}-${item.href ?? item.label}`;
|
|
5162
|
+
}
|
|
5163
|
+
function resolveCurrentIndex(items) {
|
|
5164
|
+
const explicitIndex = items.findIndex((item) => item.current === true);
|
|
5165
|
+
if (explicitIndex >= 0) return explicitIndex;
|
|
5166
|
+
return items.length - 1;
|
|
5167
|
+
}
|
|
5168
|
+
function createBreadcrumbItemRenderKit(item, index, currentIndex) {
|
|
5169
|
+
const current = index === currentIndex;
|
|
5170
|
+
const value = item.value ?? item.id ?? item.href ?? item.label;
|
|
5171
|
+
return {
|
|
5172
|
+
key: `item-${createItemKey(item, index)}`,
|
|
5173
|
+
kind: "item",
|
|
5174
|
+
item,
|
|
5175
|
+
label: item.label,
|
|
5176
|
+
value,
|
|
5177
|
+
...item.href ? { href: item.href } : {},
|
|
5178
|
+
current,
|
|
5179
|
+
className: cx6("mw-breadcrumb__item", current && "mw-breadcrumb__item--current"),
|
|
5180
|
+
actionClassName: cx6("mw-breadcrumb__action", current && "mw-breadcrumb__current"),
|
|
5181
|
+
vars: {},
|
|
5182
|
+
a11y: resolveBreadcrumbItemA11y(item, current),
|
|
5183
|
+
dataAttributes: {
|
|
5184
|
+
"data-component": "breadcrumb",
|
|
5185
|
+
"data-part": "item",
|
|
5186
|
+
"data-current": current ? "true" : void 0,
|
|
5187
|
+
"data-value": value,
|
|
5188
|
+
...item.dataAttributes
|
|
5189
|
+
}
|
|
5190
|
+
};
|
|
5191
|
+
}
|
|
5192
|
+
function createBreadcrumbRecipe(options = {}) {
|
|
5193
|
+
const showHome = options.showHome ?? true;
|
|
5194
|
+
const homeLabel = options.homeLabel ?? "Home";
|
|
5195
|
+
const items = options.items ?? [];
|
|
5196
|
+
const currentIndex = resolveCurrentIndex(items);
|
|
5197
|
+
const rootDataAttributes = {
|
|
5198
|
+
...createFamilySemanticAttributes("breadcrumb"),
|
|
5199
|
+
...options.dataAttributes
|
|
5200
|
+
};
|
|
5201
|
+
return {
|
|
5202
|
+
tag: "nav",
|
|
5203
|
+
className: "mw-breadcrumb",
|
|
5204
|
+
vars: {},
|
|
5205
|
+
a11y: resolveBreadcrumbA11y(options),
|
|
5206
|
+
dataAttributes: rootDataAttributes,
|
|
5207
|
+
list: {
|
|
5208
|
+
tag: "ol",
|
|
5209
|
+
className: "mw-breadcrumb__list",
|
|
5210
|
+
vars: {},
|
|
5211
|
+
a11y: resolveBreadcrumbListA11y()
|
|
5212
|
+
},
|
|
5213
|
+
separator: {
|
|
5214
|
+
tag: "span",
|
|
5215
|
+
className: "mw-breadcrumb__separator",
|
|
5216
|
+
vars: {},
|
|
5217
|
+
a11y: resolveBreadcrumbSeparatorA11y()
|
|
5218
|
+
},
|
|
5219
|
+
items: [
|
|
5220
|
+
...showHome ? [
|
|
5221
|
+
{
|
|
5222
|
+
key: "home",
|
|
5223
|
+
kind: "home",
|
|
5224
|
+
label: homeLabel,
|
|
5225
|
+
value: "home",
|
|
5226
|
+
...options.homeHref ? { href: options.homeHref } : {},
|
|
5227
|
+
current: items.length === 0,
|
|
5228
|
+
className: cx6(
|
|
5229
|
+
"mw-breadcrumb__item",
|
|
5230
|
+
"mw-breadcrumb__item--home",
|
|
5231
|
+
items.length === 0 && "mw-breadcrumb__item--current"
|
|
5232
|
+
),
|
|
5233
|
+
actionClassName: cx6(
|
|
5234
|
+
"mw-breadcrumb__action",
|
|
5235
|
+
"mw-breadcrumb__home",
|
|
5236
|
+
items.length === 0 && "mw-breadcrumb__current"
|
|
5237
|
+
),
|
|
5238
|
+
vars: {},
|
|
5239
|
+
a11y: resolveBreadcrumbHomeA11y(homeLabel),
|
|
5240
|
+
dataAttributes: {
|
|
5241
|
+
"data-component": "breadcrumb",
|
|
5242
|
+
"data-part": "home",
|
|
5243
|
+
"data-current": items.length === 0 ? "true" : void 0,
|
|
5244
|
+
"data-value": "home"
|
|
5245
|
+
}
|
|
5246
|
+
}
|
|
5247
|
+
] : [],
|
|
5248
|
+
...items.map((item, index) => createBreadcrumbItemRenderKit(item, index, currentIndex))
|
|
5249
|
+
]
|
|
5250
|
+
};
|
|
5251
|
+
}
|
|
5252
|
+
|
|
4518
5253
|
// src/components/atoms/toast/toast-a11y.ts
|
|
4519
5254
|
function resolveToastA11y(opts) {
|
|
4520
5255
|
const ariaLive = opts.ariaLive ?? "polite";
|
|
@@ -4526,14 +5261,14 @@ function resolveToastA11y(opts) {
|
|
|
4526
5261
|
}
|
|
4527
5262
|
|
|
4528
5263
|
// src/components/atoms/toast/toast-recipe.ts
|
|
4529
|
-
function
|
|
5264
|
+
function cx7(...parts) {
|
|
4530
5265
|
return parts.filter(Boolean).join(" ");
|
|
4531
5266
|
}
|
|
4532
5267
|
function createToastRecipe(opts) {
|
|
4533
5268
|
const variant = opts.variant ?? "outline";
|
|
4534
5269
|
return {
|
|
4535
5270
|
tag: "div",
|
|
4536
|
-
className:
|
|
5271
|
+
className: cx7("mw-toast", `mw-toast--${variant}`),
|
|
4537
5272
|
vars: {},
|
|
4538
5273
|
a11y: resolveToastA11y(opts),
|
|
4539
5274
|
dataAttributes: createFamilySemanticAttributes("toast", {
|
|
@@ -4566,19 +5301,20 @@ function createTooltipRecipe(options = {}) {
|
|
|
4566
5301
|
// src/components/atoms/badge/badge-a11y.ts
|
|
4567
5302
|
function resolveBadgeA11y(opts) {
|
|
4568
5303
|
const a11y = {};
|
|
4569
|
-
|
|
5304
|
+
const accessibleLabel = opts.ariaLabel ?? opts.label;
|
|
5305
|
+
if (accessibleLabel) a11y.ariaLabel = accessibleLabel;
|
|
4570
5306
|
return a11y;
|
|
4571
5307
|
}
|
|
4572
5308
|
|
|
4573
5309
|
// src/components/atoms/badge/badge-recipe.ts
|
|
4574
|
-
function
|
|
5310
|
+
function cx8(...parts) {
|
|
4575
5311
|
return parts.filter(Boolean).join(" ");
|
|
4576
5312
|
}
|
|
4577
5313
|
function createBadgeRecipe(opts) {
|
|
4578
5314
|
const variant = opts.variant ?? "neutral";
|
|
4579
5315
|
return {
|
|
4580
5316
|
tag: "span",
|
|
4581
|
-
className:
|
|
5317
|
+
className: cx8("mw-badge", `mw-badge--${variant}`),
|
|
4582
5318
|
vars: {},
|
|
4583
5319
|
a11y: resolveBadgeA11y(opts),
|
|
4584
5320
|
dataAttributes: createFamilySemanticAttributes("badge", {
|
|
@@ -4596,6 +5332,65 @@ var BadgeVariant = {
|
|
|
4596
5332
|
error: "error"
|
|
4597
5333
|
};
|
|
4598
5334
|
|
|
5335
|
+
// src/components/atoms/banner/banner-a11y.ts
|
|
5336
|
+
function resolveBannerA11y(opts) {
|
|
5337
|
+
const variant = opts.variant ?? "neutral";
|
|
5338
|
+
const isUrgent = variant === "error" || variant === "warning";
|
|
5339
|
+
return {
|
|
5340
|
+
role: isUrgent ? "alert" : "status",
|
|
5341
|
+
ariaLabel: opts.ariaLabel,
|
|
5342
|
+
ariaLive: isUrgent ? "assertive" : "polite"
|
|
5343
|
+
};
|
|
5344
|
+
}
|
|
5345
|
+
|
|
5346
|
+
// src/components/atoms/banner/banner-recipe.ts
|
|
5347
|
+
function cx9(...parts) {
|
|
5348
|
+
return parts.filter(Boolean).join(" ");
|
|
5349
|
+
}
|
|
5350
|
+
function createBannerRecipe(opts) {
|
|
5351
|
+
const variant = opts.variant ?? "neutral";
|
|
5352
|
+
const showIcon = opts.showIcon ?? true;
|
|
5353
|
+
const showAction = opts.showAction ?? false;
|
|
5354
|
+
const dismissible = opts.dismissible ?? true;
|
|
5355
|
+
return {
|
|
5356
|
+
root: {
|
|
5357
|
+
className: cx9("mw-banner", `mw-banner--${variant}`),
|
|
5358
|
+
a11y: resolveBannerA11y(opts),
|
|
5359
|
+
dataAttributes: createFamilySemanticAttributes("banner", {
|
|
5360
|
+
"data-variant": variant
|
|
5361
|
+
})
|
|
5362
|
+
},
|
|
5363
|
+
content: {
|
|
5364
|
+
className: "mw-banner__content"
|
|
5365
|
+
},
|
|
5366
|
+
icon: {
|
|
5367
|
+
className: "mw-banner__icon",
|
|
5368
|
+
visible: showIcon
|
|
5369
|
+
},
|
|
5370
|
+
message: {
|
|
5371
|
+
className: "mw-banner__message"
|
|
5372
|
+
},
|
|
5373
|
+
action: {
|
|
5374
|
+
className: "mw-banner__action",
|
|
5375
|
+
visible: showAction
|
|
5376
|
+
},
|
|
5377
|
+
dismiss: {
|
|
5378
|
+
className: "mw-banner__dismiss",
|
|
5379
|
+
visible: dismissible,
|
|
5380
|
+
ariaLabel: "Dismiss banner"
|
|
5381
|
+
}
|
|
5382
|
+
};
|
|
5383
|
+
}
|
|
5384
|
+
|
|
5385
|
+
// src/components/atoms/banner/banner-types.ts
|
|
5386
|
+
var BannerVariant = {
|
|
5387
|
+
neutral: "neutral",
|
|
5388
|
+
info: "info",
|
|
5389
|
+
success: "success",
|
|
5390
|
+
warning: "warning",
|
|
5391
|
+
error: "error"
|
|
5392
|
+
};
|
|
5393
|
+
|
|
4599
5394
|
// src/components/atoms/button/button-types.ts
|
|
4600
5395
|
var ButtonSize = {
|
|
4601
5396
|
xs: "xs",
|
|
@@ -4608,7 +5403,8 @@ var ButtonVariant = {
|
|
|
4608
5403
|
secondary: "secondary",
|
|
4609
5404
|
neutral: "neutral",
|
|
4610
5405
|
text: "text",
|
|
4611
|
-
success: "success"
|
|
5406
|
+
success: "success",
|
|
5407
|
+
danger: "danger"
|
|
4612
5408
|
};
|
|
4613
5409
|
var ButtonAction = {
|
|
4614
5410
|
submit: "submit",
|
|
@@ -4687,13 +5483,21 @@ function resolveButtonA11y(opts, resolvedLoading) {
|
|
|
4687
5483
|
const isDisabled = !!opts.disabled || resolvedLoading.isLoading && resolvedLoading.disableWhileLoading;
|
|
4688
5484
|
if (__DEV__2) {
|
|
4689
5485
|
const iconOnly = opts.iconOnly || opts.hasVisibleText === false;
|
|
5486
|
+
const accessibleLabel = opts.ariaLabel ?? opts.label;
|
|
4690
5487
|
const loadingAccessibleLabel = resolvedLoading.isLoading ? resolvedLoading.loadingLabel : void 0;
|
|
4691
|
-
if (iconOnly && !
|
|
4692
|
-
console.warn(
|
|
5488
|
+
if (iconOnly && !accessibleLabel && !loadingAccessibleLabel) {
|
|
5489
|
+
console.warn(
|
|
5490
|
+
"[marwes] Icon-only Button requires ariaLabel, label, or loadingLabel while loading."
|
|
5491
|
+
);
|
|
4693
5492
|
}
|
|
4694
5493
|
}
|
|
4695
5494
|
const common = {};
|
|
4696
|
-
if (opts.
|
|
5495
|
+
if (opts.ariaLabelledBy) {
|
|
5496
|
+
common.ariaLabelledBy = opts.ariaLabelledBy;
|
|
5497
|
+
} else {
|
|
5498
|
+
const accessibleLabel = opts.ariaLabel ?? opts.label;
|
|
5499
|
+
if (accessibleLabel) common.ariaLabel = accessibleLabel;
|
|
5500
|
+
}
|
|
4697
5501
|
if (resolvedLoading.isLoading) common.ariaBusy = true;
|
|
4698
5502
|
if (isDisabled) common.ariaDisabled = true;
|
|
4699
5503
|
if (opts.toggle) common.ariaPressed = !!opts.pressed;
|
|
@@ -4724,6 +5528,7 @@ function createButtonRecipe(opts) {
|
|
|
4724
5528
|
const size = opts.size ?? "md";
|
|
4725
5529
|
const variant = opts.variant ?? "primary";
|
|
4726
5530
|
const action = opts.action ?? (tag === "button" ? "button" : "navigate");
|
|
5531
|
+
const hasAffordance = resolvedLoading.isLoading || Boolean(opts.iconLeft || opts.iconRight);
|
|
4727
5532
|
return {
|
|
4728
5533
|
tag,
|
|
4729
5534
|
blockClick,
|
|
@@ -4745,6 +5550,8 @@ function createButtonRecipe(opts) {
|
|
|
4745
5550
|
"data-size": size
|
|
4746
5551
|
}),
|
|
4747
5552
|
"data-error": opts.error ? "true" : void 0,
|
|
5553
|
+
"data-has-affordance": hasAffordance ? "true" : void 0,
|
|
5554
|
+
"data-icon-only": opts.iconOnly ? "true" : void 0,
|
|
4748
5555
|
...opts.dataAttributes
|
|
4749
5556
|
},
|
|
4750
5557
|
vars: {}
|
|
@@ -4759,7 +5566,8 @@ function buildRadioA11y(opts) {
|
|
|
4759
5566
|
if (opts.value) a11y.value = opts.value;
|
|
4760
5567
|
if (opts.disabled) a11y.disabled = true;
|
|
4761
5568
|
if (opts.required) a11y.required = true;
|
|
4762
|
-
|
|
5569
|
+
const accessibleLabel = opts.ariaLabel ?? opts.label;
|
|
5570
|
+
if (accessibleLabel) a11y.ariaLabel = accessibleLabel;
|
|
4763
5571
|
if (opts.ariaLabelledBy) a11y.ariaLabelledBy = opts.ariaLabelledBy;
|
|
4764
5572
|
if (opts.ariaDescribedBy) a11y.ariaDescribedBy = opts.ariaDescribedBy;
|
|
4765
5573
|
if (opts.invalid) a11y.ariaInvalid = true;
|
|
@@ -4767,7 +5575,7 @@ function buildRadioA11y(opts) {
|
|
|
4767
5575
|
}
|
|
4768
5576
|
|
|
4769
5577
|
// src/components/atoms/radio/radio-recipe.ts
|
|
4770
|
-
function
|
|
5578
|
+
function cx10(...parts) {
|
|
4771
5579
|
return parts.filter(Boolean).join(" ");
|
|
4772
5580
|
}
|
|
4773
5581
|
function radioRecipe({
|
|
@@ -4775,7 +5583,7 @@ function radioRecipe({
|
|
|
4775
5583
|
invalid = false,
|
|
4776
5584
|
...opts
|
|
4777
5585
|
}) {
|
|
4778
|
-
const className =
|
|
5586
|
+
const className = cx10("mw-radio", disabled && "mw-radio--disabled", invalid && "mw-radio--invalid");
|
|
4779
5587
|
const kit = {
|
|
4780
5588
|
tag: "input",
|
|
4781
5589
|
className,
|
|
@@ -4797,8 +5605,9 @@ function resolveSwitchA11y(opts) {
|
|
|
4797
5605
|
ariaChecked: opts.checked ?? false
|
|
4798
5606
|
};
|
|
4799
5607
|
if (opts.disabled) a11y.ariaDisabled = true;
|
|
4800
|
-
|
|
4801
|
-
if (
|
|
5608
|
+
const accessibleLabel = opts.ariaLabel ?? opts.label;
|
|
5609
|
+
if (accessibleLabel) a11y.ariaLabel = accessibleLabel;
|
|
5610
|
+
if (opts.ariaLabelledBy) a11y.ariaLabelledBy = opts.ariaLabelledBy;
|
|
4802
5611
|
if (opts.ariaDescribedBy) a11y.ariaDescribedBy = opts.ariaDescribedBy;
|
|
4803
5612
|
return a11y;
|
|
4804
5613
|
}
|
|
@@ -4811,14 +5620,14 @@ var SwitchSize = {
|
|
|
4811
5620
|
};
|
|
4812
5621
|
|
|
4813
5622
|
// src/components/atoms/switch/switch-recipe.ts
|
|
4814
|
-
function
|
|
5623
|
+
function cx11(...parts) {
|
|
4815
5624
|
return parts.filter(Boolean).join(" ");
|
|
4816
5625
|
}
|
|
4817
5626
|
function createSwitchRecipe(opts) {
|
|
4818
5627
|
const size = opts.size ?? SwitchSize.compact;
|
|
4819
5628
|
return {
|
|
4820
5629
|
tag: "button",
|
|
4821
|
-
className:
|
|
5630
|
+
className: cx11(
|
|
4822
5631
|
"mw-switch",
|
|
4823
5632
|
`mw-switch--${size}`,
|
|
4824
5633
|
opts.checked && "mw-switch--checked",
|
|
@@ -4865,7 +5674,8 @@ function resolveSliderA11y(opts) {
|
|
|
4865
5674
|
if (opts.name) a11y.name = opts.name;
|
|
4866
5675
|
if (opts.disabled) a11y.disabled = true;
|
|
4867
5676
|
if (opts.required) a11y.required = true;
|
|
4868
|
-
|
|
5677
|
+
const accessibleLabel = opts.ariaLabel ?? opts.label;
|
|
5678
|
+
if (accessibleLabel) a11y.ariaLabel = accessibleLabel;
|
|
4869
5679
|
if (opts.ariaLabelledBy) a11y.ariaLabelledBy = opts.ariaLabelledBy;
|
|
4870
5680
|
if (opts.ariaDescribedBy) a11y.ariaDescribedBy = opts.ariaDescribedBy;
|
|
4871
5681
|
if (opts.ariaValueText) a11y.ariaValueText = opts.ariaValueText;
|
|
@@ -4886,13 +5696,13 @@ function resolveSliderCurrentValue(opts, min, max) {
|
|
|
4886
5696
|
return clampSliderValue(candidateValue, min, max);
|
|
4887
5697
|
}
|
|
4888
5698
|
function resolveSliderFillPercentage(currentValue, min, max) {
|
|
4889
|
-
const
|
|
4890
|
-
if (
|
|
5699
|
+
const range2 = max - min;
|
|
5700
|
+
if (range2 <= 0) {
|
|
4891
5701
|
return 0;
|
|
4892
5702
|
}
|
|
4893
|
-
return (currentValue - min) /
|
|
5703
|
+
return (currentValue - min) / range2 * 100;
|
|
4894
5704
|
}
|
|
4895
|
-
function
|
|
5705
|
+
function cx12(...parts) {
|
|
4896
5706
|
return parts.filter(Boolean).join(" ");
|
|
4897
5707
|
}
|
|
4898
5708
|
function createSliderRecipe(opts = {}) {
|
|
@@ -4904,7 +5714,7 @@ function createSliderRecipe(opts = {}) {
|
|
|
4904
5714
|
const orientation = opts.orientation ?? "horizontal";
|
|
4905
5715
|
return {
|
|
4906
5716
|
tag: "div",
|
|
4907
|
-
className:
|
|
5717
|
+
className: cx12(
|
|
4908
5718
|
"mw-slider",
|
|
4909
5719
|
`mw-slider--${orientation}`,
|
|
4910
5720
|
opts.disabled && "mw-slider--disabled",
|
|
@@ -4939,7 +5749,8 @@ function buildCheckboxA11y(props) {
|
|
|
4939
5749
|
if (props.value) a11y.value = props.value;
|
|
4940
5750
|
if (props.disabled) a11y.disabled = true;
|
|
4941
5751
|
if (props.required) a11y.required = true;
|
|
4942
|
-
|
|
5752
|
+
const accessibleLabel = props.ariaLabel ?? props.label;
|
|
5753
|
+
if (accessibleLabel) a11y.ariaLabel = accessibleLabel;
|
|
4943
5754
|
if (props.ariaLabelledBy) a11y.ariaLabelledBy = props.ariaLabelledBy;
|
|
4944
5755
|
if (props.ariaDescribedBy) a11y.ariaDescribedBy = props.ariaDescribedBy;
|
|
4945
5756
|
if (props.indeterminate) a11y.ariaChecked = "mixed";
|
|
@@ -4948,7 +5759,7 @@ function buildCheckboxA11y(props) {
|
|
|
4948
5759
|
}
|
|
4949
5760
|
|
|
4950
5761
|
// src/components/atoms/checkbox/checkbox-recipe.ts
|
|
4951
|
-
function
|
|
5762
|
+
function cx13(...parts) {
|
|
4952
5763
|
return parts.filter(Boolean).join(" ");
|
|
4953
5764
|
}
|
|
4954
5765
|
function checkboxRecipe({
|
|
@@ -4957,7 +5768,7 @@ function checkboxRecipe({
|
|
|
4957
5768
|
...props
|
|
4958
5769
|
}) {
|
|
4959
5770
|
const size = props.size ?? "md";
|
|
4960
|
-
const className =
|
|
5771
|
+
const className = cx13(
|
|
4961
5772
|
"mw-checkbox",
|
|
4962
5773
|
size === "sm" && "mw-checkbox--sm",
|
|
4963
5774
|
size === "md" && "mw-checkbox--md",
|
|
@@ -5035,17 +5846,18 @@ function resolveSpinnerA11y(options = {}) {
|
|
|
5035
5846
|
ariaHidden: true
|
|
5036
5847
|
};
|
|
5037
5848
|
}
|
|
5038
|
-
|
|
5849
|
+
const accessibleLabel = options.ariaLabel ?? options.label;
|
|
5850
|
+
if (accessibleLabel) {
|
|
5039
5851
|
return {
|
|
5040
5852
|
...options.id ? { id: options.id } : {},
|
|
5041
5853
|
role: "status",
|
|
5042
|
-
ariaLabel:
|
|
5854
|
+
ariaLabel: accessibleLabel,
|
|
5043
5855
|
ariaLive: "polite"
|
|
5044
5856
|
};
|
|
5045
5857
|
}
|
|
5046
5858
|
if (__DEV__3 && options.decorative === false) {
|
|
5047
5859
|
console.warn(
|
|
5048
|
-
"[marwes] Spinner: decorative={false} was passed without ariaLabel. The spinner stays hidden from assistive technology unless ariaLabel is also provided."
|
|
5860
|
+
"[marwes] Spinner: decorative={false} was passed without ariaLabel. The spinner stays hidden from assistive technology unless ariaLabel or label is also provided."
|
|
5049
5861
|
);
|
|
5050
5862
|
}
|
|
5051
5863
|
return {
|
|
@@ -5324,7 +6136,7 @@ function createSpinnerSvgDefinition(variant) {
|
|
|
5324
6136
|
}
|
|
5325
6137
|
|
|
5326
6138
|
// src/components/atoms/spinner/spinner-recipe.ts
|
|
5327
|
-
function
|
|
6139
|
+
function cx14(...parts) {
|
|
5328
6140
|
return parts.filter(Boolean).join(" ");
|
|
5329
6141
|
}
|
|
5330
6142
|
function resolveSpinnerDataSize(size) {
|
|
@@ -5339,7 +6151,7 @@ function createSpinnerRecipe(options = {}) {
|
|
|
5339
6151
|
const resolvedSize = resolveSpinnerSize(requestedSize);
|
|
5340
6152
|
return {
|
|
5341
6153
|
tag: "span",
|
|
5342
|
-
className:
|
|
6154
|
+
className: cx14("mw-spinner", `mw-spinner--${variant}`),
|
|
5343
6155
|
vars: {
|
|
5344
6156
|
"--mw-spinner-size": `${resolvedSize}px`,
|
|
5345
6157
|
"--mw-spinner-rotation-duration": "800ms"
|
|
@@ -5411,7 +6223,7 @@ var FIGMA_TEXT_HEIGHT = 12;
|
|
|
5411
6223
|
var FIGMA_CIRCULAR_SIZE = 40;
|
|
5412
6224
|
var FIGMA_RECTANGULAR_SIZE = 120;
|
|
5413
6225
|
var FIGMA_RADIUS = 4;
|
|
5414
|
-
function
|
|
6226
|
+
function cx15(...parts) {
|
|
5415
6227
|
return parts.filter(Boolean).join(" ");
|
|
5416
6228
|
}
|
|
5417
6229
|
function toCssDimension(value) {
|
|
@@ -5436,7 +6248,7 @@ function createSkeletonRecipe(options = {}) {
|
|
|
5436
6248
|
const animation = options.animation ?? SkeletonAnimation.pulse;
|
|
5437
6249
|
return {
|
|
5438
6250
|
tag: "span",
|
|
5439
|
-
className:
|
|
6251
|
+
className: cx15(
|
|
5440
6252
|
"mw-skeleton",
|
|
5441
6253
|
`mw-skeleton--${variant}`,
|
|
5442
6254
|
animation !== SkeletonAnimation.none && `mw-skeleton--${animation}`
|
|
@@ -5455,6 +6267,117 @@ function createSkeletonRecipe(options = {}) {
|
|
|
5455
6267
|
};
|
|
5456
6268
|
}
|
|
5457
6269
|
|
|
6270
|
+
// src/components/atoms/progress-bar/progress-bar-a11y.ts
|
|
6271
|
+
var DEFAULT_PROGRESS_BAR_MIN = 0;
|
|
6272
|
+
var DEFAULT_PROGRESS_BAR_MAX = 100;
|
|
6273
|
+
var DEFAULT_PROGRESS_BAR_LABEL = "Progress";
|
|
6274
|
+
function resolveFiniteNumber(value, fallback) {
|
|
6275
|
+
return value === void 0 || !Number.isFinite(value) ? fallback : value;
|
|
6276
|
+
}
|
|
6277
|
+
function resolveProgressBarBounds(options) {
|
|
6278
|
+
const min = resolveFiniteNumber(options.min, DEFAULT_PROGRESS_BAR_MIN);
|
|
6279
|
+
const rawMax = resolveFiniteNumber(options.max, DEFAULT_PROGRESS_BAR_MAX);
|
|
6280
|
+
const max = rawMax > min ? rawMax : min + 1;
|
|
6281
|
+
return { min, max };
|
|
6282
|
+
}
|
|
6283
|
+
function clampProgressBarValue(value, min, max) {
|
|
6284
|
+
if (!Number.isFinite(value)) return min;
|
|
6285
|
+
return Math.min(max, Math.max(min, value));
|
|
6286
|
+
}
|
|
6287
|
+
function resolveProgressBarA11y(options, value) {
|
|
6288
|
+
const { min, max } = resolveProgressBarBounds(options);
|
|
6289
|
+
const label = options.label ?? DEFAULT_PROGRESS_BAR_LABEL;
|
|
6290
|
+
const labelId = options.id && options.showLabel !== false ? `${options.id}-label` : void 0;
|
|
6291
|
+
const ariaLabelledBy = options.ariaLabelledBy ?? labelId;
|
|
6292
|
+
const ariaLabel = ariaLabelledBy ? void 0 : options.ariaLabel ?? label;
|
|
6293
|
+
return {
|
|
6294
|
+
...options.id ? { id: options.id } : {},
|
|
6295
|
+
role: "progressbar",
|
|
6296
|
+
ariaValueMin: min,
|
|
6297
|
+
ariaValueMax: max,
|
|
6298
|
+
ariaValueNow: value,
|
|
6299
|
+
...options.valueLabel ? { ariaValueText: options.valueLabel } : {},
|
|
6300
|
+
...ariaLabel ? { ariaLabel } : {},
|
|
6301
|
+
...ariaLabelledBy ? { ariaLabelledBy } : {},
|
|
6302
|
+
...options.ariaDescribedBy ? { ariaDescribedBy: options.ariaDescribedBy } : {},
|
|
6303
|
+
...options.disabled ? { ariaDisabled: true } : {}
|
|
6304
|
+
};
|
|
6305
|
+
}
|
|
6306
|
+
|
|
6307
|
+
// src/components/atoms/progress-bar/progress-bar-types.ts
|
|
6308
|
+
var ProgressBarSize = {
|
|
6309
|
+
small: "small",
|
|
6310
|
+
default: "default"
|
|
6311
|
+
};
|
|
6312
|
+
var progressBarSizes = Object.values(ProgressBarSize);
|
|
6313
|
+
var ProgressBarState = {
|
|
6314
|
+
default: "default",
|
|
6315
|
+
hover: "hover",
|
|
6316
|
+
pressed: "pressed",
|
|
6317
|
+
focus: "focus"
|
|
6318
|
+
};
|
|
6319
|
+
var progressBarStates = Object.values(ProgressBarState);
|
|
6320
|
+
|
|
6321
|
+
// src/components/atoms/progress-bar/progress-bar-recipe.ts
|
|
6322
|
+
function cx16(...parts) {
|
|
6323
|
+
return parts.filter(Boolean).join(" ");
|
|
6324
|
+
}
|
|
6325
|
+
function resolveProgressBarPercentage(value, min, max) {
|
|
6326
|
+
const range2 = max - min;
|
|
6327
|
+
if (range2 <= 0) return 0;
|
|
6328
|
+
return (value - min) / range2 * 100;
|
|
6329
|
+
}
|
|
6330
|
+
function resolvePercentageLabel(percentage, valueLabel) {
|
|
6331
|
+
if (valueLabel) return valueLabel;
|
|
6332
|
+
return `${Math.round(percentage)}%`;
|
|
6333
|
+
}
|
|
6334
|
+
function createProgressBarRecipe(options = {}) {
|
|
6335
|
+
const { min, max } = resolveProgressBarBounds(options);
|
|
6336
|
+
const value = clampProgressBarValue(options.value ?? min, min, max);
|
|
6337
|
+
const percentage = resolveProgressBarPercentage(value, min, max);
|
|
6338
|
+
const size = options.size ?? ProgressBarSize.default;
|
|
6339
|
+
const state = options.state ?? ProgressBarState.default;
|
|
6340
|
+
const showLabel = options.showLabel !== false;
|
|
6341
|
+
const showPercentage = options.showPercentage !== false;
|
|
6342
|
+
const label = options.label ?? DEFAULT_PROGRESS_BAR_LABEL;
|
|
6343
|
+
const percentageLabel = resolvePercentageLabel(percentage, options.valueLabel);
|
|
6344
|
+
const a11y = resolveProgressBarA11y({ ...options, showLabel }, value);
|
|
6345
|
+
return {
|
|
6346
|
+
tag: "div",
|
|
6347
|
+
className: cx16(
|
|
6348
|
+
"mw-progress-bar",
|
|
6349
|
+
`mw-progress-bar--${size}`,
|
|
6350
|
+
state !== ProgressBarState.default && `mw-progress-bar--state-${state}`,
|
|
6351
|
+
options.disabled && "mw-progress-bar--disabled"
|
|
6352
|
+
),
|
|
6353
|
+
trackClassName: "mw-progress-bar__track",
|
|
6354
|
+
fillClassName: "mw-progress-bar__fill",
|
|
6355
|
+
labelClassName: "mw-progress-bar__label",
|
|
6356
|
+
percentageClassName: "mw-progress-bar__percentage",
|
|
6357
|
+
...a11y.ariaLabelledBy && options.id ? { labelId: `${options.id}-label` } : {},
|
|
6358
|
+
vars: {
|
|
6359
|
+
"--mw-progress-bar-value-percentage": `${percentage}%`
|
|
6360
|
+
},
|
|
6361
|
+
a11y,
|
|
6362
|
+
dataAttributes: {
|
|
6363
|
+
"data-component": "progress-bar",
|
|
6364
|
+
"data-size": size,
|
|
6365
|
+
"data-state": state,
|
|
6366
|
+
...options.disabled ? { "data-disabled": "true" } : {}
|
|
6367
|
+
},
|
|
6368
|
+
label,
|
|
6369
|
+
percentageLabel,
|
|
6370
|
+
value,
|
|
6371
|
+
min,
|
|
6372
|
+
max,
|
|
6373
|
+
percentage,
|
|
6374
|
+
size,
|
|
6375
|
+
state,
|
|
6376
|
+
showLabel,
|
|
6377
|
+
showPercentage
|
|
6378
|
+
};
|
|
6379
|
+
}
|
|
6380
|
+
|
|
5458
6381
|
// src/components/atoms/stat-tile/stat-tile-a11y.ts
|
|
5459
6382
|
function resolveStatTileTrendLabel(direction, trendValue) {
|
|
5460
6383
|
if (!direction || !trendValue) return void 0;
|
|
@@ -5598,6 +6521,9 @@ function createDayKit(day) {
|
|
|
5598
6521
|
function createDatePickerRecipe(opts = {}) {
|
|
5599
6522
|
const device = resolveDevice(opts.device);
|
|
5600
6523
|
const weeks = opts.weeks ?? defaultWeeks;
|
|
6524
|
+
const calendarLabel = opts.ariaLabel ?? opts.calendarLabel ?? "Choose date";
|
|
6525
|
+
const a11y = opts.ariaLabelledBy ? { ariaLabelledBy: opts.ariaLabelledBy } : { ariaLabel: calendarLabel };
|
|
6526
|
+
if (opts.ariaDescribedBy) a11y.ariaDescribedBy = opts.ariaDescribedBy;
|
|
5601
6527
|
return {
|
|
5602
6528
|
className: ["mw-date-picker", `mw-date-picker--${device}`].join(" "),
|
|
5603
6529
|
dataAttributes: {
|
|
@@ -5605,6 +6531,7 @@ function createDatePickerRecipe(opts = {}) {
|
|
|
5605
6531
|
"data-component": "date-picker",
|
|
5606
6532
|
"data-device": device
|
|
5607
6533
|
},
|
|
6534
|
+
a11y,
|
|
5608
6535
|
monthLabel: opts.monthLabel ?? "March 2026",
|
|
5609
6536
|
weekdayLabels: opts.weekdayLabels ?? defaultWeekdayLabels,
|
|
5610
6537
|
weeks,
|
|
@@ -5623,7 +6550,7 @@ function createDatePickerRecipe(opts = {}) {
|
|
|
5623
6550
|
footerButtonClassName: "mw-date-picker__footer-button"
|
|
5624
6551
|
},
|
|
5625
6552
|
labels: {
|
|
5626
|
-
calendar:
|
|
6553
|
+
calendar: calendarLabel,
|
|
5627
6554
|
previousYear: opts.previousYearLabel ?? "Previous year",
|
|
5628
6555
|
previousMonth: opts.previousMonthLabel ?? "Previous month",
|
|
5629
6556
|
nextMonth: opts.nextMonthLabel ?? "Next month",
|
|
@@ -10507,7 +11434,12 @@ function resolveInputA11y(opts) {
|
|
|
10507
11434
|
if (opts.inputMode) a11y.inputMode = opts.inputMode;
|
|
10508
11435
|
if (opts.autoComplete) a11y.autoComplete = opts.autoComplete;
|
|
10509
11436
|
if (opts.placeholder) a11y.placeholder = opts.placeholder;
|
|
10510
|
-
if (opts.
|
|
11437
|
+
if (opts.ariaLabelledBy) {
|
|
11438
|
+
a11y.ariaLabelledBy = opts.ariaLabelledBy;
|
|
11439
|
+
} else {
|
|
11440
|
+
const accessibleLabel = opts.ariaLabel ?? opts.label;
|
|
11441
|
+
if (accessibleLabel) a11y.ariaLabel = accessibleLabel;
|
|
11442
|
+
}
|
|
10511
11443
|
if (opts.invalid) a11y.ariaInvalid = true;
|
|
10512
11444
|
if (opts.describedBy) a11y.ariaDescribedBy = opts.describedBy;
|
|
10513
11445
|
return a11y;
|
|
@@ -10549,8 +11481,11 @@ function resolveInputOtpA11y(options) {
|
|
|
10549
11481
|
if (options.required) {
|
|
10550
11482
|
a11yProps.required = true;
|
|
10551
11483
|
}
|
|
10552
|
-
if (options.
|
|
10553
|
-
a11yProps.
|
|
11484
|
+
if (options.ariaLabelledBy) {
|
|
11485
|
+
a11yProps.ariaLabelledBy = options.ariaLabelledBy;
|
|
11486
|
+
} else {
|
|
11487
|
+
const accessibleLabel = options.ariaLabel ?? options.label;
|
|
11488
|
+
if (accessibleLabel) a11yProps.ariaLabel = accessibleLabel;
|
|
10554
11489
|
}
|
|
10555
11490
|
if (options.invalid) {
|
|
10556
11491
|
a11yProps.ariaInvalid = true;
|
|
@@ -10562,7 +11497,7 @@ function resolveInputOtpA11y(options) {
|
|
|
10562
11497
|
}
|
|
10563
11498
|
|
|
10564
11499
|
// src/components/atoms/input/input-otp-recipe.ts
|
|
10565
|
-
function
|
|
11500
|
+
function cx17(...parts) {
|
|
10566
11501
|
return parts.filter(Boolean).join(" ");
|
|
10567
11502
|
}
|
|
10568
11503
|
function sanitizeInputOtpValue(rawValue, length) {
|
|
@@ -10598,7 +11533,7 @@ function createInputOtpRecipe(options) {
|
|
|
10598
11533
|
};
|
|
10599
11534
|
return {
|
|
10600
11535
|
tag: "div",
|
|
10601
|
-
className:
|
|
11536
|
+
className: cx17(
|
|
10602
11537
|
"mw-input-otp",
|
|
10603
11538
|
options.invalid && "mw-input-otp--invalid",
|
|
10604
11539
|
options.disabled && "mw-input-otp--disabled",
|
|
@@ -10619,7 +11554,12 @@ function resolveSelectA11y(opts) {
|
|
|
10619
11554
|
if (opts.name) a11y.name = opts.name;
|
|
10620
11555
|
if (opts.disabled) a11y.disabled = true;
|
|
10621
11556
|
if (opts.required) a11y.required = true;
|
|
10622
|
-
if (opts.
|
|
11557
|
+
if (opts.ariaLabelledBy) {
|
|
11558
|
+
a11y.ariaLabelledBy = opts.ariaLabelledBy;
|
|
11559
|
+
} else {
|
|
11560
|
+
const accessibleLabel = opts.ariaLabel ?? opts.label;
|
|
11561
|
+
if (accessibleLabel) a11y.ariaLabel = accessibleLabel;
|
|
11562
|
+
}
|
|
10623
11563
|
if (opts.invalid) a11y.ariaInvalid = true;
|
|
10624
11564
|
if (opts.describedBy) a11y.ariaDescribedBy = opts.describedBy;
|
|
10625
11565
|
return a11y;
|
|
@@ -10662,7 +11602,12 @@ function resolveTextareaA11y(opts) {
|
|
|
10662
11602
|
if (opts.placeholder) a11y.placeholder = opts.placeholder;
|
|
10663
11603
|
if (opts.rows !== void 0) a11y.rows = opts.rows;
|
|
10664
11604
|
if (opts.cols !== void 0) a11y.cols = opts.cols;
|
|
10665
|
-
if (opts.
|
|
11605
|
+
if (opts.ariaLabelledBy) {
|
|
11606
|
+
a11y.ariaLabelledBy = opts.ariaLabelledBy;
|
|
11607
|
+
} else {
|
|
11608
|
+
const accessibleLabel = opts.ariaLabel ?? opts.label;
|
|
11609
|
+
if (accessibleLabel) a11y.ariaLabel = accessibleLabel;
|
|
11610
|
+
}
|
|
10666
11611
|
if (opts.invalid) a11y.ariaInvalid = true;
|
|
10667
11612
|
if (opts.describedBy) a11y.ariaDescribedBy = opts.describedBy;
|
|
10668
11613
|
return a11y;
|
|
@@ -10692,7 +11637,8 @@ function resolveRichTextA11y(opts) {
|
|
|
10692
11637
|
ariaMultiline: true
|
|
10693
11638
|
};
|
|
10694
11639
|
if (opts.id) a11y.id = opts.id;
|
|
10695
|
-
|
|
11640
|
+
const accessibleLabel = opts.ariaLabel ?? opts.label;
|
|
11641
|
+
if (accessibleLabel) a11y.ariaLabel = accessibleLabel;
|
|
10696
11642
|
if (opts.labelledBy) a11y.ariaLabelledBy = opts.labelledBy;
|
|
10697
11643
|
if (opts.describedBy) a11y.ariaDescribedBy = opts.describedBy;
|
|
10698
11644
|
if (opts.invalid) a11y.ariaInvalid = true;
|
|
@@ -10770,7 +11716,14 @@ function normalizeRichTextHtml(rawHtml) {
|
|
|
10770
11716
|
if (!trimmedHtml.includes("<")) {
|
|
10771
11717
|
return escapeRichTextHtml(trimmedHtml);
|
|
10772
11718
|
}
|
|
10773
|
-
|
|
11719
|
+
let normalizedHtml = trimmedHtml.replace(/<b(?:\s[^>]*)?>/gi, "<strong>").replace(/<\/b>/gi, "</strong>").replace(/<i(?:\s[^>]*)?>/gi, "<em>").replace(/<\/i>/gi, "</em>").replace(blockTagPattern, "<p>").replace(closingBlockTagPattern, "</p>").replace(openingParagraphPattern, "<p>").replace(openingStrongPattern, "<strong>").replace(openingEmphasisPattern, "<em>").replace(openingUnderlinePattern, "<u>").replace(lineBreakPattern, "<br>");
|
|
11720
|
+
let previous;
|
|
11721
|
+
do {
|
|
11722
|
+
previous = normalizedHtml;
|
|
11723
|
+
normalizedHtml = normalizedHtml.replace(disallowedTagPattern, "");
|
|
11724
|
+
} while (normalizedHtml !== previous);
|
|
11725
|
+
normalizedHtml = normalizedHtml.replace(unsupportedAnglePattern, "<");
|
|
11726
|
+
normalizedHtml = normalizedHtml.replace(/\s+/g, " ").trim();
|
|
10774
11727
|
return isRichTextHtmlEmpty(normalizedHtml) ? "" : normalizedHtml;
|
|
10775
11728
|
}
|
|
10776
11729
|
function isRichTextHtmlEmpty(rawHtml) {
|
|
@@ -10830,6 +11783,27 @@ function paragraphRecipe(opts, theme) {
|
|
|
10830
11783
|
};
|
|
10831
11784
|
}
|
|
10832
11785
|
|
|
11786
|
+
// src/components/atoms/text/text-recipe.ts
|
|
11787
|
+
function textRecipe(opts, theme) {
|
|
11788
|
+
const variant = opts.variant ?? "caption";
|
|
11789
|
+
const tag = opts.headingLevel ? `h${opts.headingLevel}` : opts.as ?? "span";
|
|
11790
|
+
const className = ["mw-text", `mw-text--${variant}`].filter(Boolean).join(" ");
|
|
11791
|
+
const typo = theme.typography.text[variant];
|
|
11792
|
+
const vars = {
|
|
11793
|
+
"--mw-text-size": `${typo.fontSize}px`,
|
|
11794
|
+
"--mw-text-line-height": `${typo.lineHeight}`,
|
|
11795
|
+
"--mw-text-weight": `${typo.fontWeight}`,
|
|
11796
|
+
"--mw-text-letter-spacing": `${typo.letterSpacing}px`,
|
|
11797
|
+
"--mw-text-transform": typo.textTransform ?? "none"
|
|
11798
|
+
};
|
|
11799
|
+
return {
|
|
11800
|
+
tag,
|
|
11801
|
+
className,
|
|
11802
|
+
vars,
|
|
11803
|
+
a11y: opts.id ? { id: opts.id } : {}
|
|
11804
|
+
};
|
|
11805
|
+
}
|
|
11806
|
+
|
|
10833
11807
|
// src/components/atoms/tab/tab-a11y.ts
|
|
10834
11808
|
function resolveTabA11y(opts) {
|
|
10835
11809
|
const a11y = {
|
|
@@ -10840,19 +11814,20 @@ function resolveTabA11y(opts) {
|
|
|
10840
11814
|
tabIndex: opts.selected && !opts.disabled ? 0 : -1
|
|
10841
11815
|
};
|
|
10842
11816
|
if (opts.disabled) a11y.ariaDisabled = true;
|
|
10843
|
-
|
|
11817
|
+
const accessibleLabel = opts.ariaLabel ?? opts.label;
|
|
11818
|
+
if (accessibleLabel) a11y.ariaLabel = accessibleLabel;
|
|
10844
11819
|
if (opts.ariaControls) a11y.ariaControls = opts.ariaControls;
|
|
10845
11820
|
return a11y;
|
|
10846
11821
|
}
|
|
10847
11822
|
|
|
10848
11823
|
// src/components/atoms/tab/tab-recipe.ts
|
|
10849
|
-
function
|
|
11824
|
+
function cx18(...parts) {
|
|
10850
11825
|
return parts.filter(Boolean).join(" ");
|
|
10851
11826
|
}
|
|
10852
11827
|
function createTabRecipe(opts) {
|
|
10853
11828
|
return {
|
|
10854
11829
|
tag: "button",
|
|
10855
|
-
className:
|
|
11830
|
+
className: cx18(
|
|
10856
11831
|
"mw-tab",
|
|
10857
11832
|
opts.selected && "mw-tab--selected",
|
|
10858
11833
|
opts.disabled && "mw-tab--disabled"
|
|
@@ -10943,6 +11918,7 @@ var Spacings = {
|
|
|
10943
11918
|
sp2: "sp-2",
|
|
10944
11919
|
sp4: "sp-4",
|
|
10945
11920
|
sp8: "sp-8",
|
|
11921
|
+
sp12: "sp-12",
|
|
10946
11922
|
sp16: "sp-16",
|
|
10947
11923
|
sp24: "sp-24",
|
|
10948
11924
|
sp32: "sp-32",
|
|
@@ -10961,6 +11937,7 @@ var Spacings = {
|
|
|
10961
11937
|
"sp-2": "sp-2",
|
|
10962
11938
|
"sp-4": "sp-4",
|
|
10963
11939
|
"sp-8": "sp-8",
|
|
11940
|
+
"sp-12": "sp-12",
|
|
10964
11941
|
"sp-16": "sp-16",
|
|
10965
11942
|
"sp-24": "sp-24",
|
|
10966
11943
|
"sp-32": "sp-32",
|
|
@@ -10977,6 +11954,478 @@ var Spacings = {
|
|
|
10977
11954
|
"sp-120": "sp-120"
|
|
10978
11955
|
};
|
|
10979
11956
|
|
|
11957
|
+
// src/components/atoms/segmented-control/segmented-control-a11y.ts
|
|
11958
|
+
function resolveSegmentedControlA11y(opts) {
|
|
11959
|
+
const a11y = {
|
|
11960
|
+
role: "radiogroup"
|
|
11961
|
+
};
|
|
11962
|
+
if (opts.ariaLabelledBy) {
|
|
11963
|
+
a11y.ariaLabelledBy = opts.ariaLabelledBy;
|
|
11964
|
+
} else {
|
|
11965
|
+
const accessibleLabel = opts.ariaLabel ?? opts.label;
|
|
11966
|
+
if (accessibleLabel) a11y.ariaLabel = accessibleLabel;
|
|
11967
|
+
}
|
|
11968
|
+
if (opts.ariaDescribedBy) a11y.ariaDescribedBy = opts.ariaDescribedBy;
|
|
11969
|
+
if (opts.disabled) a11y.ariaDisabled = true;
|
|
11970
|
+
return a11y;
|
|
11971
|
+
}
|
|
11972
|
+
function resolveSegmentedControlItemA11y(opts) {
|
|
11973
|
+
const a11y = {
|
|
11974
|
+
role: "radio",
|
|
11975
|
+
ariaChecked: opts.selected ?? false,
|
|
11976
|
+
tabIndex: opts.selected && !opts.disabled ? 0 : -1
|
|
11977
|
+
};
|
|
11978
|
+
if (opts.disabled) a11y.ariaDisabled = true;
|
|
11979
|
+
const accessibleLabel = opts.ariaLabel ?? opts.label;
|
|
11980
|
+
if (accessibleLabel) a11y.ariaLabel = accessibleLabel;
|
|
11981
|
+
return a11y;
|
|
11982
|
+
}
|
|
11983
|
+
function resolveSegmentedControlValue(items, requestedValue) {
|
|
11984
|
+
if (items.length === 0) return void 0;
|
|
11985
|
+
if (requestedValue) {
|
|
11986
|
+
const match = items.find((item) => item.value === requestedValue && !item.disabled);
|
|
11987
|
+
if (match) return match.value;
|
|
11988
|
+
}
|
|
11989
|
+
return items.find((item) => !item.disabled)?.value;
|
|
11990
|
+
}
|
|
11991
|
+
function moveSegmentedControlSelection(items, currentValue, direction) {
|
|
11992
|
+
const enabled = items.filter((item) => !item.disabled);
|
|
11993
|
+
if (enabled.length === 0) return void 0;
|
|
11994
|
+
if (direction === "start") return enabled[0]?.value;
|
|
11995
|
+
if (direction === "end") return enabled[enabled.length - 1]?.value;
|
|
11996
|
+
const currentIndex = enabled.findIndex((item) => item.value === currentValue);
|
|
11997
|
+
if (currentIndex === -1) return enabled[0]?.value;
|
|
11998
|
+
const delta = direction === "next" ? 1 : -1;
|
|
11999
|
+
const nextIndex = (currentIndex + delta + enabled.length) % enabled.length;
|
|
12000
|
+
return enabled[nextIndex]?.value;
|
|
12001
|
+
}
|
|
12002
|
+
|
|
12003
|
+
// src/components/atoms/segmented-control/segmented-control-recipe.ts
|
|
12004
|
+
function cx19(...parts) {
|
|
12005
|
+
return parts.filter(Boolean).join(" ");
|
|
12006
|
+
}
|
|
12007
|
+
function createSegmentedControlRecipe(opts) {
|
|
12008
|
+
const variant = opts.variant ?? "default";
|
|
12009
|
+
const size = opts.size ?? "md";
|
|
12010
|
+
return {
|
|
12011
|
+
tag: "div",
|
|
12012
|
+
className: cx19(
|
|
12013
|
+
"mw-segmented-control",
|
|
12014
|
+
variant !== "default" && `mw-segmented-control--${variant}`,
|
|
12015
|
+
size !== "md" && `mw-segmented-control--${size}`,
|
|
12016
|
+
opts.disabled && "mw-segmented-control--disabled",
|
|
12017
|
+
opts.fullWidth && "mw-segmented-control--full-width"
|
|
12018
|
+
),
|
|
12019
|
+
vars: {},
|
|
12020
|
+
a11y: resolveSegmentedControlA11y(opts)
|
|
12021
|
+
};
|
|
12022
|
+
}
|
|
12023
|
+
function createSegmentedControlItemRecipe(opts) {
|
|
12024
|
+
return {
|
|
12025
|
+
tag: "button",
|
|
12026
|
+
className: cx19(
|
|
12027
|
+
"mw-segmented-control__item",
|
|
12028
|
+
opts.selected && "mw-segmented-control__item--selected",
|
|
12029
|
+
opts.disabled && "mw-segmented-control__item--disabled",
|
|
12030
|
+
opts.iconOnly && "mw-segmented-control__item--icon-only"
|
|
12031
|
+
),
|
|
12032
|
+
vars: {},
|
|
12033
|
+
a11y: resolveSegmentedControlItemA11y(opts)
|
|
12034
|
+
};
|
|
12035
|
+
}
|
|
12036
|
+
|
|
12037
|
+
// src/components/atoms/pagination/pagination-a11y.ts
|
|
12038
|
+
function resolvePaginationA11y(opts) {
|
|
12039
|
+
const a11y = {};
|
|
12040
|
+
if (opts.ariaLabelledBy) {
|
|
12041
|
+
a11y.ariaLabelledBy = opts.ariaLabelledBy;
|
|
12042
|
+
} else {
|
|
12043
|
+
a11y.ariaLabel = opts.ariaLabel ?? "Pagination";
|
|
12044
|
+
}
|
|
12045
|
+
if (opts.ariaDescribedBy) a11y.ariaDescribedBy = opts.ariaDescribedBy;
|
|
12046
|
+
if (opts.disabled) a11y.ariaDisabled = true;
|
|
12047
|
+
return a11y;
|
|
12048
|
+
}
|
|
12049
|
+
function resolvePaginationListA11y() {
|
|
12050
|
+
return { role: "list" };
|
|
12051
|
+
}
|
|
12052
|
+
function resolvePaginationControlA11y(opts) {
|
|
12053
|
+
const fallbackByDirection = {
|
|
12054
|
+
first: "First page",
|
|
12055
|
+
previous: "Previous page",
|
|
12056
|
+
next: "Next page",
|
|
12057
|
+
last: "Last page"
|
|
12058
|
+
};
|
|
12059
|
+
const a11y = {
|
|
12060
|
+
ariaLabel: opts.ariaLabel ?? opts.label ?? fallbackByDirection[opts.direction]
|
|
12061
|
+
};
|
|
12062
|
+
if (opts.disabled) a11y.ariaDisabled = true;
|
|
12063
|
+
return a11y;
|
|
12064
|
+
}
|
|
12065
|
+
function resolvePaginationPageA11y(opts) {
|
|
12066
|
+
const a11y = {
|
|
12067
|
+
ariaLabel: opts.ariaLabel ?? (opts.selected ? `Page ${opts.page}, current page` : `Go to page ${opts.page}`)
|
|
12068
|
+
};
|
|
12069
|
+
if (opts.selected) a11y.ariaCurrent = "page";
|
|
12070
|
+
if (opts.disabled) a11y.ariaDisabled = true;
|
|
12071
|
+
return a11y;
|
|
12072
|
+
}
|
|
12073
|
+
function resolvePaginationEllipsisA11y() {
|
|
12074
|
+
return { ariaHidden: true };
|
|
12075
|
+
}
|
|
12076
|
+
function resolvePaginationItemAriaLabel(getItemAriaLabel, item) {
|
|
12077
|
+
return getItemAriaLabel?.(item);
|
|
12078
|
+
}
|
|
12079
|
+
|
|
12080
|
+
// src/components/atoms/pagination/pagination-recipe.ts
|
|
12081
|
+
function cx20(...parts) {
|
|
12082
|
+
return parts.filter(Boolean).join(" ");
|
|
12083
|
+
}
|
|
12084
|
+
function normalizeCount(value, fallback) {
|
|
12085
|
+
if (value === void 0) return fallback;
|
|
12086
|
+
if (!Number.isFinite(value)) return fallback;
|
|
12087
|
+
return Math.max(0, Math.floor(value));
|
|
12088
|
+
}
|
|
12089
|
+
function range(start, end) {
|
|
12090
|
+
if (end < start) return [];
|
|
12091
|
+
return Array.from({ length: end - start + 1 }, (_, index) => start + index);
|
|
12092
|
+
}
|
|
12093
|
+
function toPageItem(pageNumber, currentPage) {
|
|
12094
|
+
return {
|
|
12095
|
+
type: "page",
|
|
12096
|
+
page: pageNumber,
|
|
12097
|
+
key: `page-${pageNumber}`,
|
|
12098
|
+
selected: pageNumber === currentPage
|
|
12099
|
+
};
|
|
12100
|
+
}
|
|
12101
|
+
function clampPaginationPage(page, pageCount) {
|
|
12102
|
+
const normalizedPageCount = normalizeCount(pageCount, 0);
|
|
12103
|
+
if (normalizedPageCount <= 0) return 0;
|
|
12104
|
+
if (page === void 0 || !Number.isFinite(page)) return 1;
|
|
12105
|
+
return Math.min(Math.max(1, Math.floor(page)), normalizedPageCount);
|
|
12106
|
+
}
|
|
12107
|
+
function resolvePaginationAdaptiveMaxVisibleItems(opts) {
|
|
12108
|
+
const containerWidth = Math.max(0, opts.containerWidth);
|
|
12109
|
+
if (containerWidth <= 0) return void 0;
|
|
12110
|
+
const itemSize = opts.itemSize ?? 32;
|
|
12111
|
+
const itemGap = opts.itemGap ?? 2;
|
|
12112
|
+
const sectionGap = opts.sectionGap ?? 12;
|
|
12113
|
+
const controlWidth = opts.controlWidth ?? 0;
|
|
12114
|
+
const controlCount = opts.controlCount ?? 0;
|
|
12115
|
+
const controlGaps = controlCount > 0 ? sectionGap * controlCount : 0;
|
|
12116
|
+
const availableItemWidth = Math.max(0, containerWidth - controlWidth - controlGaps);
|
|
12117
|
+
return Math.max(1, Math.floor((availableItemWidth + itemGap) / (itemSize + itemGap)));
|
|
12118
|
+
}
|
|
12119
|
+
function resolvePaginationListWidth(itemCount, itemSize, itemGap) {
|
|
12120
|
+
if (itemCount <= 0) return 0;
|
|
12121
|
+
return itemCount * itemSize + Math.max(0, itemCount - 1) * itemGap;
|
|
12122
|
+
}
|
|
12123
|
+
function resolvePaginationLayoutWidth(itemCount, controlWidth, controlCount, itemSize, itemGap, sectionGap) {
|
|
12124
|
+
const controlGaps = controlCount > 0 ? sectionGap * controlCount : 0;
|
|
12125
|
+
return controlWidth + controlGaps + resolvePaginationListWidth(itemCount, itemSize, itemGap);
|
|
12126
|
+
}
|
|
12127
|
+
function resolvePaginationReducedItemCount(opts, controlWidth) {
|
|
12128
|
+
return resolvePaginationAdaptiveMaxVisibleItems({
|
|
12129
|
+
containerWidth: opts.containerWidth,
|
|
12130
|
+
controlWidth,
|
|
12131
|
+
...opts.controlCount !== void 0 ? { controlCount: opts.controlCount } : {},
|
|
12132
|
+
...opts.itemSize !== void 0 ? { itemSize: opts.itemSize } : {},
|
|
12133
|
+
...opts.itemGap !== void 0 ? { itemGap: opts.itemGap } : {},
|
|
12134
|
+
...opts.sectionGap !== void 0 ? { sectionGap: opts.sectionGap } : {}
|
|
12135
|
+
});
|
|
12136
|
+
}
|
|
12137
|
+
function createPaginationAdaptiveProfile(opts, controlDisplay, maxVisibleItems) {
|
|
12138
|
+
return {
|
|
12139
|
+
controlDisplay,
|
|
12140
|
+
maxVisibleItems,
|
|
12141
|
+
reservedItemCount: resolvePaginationReservedItemCount({
|
|
12142
|
+
pageCount: opts.pageCount,
|
|
12143
|
+
...opts.siblingCount !== void 0 ? { siblingCount: opts.siblingCount } : {},
|
|
12144
|
+
...opts.boundaryCount !== void 0 ? { boundaryCount: opts.boundaryCount } : {},
|
|
12145
|
+
...maxVisibleItems !== void 0 ? { maxVisibleItems } : {}
|
|
12146
|
+
})
|
|
12147
|
+
};
|
|
12148
|
+
}
|
|
12149
|
+
function resolvePaginationAdaptiveProfile(opts) {
|
|
12150
|
+
const containerWidth = Math.max(0, opts.containerWidth);
|
|
12151
|
+
const pageCount = normalizeCount(opts.pageCount, 0);
|
|
12152
|
+
const controlDisplay = opts.controlDisplay ?? "auto";
|
|
12153
|
+
if (containerWidth <= 0 || pageCount <= 0) {
|
|
12154
|
+
return createPaginationAdaptiveProfile(
|
|
12155
|
+
opts,
|
|
12156
|
+
controlDisplay === "icon" ? "icon" : "label",
|
|
12157
|
+
void 0
|
|
12158
|
+
);
|
|
12159
|
+
}
|
|
12160
|
+
const itemSize = opts.itemSize ?? 32;
|
|
12161
|
+
const itemGap = opts.itemGap ?? 2;
|
|
12162
|
+
const sectionGap = opts.sectionGap ?? 12;
|
|
12163
|
+
const controlCount = opts.controlCount ?? 0;
|
|
12164
|
+
const labelControlWidth = opts.labelControlWidth ?? opts.iconControlWidth ?? 0;
|
|
12165
|
+
const iconControlWidth = opts.iconControlWidth ?? labelControlWidth;
|
|
12166
|
+
const preferredItemCount = resolvePaginationReservedItemCount(opts);
|
|
12167
|
+
const preferredMaxVisibleItems = preferredItemCount > 0 ? preferredItemCount : void 0;
|
|
12168
|
+
const labelWidth = resolvePaginationLayoutWidth(
|
|
12169
|
+
preferredItemCount,
|
|
12170
|
+
labelControlWidth,
|
|
12171
|
+
controlCount,
|
|
12172
|
+
itemSize,
|
|
12173
|
+
itemGap,
|
|
12174
|
+
sectionGap
|
|
12175
|
+
);
|
|
12176
|
+
const iconWidth = resolvePaginationLayoutWidth(
|
|
12177
|
+
preferredItemCount,
|
|
12178
|
+
iconControlWidth,
|
|
12179
|
+
controlCount,
|
|
12180
|
+
itemSize,
|
|
12181
|
+
itemGap,
|
|
12182
|
+
sectionGap
|
|
12183
|
+
);
|
|
12184
|
+
if (controlDisplay === "label") {
|
|
12185
|
+
const maxVisibleItems = labelWidth <= containerWidth ? preferredMaxVisibleItems : resolvePaginationReducedItemCount(opts, labelControlWidth);
|
|
12186
|
+
return createPaginationAdaptiveProfile(opts, "label", maxVisibleItems);
|
|
12187
|
+
}
|
|
12188
|
+
if (controlDisplay === "icon") {
|
|
12189
|
+
const maxVisibleItems = iconWidth <= containerWidth ? preferredMaxVisibleItems : resolvePaginationReducedItemCount(opts, iconControlWidth);
|
|
12190
|
+
return createPaginationAdaptiveProfile(opts, "icon", maxVisibleItems);
|
|
12191
|
+
}
|
|
12192
|
+
if (labelWidth <= containerWidth) {
|
|
12193
|
+
return createPaginationAdaptiveProfile(opts, "label", preferredMaxVisibleItems);
|
|
12194
|
+
}
|
|
12195
|
+
if (iconWidth <= containerWidth) {
|
|
12196
|
+
return createPaginationAdaptiveProfile(opts, "icon", preferredMaxVisibleItems);
|
|
12197
|
+
}
|
|
12198
|
+
return createPaginationAdaptiveProfile(
|
|
12199
|
+
opts,
|
|
12200
|
+
"icon",
|
|
12201
|
+
resolvePaginationReducedItemCount(opts, iconControlWidth)
|
|
12202
|
+
);
|
|
12203
|
+
}
|
|
12204
|
+
function resolvePaginationReservedItemCount(opts) {
|
|
12205
|
+
const pageCount = normalizeCount(opts.pageCount, 0);
|
|
12206
|
+
if (pageCount <= 0) return 0;
|
|
12207
|
+
const maxVisibleItems = resolvePaginationEffectiveMaxVisibleItems(opts);
|
|
12208
|
+
if (maxVisibleItems > 0) return Math.min(pageCount, maxVisibleItems);
|
|
12209
|
+
const siblingCount = normalizeCount(opts.siblingCount, 1);
|
|
12210
|
+
const boundaryCount = normalizeCount(opts.boundaryCount, 1);
|
|
12211
|
+
const slotsWithEllipsis = boundaryCount * 2 + siblingCount * 2 + 3;
|
|
12212
|
+
return Math.min(pageCount, slotsWithEllipsis);
|
|
12213
|
+
}
|
|
12214
|
+
function resolvePaginationEffectiveMaxVisibleItems(opts) {
|
|
12215
|
+
const maxVisibleItems = normalizeCount(opts.maxVisibleItems, 0);
|
|
12216
|
+
if (maxVisibleItems <= 0) return 0;
|
|
12217
|
+
const siblingCount = normalizeCount(opts.siblingCount, 1);
|
|
12218
|
+
if (maxVisibleItems < 6 || siblingCount < 1) return maxVisibleItems;
|
|
12219
|
+
const pageCount = normalizeCount(opts.pageCount, 0);
|
|
12220
|
+
const boundaryCount = normalizeCount(opts.boundaryCount, 1);
|
|
12221
|
+
const muiMiddleRangeCount = boundaryCount * 2 + 5;
|
|
12222
|
+
return Math.min(pageCount, Math.max(maxVisibleItems, muiMiddleRangeCount));
|
|
12223
|
+
}
|
|
12224
|
+
function createFixedPaginationItems(opts) {
|
|
12225
|
+
const pageCount = normalizeCount(opts.pageCount, 0);
|
|
12226
|
+
if (pageCount <= 0) return [];
|
|
12227
|
+
const page = clampPaginationPage(opts.page, pageCount);
|
|
12228
|
+
const siblingCount = normalizeCount(opts.siblingCount, 1);
|
|
12229
|
+
const boundaryCount = normalizeCount(opts.boundaryCount, 1);
|
|
12230
|
+
const slotsWithoutEllipsis = boundaryCount * 2 + siblingCount * 2 + 1;
|
|
12231
|
+
const slotsWithEllipsis = slotsWithoutEllipsis + 2;
|
|
12232
|
+
if (pageCount <= slotsWithEllipsis) {
|
|
12233
|
+
return range(1, pageCount).map((pageNumber) => toPageItem(pageNumber, page));
|
|
12234
|
+
}
|
|
12235
|
+
const items = [];
|
|
12236
|
+
const startPages = range(1, Math.min(boundaryCount, pageCount));
|
|
12237
|
+
const endPages = range(Math.max(pageCount - boundaryCount + 1, boundaryCount + 1), pageCount);
|
|
12238
|
+
const leftSibling = Math.max(page - siblingCount, boundaryCount + 1);
|
|
12239
|
+
const rightSibling = Math.min(page + siblingCount, pageCount - boundaryCount);
|
|
12240
|
+
for (const pageNumber of startPages) items.push(toPageItem(pageNumber, page));
|
|
12241
|
+
if (leftSibling > boundaryCount + 1) {
|
|
12242
|
+
items.push({ type: "start-ellipsis", key: "ellipsis-start" });
|
|
12243
|
+
} else {
|
|
12244
|
+
for (const pageNumber of range(boundaryCount + 1, leftSibling - 1)) {
|
|
12245
|
+
items.push(toPageItem(pageNumber, page));
|
|
12246
|
+
}
|
|
12247
|
+
}
|
|
12248
|
+
for (const pageNumber of range(leftSibling, rightSibling)) {
|
|
12249
|
+
items.push(toPageItem(pageNumber, page));
|
|
12250
|
+
}
|
|
12251
|
+
if (rightSibling < pageCount - boundaryCount) {
|
|
12252
|
+
items.push({ type: "end-ellipsis", key: "ellipsis-end" });
|
|
12253
|
+
} else {
|
|
12254
|
+
for (const pageNumber of range(rightSibling + 1, pageCount - boundaryCount)) {
|
|
12255
|
+
items.push(toPageItem(pageNumber, page));
|
|
12256
|
+
}
|
|
12257
|
+
}
|
|
12258
|
+
for (const pageNumber of endPages) items.push(toPageItem(pageNumber, page));
|
|
12259
|
+
return items;
|
|
12260
|
+
}
|
|
12261
|
+
function createCompactPaginationItems(opts, maxVisibleItems) {
|
|
12262
|
+
const pageCount = normalizeCount(opts.pageCount, 0);
|
|
12263
|
+
const page = clampPaginationPage(opts.page, pageCount);
|
|
12264
|
+
if (pageCount <= 0 || maxVisibleItems <= 0) return [];
|
|
12265
|
+
if (maxVisibleItems === 1 || pageCount === 1) return [toPageItem(page, page)];
|
|
12266
|
+
if (maxVisibleItems === 2) {
|
|
12267
|
+
const edgePage = page === pageCount ? 1 : pageCount;
|
|
12268
|
+
return [page, edgePage].sort((a, b) => a - b).map((pageNumber) => toPageItem(pageNumber, page));
|
|
12269
|
+
}
|
|
12270
|
+
if (maxVisibleItems === 3) {
|
|
12271
|
+
return Array.from(/* @__PURE__ */ new Set([1, page, pageCount])).slice(0, maxVisibleItems).map((pageNumber) => toPageItem(pageNumber, page));
|
|
12272
|
+
}
|
|
12273
|
+
if (page <= 2) {
|
|
12274
|
+
return [
|
|
12275
|
+
toPageItem(1, page),
|
|
12276
|
+
toPageItem(2, page),
|
|
12277
|
+
{ type: "end-ellipsis", key: "ellipsis-end" },
|
|
12278
|
+
toPageItem(pageCount, page)
|
|
12279
|
+
];
|
|
12280
|
+
}
|
|
12281
|
+
if (page >= pageCount - 1) {
|
|
12282
|
+
return [
|
|
12283
|
+
toPageItem(1, page),
|
|
12284
|
+
{ type: "start-ellipsis", key: "ellipsis-start" },
|
|
12285
|
+
toPageItem(pageCount - 1, page),
|
|
12286
|
+
toPageItem(pageCount, page)
|
|
12287
|
+
];
|
|
12288
|
+
}
|
|
12289
|
+
return [
|
|
12290
|
+
toPageItem(1, page),
|
|
12291
|
+
{ type: "start-ellipsis", key: "ellipsis-start" },
|
|
12292
|
+
toPageItem(page, page),
|
|
12293
|
+
toPageItem(pageCount, page)
|
|
12294
|
+
];
|
|
12295
|
+
}
|
|
12296
|
+
function fillEdgePaginationItems(opts, maxVisibleItems, items) {
|
|
12297
|
+
const pageCount = normalizeCount(opts.pageCount, 0);
|
|
12298
|
+
const boundaryCount = normalizeCount(opts.boundaryCount, 1);
|
|
12299
|
+
const hasStartEllipsis = items.some((item) => item.type === "start-ellipsis");
|
|
12300
|
+
const hasEndEllipsis = items.some((item) => item.type === "end-ellipsis");
|
|
12301
|
+
if (items.length >= maxVisibleItems || pageCount <= maxVisibleItems) return items;
|
|
12302
|
+
if (hasStartEllipsis === hasEndEllipsis) return items;
|
|
12303
|
+
const page = clampPaginationPage(opts.page, pageCount);
|
|
12304
|
+
const edgePageCount = Math.max(boundaryCount + 1, maxVisibleItems - boundaryCount - 1);
|
|
12305
|
+
if (hasEndEllipsis) {
|
|
12306
|
+
const leadingPages = range(1, Math.min(edgePageCount, pageCount - boundaryCount - 1));
|
|
12307
|
+
return [
|
|
12308
|
+
...leadingPages.map((pageNumber) => toPageItem(pageNumber, page)),
|
|
12309
|
+
{ type: "end-ellipsis", key: "ellipsis-end" },
|
|
12310
|
+
...range(Math.max(pageCount - boundaryCount + 1, edgePageCount + 1), pageCount).map(
|
|
12311
|
+
(pageNumber) => toPageItem(pageNumber, page)
|
|
12312
|
+
)
|
|
12313
|
+
];
|
|
12314
|
+
}
|
|
12315
|
+
const trailingPages = range(Math.max(pageCount - edgePageCount + 1, boundaryCount + 2), pageCount);
|
|
12316
|
+
return [
|
|
12317
|
+
...range(1, Math.min(boundaryCount, pageCount)).map(
|
|
12318
|
+
(pageNumber) => toPageItem(pageNumber, page)
|
|
12319
|
+
),
|
|
12320
|
+
{ type: "start-ellipsis", key: "ellipsis-start" },
|
|
12321
|
+
...trailingPages.map((pageNumber) => toPageItem(pageNumber, page))
|
|
12322
|
+
];
|
|
12323
|
+
}
|
|
12324
|
+
function createPaginationItems(opts) {
|
|
12325
|
+
const pageCount = normalizeCount(opts.pageCount, 0);
|
|
12326
|
+
const maxVisibleItems = resolvePaginationEffectiveMaxVisibleItems(opts);
|
|
12327
|
+
if (pageCount <= 0) return [];
|
|
12328
|
+
if (maxVisibleItems <= 0) return createFixedPaginationItems(opts);
|
|
12329
|
+
if (pageCount <= maxVisibleItems) return createFixedPaginationItems(opts);
|
|
12330
|
+
const siblingCount = normalizeCount(opts.siblingCount, 1);
|
|
12331
|
+
const boundaryCount = normalizeCount(opts.boundaryCount, 1);
|
|
12332
|
+
for (let nextBoundaryCount = boundaryCount; nextBoundaryCount >= 1; nextBoundaryCount -= 1) {
|
|
12333
|
+
for (let nextSiblingCount = siblingCount; nextSiblingCount >= 0; nextSiblingCount -= 1) {
|
|
12334
|
+
const items = createFixedPaginationItems({
|
|
12335
|
+
...opts,
|
|
12336
|
+
boundaryCount: nextBoundaryCount,
|
|
12337
|
+
siblingCount: nextSiblingCount
|
|
12338
|
+
});
|
|
12339
|
+
if (items.length <= maxVisibleItems) {
|
|
12340
|
+
return fillEdgePaginationItems(opts, maxVisibleItems, items);
|
|
12341
|
+
}
|
|
12342
|
+
}
|
|
12343
|
+
}
|
|
12344
|
+
return createCompactPaginationItems(opts, maxVisibleItems);
|
|
12345
|
+
}
|
|
12346
|
+
function createPaginationRecipe(opts) {
|
|
12347
|
+
const reservedItemCount = resolvePaginationReservedItemCount(opts);
|
|
12348
|
+
const controlDisplay = opts.controlDisplay === "icon" ? "icon" : "label";
|
|
12349
|
+
return {
|
|
12350
|
+
tag: "nav",
|
|
12351
|
+
className: cx20(
|
|
12352
|
+
"mw-pagination",
|
|
12353
|
+
`mw-pagination--controls-${controlDisplay}`,
|
|
12354
|
+
opts.disabled && "mw-pagination--disabled"
|
|
12355
|
+
),
|
|
12356
|
+
vars: reservedItemCount > 0 ? {
|
|
12357
|
+
"--mw-pagination-list-width": `calc(${reservedItemCount} * var(--mw-pagination-size) + ${Math.max(
|
|
12358
|
+
0,
|
|
12359
|
+
reservedItemCount - 1
|
|
12360
|
+
)} * var(--mw-pagination-gap))`
|
|
12361
|
+
} : {},
|
|
12362
|
+
a11y: resolvePaginationA11y(opts),
|
|
12363
|
+
items: createPaginationItems(opts),
|
|
12364
|
+
reservedItemCount,
|
|
12365
|
+
controlDisplay,
|
|
12366
|
+
showPrevNext: opts.showPrevNext ?? true,
|
|
12367
|
+
showFirstLast: opts.showFirstLast ?? false
|
|
12368
|
+
};
|
|
12369
|
+
}
|
|
12370
|
+
function createPaginationListRecipe() {
|
|
12371
|
+
return {
|
|
12372
|
+
tag: "ul",
|
|
12373
|
+
className: "mw-pagination__list",
|
|
12374
|
+
vars: {},
|
|
12375
|
+
a11y: resolvePaginationListA11y()
|
|
12376
|
+
};
|
|
12377
|
+
}
|
|
12378
|
+
function createPaginationListItemRecipe() {
|
|
12379
|
+
return {
|
|
12380
|
+
tag: "li",
|
|
12381
|
+
className: "mw-pagination__list-item",
|
|
12382
|
+
vars: {}
|
|
12383
|
+
};
|
|
12384
|
+
}
|
|
12385
|
+
function createPaginationControlRecipe(opts) {
|
|
12386
|
+
return {
|
|
12387
|
+
tag: "button",
|
|
12388
|
+
className: cx20(
|
|
12389
|
+
"mw-pagination__control",
|
|
12390
|
+
`mw-pagination__control--${opts.direction}`,
|
|
12391
|
+
opts.disabled && "mw-pagination__control--disabled"
|
|
12392
|
+
),
|
|
12393
|
+
vars: {},
|
|
12394
|
+
a11y: resolvePaginationControlA11y(opts)
|
|
12395
|
+
};
|
|
12396
|
+
}
|
|
12397
|
+
function createPaginationPageRecipe(opts) {
|
|
12398
|
+
return {
|
|
12399
|
+
tag: "button",
|
|
12400
|
+
className: cx20(
|
|
12401
|
+
"mw-pagination__page",
|
|
12402
|
+
opts.selected && "mw-pagination__page--selected",
|
|
12403
|
+
opts.disabled && "mw-pagination__page--disabled"
|
|
12404
|
+
),
|
|
12405
|
+
vars: {},
|
|
12406
|
+
a11y: resolvePaginationPageA11y(opts)
|
|
12407
|
+
};
|
|
12408
|
+
}
|
|
12409
|
+
function createPaginationEllipsisRecipe() {
|
|
12410
|
+
return {
|
|
12411
|
+
tag: "span",
|
|
12412
|
+
className: "mw-pagination__ellipsis",
|
|
12413
|
+
vars: {},
|
|
12414
|
+
a11y: resolvePaginationEllipsisA11y()
|
|
12415
|
+
};
|
|
12416
|
+
}
|
|
12417
|
+
|
|
12418
|
+
// src/components/atoms/skip-link/skip-link-recipe.ts
|
|
12419
|
+
function cx21(...parts) {
|
|
12420
|
+
return parts.filter(Boolean).join(" ");
|
|
12421
|
+
}
|
|
12422
|
+
function createSkipLinkRecipe(opts) {
|
|
12423
|
+
return {
|
|
12424
|
+
tag: "a",
|
|
12425
|
+
className: cx21("mw-skip-link", opts.className)
|
|
12426
|
+
};
|
|
12427
|
+
}
|
|
12428
|
+
|
|
10980
12429
|
// src/storybook/storybook-fixtures.ts
|
|
10981
12430
|
var storybookLayout = {
|
|
10982
12431
|
centered: { layout: "centered" },
|
|
@@ -10993,6 +12442,10 @@ var storybookA11yPolicy = {
|
|
|
10993
12442
|
};
|
|
10994
12443
|
var storybookIconNames = [...iconNames];
|
|
10995
12444
|
var storybookOptionalIconNames = [void 0, ...storybookIconNames];
|
|
12445
|
+
var storybookButtonVariantArgType = {
|
|
12446
|
+
control: "select",
|
|
12447
|
+
options: ["primary", "secondary", "neutral", "text", "success", "danger"]
|
|
12448
|
+
};
|
|
10996
12449
|
var storybookButtonIconArgTypes = {
|
|
10997
12450
|
iconLeft: {
|
|
10998
12451
|
control: "select",
|
|
@@ -11007,7 +12460,18 @@ var storybookButtonIconArgTypes = {
|
|
|
11007
12460
|
}
|
|
11008
12461
|
};
|
|
11009
12462
|
var storybookButtonGeneralArgTypes = {
|
|
11010
|
-
...storybookButtonIconArgTypes
|
|
12463
|
+
...storybookButtonIconArgTypes,
|
|
12464
|
+
variant: storybookButtonVariantArgType
|
|
12465
|
+
};
|
|
12466
|
+
var storybookIconButtonArgTypes = {
|
|
12467
|
+
icon: {
|
|
12468
|
+
control: "select",
|
|
12469
|
+
options: storybookIconNames
|
|
12470
|
+
},
|
|
12471
|
+
variant: storybookButtonVariantArgType,
|
|
12472
|
+
disabled: {
|
|
12473
|
+
control: "boolean"
|
|
12474
|
+
}
|
|
11011
12475
|
};
|
|
11012
12476
|
var storybookButtonPurposeArgTypes = {
|
|
11013
12477
|
...storybookButtonIconArgTypes
|
|
@@ -11086,6 +12550,27 @@ var storybookSkeletonArgTypes = {
|
|
|
11086
12550
|
description: "Accessible label for standalone loading placeholder groups"
|
|
11087
12551
|
}
|
|
11088
12552
|
};
|
|
12553
|
+
var storybookProgressBarArgTypes = {
|
|
12554
|
+
label: { control: "text" },
|
|
12555
|
+
value: { control: { type: "number", min: -1e3, max: 1e3, step: 1 } },
|
|
12556
|
+
min: { control: { type: "number", min: -1e3, max: 1e3, step: 1 } },
|
|
12557
|
+
max: { control: { type: "number", min: -1e3, max: 1e3, step: 1 } },
|
|
12558
|
+
size: {
|
|
12559
|
+
control: "inline-radio",
|
|
12560
|
+
options: ["small", "default"],
|
|
12561
|
+
description: "Figma track size: small is 4px, default is 8px"
|
|
12562
|
+
},
|
|
12563
|
+
state: {
|
|
12564
|
+
control: "select",
|
|
12565
|
+
options: ["default", "hover", "pressed", "focus"],
|
|
12566
|
+
description: "Visual state for documentation and visual QA"
|
|
12567
|
+
},
|
|
12568
|
+
disabled: { control: "boolean" },
|
|
12569
|
+
showLabel: { control: "boolean" },
|
|
12570
|
+
showPercentage: { control: "boolean" },
|
|
12571
|
+
valueLabel: { control: "text" },
|
|
12572
|
+
ariaLabel: { control: "text" }
|
|
12573
|
+
};
|
|
11089
12574
|
var storybookStatTileArgTypes = {
|
|
11090
12575
|
tone: {
|
|
11091
12576
|
control: "select",
|
|
@@ -11128,6 +12613,7 @@ var storybookSpacingArgTypes = {
|
|
|
11128
12613
|
"sp-2",
|
|
11129
12614
|
"sp-4",
|
|
11130
12615
|
"sp-8",
|
|
12616
|
+
"sp-12",
|
|
11131
12617
|
"sp-16",
|
|
11132
12618
|
"sp-24",
|
|
11133
12619
|
"sp-32",
|
|
@@ -11143,7 +12629,7 @@ var storybookSpacingArgTypes = {
|
|
|
11143
12629
|
"sp-112",
|
|
11144
12630
|
"sp-120"
|
|
11145
12631
|
],
|
|
11146
|
-
description: "Size variant (sp-0=0 \u2026 sp-
|
|
12632
|
+
description: "Size variant (sp-0=0 \u2026 sp-12=12 \u2026 sp-24=24 \u2026 sp-120=120px)"
|
|
11147
12633
|
},
|
|
11148
12634
|
scale: {
|
|
11149
12635
|
control: { type: "number", min: 1, max: 8, step: 0.5 },
|
|
@@ -11195,7 +12681,7 @@ var storybookSliderArgTypes = {
|
|
|
11195
12681
|
};
|
|
11196
12682
|
var storybookDocsDescription = {
|
|
11197
12683
|
linkButton: "LinkButton locks navigation semantics, renders as an anchor, and keeps the canonical text treatment. Use Button for intentional visual deviations.",
|
|
11198
|
-
destructiveButton: "DestructiveButton locks destructive semantics, uses the canonical
|
|
12684
|
+
destructiveButton: "DestructiveButton locks destructive semantics, uses the canonical danger treatment, and requires confirmation by default. Use Button for intentional exceptions.",
|
|
11199
12685
|
submitButton: "SubmitButton locks form-submit semantics, always renders as a button, and keeps the canonical primary treatment.",
|
|
11200
12686
|
saveButton: "SaveButton locks save semantics and the canonical primary treatment. Use Button if you need a different visual hierarchy.",
|
|
11201
12687
|
confirmButton: "ConfirmButton locks affirmative confirmation semantics, always renders as a button, and keeps the canonical success treatment.",
|
|
@@ -11213,6 +12699,6 @@ var storybookDocsDescription = {
|
|
|
11213
12699
|
colors: "Complete color palette from the design system. Semantic roles map to CSS variables, with label colors auto-derived by default and overrideable for brand-specific fills."
|
|
11214
12700
|
};
|
|
11215
12701
|
|
|
11216
|
-
export { AvatarSize, AvatarType, BadgeVariant, ButtonAction, ButtonSize, ButtonVariant, DENSITY_SCALES, IconName, SkeletonAnimation, SkeletonVariant, Spacings, SpinnerVariant, SpinnerVariants, SwitchSize, ThemeMode, accordionPurposeComponentReference, accordionWhyPurposeComponents, avatarPurposeSemantics, avatarPurposes, badgePurposeComponentReference, badgePurposeSemantics, badgePurposes, badgeWhyPurposeComponents, buildAccordionFieldA11yIds, buildCheckboxA11y, buildCheckboxFieldA11yIds, buildCheckboxGroupFieldA11yIds, buildCurrencyHelperText, buildGoogleFontsUrl, buildHeadingA11y, buildInputFieldA11yIds, buildRadioA11y, buildRadioGroupFieldA11yIds, buildRichTextFieldA11yIds, buildSliderFieldA11yIds, buildSwitchFieldA11yIds, buildTabGroupA11yIds, buttonActionSemanticPurposes, buttonPurposeSemantics, buttonPurposes, buttonVariantVisualStyles, buttonWhySemanticComponents, canonicalSemanticAttributeNames, canonicalSemanticAttributeRegistry, canonicalSemanticAttributes, cardPurposeComponentReference, cardWhyPurposeComponents, checkboxRecipe, createAccordionRecipe, createAvatarRecipe, createBadgeRecipe, createButtonRecipe, createCardRecipe, createDatePickerRecipe, createDialogRecipe, createDividerRecipe, createFamilySemanticAttributes, createFontStack, createIconRecipe, createInputOtpRecipe, createInputRecipe, createMarwesThemeScript, createMarwesThemeStyle, createPurposeSemanticAttributes, createRichTextRecipe, createSelectRecipe, createSkeletonRecipe, createSliderRecipe, createSpacingRecipe, createSpinnerRecipe, createStatTileRecipe, createSwitchRecipe, createTabRecipe, createTextareaRecipe, createToastRecipe, createTooltipRecipe, currencyCodes, darkThemeDefaults, densityToCSSVars, dialogPurposeComponentReference, dialogPurposeSemantics, dialogPurposes, dialogWhyPurposeComponents, emptySemanticAttributes, escapeRichTextHtml, extractFontFamilyName, extractUsedWeights, familySemanticsRegistry, fieldComparisonRows, fieldWhyPurposeComponents, filterUndefinedSemanticAttributes, getCurrencySymbol, headingRecipe, iconNames, iconNamesList, iconRegistry, iconSizeScale, iconStrokeWidthScale, isRichTextHtmlEmpty, isSystemFont, isThemeMode, isThemePreference, lightThemeDefaults, mergeIdRefs, mergeSemanticAttributes, moveTabSelection, mwAvailableFonts, mwFontFallbacks, mwGoogleFontFamilies, mwStyledTheme, mwThemeVarNames, mwThemeVars, mwVar, nextThemeMode, normalizeRichTextHtml, paragraphRecipe, purposeSemanticsRegistry, radioPurposeComponentReference, radioRecipe, radioWhyPurposeComponents, resolveAccordionA11y, resolveAvatarA11y, resolveBadgeA11y, resolveButtonLoading, resolveDatePickerDayLabel, resolveDialogA11y, resolveIconA11y, resolveIconSize, resolveIconStrokeWidth, resolveRichTextAllowedFormats, resolveSelectMode, resolveServerThemeMode, resolveSkeletonA11y, resolveSliderA11y, resolveSpinnerA11y, resolveSpinnerSize, resolveStatTileTrendLabel, resolveSwitchA11y, resolveTabA11y, resolveTabValue, resolveThemeInput, resolveThemePreference, resolveToastA11y, resolveTone, resolveTooltipA11y, richTextCommandByFormat, richTextFormattingReference, richTextWhyUseIt, sanitizeCurrencyValue, sanitizeInputOtpValue, semanticFamilies, semanticFrameworkSupport, semanticIntents, semanticLayers, semanticOrientations, semanticOutcomes, semanticPurposes, shouldLoadGoogleFont, skeletonAnimations, skeletonVariants, sliderPurposeComponentReference, sliderWhyPurposeComponents, spinnerSizeScale, spinnerSizes, spinnerVariants, storybookA11yPolicy, storybookButtonGeneralArgTypes, storybookButtonIconArgTypes, storybookButtonPurposeArgTypes, storybookCheckboxArgTypes, storybookDatePickerArgTypes, storybookDividerArgTypes, storybookDocsDescription, storybookIconGalleryArgTypes, storybookIconGalleryDefaults, storybookIconNames, storybookLayout, storybookOptionalIconNames, storybookRadioArgTypes, storybookSkeletonArgTypes, storybookSliderArgTypes, storybookSpacingArgTypes, storybookSpinnerArgTypes, storybookStatTileArgTypes, switchPurposeComponentReference, switchWhyPurposeComponents, tabPurposeComponentReference, tabWhyPurposeComponents, themeModesToCSSRules, themeToCSSRule, themeToCSSVars, toastPurposeComponentReference, toastPurposeSemantics, toastPurposes, toastWhyPurposeComponents, validateSemanticRegistry };
|
|
12702
|
+
export { AvatarSize, AvatarType, BadgeVariant, BannerVariant, ButtonAction, ButtonSize, ButtonVariant, DEFAULT_PROGRESS_BAR_LABEL, DEFAULT_PROGRESS_BAR_MAX, DEFAULT_PROGRESS_BAR_MIN, DENSITY_SCALES, IconName, ProgressBarSize, ProgressBarState, SkeletonAnimation, SkeletonVariant, Spacings, SpinnerVariant, SpinnerVariants, SwitchSize, TextVariant, ThemeMode, accordionPurposeComponentReference, accordionWhyPurposeComponents, avatarPurposeSemantics, avatarPurposes, badgePurposeComponentReference, badgePurposeSemantics, badgePurposes, badgeWhyPurposeComponents, bannerPurposeSemantics, bannerPurposes, buildAccordionFieldA11yIds, buildCheckboxA11y, buildCheckboxFieldA11yIds, buildCheckboxGroupFieldA11yIds, buildCurrencyHelperText, buildGoogleFontsUrl, buildHeadingA11y, buildInputFieldA11yIds, buildRadioA11y, buildRadioGroupFieldA11yIds, buildRichTextFieldA11yIds, buildSliderFieldA11yIds, buildSwitchFieldA11yIds, buildTabGroupA11yIds, buttonActionSemanticPurposes, buttonPurposeSemantics, buttonPurposes, buttonVariantVisualStyles, buttonWhySemanticComponents, canonicalSemanticAttributeNames, canonicalSemanticAttributeRegistry, canonicalSemanticAttributes, cardPurposeComponentReference, cardWhyPurposeComponents, checkboxRecipe, clampPaginationPage, clampProgressBarValue, createAccordionRecipe, createAvatarRecipe, createBadgeRecipe, createBannerRecipe, createBreadcrumbRecipe, createButtonRecipe, createCardRecipe, createContextMenuRecipe, createDatePickerRecipe, createDialogRecipe, createDividerRecipe, createDrawerRecipe, createFamilySemanticAttributes, createFontStack, createIconRecipe, createInputOtpRecipe, createInputRecipe, createMarwesThemeScript, createMarwesThemeStyle, createMwTheme, createMwThemeMedia, createPaginationControlRecipe, createPaginationEllipsisRecipe, createPaginationItems, createPaginationListItemRecipe, createPaginationListRecipe, createPaginationPageRecipe, createPaginationRecipe, createProgressBarRecipe, createPurposeSemanticAttributes, createRichTextRecipe, createSegmentedControlItemRecipe, createSegmentedControlRecipe, createSelectRecipe, createSkeletonRecipe, createSkipLinkRecipe, createSliderRecipe, createSpacingRecipe, createSpinnerRecipe, createStatTileRecipe, createSwitchRecipe, createTabRecipe, createTextareaRecipe, createToastRecipe, createTooltipRecipe, currencyCodes, darkThemeDefaults, defaultThemeBreakpoints, densityToCSSVars, dialogPurposeComponentReference, dialogPurposeSemantics, dialogPurposes, dialogWhyPurposeComponents, emptySemanticAttributes, escapeRichTextHtml, extractFontFamilyName, extractUsedWeights, familySemanticsRegistry, fieldComparisonRows, fieldWhyPurposeComponents, filterUndefinedSemanticAttributes, getCurrencySymbol, headingRecipe, iconNames, iconNamesList, iconRegistry, iconSizeScale, iconStrokeWidthScale, isRichTextHtmlEmpty, isSystemFont, isThemeMode, isThemePreference, lightThemeDefaults, mergeIdRefs, mergeSemanticAttributes, moveSegmentedControlSelection, moveTabSelection, mwAvailableFonts, mwFontFallbacks, mwGoogleFontFamilies, mwStyledTheme, mwTheme, mwThemeVarNames, mwThemeVars, mwVar, nextThemeMode, normalizeRichTextHtml, paragraphRecipe, progressBarSizes, progressBarStates, purposeSemanticsRegistry, radioPurposeComponentReference, radioRecipe, radioWhyPurposeComponents, resolveAccordionA11y, resolveAvatarA11y, resolveBadgeA11y, resolveBannerA11y, resolveBreadcrumbA11y, resolveBreadcrumbHomeA11y, resolveBreadcrumbItemA11y, resolveBreadcrumbListA11y, resolveBreadcrumbSeparatorA11y, resolveButtonLoading, resolveContextMenuA11y, resolveContextMenuDividerA11y, resolveContextMenuItemA11y, resolveDatePickerDayLabel, resolveDialogA11y, resolveDrawerA11y, resolveIconA11y, resolveIconSize, resolveIconStrokeWidth, resolvePaginationA11y, resolvePaginationAdaptiveMaxVisibleItems, resolvePaginationAdaptiveProfile, resolvePaginationControlA11y, resolvePaginationEllipsisA11y, resolvePaginationItemAriaLabel, resolvePaginationListA11y, resolvePaginationPageA11y, resolvePaginationReservedItemCount, resolveProgressBarA11y, resolveProgressBarBounds, resolveRichTextAllowedFormats, resolveSegmentedControlA11y, resolveSegmentedControlItemA11y, resolveSegmentedControlValue, resolveSelectMode, resolveServerThemeMode, resolveSkeletonA11y, resolveSliderA11y, resolveSpinnerA11y, resolveSpinnerSize, resolveStatTileTrendLabel, resolveSwitchA11y, resolveTabA11y, resolveTabValue, resolveThemeInput, resolveThemePreference, resolveToastA11y, resolveTone, resolveTooltipA11y, richTextCommandByFormat, richTextFormattingReference, richTextWhyUseIt, sanitizeCurrencyValue, sanitizeInputOtpValue, semanticFamilies, semanticFrameworkSupport, semanticIntents, semanticLayers, semanticOrientations, semanticOutcomes, semanticPurposes, shouldLoadGoogleFont, skeletonAnimations, skeletonVariants, sliderPurposeComponentReference, sliderWhyPurposeComponents, spinnerSizeScale, spinnerSizes, spinnerVariants, storybookA11yPolicy, storybookButtonGeneralArgTypes, storybookButtonIconArgTypes, storybookButtonPurposeArgTypes, storybookCheckboxArgTypes, storybookDatePickerArgTypes, storybookDividerArgTypes, storybookDocsDescription, storybookIconButtonArgTypes, storybookIconGalleryArgTypes, storybookIconGalleryDefaults, storybookIconNames, storybookLayout, storybookOptionalIconNames, storybookProgressBarArgTypes, storybookRadioArgTypes, storybookSkeletonArgTypes, storybookSliderArgTypes, storybookSpacingArgTypes, storybookSpinnerArgTypes, storybookStatTileArgTypes, switchPurposeComponentReference, switchWhyPurposeComponents, tabPurposeComponentReference, tabWhyPurposeComponents, textRecipe, themeModesToCSSRules, themeToCSSRule, themeToCSSVars, toastPurposeComponentReference, toastPurposeSemantics, toastPurposes, toastWhyPurposeComponents, validateSemanticRegistry };
|
|
11217
12703
|
//# sourceMappingURL=index.js.map
|
|
11218
12704
|
//# sourceMappingURL=index.js.map
|