maverick-wave 4.28.0 → 5.0.0
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/.claude/settings.local.json +29 -1
- package/.claude/skills/mw-maverick-wave/SKILL.md +39 -24
- package/.claude/skills/mw-maverick-wave/examples/angular-services.md +16 -4
- package/.claude/skills/mw-maverick-wave/examples/static-landing-page.md +13 -4
- package/.claude/skills/mw-maverick-wave/references/components.md +42 -5
- package/.claude/skills/mw-maverick-wave/references/forms.md +14 -2
- package/.claude/skills/mw-maverick-wave/references/javascript.md +17 -4
- package/.claude/skills/mw-maverick-wave/references/layout.md +53 -19
- package/.claude/skills/mw-maverick-wave/references/theming.md +38 -1
- package/.impeccable/config.local.json +5 -0
- package/.impeccable/hook.cache.json +1 -0
- package/CHANGELOG.md +11 -0
- package/CLAUDE.md +5 -5
- package/README.md +48 -4
- package/index.html +19 -38
- package/maverick-wave.min.css +14 -12
- package/maverick-wave.min.js +1 -1
- package/package.json +2 -2
- package/scripts/verify.js +27 -2
- package/src/js/main.js +223 -83
- package/src/partials/accordions-container.html +6 -10
- package/src/partials/alerts-container.html +6 -6
- package/src/partials/announcement-container.html +5 -5
- package/src/partials/avatars-container.html +85 -17
- package/src/partials/badges-container.html +6 -6
- package/src/partials/blog-posts-container.html +11 -12
- package/src/partials/buttons-container.html +3 -3
- package/src/partials/cards-container.html +26 -9
- package/src/partials/code-container.html +5 -5
- package/src/partials/content-slider-container.html +5 -4
- package/src/partials/divider-container.html +7 -7
- package/src/partials/dropdown-container.html +2 -2
- package/src/partials/empty-state-container.html +5 -5
- package/src/partials/footer-container.html +21 -18
- package/src/partials/form-elements-container.html +14 -14
- package/src/partials/gallery-container.html +16 -8
- package/src/partials/get-started-container.html +4 -8
- package/src/partials/header-container.html +18 -7
- package/src/partials/home-container.html +10 -20
- package/src/partials/input-group-container.html +11 -2
- package/src/partials/kbd-container.html +1 -1
- package/src/partials/login-container.html +5 -1
- package/src/partials/media-container.html +2 -2
- package/src/partials/modals-container.html +22 -32
- package/src/partials/pricing-container.html +9 -9
- package/src/partials/skeleton-container.html +6 -6
- package/src/partials/stepper-container.html +2 -2
- package/src/partials/tables-container.html +12 -12
- package/src/partials/tabs-container.html +17 -27
- package/src/partials/tags-container.html +23 -17
- package/src/partials/techstack-bucket-container.html +13 -0
- package/src/partials/tiles-container.html +26 -9
- package/src/partials/typography-container.html +7 -6
- package/src/partials/utilities-container.html +35 -15
- package/src/scss/_layers.scss +10 -0
- package/src/scss/abstracts/_index.scss +6 -0
- package/src/scss/abstracts/_mixins.scss +61 -153
- package/src/scss/abstracts/_variables.scss +123 -319
- package/src/scss/base/_base.scss +170 -190
- package/src/scss/base/_reset.scss +106 -104
- package/src/scss/base/_typography.scss +153 -151
- package/src/scss/components/_accordions.scss +97 -97
- package/src/scss/components/_alerts.scss +71 -70
- package/src/scss/components/_announcement.scss +71 -70
- package/src/scss/components/_avatars.scss +130 -142
- package/src/scss/components/_badge.scss +131 -132
- package/src/scss/components/_blog-post.scss +223 -220
- package/src/scss/components/_breadcrumbs.scss +93 -92
- package/src/scss/components/_button-bar.scss +102 -110
- package/src/scss/components/_buttons.scss +319 -324
- package/src/scss/components/_calendar.scss +251 -252
- package/src/scss/components/_cards.scss +359 -386
- package/src/scss/components/_code.scss +190 -194
- package/src/scss/components/_coming-soon.scss +77 -75
- package/src/scss/components/_content-slider.scss +90 -89
- package/src/scss/components/_divider.scss +55 -53
- package/src/scss/components/_dropdown.scss +179 -185
- package/src/scss/components/_empty-state.scss +57 -57
- package/src/scss/components/_flag.scss +294 -278
- package/src/scss/components/_gallery.scss +131 -133
- package/src/scss/components/_info.scss +151 -167
- package/src/scss/components/_kanban.scss +332 -341
- package/src/scss/components/_kbd.scss +40 -38
- package/src/scss/components/_lang-switch.scss +89 -97
- package/src/scss/components/_links.scss +21 -28
- package/src/scss/components/_lists.scss +510 -514
- package/src/scss/components/_localhost-indicator.scss +26 -24
- package/src/scss/components/_media.scss +22 -20
- package/src/scss/components/_meta-info.scss +35 -33
- package/src/scss/components/_modals.scss +277 -186
- package/src/scss/components/_pagination.scss +81 -87
- package/src/scss/components/_panels.scss +99 -97
- package/src/scss/components/_pricing.scss +183 -241
- package/src/scss/components/_progress.scss +112 -89
- package/src/scss/components/_prose.scss +35 -33
- package/src/scss/components/_ratings.scss +40 -38
- package/src/scss/components/_segmented.scss +82 -84
- package/src/scss/components/_skeleton.scss +66 -72
- package/src/scss/components/_spinners.scss +155 -159
- package/src/scss/components/_stepper.scss +116 -116
- package/src/scss/components/_tables.scss +155 -148
- package/src/scss/components/_tabs.scss +232 -141
- package/src/scss/components/_tags.scss +109 -107
- package/src/scss/components/_techstack-bucket.scss +123 -122
- package/src/scss/components/_testimonial.scss +72 -70
- package/src/scss/components/_theme-toggle.scss +53 -51
- package/src/scss/components/_tiles.scss +174 -174
- package/src/scss/components/_timelines.scss +282 -280
- package/src/scss/components/_toasts.scss +66 -72
- package/src/scss/form-elements/_checkbox.scss +117 -132
- package/src/scss/form-elements/_form.scss +149 -115
- package/src/scss/form-elements/_input-group.scss +99 -103
- package/src/scss/form-elements/_input.scss +74 -74
- package/src/scss/form-elements/_login.scss +48 -48
- package/src/scss/form-elements/_prefilled.scss +53 -51
- package/src/scss/form-elements/_radio.scss +95 -107
- package/src/scss/form-elements/_select.scss +42 -42
- package/src/scss/form-elements/_slider.scss +117 -132
- package/src/scss/form-elements/_textarea.scss +68 -54
- package/src/scss/form-elements/_toggle.scss +127 -140
- package/src/scss/layout/_footer.scss +172 -171
- package/src/scss/layout/_grid.scss +268 -302
- package/src/scss/layout/_header.scss +426 -427
- package/src/scss/layout/_home.scss +28 -27
- package/src/scss/layout/_main.scss +275 -238
- package/src/scss/layout/_page-header.scss +38 -36
- package/src/scss/layout/_section.scss +150 -124
- package/src/scss/main.scss +1 -1
- package/src/scss/utilities/_accessibility.scss +46 -45
- package/src/scss/utilities/_aspect.scss +22 -20
- package/src/scss/utilities/_corner.scss +23 -5
- package/src/scss/utilities/_display.scss +76 -70
- package/src/scss/utilities/_elevation.scss +13 -11
- package/src/scss/utilities/_flex.scss +83 -85
- package/src/scss/utilities/_reveal.scss +40 -63
- package/src/scss/utilities/_spacing.scss +63 -64
- package/src/scss/utilities/_text.scss +139 -141
- package/src/scss/utilities/_touch-targets.scss +130 -147
|
@@ -1,43 +1,45 @@
|
|
|
1
1
|
@use '../abstracts' as *;
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
3
|
+
@layer mw.components {
|
|
4
|
+
// Keyboard key
|
|
5
|
+
kbd,
|
|
6
|
+
.mw-kbd {
|
|
7
|
+
display: inline-flex;
|
|
8
|
+
align-items: center;
|
|
9
|
+
justify-content: center;
|
|
10
|
+
min-width: 1.6em;
|
|
11
|
+
padding: 0.15em 0.45em;
|
|
12
|
+
border: 1px solid var(--mw-border);
|
|
13
|
+
border-bottom-width: 3px;
|
|
14
|
+
border-radius: radius('xs');
|
|
15
|
+
background: var(--mw-surface-muted);
|
|
16
|
+
color: var(--mw-text-color);
|
|
17
|
+
font-family: var(--mw-font-family-mono);
|
|
18
|
+
font-size: 0.85em;
|
|
19
|
+
line-height: 1.4;
|
|
20
|
+
font-weight: font-weight('medium');
|
|
21
|
+
white-space: nowrap;
|
|
22
|
+
vertical-align: middle;
|
|
23
|
+
position: relative;
|
|
24
|
+
top: -1px;
|
|
25
|
+
}
|
|
25
26
|
|
|
26
|
-
// A combination - Ctrl + Shift + P - as one unit, so the pluses between the
|
|
27
|
-
// keys are spaced and do not wrap away from what they join
|
|
28
|
-
.mw-kbd-group {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
27
|
+
// A combination - Ctrl + Shift + P - as one unit, so the pluses between the
|
|
28
|
+
// keys are spaced and do not wrap away from what they join
|
|
29
|
+
.mw-kbd-group {
|
|
30
|
+
display: inline-flex;
|
|
31
|
+
align-items: center;
|
|
32
|
+
gap: spacing('1');
|
|
33
|
+
white-space: nowrap;
|
|
34
|
+
color: var(--mw-text-muted-color);
|
|
35
|
+
font-size: font-size('sm');
|
|
36
|
+
}
|
|
36
37
|
|
|
37
|
-
// A key shown mid-press, for a hint that demonstrates rather than lists
|
|
38
|
-
.mw-kbd-pressed {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
// A key shown mid-press, for a hint that demonstrates rather than lists
|
|
39
|
+
.mw-kbd-pressed {
|
|
40
|
+
border-bottom-width: 1px;
|
|
41
|
+
top: 1px;
|
|
42
|
+
background: var(--mw-primary-background);
|
|
43
|
+
border-color: var(--mw-primary-color);
|
|
44
|
+
}
|
|
43
45
|
}
|
|
@@ -1,116 +1,108 @@
|
|
|
1
1
|
@use '../abstracts' as *;
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
// quiet controls rather than a row of competing buttons.
|
|
11
|
-
//
|
|
12
|
-
// The two-letter code, not the flag, is what says which language is on. A flag
|
|
13
|
-
// is a country and never a language - which one stands for English, and which
|
|
14
|
-
// for the German a Swiss or Austrian visitor reads? The code carries the
|
|
15
|
-
// meaning and the flag is the thing the eye finds first.
|
|
16
|
-
// ---------------------------------------------------------------------------
|
|
3
|
+
@layer mw.components {
|
|
4
|
+
// A .mw-dropdown underneath, so the keyboard contract is inherited rather than
|
|
5
|
+
// rebuilt. This adds the trigger, deliberately not a button shape - the bar
|
|
6
|
+
// reads as logo, links and two quiet controls, not a row of buttons.
|
|
7
|
+
//
|
|
8
|
+
// The two-letter code says which language is on, not the flag: a flag is a
|
|
9
|
+
// country, and neither English nor the German a Swiss visitor reads has one.
|
|
17
10
|
|
|
18
|
-
.mw-lang-switch {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
11
|
+
.mw-lang-switch {
|
|
12
|
+
> summary {
|
|
13
|
+
display: inline-flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
gap: spacing('3');
|
|
16
|
+
height: 36px;
|
|
17
|
+
padding: spacing('0') spacing('3');
|
|
18
|
+
border: 1px solid transparent;
|
|
19
|
+
border-radius: radius('2xl');
|
|
20
|
+
background: transparent;
|
|
21
|
+
color: var(--mw-text-color);
|
|
22
|
+
transition: var(--mw-transition);
|
|
23
|
+
@include tappable;
|
|
24
|
+
@include focus-ring;
|
|
25
|
+
}
|
|
33
26
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
27
|
+
// Open looks the same as hovered - the menu below is what says it is open
|
|
28
|
+
> summary:hover,
|
|
29
|
+
&[open] > summary {
|
|
30
|
+
background: var(--mw-surface-muted);
|
|
31
|
+
border-color: var(--mw-border);
|
|
32
|
+
}
|
|
39
33
|
}
|
|
40
|
-
}
|
|
41
34
|
|
|
42
|
-
// The code carries the state, so it is the one part that gets full ink
|
|
43
|
-
.mw-lang-switch-code {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
35
|
+
// The code carries the state, so it is the one part that gets full ink
|
|
36
|
+
.mw-lang-switch-code {
|
|
37
|
+
font-size: font-size('xs');
|
|
38
|
+
font-weight: font-weight('bold');
|
|
39
|
+
letter-spacing: 0.08em;
|
|
40
|
+
text-transform: uppercase;
|
|
41
|
+
line-height: 1;
|
|
42
|
+
}
|
|
50
43
|
|
|
51
|
-
.mw-lang-switch .mw-dropdown-caret {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
44
|
+
.mw-lang-switch .mw-dropdown-caret {
|
|
45
|
+
font-size: font-size('3xs');
|
|
46
|
+
opacity: 0.6;
|
|
47
|
+
}
|
|
55
48
|
|
|
56
|
-
// A language list is short and its labels are one word - the 200px default
|
|
57
|
-
// menu leaves half of it empty. The one place it must not be narrowed is under
|
|
58
|
-
// a thumb, where the dropdown widens every menu on purpose.
|
|
59
|
-
.mw-lang-switch .mw-dropdown-menu {
|
|
60
|
-
|
|
49
|
+
// A language list is short and its labels are one word - the 200px default
|
|
50
|
+
// menu leaves half of it empty. The one place it must not be narrowed is under
|
|
51
|
+
// a thumb, where the dropdown widens every menu on purpose.
|
|
52
|
+
.mw-lang-switch .mw-dropdown-menu {
|
|
53
|
+
min-width: 170px;
|
|
61
54
|
|
|
62
|
-
|
|
63
|
-
|
|
55
|
+
@media (pointer: coarse), (max-width: #{breakpoint('sm')}) {
|
|
56
|
+
min-width: max(100%, 240px);
|
|
57
|
+
}
|
|
64
58
|
}
|
|
65
|
-
}
|
|
66
59
|
|
|
67
|
-
.mw-lang-switch-name {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
text-overflow: ellipsis;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// The tick is the only mark of the current choice inside the menu - it has to
|
|
76
|
-
// stay out of the muted icon column the dropdown gives every other icon.
|
|
77
|
-
// Kept in the layout while hidden, so the labels do not shift by a tick's width
|
|
78
|
-
// when the choice moves to another row.
|
|
79
|
-
.mw-lang-switch .mw-dropdown-item .mw-lang-switch-check {
|
|
80
|
-
margin-left: auto;
|
|
81
|
-
color: var(--mw-primary-text-color);
|
|
82
|
-
visibility: hidden;
|
|
83
|
-
}
|
|
60
|
+
.mw-lang-switch-name {
|
|
61
|
+
flex: 1;
|
|
62
|
+
min-width: 0;
|
|
63
|
+
@include truncate;
|
|
64
|
+
}
|
|
84
65
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
66
|
+
// The tick is the only mark of the current choice inside the menu - it has to
|
|
67
|
+
// stay out of the muted icon column the dropdown gives every other icon.
|
|
68
|
+
// Kept in the layout while hidden, so the labels do not shift by a tick's width
|
|
69
|
+
// when the choice moves to another row.
|
|
70
|
+
.mw-lang-switch .mw-dropdown-item .mw-lang-switch-check {
|
|
71
|
+
margin-left: auto;
|
|
72
|
+
color: var(--mw-primary-text-color);
|
|
73
|
+
visibility: hidden;
|
|
74
|
+
}
|
|
89
75
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
// reached another way: a project that builds its own bar instead of using
|
|
94
|
-
// `.mw-header`, or a dark footer.
|
|
95
|
-
.mw-header .mw-lang-switch,
|
|
96
|
-
.mw-lang-switch-inverted {
|
|
97
|
-
> summary {
|
|
98
|
-
color: var(--mw-header-text-color);
|
|
76
|
+
.mw-lang-switch .mw-dropdown-item.mw-active .mw-lang-switch-check,
|
|
77
|
+
.mw-lang-switch .mw-dropdown-item.active .mw-lang-switch-check {
|
|
78
|
+
visibility: visible;
|
|
99
79
|
}
|
|
100
80
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
81
|
+
// In the bar the control sits on the header's own dark surface, which stays
|
|
82
|
+
// dark in the light theme too - so it cannot use the page's text and surface
|
|
83
|
+
// tokens the way it does anywhere else. The modifier is for the same surface
|
|
84
|
+
// reached another way: a project that builds its own bar instead of using
|
|
85
|
+
// `.mw-header`, or a dark footer.
|
|
86
|
+
.mw-header .mw-lang-switch,
|
|
87
|
+
.mw-lang-switch-inverted {
|
|
88
|
+
> summary {
|
|
89
|
+
color: var(--mw-header-text-color);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
> summary:hover,
|
|
93
|
+
&[open] > summary {
|
|
94
|
+
background: var(--mw-header-border);
|
|
95
|
+
border-color: var(--mw-header-border);
|
|
96
|
+
}
|
|
105
97
|
}
|
|
106
|
-
}
|
|
107
98
|
|
|
108
|
-
// 36px is a comfortable target for a mouse and a miss for a finger. The caret
|
|
109
|
-
// stays - without it the control reads as a label rather than as something to
|
|
110
|
-
// press.
|
|
111
|
-
@include media-down('sm') {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
99
|
+
// 36px is a comfortable target for a mouse and a miss for a finger. The caret
|
|
100
|
+
// stays - without it the control reads as a label rather than as something to
|
|
101
|
+
// press.
|
|
102
|
+
@include media-down('sm') {
|
|
103
|
+
.mw-lang-switch > summary {
|
|
104
|
+
height: 40px;
|
|
105
|
+
gap: spacing('2');
|
|
106
|
+
}
|
|
115
107
|
}
|
|
116
108
|
}
|
|
@@ -1,35 +1,28 @@
|
|
|
1
1
|
@use '../abstracts' as *;
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// reset hands it the family but not the size. The shorthand carries the line
|
|
14
|
-
// height along, which is what makes the button box come out exactly as tall as
|
|
15
|
-
// the line it sits in. It stays one unbreakable box either way, since no
|
|
16
|
-
// browser lets a `<button>` wrap - use an `<a>` where the label is long enough
|
|
17
|
-
// to need it.
|
|
18
|
-
.mw-link,
|
|
19
|
-
.mw-link-muted {
|
|
20
|
-
font: inherit;
|
|
3
|
+
@layer mw.components {
|
|
4
|
+
// mw-link in running text, mw-btn mw-btn-link where it is one of several
|
|
5
|
+
// buttons: mw-btn lifts its line to 2.25rem, which is glaring in a disclaimer.
|
|
6
|
+
//
|
|
7
|
+
// `font` and the focus ring are spelled out because this also has to work on a
|
|
8
|
+
// <button>, which the reset hands the family but not the size. A button never
|
|
9
|
+
// wraps, so use an <a> where the label is long enough to need it.
|
|
10
|
+
.mw-link,
|
|
11
|
+
.mw-link-muted {
|
|
12
|
+
font: inherit;
|
|
21
13
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.mw-link {
|
|
27
|
-
color: var(--mw-primary-text-color);
|
|
28
|
-
}
|
|
14
|
+
@include link-look;
|
|
15
|
+
@include focus-ring;
|
|
16
|
+
}
|
|
29
17
|
|
|
30
|
-
.mw-link
|
|
31
|
-
color: var(--mw-text-muted-color);
|
|
32
|
-
&:hover {
|
|
18
|
+
.mw-link {
|
|
33
19
|
color: var(--mw-primary-text-color);
|
|
34
20
|
}
|
|
21
|
+
|
|
22
|
+
.mw-link-muted {
|
|
23
|
+
color: var(--mw-text-muted-color);
|
|
24
|
+
&:hover {
|
|
25
|
+
color: var(--mw-primary-text-color);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
35
28
|
}
|