maverick-wave 3.3.0 → 3.3.2
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/skills/maverick-wave/SKILL.md +208 -0
- package/.claude/skills/maverick-wave/examples/angular-form.md +275 -0
- package/.claude/skills/maverick-wave/examples/angular-list-page.md +304 -0
- package/.claude/skills/maverick-wave/examples/angular-services.md +348 -0
- package/.claude/skills/maverick-wave/examples/static-landing-page.md +362 -0
- package/.claude/skills/maverick-wave/references/components.md +812 -0
- package/.claude/skills/maverick-wave/references/forms.md +289 -0
- package/.claude/skills/maverick-wave/references/javascript.md +70 -0
- package/.claude/skills/maverick-wave/references/layout.md +300 -0
- package/.claude/skills/maverick-wave/references/theming.md +192 -0
- package/.github/workflows/ci.yml +41 -0
- package/CHANGELOG.md +13 -0
- package/README.md +115 -21
- package/index.html +15 -9
- package/maverick-wave.min.css +1 -1
- package/maverick-wave.min.js +1 -1
- package/package.json +3 -1
- package/scripts/verify.js +137 -0
- package/src/js/main.js +39 -11
- package/src/partials/accordions-container.html +22 -27
- package/src/partials/alerts-container.html +26 -0
- package/src/partials/avatars-container.html +22 -0
- package/src/partials/buttons-container.html +11 -15
- package/src/partials/cards-container.html +8 -8
- package/src/partials/colors-container.html +33 -20
- package/src/partials/documentation-container.html +3 -0
- package/src/partials/form-field-container.html +16 -12
- package/src/partials/get-started-container.html +93 -35
- package/src/partials/header-utilities-container.html +64 -6
- package/src/partials/input-group-container.html +5 -3
- package/src/partials/page-header-container.html +78 -0
- package/src/partials/tables-container.html +130 -0
- package/src/partials/tabs-container.html +20 -16
- package/src/partials/tags-container.html +55 -1
- package/src/scss/abstracts/_index.scss +4 -1
- package/src/scss/abstracts/_variables.scss +128 -106
- package/src/scss/base/_base.scss +32 -136
- package/src/scss/base/_reset.scss +1 -1
- package/src/scss/base/_typography.scss +0 -92
- package/src/scss/components/_accordions.scss +3 -3
- package/src/scss/components/_avatars.scss +28 -1
- package/src/scss/components/_blog-post.scss +1 -1
- package/src/scss/components/_button-bar.scss +6 -6
- package/src/scss/components/_buttons.scss +33 -10
- package/src/scss/components/_cards.scss +7 -7
- package/src/scss/components/_coming-soon.scss +4 -4
- package/src/scss/components/_gallery.scss +2 -2
- package/src/scss/components/_index.scss +1 -0
- package/src/scss/components/_info.scss +20 -3
- package/src/scss/components/_lists.scss +11 -10
- package/src/scss/components/_modals.scss +14 -7
- package/src/scss/components/_pagination.scss +3 -3
- package/src/scss/components/_panels.scss +4 -4
- package/src/scss/components/_progress.scss +1 -1
- package/src/scss/components/_ratings.scss +1 -1
- package/src/scss/components/_spinners.scss +2 -2
- package/src/scss/components/_stepper.scss +3 -2
- package/src/scss/components/_tables.scss +42 -1
- package/src/scss/components/_tabs.scss +5 -5
- package/src/scss/components/_tags.scss +43 -27
- package/src/scss/components/_tiles.scss +3 -3
- package/src/scss/components/_timelines.scss +2 -2
- package/src/scss/components/_toasts.scss +92 -0
- package/src/scss/form-elements/_form.scss +11 -3
- package/src/scss/form-elements/_input.scss +24 -0
- package/src/scss/form-elements/_toggle.scss +1 -1
- package/src/scss/layout/_footer.scss +4 -4
- package/src/scss/layout/_header.scss +219 -59
- package/src/scss/layout/_index.scss +1 -0
- package/src/scss/layout/_main.scss +1 -1
- package/src/scss/layout/_page-header.scss +48 -0
- package/src/scss/layout/_section.scss +15 -14
- package/src/scss/main.scss +4 -0
- package/src/scss/utilities/_flex.scss +4 -0
- package/src/scss/utilities/_index.scss +1 -0
- package/src/scss/utilities/_text.scss +105 -0
- package/.claude/commands/mw.md +0 -595
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
th {
|
|
19
19
|
font-weight: font-weight('medium');
|
|
20
|
-
color: var(--mw-
|
|
20
|
+
color: var(--mw-accent-text-color);
|
|
21
21
|
background: var(--mw-primary-color);
|
|
22
22
|
user-select: none;
|
|
23
23
|
}
|
|
@@ -127,3 +127,44 @@
|
|
|
127
127
|
background: var(--mw-primary-background-hover);
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
|
+
|
|
131
|
+
// Quiet header for data-heavy views
|
|
132
|
+
.mw-table-subtle {
|
|
133
|
+
th {
|
|
134
|
+
background: color-mix(
|
|
135
|
+
in srgb,
|
|
136
|
+
var(--mw-gray-color) 20%,
|
|
137
|
+
var(--mw-card-background)
|
|
138
|
+
);
|
|
139
|
+
color: var(--mw-text-color);
|
|
140
|
+
border-bottom: 2px solid var(--mw-border-accent);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Header stays visible while the body scrolls
|
|
145
|
+
.mw-table-sticky-head {
|
|
146
|
+
th {
|
|
147
|
+
position: sticky;
|
|
148
|
+
top: spacing('0');
|
|
149
|
+
z-index: z-index('lift');
|
|
150
|
+
box-shadow:
|
|
151
|
+
inset 0 1px 0 var(--mw-border),
|
|
152
|
+
inset 0 -1px 0 var(--mw-border);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.mw-table-responsive-scroll {
|
|
157
|
+
@extend .mw-table-responsive;
|
|
158
|
+
--mw-table-scroll-height: 400px;
|
|
159
|
+
max-height: var(--mw-table-scroll-height);
|
|
160
|
+
overflow-y: auto;
|
|
161
|
+
|
|
162
|
+
.mw-table {
|
|
163
|
+
margin-top: spacing('0');
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Rows get shorter on small screens
|
|
167
|
+
@include media-down('sm') {
|
|
168
|
+
--mw-table-scroll-height: 260px;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
&-nav {
|
|
9
9
|
display: flex;
|
|
10
|
-
border-bottom: 1px solid var(--mw-
|
|
10
|
+
border-bottom: 1px solid var(--mw-border-accent);
|
|
11
11
|
margin-bottom: spacing('3');
|
|
12
12
|
overflow-x: auto;
|
|
13
13
|
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
.mw-tabs-nav {
|
|
66
66
|
flex-direction: column;
|
|
67
67
|
border-bottom: none;
|
|
68
|
-
border-right: 1px solid var(--mw-
|
|
68
|
+
border-right: 1px solid var(--mw-border-accent);
|
|
69
69
|
margin-bottom: spacing('0');
|
|
70
70
|
margin-right: spacing('3');
|
|
71
71
|
min-width: 160px;
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
@include media-down('sm') {
|
|
75
75
|
flex-direction: row;
|
|
76
76
|
border-right: none;
|
|
77
|
-
border-bottom: 1px solid var(--mw-
|
|
77
|
+
border-bottom: 1px solid var(--mw-border-accent);
|
|
78
78
|
margin-right: spacing('0');
|
|
79
79
|
margin-bottom: spacing('4');
|
|
80
80
|
width: 100%;
|
|
@@ -126,12 +126,12 @@
|
|
|
126
126
|
border-radius: radius('xl');
|
|
127
127
|
padding: spacing('4') spacing('5');
|
|
128
128
|
line-height: 0.9;
|
|
129
|
-
border: 1px solid var(--mw-
|
|
129
|
+
border: 1px solid var(--mw-border-accent);
|
|
130
130
|
background: var(--mw-card-background);
|
|
131
131
|
|
|
132
132
|
&.active {
|
|
133
133
|
background: var(--mw-primary-color);
|
|
134
|
-
color: var(--mw-
|
|
134
|
+
color: var(--mw-accent-text-color);
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
}
|
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
@use '../abstracts' as *;
|
|
2
2
|
|
|
3
|
+
// Colour variants
|
|
4
|
+
$_mw-tag-colors: (
|
|
5
|
+
'primary': '',
|
|
6
|
+
'secondary': '',
|
|
7
|
+
'success': 'info-',
|
|
8
|
+
'warning': 'info-',
|
|
9
|
+
'danger': 'info-',
|
|
10
|
+
'info': 'info-',
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
// Container for tag *lists* - carries the colour for all its items
|
|
3
14
|
.mw-tags {
|
|
4
15
|
display: flex;
|
|
5
16
|
flex-wrap: wrap;
|
|
6
17
|
gap: spacing('2');
|
|
7
18
|
}
|
|
8
19
|
|
|
9
|
-
//
|
|
10
|
-
|
|
20
|
+
// Visual base, shared by the list item and the standalone tag
|
|
21
|
+
%mw-tag-base {
|
|
11
22
|
display: inline-flex;
|
|
12
23
|
align-items: center;
|
|
13
24
|
background: var(--mw-primary-background);
|
|
@@ -23,6 +34,11 @@
|
|
|
23
34
|
&:hover {
|
|
24
35
|
background: var(--mw-primary-background-hover);
|
|
25
36
|
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Tag item - inside a `.mw-tags` container
|
|
40
|
+
.mw-tags-item {
|
|
41
|
+
@extend %mw-tag-base;
|
|
26
42
|
|
|
27
43
|
// Removable tag styling
|
|
28
44
|
&.mw-tags-removable {
|
|
@@ -30,6 +46,11 @@
|
|
|
30
46
|
}
|
|
31
47
|
}
|
|
32
48
|
|
|
49
|
+
// Standalone tag - carries its colour directly, no container needed
|
|
50
|
+
.mw-tag {
|
|
51
|
+
@extend %mw-tag-base;
|
|
52
|
+
}
|
|
53
|
+
|
|
33
54
|
// Remove button - pure CSS
|
|
34
55
|
.mw-tags-remove {
|
|
35
56
|
flex-shrink: 0;
|
|
@@ -49,41 +70,36 @@
|
|
|
49
70
|
font-size: 0.9rem;
|
|
50
71
|
}
|
|
51
72
|
|
|
52
|
-
// Color variants
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
}
|
|
73
|
+
// Color variants - generated for the list form and the standalone form
|
|
74
|
+
@each $name, $infix in $_mw-tag-colors {
|
|
75
|
+
.mw-tags-#{$name} .mw-tags-item,
|
|
76
|
+
.mw-tag-#{$name} {
|
|
77
|
+
background-color: var(--mw-#{$name}-#{$infix}background);
|
|
78
|
+
border-color: var(--mw-#{$name}-color);
|
|
60
79
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
&:hover {
|
|
65
|
-
background: var(--mw-secondary-background-hover);
|
|
80
|
+
&:hover {
|
|
81
|
+
background: var(--mw-#{$name}-#{$infix}background-hover);
|
|
82
|
+
}
|
|
66
83
|
}
|
|
67
84
|
}
|
|
68
85
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
86
|
+
// Neutral variant for "draft" / "done" states.
|
|
87
|
+
.mw-tags-muted .mw-tags-item,
|
|
88
|
+
.mw-tag-muted {
|
|
89
|
+
background-color: var(--mw-gray-background);
|
|
90
|
+
border-color: var(--mw-border);
|
|
91
|
+
color: var(--mw-text-muted-color);
|
|
76
92
|
|
|
77
|
-
.mw-tags-info .mw-tags-item {
|
|
78
|
-
background-color: var(--mw-info-info-background);
|
|
79
|
-
border-color: var(--mw-info-color);
|
|
80
93
|
&:hover {
|
|
81
|
-
background: var(--mw-
|
|
94
|
+
background-color: var(--mw-gray-background);
|
|
95
|
+
border-color: var(--mw-text-muted-color);
|
|
96
|
+
color: var(--mw-text-color);
|
|
82
97
|
}
|
|
83
98
|
}
|
|
84
99
|
|
|
85
100
|
// Size variants
|
|
86
|
-
.mw-tags-lg .mw-tags-item
|
|
101
|
+
.mw-tags-lg .mw-tags-item,
|
|
102
|
+
.mw-tag-lg {
|
|
87
103
|
font-size: font-size('sm');
|
|
88
104
|
padding: spacing('1') spacing('3');
|
|
89
105
|
|
|
@@ -67,9 +67,9 @@
|
|
|
67
67
|
cursor: pointer;
|
|
68
68
|
|
|
69
69
|
&:hover {
|
|
70
|
-
transform: translateY(-
|
|
71
|
-
box-shadow: 0
|
|
72
|
-
border-color: var(--mw-
|
|
70
|
+
transform: translateY(-2px);
|
|
71
|
+
box-shadow: 0 7px 15px var(--mw-shadow);
|
|
72
|
+
border-color: var(--mw-border-accent);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
// Tile image
|
|
@@ -187,7 +187,7 @@ $_simple-date-width: 110px;
|
|
|
187
187
|
|
|
188
188
|
.mw-timeline-big-date-main,
|
|
189
189
|
.mw-timeline-big-date-sub {
|
|
190
|
-
color: var(--mw-
|
|
190
|
+
color: var(--mw-accent-text-color);
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
193
|
|
|
@@ -308,7 +308,7 @@ $_simple-date-width: 110px;
|
|
|
308
308
|
// Active step
|
|
309
309
|
&-step.active &-date {
|
|
310
310
|
background: var(--mw-primary-color);
|
|
311
|
-
color: var(--mw-
|
|
311
|
+
color: var(--mw-accent-text-color);
|
|
312
312
|
transform: scale(1.1);
|
|
313
313
|
animation: mw-pulse-ring-simple 2s infinite;
|
|
314
314
|
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
@use '../abstracts' as *;
|
|
2
|
+
|
|
3
|
+
// Fixed, stacked container for `mw-alert`
|
|
4
|
+
.mw-toast-stack {
|
|
5
|
+
position: fixed;
|
|
6
|
+
z-index: z-index('alert');
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
gap: spacing('3');
|
|
10
|
+
width: min(380px, calc(100vw - #{2 * spacing('5')}));
|
|
11
|
+
max-height: calc(100vh - #{2 * spacing('5')});
|
|
12
|
+
overflow-y: auto;
|
|
13
|
+
pointer-events: none;
|
|
14
|
+
|
|
15
|
+
> * {
|
|
16
|
+
pointer-events: auto;
|
|
17
|
+
margin-bottom: spacing('0');
|
|
18
|
+
animation: mw-toast-in 0.3s ease;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Default position
|
|
22
|
+
top: spacing('5');
|
|
23
|
+
right: spacing('5');
|
|
24
|
+
|
|
25
|
+
// Positions
|
|
26
|
+
&-top-right {
|
|
27
|
+
top: spacing('5');
|
|
28
|
+
right: spacing('5');
|
|
29
|
+
bottom: auto;
|
|
30
|
+
left: auto;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
&-top-center {
|
|
34
|
+
top: spacing('5');
|
|
35
|
+
left: 50%;
|
|
36
|
+
right: auto;
|
|
37
|
+
bottom: auto;
|
|
38
|
+
transform: translateX(-50%);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
&-bottom-right {
|
|
42
|
+
bottom: spacing('5');
|
|
43
|
+
right: spacing('5');
|
|
44
|
+
top: auto;
|
|
45
|
+
left: auto;
|
|
46
|
+
flex-direction: column-reverse;
|
|
47
|
+
|
|
48
|
+
> * {
|
|
49
|
+
animation-name: mw-toast-in-up;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// On phones the stack spans the full width at the top
|
|
54
|
+
@include media-down('sm') {
|
|
55
|
+
left: spacing('5');
|
|
56
|
+
right: spacing('5');
|
|
57
|
+
width: auto;
|
|
58
|
+
transform: none;
|
|
59
|
+
|
|
60
|
+
&-bottom-right {
|
|
61
|
+
top: auto;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@keyframes mw-toast-in {
|
|
67
|
+
from {
|
|
68
|
+
opacity: 0;
|
|
69
|
+
transform: translateY(-12px);
|
|
70
|
+
}
|
|
71
|
+
to {
|
|
72
|
+
opacity: 1;
|
|
73
|
+
transform: translateY(0);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@keyframes mw-toast-in-up {
|
|
78
|
+
from {
|
|
79
|
+
opacity: 0;
|
|
80
|
+
transform: translateY(12px);
|
|
81
|
+
}
|
|
82
|
+
to {
|
|
83
|
+
opacity: 1;
|
|
84
|
+
transform: translateY(0);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@media (prefers-reduced-motion: reduce) {
|
|
89
|
+
.mw-toast-stack > * {
|
|
90
|
+
animation: none;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
display: flex;
|
|
5
5
|
flex-direction: column;
|
|
6
6
|
gap: spacing('4');
|
|
7
|
-
padding: spacing('1');
|
|
8
7
|
width: 100%;
|
|
9
8
|
|
|
10
9
|
&-inline {
|
|
@@ -16,10 +15,19 @@
|
|
|
16
15
|
&-group {
|
|
17
16
|
display: flex;
|
|
18
17
|
flex-direction: column;
|
|
19
|
-
padding: spacing('
|
|
20
|
-
gap: spacing('
|
|
18
|
+
padding: spacing('4');
|
|
19
|
+
gap: spacing('2');
|
|
21
20
|
border-radius: radius('sm');
|
|
22
21
|
border: 2px solid var(--mw-border);
|
|
22
|
+
|
|
23
|
+
// Explicit hook for the heading, mirrors mw-modal-title
|
|
24
|
+
&-title {
|
|
25
|
+
font-size: font-size('md');
|
|
26
|
+
font-weight: font-weight('bold');
|
|
27
|
+
color: var(--mw-text-color);
|
|
28
|
+
line-height: 1.2;
|
|
29
|
+
margin: spacing('0') spacing('0') spacing('1') spacing('0');
|
|
30
|
+
}
|
|
23
31
|
}
|
|
24
32
|
|
|
25
33
|
label {
|
|
@@ -42,6 +42,30 @@
|
|
|
42
42
|
font-size: font-size('sm');
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
// Numeric input for money and other figures - the entry counterpart to the
|
|
46
|
+
// `mw-text-numeric` utility, so a value looks the same while being typed and
|
|
47
|
+
// once it is rendered into a table.
|
|
48
|
+
//
|
|
49
|
+
// Pair it with `type="text" inputmode="decimal"`, not `type="number"`:
|
|
50
|
+
// number inputs change their value on scroll, and they reject a comma as
|
|
51
|
+
// decimal separator in most locales, which silently empties `.value` for
|
|
52
|
+
// anyone typing "1234,50".
|
|
53
|
+
&-numeric {
|
|
54
|
+
text-align: right;
|
|
55
|
+
font-variant-numeric: tabular-nums lining-nums;
|
|
56
|
+
font-feature-settings: 'tnum', 'lnum';
|
|
57
|
+
|
|
58
|
+
// Suppress the native spinners if a `type="number"` slips through - their
|
|
59
|
+
// step of 1 is meaningless for an amount and the arrows are tiny.
|
|
60
|
+
appearance: textfield;
|
|
61
|
+
|
|
62
|
+
&::-webkit-outer-spin-button,
|
|
63
|
+
&::-webkit-inner-spin-button {
|
|
64
|
+
appearance: none;
|
|
65
|
+
margin: 0;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
45
69
|
// Date / time inputs — style the native picker indicator
|
|
46
70
|
&[type='date'],
|
|
47
71
|
&[type='time'],
|
|
@@ -69,7 +69,7 @@ $_knob-travel-lg: calc(
|
|
|
69
69
|
left: $_knob-offset;
|
|
70
70
|
width: $_knob-size;
|
|
71
71
|
height: $_knob-size;
|
|
72
|
-
background: var(--mw-
|
|
72
|
+
background: var(--mw-accent-text-color);
|
|
73
73
|
border-radius: radius('full');
|
|
74
74
|
transition: transform 0.25s ease;
|
|
75
75
|
box-shadow: 0 1px 4px var(--mw-shadow);
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
background: var(--mw-footer-background);
|
|
6
6
|
padding: spacing('5') spacing('0');
|
|
7
7
|
margin-top: spacing('6');
|
|
8
|
-
border-top: 1px solid var(--mw-
|
|
8
|
+
border-top: 1px solid var(--mw-border-accent);
|
|
9
9
|
|
|
10
10
|
&-top {
|
|
11
11
|
display: grid;
|
|
@@ -105,14 +105,14 @@
|
|
|
105
105
|
color: var(--mw-text-color);
|
|
106
106
|
font-size: font-size('xl');
|
|
107
107
|
transition: var(--mw-transition);
|
|
108
|
-
border: 1px solid var(--mw-
|
|
108
|
+
border: 1px solid var(--mw-border-accent);
|
|
109
109
|
box-shadow: 0 3px 10px var(--mw-shadow);
|
|
110
110
|
text-decoration: none;
|
|
111
111
|
|
|
112
112
|
&:hover {
|
|
113
113
|
background: var(--mw-primary-color);
|
|
114
|
-
color: var(--mw-
|
|
115
|
-
transform: translateY(-
|
|
114
|
+
color: var(--mw-accent-text-color);
|
|
115
|
+
transform: translateY(-2px);
|
|
116
116
|
border-color: var(--mw-primary-color);
|
|
117
117
|
}
|
|
118
118
|
}
|