maverick-wave 4.3.0 → 4.4.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/maverick-wave/SKILL.md +2 -1
- package/.claude/skills/maverick-wave/examples/angular-form.md +4 -0
- package/.claude/skills/maverick-wave/references/forms.md +27 -0
- package/CHANGELOG.md +10 -0
- package/CLAUDE.md +10 -10
- package/README.md +9 -9
- package/maverick-wave.min.css +1 -1
- package/package.json +2 -2
- package/scripts/verify.js +5 -5
- package/src/js/main.js +3 -3
- package/src/partials/accordions-container.html +3 -3
- package/src/partials/blog-posts-container.html +1 -1
- package/src/partials/buttons-container.html +1 -1
- package/src/partials/colors-container.html +4 -4
- package/src/partials/footer-container.html +3 -3
- package/src/partials/form-elements-container.html +98 -0
- package/src/partials/form-field-container.html +20 -4
- package/src/partials/get-started-container.html +19 -19
- package/src/partials/header-utilities-container.html +1 -1
- package/src/partials/modals-container.html +1 -1
- package/src/partials/ratings-container.html +1 -1
- package/src/partials/segmented-container.html +2 -2
- package/src/partials/tables-container.html +4 -4
- package/src/partials/tags-container.html +1 -1
- package/src/partials/timelines-container.html +5 -5
- package/src/partials/utilities-container.html +1 -1
- package/src/scss/abstracts/_variables.scss +7 -2
- package/src/scss/base/_base.scss +1 -1
- package/src/scss/components/_avatars.scss +1 -1
- package/src/scss/components/_kanban.scss +9 -9
- package/src/scss/form-elements/_checkbox.scss +1 -1
- package/src/scss/form-elements/_form.scss +2 -2
- package/src/scss/form-elements/_index.scss +1 -0
- package/src/scss/form-elements/_input-group.scss +1 -1
- package/src/scss/form-elements/_input.scss +3 -3
- package/src/scss/form-elements/_prefilled.scss +65 -0
- package/src/scss/form-elements/_select.scss +2 -2
- package/src/scss/form-elements/_slider.scss +1 -1
- package/src/scss/form-elements/_textarea.scss +2 -2
- package/src/scss/layout/_header.scss +1 -1
- package/src/scss/utilities/_flex.scss +1 -1
package/scripts/verify.js
CHANGED
|
@@ -52,7 +52,7 @@ const css = read(CSS);
|
|
|
52
52
|
const html = read(HTML);
|
|
53
53
|
if (!css || !html) {
|
|
54
54
|
console.error(
|
|
55
|
-
'dist/ is missing or incomplete
|
|
55
|
+
'dist/ is missing or incomplete - run `npm run build` before `npm run verify`.'
|
|
56
56
|
);
|
|
57
57
|
process.exit(1);
|
|
58
58
|
}
|
|
@@ -76,7 +76,7 @@ for (const t of [...tokensUsed].sort()) {
|
|
|
76
76
|
for (const t of [...tokensDefined].sort()) {
|
|
77
77
|
if (!tokensUsed.has(t) && !TOKEN_ALLOWLIST.has(t)) {
|
|
78
78
|
errors.push(
|
|
79
|
-
`token defined but never used: ${t}
|
|
79
|
+
`token defined but never used: ${t} - overriding it would do nothing`
|
|
80
80
|
);
|
|
81
81
|
}
|
|
82
82
|
}
|
|
@@ -86,7 +86,7 @@ for (const t of [...tokensDefined].sort()) {
|
|
|
86
86
|
const classesInCss = new Set(all(css, /\.(mw-[a-z0-9-]+)/g));
|
|
87
87
|
|
|
88
88
|
// Classes the JS adds at runtime, or queries as a hook, count as legitimate
|
|
89
|
-
// targets
|
|
89
|
+
// targets - including selector strings like '.mw-foo' and '[class~="mw-foo"]'
|
|
90
90
|
const classesInJs = new Set(all(js, /\.?(mw-[a-z0-9-]+)/g));
|
|
91
91
|
|
|
92
92
|
const classesInMarkup = new Map(); // class -> where it was seen
|
|
@@ -99,7 +99,7 @@ for (const attr of html.matchAll(/class\s*=\s*"([^"]*)"/g)) {
|
|
|
99
99
|
}
|
|
100
100
|
// The docs name classes as `mw-foo` in prose and code fences. A trailing hyphen
|
|
101
101
|
// means a family was written as a stem (`mw-btn-mini-` + variants), never a real
|
|
102
|
-
// class
|
|
102
|
+
// class - skip those instead of reporting them as missing.
|
|
103
103
|
for (const c of all(docs, /[`."'\s](mw-[a-z0-9-]+)/g)) {
|
|
104
104
|
if (c.endsWith('-')) continue;
|
|
105
105
|
if (!classesInMarkup.has(c)) classesInMarkup.set(c, 'docs');
|
|
@@ -130,7 +130,7 @@ for (const w of warnings) console.log(` warn ${w}`);
|
|
|
130
130
|
for (const e of errors) console.error(` ERROR ${e}`);
|
|
131
131
|
|
|
132
132
|
console.log(
|
|
133
|
-
`\nverify: ${tokensDefined.size} tokens, ${classesInCss.size} classes checked
|
|
133
|
+
`\nverify: ${tokensDefined.size} tokens, ${classesInCss.size} classes checked - ` +
|
|
134
134
|
(errors.length ? `${label(errors.length, 'error')}` : 'clean')
|
|
135
135
|
);
|
|
136
136
|
|
package/src/js/main.js
CHANGED
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
function initGalleries() {
|
|
141
141
|
document.querySelectorAll('.mw-gallery').forEach((gallery) => {
|
|
142
142
|
// Dots and caption sit next to .mw-gallery, not inside it, so the
|
|
143
|
-
// container is the scope
|
|
143
|
+
// container is the scope - with the parent as a fallback, otherwise a
|
|
144
144
|
// markup without the wrapper would silently stay dead
|
|
145
145
|
const scope =
|
|
146
146
|
gallery.closest('.mw-gallery-container') || gallery.parentElement;
|
|
@@ -154,7 +154,7 @@
|
|
|
154
154
|
|
|
155
155
|
const slides = track.children;
|
|
156
156
|
|
|
157
|
-
// Everything below the track is optional
|
|
157
|
+
// Everything below the track is optional - a gallery may well ship
|
|
158
158
|
// without arrows, dots or a caption, and a missing one must not throw
|
|
159
159
|
const dotsBox = container.querySelector('.mw-gallery-dots');
|
|
160
160
|
const descBox = container.querySelector('.mw-gallery-desc');
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
const total = slides.length;
|
|
168
168
|
current = (index + total) % total;
|
|
169
169
|
|
|
170
|
-
// Percentages refer to the track's own width, which is one slide
|
|
170
|
+
// Percentages refer to the track's own width, which is one slide -
|
|
171
171
|
// so no measuring and nothing to recalculate on resize
|
|
172
172
|
track.style.transform = `translateX(-${current * 100}%)`;
|
|
173
173
|
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
</p>
|
|
41
41
|
<pre class="mw-code-block"><code>/* Your custom-styles.css */
|
|
42
42
|
:root {
|
|
43
|
-
/* Root colors
|
|
43
|
+
/* Root colors - hover tones, translucent backgrounds and borders
|
|
44
44
|
are derived from them at runtime via color-mix() */
|
|
45
45
|
--mw-primary-color: #e94560;
|
|
46
46
|
--mw-secondary-color: #f39c12;
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
<p>
|
|
61
61
|
If you integrate MaverickWave's SCSS source files into your project,
|
|
62
62
|
pass your overrides through <code>@use ... with (...)</code>. A plain
|
|
63
|
-
assignment before the <code>@use</code> has no effect
|
|
63
|
+
assignment before the <code>@use</code> has no effect - the root
|
|
64
64
|
colors are declared with <code>!default</code>, which only the
|
|
65
65
|
configuration reaches.
|
|
66
66
|
</p>
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
<p>
|
|
74
74
|
This method requires you to have a Sass compiler set up in your
|
|
75
75
|
project. Single components can be imported instead of
|
|
76
|
-
<code>main</code>
|
|
76
|
+
<code>main</code> - see the "Get Started" section.
|
|
77
77
|
</p>
|
|
78
78
|
<p class="mw-mt-4">
|
|
79
79
|
<button
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
<blockquote>
|
|
56
56
|
"AI hasn't replaced developers; it has elevated them. We now spend more
|
|
57
57
|
time on architecture and problem-solving rather than writing boilerplate
|
|
58
|
-
code."
|
|
58
|
+
code." - Elena Vega, Lead Developer at TechFront
|
|
59
59
|
</blockquote>
|
|
60
60
|
|
|
61
61
|
<h3>Serverless Architecture: Beyond the Basics</h3>
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
<button type="button" class="mw-btn-plain mw-text-bold">14:30</button>
|
|
144
144
|
on
|
|
145
145
|
<button type="button" class="mw-btn-plain mw-text-bold">19.09.2026</button>
|
|
146
|
-
|
|
146
|
+
- both are real buttons, reachable by tab.
|
|
147
147
|
</p>
|
|
148
148
|
<div class="mw-d-flex mw-gap-4 mw-flex-wrap">
|
|
149
149
|
<button type="button" class="mw-btn mw-btn-link">mw-btn-link</button>
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
<!-- the hex code string is getting updated via javascript! -->
|
|
4
4
|
|
|
5
5
|
<p class="mw-text-muted mw-mb-6">
|
|
6
|
-
These twelve are the only colors you ever set. Everything else
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
These twelve are the only colors you ever set. Everything else - hover tones,
|
|
7
|
+
translucent backgrounds, borders, muted text - is derived from them at runtime
|
|
8
|
+
with <code>color-mix()</code>, so overriding a root token cascades to all of
|
|
9
|
+
its variants.
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
12
|
<div class="mw-grid-auto-sm">
|
|
@@ -91,9 +91,9 @@
|
|
|
91
91
|
MaverickWave is a lightweight, modern CSS framework for building responsive
|
|
92
92
|
websites with elegance and speed. It embodies the spirit of innovation and
|
|
93
93
|
fluidity, just like a maverick wave that charts its own course across the
|
|
94
|
-
ocean. The framework was named to reflect its bold approach to web
|
|
95
|
-
|
|
96
|
-
|
|
94
|
+
ocean. The framework was named to reflect its bold approach to web design -
|
|
95
|
+
breaking free from conventional constraints while maintaining a natural flow
|
|
96
|
+
that adapts seamlessly to any environment. Like the powerful yet graceful
|
|
97
97
|
movement of waves, MaverickWave combines strength and flexibility, empowering
|
|
98
98
|
developers to create distinctive digital experiences that stand out in the
|
|
99
99
|
vast sea of the web.
|
|
@@ -433,6 +433,104 @@
|
|
|
433
433
|
</div>
|
|
434
434
|
</div>
|
|
435
435
|
|
|
436
|
+
<div class="mw-card mw-card-simple">
|
|
437
|
+
<h3 class="mw-card-title">Prefilled Values</h3>
|
|
438
|
+
<p class="mw-text-muted mw-text-sm mw-mt-3">
|
|
439
|
+
Add <code>mw-prefilled</code> to any control whose value was not typed in
|
|
440
|
+
this session - loaded from an existing record, restored from a draft,
|
|
441
|
+
filled with a default. The corner triangle scales with the control size
|
|
442
|
+
and stays visible on readonly and disabled controls. It is decoration
|
|
443
|
+
only, so repeat the information in a <code>mw-field-hint</code> for screen
|
|
444
|
+
readers.
|
|
445
|
+
</p>
|
|
446
|
+
<div class="mw-grid-4 mw-mt-4">
|
|
447
|
+
<!-- Small -->
|
|
448
|
+
<label for="prefilled-input-sm">
|
|
449
|
+
<span>Small</span>
|
|
450
|
+
<input
|
|
451
|
+
id="prefilled-input-sm"
|
|
452
|
+
type="text"
|
|
453
|
+
class="mw-input mw-input-sm mw-prefilled"
|
|
454
|
+
value="Max Mustermann"
|
|
455
|
+
/>
|
|
456
|
+
</label>
|
|
457
|
+
<!-- Default -->
|
|
458
|
+
<label for="prefilled-input">
|
|
459
|
+
<span>Default</span>
|
|
460
|
+
<input
|
|
461
|
+
id="prefilled-input"
|
|
462
|
+
type="text"
|
|
463
|
+
class="mw-input mw-prefilled"
|
|
464
|
+
value="Max Mustermann"
|
|
465
|
+
/>
|
|
466
|
+
</label>
|
|
467
|
+
<!-- Large -->
|
|
468
|
+
<label for="prefilled-input-lg">
|
|
469
|
+
<span>Large</span>
|
|
470
|
+
<input
|
|
471
|
+
id="prefilled-input-lg"
|
|
472
|
+
type="text"
|
|
473
|
+
class="mw-input mw-input-lg mw-prefilled"
|
|
474
|
+
value="Max Mustermann"
|
|
475
|
+
/>
|
|
476
|
+
</label>
|
|
477
|
+
<!-- Readonly -->
|
|
478
|
+
<label for="prefilled-input-readonly">
|
|
479
|
+
<span>Readonly</span>
|
|
480
|
+
<input
|
|
481
|
+
id="prefilled-input-readonly"
|
|
482
|
+
type="text"
|
|
483
|
+
class="mw-input mw-prefilled"
|
|
484
|
+
readonly
|
|
485
|
+
value="USR-00042"
|
|
486
|
+
/>
|
|
487
|
+
</label>
|
|
488
|
+
</div>
|
|
489
|
+
<div class="mw-grid-4 mw-mt-4">
|
|
490
|
+
<!-- Select small -->
|
|
491
|
+
<label for="prefilled-select-sm">
|
|
492
|
+
<span>Select small</span>
|
|
493
|
+
<select
|
|
494
|
+
id="prefilled-select-sm"
|
|
495
|
+
class="mw-select mw-select-sm mw-prefilled"
|
|
496
|
+
>
|
|
497
|
+
<option selected>Germany</option>
|
|
498
|
+
<option>Austria</option>
|
|
499
|
+
</select>
|
|
500
|
+
</label>
|
|
501
|
+
<!-- Select default -->
|
|
502
|
+
<label for="prefilled-select">
|
|
503
|
+
<span>Select default</span>
|
|
504
|
+
<select id="prefilled-select" class="mw-select mw-prefilled">
|
|
505
|
+
<option selected>Germany</option>
|
|
506
|
+
<option>Austria</option>
|
|
507
|
+
</select>
|
|
508
|
+
</label>
|
|
509
|
+
<!-- Select large -->
|
|
510
|
+
<label for="prefilled-select-lg">
|
|
511
|
+
<span>Select large</span>
|
|
512
|
+
<select
|
|
513
|
+
id="prefilled-select-lg"
|
|
514
|
+
class="mw-select mw-select-lg mw-prefilled"
|
|
515
|
+
>
|
|
516
|
+
<option selected>Germany</option>
|
|
517
|
+
<option>Austria</option>
|
|
518
|
+
</select>
|
|
519
|
+
</label>
|
|
520
|
+
<!-- Textarea -->
|
|
521
|
+
<label for="prefilled-textarea">
|
|
522
|
+
<span>Textarea</span>
|
|
523
|
+
<textarea
|
|
524
|
+
id="prefilled-textarea"
|
|
525
|
+
class="mw-textarea mw-prefilled"
|
|
526
|
+
rows="3"
|
|
527
|
+
>
|
|
528
|
+
Imported from the previous application.</textarea
|
|
529
|
+
>
|
|
530
|
+
</label>
|
|
531
|
+
</div>
|
|
532
|
+
</div>
|
|
533
|
+
|
|
436
534
|
<div class="mw-card mw-card-simple">
|
|
437
535
|
<h3 class="mw-card-title">Toggle Switch</h3>
|
|
438
536
|
<div class="mw-grid-4-lg mw-mt-4">
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<div class="mw-card mw-card-simple">
|
|
8
8
|
<p class="mw-text-muted mw-text-sm mw-mb-4">
|
|
9
9
|
The <code>mw-field</code> wrapper groups label, input, hint, and error
|
|
10
|
-
message as a single unit
|
|
10
|
+
message as a single unit - the recommended pattern for Angular reactive
|
|
11
11
|
forms.
|
|
12
12
|
</p>
|
|
13
13
|
|
|
@@ -80,9 +80,9 @@
|
|
|
80
80
|
The error look is not automatic: bind
|
|
81
81
|
<code>mw-field-has-error</code> to the control state (in Angular
|
|
82
82
|
<code>[class.mw-field-has-error]="c.invalid && c.touched"</code
|
|
83
|
-
>). A control without a field wrapper
|
|
83
|
+
>). A control without a field wrapper - also a
|
|
84
84
|
<code>mw-checkbox-group</code>, <code>mw-radio-group</code> or
|
|
85
|
-
<code>mw-slider-container</code>
|
|
85
|
+
<code>mw-slider-container</code> - takes
|
|
86
86
|
<code>mw-form-element-error</code> instead.
|
|
87
87
|
</p>
|
|
88
88
|
|
|
@@ -133,13 +133,29 @@
|
|
|
133
133
|
</div>
|
|
134
134
|
|
|
135
135
|
<!-- Disabled -->
|
|
136
|
-
<div class="mw-field">
|
|
136
|
+
<div class="mw-field mw-mb-4">
|
|
137
137
|
<label class="mw-field-label" for="ff-plan">Plan (disabled)</label>
|
|
138
138
|
<select id="ff-plan" class="mw-select" disabled>
|
|
139
139
|
<option>Enterprise</option>
|
|
140
140
|
</select>
|
|
141
141
|
<span class="mw-field-hint">Contact support to change your plan.</span>
|
|
142
142
|
</div>
|
|
143
|
+
|
|
144
|
+
<!-- Prefilled -->
|
|
145
|
+
<div class="mw-field">
|
|
146
|
+
<label class="mw-field-label" for="ff-company">Company</label>
|
|
147
|
+
<input
|
|
148
|
+
id="ff-company"
|
|
149
|
+
type="text"
|
|
150
|
+
class="mw-input mw-prefilled"
|
|
151
|
+
value="ACME GmbH"
|
|
152
|
+
aria-describedby="ff-company-hint"
|
|
153
|
+
/>
|
|
154
|
+
<span class="mw-field-hint" id="ff-company-hint"
|
|
155
|
+
>Prefilled from your account - marked with
|
|
156
|
+
<code>mw-prefilled</code>.</span
|
|
157
|
+
>
|
|
158
|
+
</div>
|
|
143
159
|
</div>
|
|
144
160
|
</div>
|
|
145
161
|
</div>
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
<p>
|
|
99
99
|
MaverickWave uses <code>@use</code> / <code>@forward</code> (modern
|
|
100
100
|
Sass module syntax). Pass your overrides through
|
|
101
|
-
<code>@use ... with (...)</code>
|
|
101
|
+
<code>@use ... with (...)</code> - a plain assignment before the
|
|
102
102
|
<code>@use</code> has no effect, because the root colors are declared
|
|
103
103
|
with <code>!default</code>.
|
|
104
104
|
</p>
|
|
@@ -107,11 +107,11 @@
|
|
|
107
107
|
<p>Set <code>$mw-theme-mode</code> to control theme behavior:</p>
|
|
108
108
|
<ul>
|
|
109
109
|
<li>
|
|
110
|
-
<code>'switchable'</code> (default)
|
|
110
|
+
<code>'switchable'</code> (default) - dark base, toggleable to light
|
|
111
111
|
via <code>.mw-theme-light</code> on <code><body></code>
|
|
112
112
|
</li>
|
|
113
|
-
<li><code>'dark'</code>
|
|
114
|
-
<li><code>'light'</code>
|
|
113
|
+
<li><code>'dark'</code> - compile dark theme only</li>
|
|
114
|
+
<li><code>'light'</code> - compile light theme only</li>
|
|
115
115
|
</ul>
|
|
116
116
|
<p class="mw-text-warning">
|
|
117
117
|
<i class="fas fa-exclamation-triangle mw-mr-1"></i>
|
|
@@ -119,14 +119,14 @@
|
|
|
119
119
|
dark appearance regardless of theme mode.
|
|
120
120
|
</p>
|
|
121
121
|
|
|
122
|
-
<h5 class="mw-mt-4">Example
|
|
122
|
+
<h5 class="mw-mt-4">Example - your main SCSS file</h5>
|
|
123
123
|
<pre class="mw-code-block"><code>// styles.scss
|
|
124
124
|
|
|
125
125
|
@use 'path/to/maverick-wave/src/scss/main' with (
|
|
126
126
|
// Theme mode (optional, default is 'switchable')
|
|
127
127
|
$mw-theme-mode: 'switchable',
|
|
128
128
|
|
|
129
|
-
// Root colors
|
|
129
|
+
// Root colors - everything else is derived from them at runtime
|
|
130
130
|
$primary-color: #e94560,
|
|
131
131
|
$secondary-color: #f39c12,
|
|
132
132
|
$dark-background: #1f1f2e,
|
|
@@ -152,12 +152,12 @@ body {
|
|
|
152
152
|
</p>
|
|
153
153
|
<pre
|
|
154
154
|
class="mw-code-block"
|
|
155
|
-
><code>// styles.scss
|
|
155
|
+
><code>// styles.scss - the configuration has to come first
|
|
156
156
|
@use 'maverick-wave/src/scss/abstracts/variables' with (
|
|
157
157
|
$primary-color: #0f766e
|
|
158
158
|
);
|
|
159
159
|
|
|
160
|
-
@use 'maverick-wave/src/scss/base'; // required
|
|
160
|
+
@use 'maverick-wave/src/scss/base'; // required - carries the :root tokens
|
|
161
161
|
@use 'maverick-wave/src/scss/layout/grid';
|
|
162
162
|
@use 'maverick-wave/src/scss/layout/page-header';
|
|
163
163
|
@use 'maverick-wave/src/scss/components/buttons';
|
|
@@ -169,7 +169,7 @@ body {
|
|
|
169
169
|
@use 'maverick-wave/src/scss/utilities';</code></pre>
|
|
170
170
|
<p class="mw-text-warning">
|
|
171
171
|
<i class="fas fa-exclamation-triangle mw-mr-1"></i>
|
|
172
|
-
Without <code>base</code> every component renders without colors
|
|
172
|
+
Without <code>base</code> every component renders without colors - it
|
|
173
173
|
carries the <code>:root</code> custom properties. A subset like the
|
|
174
174
|
one above compiles to roughly 98 kB raw / 15 kB gzipped, against 147
|
|
175
175
|
kB / 22.5 kB for the full build.
|
|
@@ -195,9 +195,9 @@ body {
|
|
|
195
195
|
<i class="fas fa-exclamation-triangle mw-mr-1"></i>
|
|
196
196
|
<strong>No <code>"scripts"</code> entry for the JS file.</strong>
|
|
197
197
|
<code>maverick-wave.min.js</code> wires everything up once on
|
|
198
|
-
<code>DOMContentLoaded</code> and writes straight into the DOM
|
|
199
|
-
|
|
200
|
-
|
|
198
|
+
<code>DOMContentLoaded</code> and writes straight into the DOM - in a
|
|
199
|
+
SPA everything rendered afterwards stays uninitialized, and the class
|
|
200
|
+
toggles happen behind change detection. Rebuild the behaviors in
|
|
201
201
|
components; the state classes (<code>active</code>, <code>open</code>,
|
|
202
202
|
<code>mw-modal-open</code>, <code>mw-selected</code>) are the whole
|
|
203
203
|
contract.
|
|
@@ -235,8 +235,8 @@ constructor() {
|
|
|
235
235
|
<h5 class="mw-mt-4">Reactive Forms</h5>
|
|
236
236
|
<p>
|
|
237
237
|
The <code>mw-field</code> wrapper groups label, control, hint and
|
|
238
|
-
error. Bind the error state yourself
|
|
239
|
-
|
|
238
|
+
error. Bind the error state yourself - the framework does not style
|
|
239
|
+
Angular's <code>ng-invalid</code> / <code>ng-touched</code>
|
|
240
240
|
classes:
|
|
241
241
|
</p>
|
|
242
242
|
<pre
|
|
@@ -263,10 +263,10 @@ constructor() {
|
|
|
263
263
|
import './assets/maverick-wave.min.css';</code></pre>
|
|
264
264
|
<p class="mw-text-warning">
|
|
265
265
|
<i class="fas fa-exclamation-triangle mw-mr-1"></i>
|
|
266
|
-
Do not import <code>maverick-wave.min.js</code> in a SPA
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
266
|
+
Do not import <code>maverick-wave.min.js</code> in a SPA - it binds
|
|
267
|
+
once on <code>DOMContentLoaded</code> and never sees anything rendered
|
|
268
|
+
later. Accordion, tabs, modal and theme toggle are class toggles; bind
|
|
269
|
+
them with <code>className</code> from state.
|
|
270
270
|
</p>
|
|
271
271
|
<p>Example usage in a React component:</p>
|
|
272
272
|
<pre class="mw-code-block"><code>function App() {
|
|
@@ -321,7 +321,7 @@ import './assets/maverick-wave.min.css';</code></pre>
|
|
|
321
321
|
</p>
|
|
322
322
|
<pre
|
|
323
323
|
class="mw-code-block"
|
|
324
|
-
><code>/* your-custom-styles.css
|
|
324
|
+
><code>/* your-custom-styles.css - load AFTER maverick-wave.min.css */
|
|
325
325
|
:root {
|
|
326
326
|
--mw-font-family-base: 'Your Custom Font', system-ui, sans-serif;
|
|
327
327
|
--mw-font-family-heading: 'Your Custom Font', system-ui, sans-serif;
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
Shows who is signed in: an avatar with initials plus the name. Below
|
|
86
86
|
<code>md</code> the name steps aside and only the round avatar remains, so
|
|
87
87
|
it keeps the same height as the login and burger buttons. Works outside a
|
|
88
|
-
header too
|
|
88
|
+
header too - in a panel header or a toolbar.
|
|
89
89
|
</p>
|
|
90
90
|
<!-- Fake header -->
|
|
91
91
|
<div class="mw-mb-4" style="position: relative; overflow: hidden">
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<h3 class="mw-section-subtitle">Ratings</h3>
|
|
2
2
|
<p class="mw-text-muted">
|
|
3
|
-
Change the <code>data-rating</code> attribute (0
|
|
3
|
+
Change the <code>data-rating</code> attribute (0-5) to see how many thumbs-up
|
|
4
4
|
light up. You can also determine the icon flexibly.
|
|
5
5
|
</p>
|
|
6
6
|
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
</div>
|
|
45
45
|
|
|
46
46
|
<label class="mw-field-label mw-d-block mw-mb-2">
|
|
47
|
-
Secondary tone
|
|
47
|
+
Secondary tone - <code>mw-segmented-secondary</code>
|
|
48
48
|
</label>
|
|
49
49
|
<div class="mw-segmented mw-segmented-secondary mw-mb-6">
|
|
50
50
|
<button type="button" class="mw-segmented-item mw-active">List</button>
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
</div>
|
|
53
53
|
|
|
54
54
|
<label class="mw-field-label mw-d-block mw-mb-2">
|
|
55
|
-
Inline
|
|
55
|
+
Inline - <code>mw-segmented-auto</code>
|
|
56
56
|
</label>
|
|
57
57
|
<div class="mw-segmented mw-segmented-auto">
|
|
58
58
|
<button type="button" class="mw-segmented-item mw-active">All</button>
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
</table>
|
|
45
45
|
<p class="mw-text-muted mw-mt-3">
|
|
46
46
|
The <strong>Budget</strong> column uses
|
|
47
|
-
<strong>mw-text-currency</strong>
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
<strong>mw-text-currency</strong> - right-aligned with tabular, lining
|
|
48
|
+
digits and no wrapping mid-number. The alignment comes from the right
|
|
49
|
+
edge, so it works the same for <code>1,204.50</code> and
|
|
50
50
|
<code>1.204,50</code>; only the number of decimal places has to be
|
|
51
51
|
consistent per column. If you only want the fixed-width digits without the
|
|
52
52
|
alignment, use <strong>mw-text-numeric</strong>. For the input side there
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
<code>mw-table-responsive-scroll</code> provides. Scroll inside the table
|
|
103
103
|
to see it. Its height comes from
|
|
104
104
|
<code>--mw-table-scroll-height</code> (400px, 260px below <code>sm</code>)
|
|
105
|
-
|
|
105
|
+
- override it per table with
|
|
106
106
|
<code>style="--mw-table-scroll-height: 250px"</code>.
|
|
107
107
|
</p>
|
|
108
108
|
|
|
@@ -196,7 +196,7 @@
|
|
|
196
196
|
<h3 class="mw-card-title mw-mb-4">Single Tag</h3>
|
|
197
197
|
<div class="mw-card mw-card-simple">
|
|
198
198
|
<p class="mw-text-muted mw-mb-4">
|
|
199
|
-
For a single status chip
|
|
199
|
+
For a single status chip - e.g. in a table cell - use
|
|
200
200
|
<strong>mw-tag</strong>. It carries the colour itself, so no
|
|
201
201
|
<strong>mw-tags</strong> container is needed.
|
|
202
202
|
</p>
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<div class="mw-timeline-big mw-my-6">
|
|
8
8
|
<div class="mw-timeline-big-step mw-active">
|
|
9
9
|
<div class="mw-timeline-big-date-container">
|
|
10
|
-
<div class="mw-timeline-big-date-main">01/2023
|
|
10
|
+
<div class="mw-timeline-big-date-main">01/2023 - Present</div>
|
|
11
11
|
</div>
|
|
12
12
|
<div class="mw-timeline-big-content">
|
|
13
13
|
<div class="mw-card">
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
<div class="mw-timeline-big-event">
|
|
30
30
|
<span class="mw-timeline-big-event-date">05/2023</span>
|
|
31
31
|
<span class="mw-timeline-big-event-title">
|
|
32
|
-
AWS Certified Solutions Architect
|
|
32
|
+
AWS Certified Solutions Architect - Professional
|
|
33
33
|
</span>
|
|
34
34
|
</div>
|
|
35
35
|
</div>
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
|
|
38
38
|
<div class="mw-timeline-big-step">
|
|
39
39
|
<div class="mw-timeline-big-date-container">
|
|
40
|
-
<div class="mw-timeline-big-date-main">08/2021
|
|
40
|
+
<div class="mw-timeline-big-date-main">08/2021 - 12/2022</div>
|
|
41
41
|
<div class="mw-timeline-big-date-sub">(1 year 4 months)</div>
|
|
42
42
|
</div>
|
|
43
43
|
<div class="mw-timeline-big-content">
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
|
|
75
75
|
<div class="mw-timeline-big-step">
|
|
76
76
|
<div class="mw-timeline-big-date-container">
|
|
77
|
-
<div class="mw-timeline-big-date-main">06/2020
|
|
77
|
+
<div class="mw-timeline-big-date-main">06/2020 - 07/2021</div>
|
|
78
78
|
<div class="mw-timeline-big-date-sub">(1 year 1 month)</div>
|
|
79
79
|
</div>
|
|
80
80
|
<div class="mw-timeline-big-content">
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
|
|
106
106
|
<div class="mw-timeline-big-step">
|
|
107
107
|
<div class="mw-timeline-big-date-container">
|
|
108
|
-
<div class="mw-timeline-big-date-main">02/2018
|
|
108
|
+
<div class="mw-timeline-big-date-main">02/2018 - 05/2020</div>
|
|
109
109
|
<div class="mw-timeline-big-date-sub">(2 year 3 months)</div>
|
|
110
110
|
</div>
|
|
111
111
|
<div class="mw-timeline-big-content">
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
<h4 class="mw-mt-6 mw-mb-2">Auto Margins</h4>
|
|
16
16
|
<p class="mw-text-muted mw-text-sm mw-mb-3">
|
|
17
|
-
Every margin utility also takes <code>auto</code>
|
|
17
|
+
Every margin utility also takes <code>auto</code> -
|
|
18
18
|
<code>mw-mx-auto</code> centers a block, <code>mw-ml-auto</code> pushes a
|
|
19
19
|
flex item to the far side.
|
|
20
20
|
</p>
|
|
@@ -37,7 +37,7 @@ $accent-text-color: #efefef !default;
|
|
|
37
37
|
//
|
|
38
38
|
// shade()/tint() mix `in hsl`, which behaves like color.adjust($lightness: ...)
|
|
39
39
|
// and scales proportionally, so a derivation looks the same on every palette.
|
|
40
|
-
// Mixing with black/white also lowers the saturation a little
|
|
40
|
+
// Mixing with black/white also lowers the saturation a little - that is why
|
|
41
41
|
// hover tones read slightly softer than the base color. Alpha blending uses
|
|
42
42
|
// `srgb` against `transparent`.
|
|
43
43
|
// ---------------------------------------------------------------------------
|
|
@@ -86,7 +86,7 @@ $base-colors: (
|
|
|
86
86
|
'secondary-info-background': fade('secondary-color-hover', 70%),
|
|
87
87
|
// Translucent accent line used for dividers, rules and outlines
|
|
88
88
|
'border-accent': fade('primary-color', 70%),
|
|
89
|
-
// Text on any solid colored surface
|
|
89
|
+
// Text on any solid colored surface - buttons of every variant, table and
|
|
90
90
|
// panel headers, badges, tooltips, mini close buttons, stepper dots.
|
|
91
91
|
// Deliberately derived from neither a brand color nor a theme text color:
|
|
92
92
|
// it has to stay readable on a dark surface no matter how the palette or the
|
|
@@ -276,3 +276,8 @@ $z-index: (
|
|
|
276
276
|
'tooltip': 700,
|
|
277
277
|
'alert': 900,
|
|
278
278
|
);
|
|
279
|
+
|
|
280
|
+
// Native select arrow, drawn as a background layer because `appearance: none`
|
|
281
|
+
// removes the OS one. Shared, because any control that adds a second
|
|
282
|
+
// background layer (see `.mw-prefilled`) has to restate the whole list.
|
|
283
|
+
$select-arrow-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath fill='%23666' d='M0 0l5 6 5-6z'/%3E%3C/svg%3E");
|
package/src/scss/base/_base.scss
CHANGED
|
@@ -58,7 +58,7 @@ $_active-prefix: 'dark';
|
|
|
58
58
|
--mw-container-width-sm: calc(100% - #{spacing('5')} * 2);
|
|
59
59
|
--mw-section-padding-block: #{spacing('7')};
|
|
60
60
|
|
|
61
|
-
// Active theme
|
|
61
|
+
// Active theme - aliases onto the dark or light set above
|
|
62
62
|
@each $name, $value in $_active-theme {
|
|
63
63
|
--mw-#{$name}: var(--mw-#{$_active-prefix}-#{$name});
|
|
64
64
|
}
|
|
@@ -68,7 +68,7 @@ $_mw-avatar-colors: (
|
|
|
68
68
|
border-radius: radius('sm');
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
// Initials
|
|
71
|
+
// Initials - for users without a picture. Centers its text content and puts
|
|
72
72
|
// the color on the background, so it stays combinable with the color
|
|
73
73
|
// variants below, which keep working on the border.
|
|
74
74
|
&-initials {
|