maverick-wave 4.27.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 +42 -25
- 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 +90 -5
- package/.claude/skills/mw-maverick-wave/references/forms.md +14 -2
- package/.claude/skills/mw-maverick-wave/references/javascript.md +18 -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 +17 -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 +266 -75
- 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/header-utilities-container.html +192 -5
- 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 +325 -0
- package/src/scss/components/_gallery.scss +131 -133
- package/src/scss/components/_index.scss +2 -0
- 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 +108 -0
- 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
|
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
@use '../abstracts' as *;
|
|
2
|
+
|
|
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.
|
|
10
|
+
|
|
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
|
+
}
|
|
26
|
+
|
|
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
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
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
|
+
}
|
|
43
|
+
|
|
44
|
+
.mw-lang-switch .mw-dropdown-caret {
|
|
45
|
+
font-size: font-size('3xs');
|
|
46
|
+
opacity: 0.6;
|
|
47
|
+
}
|
|
48
|
+
|
|
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;
|
|
54
|
+
|
|
55
|
+
@media (pointer: coarse), (max-width: #{breakpoint('sm')}) {
|
|
56
|
+
min-width: max(100%, 240px);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.mw-lang-switch-name {
|
|
61
|
+
flex: 1;
|
|
62
|
+
min-width: 0;
|
|
63
|
+
@include truncate;
|
|
64
|
+
}
|
|
65
|
+
|
|
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
|
+
}
|
|
75
|
+
|
|
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;
|
|
79
|
+
}
|
|
80
|
+
|
|
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
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
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
|
+
}
|
|
107
|
+
}
|
|
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
|
}
|