maverick-wave 5.7.0 → 5.8.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/skills/mw-maverick-wave/SKILL.md +2 -2
- package/.claude/skills/mw-maverick-wave/examples/static-landing-page.md +2 -2
- package/.claude/skills/mw-maverick-wave/references/theming.md +24 -19
- package/CHANGELOG.md +6 -0
- package/README.md +10 -6
- package/index.html +70 -42
- package/maverick-wave.min.css +2 -2
- package/package.json +2 -2
- package/scripts/verify.js +11 -1
- package/src/partials/header-container.html +7 -5
- package/src/partials/palette-container.html +90 -20
- package/src/partials/utilities-container.html +17 -4
- package/src/scss/base/_base.scss +4 -0
- package/src/scss/base/_reset.scss +2 -0
- package/src/scss/utilities/_variants.scss +42 -0
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "maverick-wave",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.8.0",
|
|
4
4
|
"config": {
|
|
5
|
-
"version_short": "5.
|
|
5
|
+
"version_short": "5.8"
|
|
6
6
|
},
|
|
7
7
|
"description": "A lightweight, modern CSS framework for building responsive websites with elegance and speed.",
|
|
8
8
|
"main": "src/js/main.js",
|
package/scripts/verify.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 1. every var(--mw-*) has a definition
|
|
7
7
|
* 2. every --mw-* definition is used somewhere
|
|
8
8
|
* 3. every mw-* class in the markup exists in the built CSS
|
|
9
|
-
* 4. the committed root release files
|
|
9
|
+
* 4. the committed root release files match a fresh build
|
|
10
10
|
* 5. the CDN version pinned in the docs matches package.json
|
|
11
11
|
* 6. no `animation:` shorthand in a file that uses a scroll timeline
|
|
12
12
|
*
|
|
@@ -135,6 +135,16 @@ for (const f of ['maverick-wave.min.css', 'maverick-wave.min.js']) {
|
|
|
135
135
|
errors.push(
|
|
136
136
|
`release file missing or empty: ${f} - run \`npm run prepack\` and commit it`
|
|
137
137
|
);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
// `gulp release` runs the same sass/postcss/terser pipeline as the dist tasks
|
|
141
|
+
// and only writes elsewhere, so dist/ is what the committed file has to equal.
|
|
142
|
+
// Existing-and-not-empty was not enough: 5.7.0 shipped a root bundle four
|
|
143
|
+
// commits behind src/, and every CDN consumer got that one.
|
|
144
|
+
if (read(p) !== read(path.join(ROOT, 'dist', f))) {
|
|
145
|
+
errors.push(
|
|
146
|
+
`release file stale: ${f} differs from the fresh build in dist/ - run \`npm run prepack\` and commit it`
|
|
147
|
+
);
|
|
138
148
|
}
|
|
139
149
|
}
|
|
140
150
|
|
|
@@ -41,14 +41,16 @@
|
|
|
41
41
|
</div>
|
|
42
42
|
</button>
|
|
43
43
|
|
|
44
|
-
<!--
|
|
44
|
+
<!-- Palette Switcher, showcase only - the panel lives in palette-container -->
|
|
45
45
|
<button
|
|
46
46
|
type="button"
|
|
47
|
-
class="
|
|
48
|
-
id="
|
|
49
|
-
aria-
|
|
47
|
+
class="palette-toggle"
|
|
48
|
+
id="palette-toggle"
|
|
49
|
+
aria-expanded="false"
|
|
50
|
+
aria-controls="palette-panel"
|
|
51
|
+
aria-label="Try another palette"
|
|
50
52
|
>
|
|
51
|
-
<i class="fas fa-
|
|
53
|
+
<i class="fas fa-palette"></i>
|
|
52
54
|
</button>
|
|
53
55
|
|
|
54
56
|
<!-- Burger Menu Button -->
|
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
<button
|
|
2
|
-
type="button"
|
|
3
|
-
class="palette-fab"
|
|
4
|
-
id="palette-fab"
|
|
5
|
-
aria-expanded="false"
|
|
6
|
-
aria-controls="palette-panel"
|
|
7
|
-
aria-label="Try another palette"
|
|
8
|
-
>
|
|
9
|
-
<i class="fas fa-palette"></i>
|
|
10
|
-
</button>
|
|
11
|
-
|
|
12
1
|
<div class="palette-panel" id="palette-panel" hidden>
|
|
13
2
|
<h3 class="palette-heading">Palette</h3>
|
|
14
3
|
<p class="palette-hint">
|
|
@@ -25,7 +14,7 @@
|
|
|
25
14
|
data-dark="#171f30"
|
|
26
15
|
data-light="#e7e7f0"
|
|
27
16
|
>
|
|
28
|
-
|
|
17
|
+
MaverickWave
|
|
29
18
|
</button>
|
|
30
19
|
<button
|
|
31
20
|
type="button"
|
|
@@ -127,6 +116,46 @@
|
|
|
127
116
|
>
|
|
128
117
|
Wine
|
|
129
118
|
</button>
|
|
119
|
+
<button
|
|
120
|
+
type="button"
|
|
121
|
+
class="palette-item"
|
|
122
|
+
data-primary="#cc8a04"
|
|
123
|
+
data-secondary="#2b5f9e"
|
|
124
|
+
data-dark="#231c0f"
|
|
125
|
+
data-light="#f3ecdc"
|
|
126
|
+
>
|
|
127
|
+
Amber
|
|
128
|
+
</button>
|
|
129
|
+
<button
|
|
130
|
+
type="button"
|
|
131
|
+
class="palette-item"
|
|
132
|
+
data-primary="#6da31c"
|
|
133
|
+
data-secondary="#a3319b"
|
|
134
|
+
data-dark="#171e10"
|
|
135
|
+
data-light="#ecf1e1"
|
|
136
|
+
>
|
|
137
|
+
Lime
|
|
138
|
+
</button>
|
|
139
|
+
<button
|
|
140
|
+
type="button"
|
|
141
|
+
class="palette-item"
|
|
142
|
+
data-primary="#5e2c6e"
|
|
143
|
+
data-secondary="#c9853a"
|
|
144
|
+
data-dark="#1c1221"
|
|
145
|
+
data-light="#ece5f0"
|
|
146
|
+
>
|
|
147
|
+
Aubergine
|
|
148
|
+
</button>
|
|
149
|
+
<button
|
|
150
|
+
type="button"
|
|
151
|
+
class="palette-item"
|
|
152
|
+
data-primary="#b0543a"
|
|
153
|
+
data-secondary="#3d7160"
|
|
154
|
+
data-dark="#231613"
|
|
155
|
+
data-light="#f3e8e4"
|
|
156
|
+
>
|
|
157
|
+
Clay
|
|
158
|
+
</button>
|
|
130
159
|
</div>
|
|
131
160
|
|
|
132
161
|
<div class="palette-custom">
|
|
@@ -181,23 +210,32 @@
|
|
|
181
210
|
|
|
182
211
|
<label class="variant-row">
|
|
183
212
|
<span class="variant-label">
|
|
184
|
-
|
|
213
|
+
Button shape
|
|
185
214
|
<small
|
|
186
|
-
>
|
|
215
|
+
>From cut corners to fully rounded. Form fields keep their own
|
|
216
|
+
shape.</small
|
|
187
217
|
>
|
|
188
218
|
</span>
|
|
189
|
-
<
|
|
219
|
+
<select data-variant-classes>
|
|
220
|
+
<option value="mw-btn-square">Square</option>
|
|
221
|
+
<option value="" selected>Default</option>
|
|
222
|
+
<option value="mw-btn-pill">Pill</option>
|
|
223
|
+
</select>
|
|
190
224
|
</label>
|
|
191
225
|
|
|
192
226
|
<label class="variant-row">
|
|
193
227
|
<span class="variant-label">
|
|
194
|
-
|
|
228
|
+
Button style
|
|
195
229
|
<small
|
|
196
|
-
>
|
|
197
|
-
|
|
230
|
+
>How a filled button is painted. Outline, ghost and link buttons keep
|
|
231
|
+
their own treatment.</small
|
|
198
232
|
>
|
|
199
233
|
</span>
|
|
200
|
-
<
|
|
234
|
+
<select data-variant-classes>
|
|
235
|
+
<option value="" selected>Default</option>
|
|
236
|
+
<option value="mw-btn-glass">Glass</option>
|
|
237
|
+
<option value="mw-btn-tactile">Tactile</option>
|
|
238
|
+
</select>
|
|
201
239
|
</label>
|
|
202
240
|
|
|
203
241
|
<label class="variant-row">
|
|
@@ -246,6 +284,17 @@
|
|
|
246
284
|
<input type="checkbox" data-variant-class="mw-shadows-flat" />
|
|
247
285
|
</label>
|
|
248
286
|
|
|
287
|
+
<label class="variant-row">
|
|
288
|
+
<span class="variant-label">
|
|
289
|
+
Flush surfaces
|
|
290
|
+
<small
|
|
291
|
+
>Cards, panels and the footer drop their own tone and sit on the page
|
|
292
|
+
colour, separated by their border alone.</small
|
|
293
|
+
>
|
|
294
|
+
</span>
|
|
295
|
+
<input type="checkbox" data-variant-class="mw-surfaces-flush" />
|
|
296
|
+
</label>
|
|
297
|
+
|
|
249
298
|
<label class="variant-row">
|
|
250
299
|
<span class="variant-label">
|
|
251
300
|
Static on hover
|
|
@@ -302,6 +351,21 @@
|
|
|
302
351
|
/>
|
|
303
352
|
</label>
|
|
304
353
|
|
|
354
|
+
<label class="variant-row">
|
|
355
|
+
<span class="variant-label">
|
|
356
|
+
Text size
|
|
357
|
+
<small
|
|
358
|
+
>The base the whole scale is built on - type, padding and control
|
|
359
|
+
heights move together.</small
|
|
360
|
+
>
|
|
361
|
+
</span>
|
|
362
|
+
<select data-variant-prop="--mw-root-font-size">
|
|
363
|
+
<option value="93.75%">Compact</option>
|
|
364
|
+
<option value="" selected>Default</option>
|
|
365
|
+
<option value="106.25%">Large</option>
|
|
366
|
+
</select>
|
|
367
|
+
</label>
|
|
368
|
+
|
|
305
369
|
<label class="variant-row">
|
|
306
370
|
<span class="variant-label">
|
|
307
371
|
Section spacing
|
|
@@ -325,7 +389,13 @@
|
|
|
325
389
|
>
|
|
326
390
|
</span>
|
|
327
391
|
<select data-variant-prop="--mw-container-width">
|
|
328
|
-
<option value=""
|
|
392
|
+
<option value="min(800px, calc(100% - 2 * var(--mw-container-gutter)))">
|
|
393
|
+
800
|
|
394
|
+
</option>
|
|
395
|
+
<option value="min(960px, calc(100% - 2 * var(--mw-container-gutter)))">
|
|
396
|
+
960
|
|
397
|
+
</option>
|
|
398
|
+
<option value="" selected>1200 (default)</option>
|
|
329
399
|
<option
|
|
330
400
|
value="min(1440px, calc(100% - 2 * var(--mw-container-gutter)))"
|
|
331
401
|
>
|
|
@@ -426,7 +426,7 @@
|
|
|
426
426
|
|
|
427
427
|
<h3 class="mw-mb-4 mw-mt-6">Site-wide Variants</h3>
|
|
428
428
|
<p class="mw-text-muted mw-text-measure">
|
|
429
|
-
|
|
429
|
+
Twelve classes on <code><html></code> retune the whole look without
|
|
430
430
|
touching markup. They stack, and the palette button in the corner switches all
|
|
431
431
|
of them live - the box at the bottom of that panel prints the setup a project
|
|
432
432
|
would carry, and reads it back: paste one in to see someone else's.
|
|
@@ -444,6 +444,10 @@
|
|
|
444
444
|
<code>mw-shadows-flat</code> - elevation 1-3 to <code>none</code>, dropdown
|
|
445
445
|
and modal keep theirs
|
|
446
446
|
</li>
|
|
447
|
+
<li>
|
|
448
|
+
<code>mw-surfaces-flush</code> - cards, panels and footer on the page
|
|
449
|
+
colour, held by their border
|
|
450
|
+
</li>
|
|
447
451
|
<li>
|
|
448
452
|
<code>mw-hover-static</code> - no hover travels; colour and border still
|
|
449
453
|
respond
|
|
@@ -461,13 +465,22 @@
|
|
|
461
465
|
<code>mw-btn-pill</code> - fully rounded buttons, form fields keep their
|
|
462
466
|
radius
|
|
463
467
|
</li>
|
|
468
|
+
<li>
|
|
469
|
+
<code>mw-btn-square</code> - the other end of that axis: buttons cut to a
|
|
470
|
+
hard corner while the page keeps its radius
|
|
471
|
+
</li>
|
|
472
|
+
<li>
|
|
473
|
+
<code>mw-btn-tactile</code> - filled buttons stand on a darker edge and sink
|
|
474
|
+
onto it when pressed
|
|
475
|
+
</li>
|
|
464
476
|
<li>
|
|
465
477
|
<code>mw-btn-glass</code> - filled buttons become tinted glass with a lit
|
|
466
478
|
top edge
|
|
467
479
|
</li>
|
|
468
480
|
</ul>
|
|
469
481
|
<p class="mw-text-muted mw-text-measure">
|
|
470
|
-
|
|
471
|
-
radius
|
|
472
|
-
<code>--mw-
|
|
482
|
+
Five properties do the rest: <code>--mw-radius-scale</code> multiplies every
|
|
483
|
+
radius and <code>--mw-root-font-size</code> the whole rem scale, plus
|
|
484
|
+
<code>--mw-font-family-heading</code>, <code>--mw-container-width</code> and
|
|
485
|
+
<code>--mw-section-padding-block</code>.
|
|
473
486
|
</p>
|
package/src/scss/base/_base.scss
CHANGED
|
@@ -54,6 +54,10 @@
|
|
|
54
54
|
// Same list, for a state that should feel instant rather than animated
|
|
55
55
|
--mw-transition-fast: #{transition-list('--mw-duration-fast')};
|
|
56
56
|
|
|
57
|
+
// The whole scale is rem, so this one percentage moves type, spacing and
|
|
58
|
+
// control heights together. Breakpoints are px and stay where they are.
|
|
59
|
+
--mw-root-font-size: 100%;
|
|
60
|
+
|
|
57
61
|
// Custom properties, so an application can tighten its forms without recompiling
|
|
58
62
|
--mw-control-height-sm: #{$control-height-sm};
|
|
59
63
|
--mw-control-height: #{$control-height};
|
|
@@ -42,6 +42,19 @@
|
|
|
42
42
|
--mw-elevation-3: none;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
// Cards, panels and the footer give up their own tone and sit flush on the
|
|
46
|
+
// page, told apart by their line alone. That line then has to carry them:
|
|
47
|
+
// --mw-border is a neighbouring shade of the surface and reads as nothing once
|
|
48
|
+
// the surface *is* the page, so it is redrawn from the ink instead.
|
|
49
|
+
//
|
|
50
|
+
// Theme-bound tokens, so both selectors - see the note above.
|
|
51
|
+
:root.mw-surfaces-flush,
|
|
52
|
+
:root.mw-surfaces-flush .mw-theme-light {
|
|
53
|
+
--mw-card-background: var(--mw-page-background);
|
|
54
|
+
--mw-footer-background: var(--mw-page-background);
|
|
55
|
+
--mw-border: color-mix(in srgb, var(--mw-text-color) 20%, transparent);
|
|
56
|
+
}
|
|
57
|
+
|
|
45
58
|
// The diagonal hatch behind an alternating section, dropped. Written on the
|
|
46
59
|
// section and not as a token on :root: --mw-page-background is a theme alias
|
|
47
60
|
// that only becomes the light one further down the tree, so a copy taken up
|
|
@@ -57,6 +70,35 @@
|
|
|
57
70
|
border-radius: 999px;
|
|
58
71
|
}
|
|
59
72
|
|
|
73
|
+
// The other end of the same axis. Not --mw-radius-scale, which squares off the
|
|
74
|
+
// whole page - a page can want its cards round and its buttons cut.
|
|
75
|
+
:root.mw-btn-square .mw-btn {
|
|
76
|
+
border-radius: 0;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// A raised edge under the fill that the button sinks onto when pressed. The
|
|
80
|
+
// four solid variants only: outline, ghost and link have no fill to darken.
|
|
81
|
+
//
|
|
82
|
+
// Mixed toward black rather than taken from --mw-*-color-hover, which moves
|
|
83
|
+
// toward the light in one theme and away from it in the other - an edge has to
|
|
84
|
+
// be darker than its face in both.
|
|
85
|
+
:root.mw-btn-tactile {
|
|
86
|
+
@each $name in ('primary', 'secondary', 'danger', 'success') {
|
|
87
|
+
.mw-btn-#{$name} {
|
|
88
|
+
box-shadow: 0
|
|
89
|
+
3px
|
|
90
|
+
0
|
|
91
|
+
color-mix(in srgb, var(--mw-#{$name}-color) 72%, #000);
|
|
92
|
+
|
|
93
|
+
// Travels the full height of the edge, where the base button moves 1px
|
|
94
|
+
&:active:not(:disabled) {
|
|
95
|
+
transform: translateY(3px);
|
|
96
|
+
box-shadow: none;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
60
102
|
// Tinted glass: a translucent wash with a vertical ramp and a specular line
|
|
61
103
|
// along the top edge, which is what gives the button its thickness.
|
|
62
104
|
//
|