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
|
@@ -72,25 +72,29 @@
|
|
|
72
72
|
</div>
|
|
73
73
|
</div>
|
|
74
74
|
|
|
75
|
-
<!-- RIGHT:
|
|
75
|
+
<!-- RIGHT: error, single-control error, readonly, disabled -->
|
|
76
76
|
<div>
|
|
77
77
|
<h3 class="mw-card-title mw-mb-4">Validation & Readonly States</h3>
|
|
78
78
|
<div class="mw-card mw-card-simple">
|
|
79
79
|
<p class="mw-text-muted mw-text-sm mw-mb-4">
|
|
80
|
-
|
|
81
|
-
<code
|
|
82
|
-
|
|
80
|
+
The error look is not automatic: bind
|
|
81
|
+
<code>mw-field-has-error</code> to the control state (in Angular
|
|
82
|
+
<code>[class.mw-field-has-error]="c.invalid && c.touched"</code
|
|
83
|
+
>). A control without a field wrapper — also a
|
|
84
|
+
<code>mw-checkbox-group</code>, <code>mw-radio-group</code> or
|
|
85
|
+
<code>mw-slider-container</code> — takes
|
|
86
|
+
<code>mw-form-element-error</code> instead.
|
|
83
87
|
</p>
|
|
84
88
|
|
|
85
|
-
<!--
|
|
86
|
-
<div class="mw-field mw-mb-4">
|
|
89
|
+
<!-- Field wrapper in error state -->
|
|
90
|
+
<div class="mw-field mw-field-has-error mw-mb-4">
|
|
87
91
|
<label class="mw-field-label mw-required" for="ff-username"
|
|
88
92
|
>Username (invalid & touched)</label
|
|
89
93
|
>
|
|
90
94
|
<input
|
|
91
95
|
id="ff-username"
|
|
92
96
|
type="text"
|
|
93
|
-
class="mw-input
|
|
97
|
+
class="mw-input"
|
|
94
98
|
value=""
|
|
95
99
|
placeholder="Required"
|
|
96
100
|
/>
|
|
@@ -99,18 +103,18 @@
|
|
|
99
103
|
</span>
|
|
100
104
|
</div>
|
|
101
105
|
|
|
102
|
-
<!--
|
|
106
|
+
<!-- Single control without a wrapper -->
|
|
103
107
|
<div class="mw-field mw-mb-4">
|
|
104
108
|
<label class="mw-field-label mw-required" for="ff-password"
|
|
105
|
-
>Password (
|
|
109
|
+
>Password (single control error)</label
|
|
106
110
|
>
|
|
107
111
|
<input
|
|
108
112
|
id="ff-password"
|
|
109
113
|
type="password"
|
|
110
|
-
class="mw-input
|
|
111
|
-
value="
|
|
114
|
+
class="mw-input mw-form-element-error"
|
|
115
|
+
value="123"
|
|
112
116
|
/>
|
|
113
|
-
<span class="mw-field-hint">
|
|
117
|
+
<span class="mw-field-hint">At least 8 characters.</span>
|
|
114
118
|
</div>
|
|
115
119
|
|
|
116
120
|
<!-- Readonly -->
|
|
@@ -97,8 +97,10 @@
|
|
|
97
97
|
</p>
|
|
98
98
|
<p>
|
|
99
99
|
MaverickWave uses <code>@use</code> / <code>@forward</code> (modern
|
|
100
|
-
Sass module syntax).
|
|
101
|
-
the
|
|
100
|
+
Sass module syntax). Pass your overrides through
|
|
101
|
+
<code>@use ... with (...)</code> — a plain assignment before the
|
|
102
|
+
<code>@use</code> has no effect, because the root colors are declared
|
|
103
|
+
with <code>!default</code>.
|
|
102
104
|
</p>
|
|
103
105
|
|
|
104
106
|
<h5 class="mw-mt-4">Theme Mode</h5>
|
|
@@ -120,26 +122,58 @@
|
|
|
120
122
|
<h5 class="mw-mt-4">Example — your main SCSS file</h5>
|
|
121
123
|
<pre class="mw-code-block"><code>// styles.scss
|
|
122
124
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
+
@use 'path/to/maverick-wave/src/scss/main' with (
|
|
126
|
+
// Theme mode (optional, default is 'switchable')
|
|
127
|
+
$mw-theme-mode: 'switchable',
|
|
125
128
|
|
|
126
|
-
//
|
|
127
|
-
$primary-color: #e94560
|
|
128
|
-
$secondary-color: #f39c12
|
|
129
|
+
// Root colors — everything else is derived from them at runtime
|
|
130
|
+
$primary-color: #e94560,
|
|
131
|
+
$secondary-color: #f39c12,
|
|
132
|
+
$dark-background: #1f1f2e,
|
|
133
|
+
$light-background: #f8f9fa,
|
|
134
|
+
$dark-text-color: #ffffff,
|
|
135
|
+
$light-text-color: #1c1c1c
|
|
136
|
+
);
|
|
129
137
|
|
|
130
|
-
//
|
|
131
|
-
$dark-background: #1f1f2e;
|
|
132
|
-
$light-background: #f8f9fa;
|
|
133
|
-
$dark-text-color: #ffffff;
|
|
134
|
-
$light-text-color: #1c1c1c;
|
|
135
|
-
|
|
136
|
-
// 4. Import the framework (adjust path as needed)
|
|
137
|
-
@use 'path/to/maverick-wave/src/scss/main';
|
|
138
|
-
|
|
139
|
-
// 5. Your additional styles
|
|
138
|
+
// Your additional styles
|
|
140
139
|
body {
|
|
141
140
|
// custom overrides
|
|
142
141
|
}</code></pre>
|
|
142
|
+
|
|
143
|
+
<h5 class="mw-mt-4">Importing Only What You Need</h5>
|
|
144
|
+
<p>
|
|
145
|
+
Every layer forwards one module per file and no
|
|
146
|
+
<code>@extend</code> crosses a file boundary, so components can be
|
|
147
|
+
imported individually. Applications usually have no use for the
|
|
148
|
+
marketing components (<code>blog-post</code>, <code>gallery</code>,
|
|
149
|
+
<code>content-slider</code>, <code>techstack-bucket</code>,
|
|
150
|
+
<code>tiles</code>, <code>coming-soon</code>, <code>ratings</code>,
|
|
151
|
+
<code>home</code>).
|
|
152
|
+
</p>
|
|
153
|
+
<pre
|
|
154
|
+
class="mw-code-block"
|
|
155
|
+
><code>// styles.scss — the configuration has to come first
|
|
156
|
+
@use 'maverick-wave/src/scss/abstracts/variables' with (
|
|
157
|
+
$primary-color: #0f766e
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
@use 'maverick-wave/src/scss/base'; // required — carries the :root tokens
|
|
161
|
+
@use 'maverick-wave/src/scss/layout/grid';
|
|
162
|
+
@use 'maverick-wave/src/scss/layout/page-header';
|
|
163
|
+
@use 'maverick-wave/src/scss/components/buttons';
|
|
164
|
+
@use 'maverick-wave/src/scss/components/cards';
|
|
165
|
+
@use 'maverick-wave/src/scss/components/modals';
|
|
166
|
+
@use 'maverick-wave/src/scss/components/tables';
|
|
167
|
+
@use 'maverick-wave/src/scss/components/tags';
|
|
168
|
+
@use 'maverick-wave/src/scss/form-elements';
|
|
169
|
+
@use 'maverick-wave/src/scss/utilities';</code></pre>
|
|
170
|
+
<p class="mw-text-warning">
|
|
171
|
+
<i class="fas fa-exclamation-triangle mw-mr-1"></i>
|
|
172
|
+
Without <code>base</code> every component renders without colors — it
|
|
173
|
+
carries the <code>:root</code> custom properties. A subset like the
|
|
174
|
+
one above compiles to roughly 98 kB raw / 15 kB gzipped, against 147
|
|
175
|
+
kB / 22.5 kB for the full build.
|
|
176
|
+
</p>
|
|
143
177
|
</div>
|
|
144
178
|
</div>
|
|
145
179
|
|
|
@@ -156,10 +190,18 @@ body {
|
|
|
156
190
|
"styles": [
|
|
157
191
|
"src/assets/maverick-wave.min.css",
|
|
158
192
|
"src/styles.scss"
|
|
159
|
-
],
|
|
160
|
-
"scripts": [
|
|
161
|
-
"src/assets/maverick-wave.min.js"
|
|
162
193
|
]</code></pre>
|
|
194
|
+
<p class="mw-text-warning">
|
|
195
|
+
<i class="fas fa-exclamation-triangle mw-mr-1"></i>
|
|
196
|
+
<strong>No <code>"scripts"</code> entry for the JS file.</strong>
|
|
197
|
+
<code>maverick-wave.min.js</code> wires everything up once on
|
|
198
|
+
<code>DOMContentLoaded</code> and writes straight into the DOM —
|
|
199
|
+
in a SPA everything rendered afterwards stays uninitialized, and the
|
|
200
|
+
class toggles happen behind change detection. Rebuild the behaviors in
|
|
201
|
+
components; the state classes (<code>active</code>, <code>open</code>,
|
|
202
|
+
<code>mw-modal-open</code>, <code>mw-selected</code>) are the whole
|
|
203
|
+
contract.
|
|
204
|
+
</p>
|
|
163
205
|
<p>
|
|
164
206
|
Alternatively, use the CDN link directly in
|
|
165
207
|
<code>src/index.html</code>:
|
|
@@ -167,23 +209,35 @@ body {
|
|
|
167
209
|
<pre class="mw-code-block"><code><link rel="stylesheet"
|
|
168
210
|
href="https://cdn.jsdelivr.net/npm/maverick-wave@{{VERSION}}/maverick-wave.min.css"></code></pre>
|
|
169
211
|
<p>
|
|
170
|
-
For SCSS integration,
|
|
171
|
-
|
|
212
|
+
For SCSS integration, use the npm package (or a local copy of
|
|
213
|
+
<code>src/scss/</code>) from <code>src/styles.scss</code>:
|
|
172
214
|
</p>
|
|
173
215
|
<pre class="mw-code-block"><code>// src/styles.scss
|
|
174
|
-
|
|
175
|
-
$
|
|
176
|
-
|
|
177
|
-
|
|
216
|
+
@use 'maverick-wave/src/scss/main' with (
|
|
217
|
+
$primary-color: #3f51b5,
|
|
218
|
+
$mw-theme-mode: 'switchable'
|
|
219
|
+
);</code></pre>
|
|
178
220
|
<h5 class="mw-mt-4">Theme switching</h5>
|
|
179
|
-
<
|
|
180
|
-
|
|
181
|
-
|
|
221
|
+
<p>
|
|
222
|
+
Light mode is one class on <code><body></code>. Keep it in a
|
|
223
|
+
service so the choice survives navigation:
|
|
224
|
+
</p>
|
|
225
|
+
<pre class="mw-code-block"><code>// theme.service.ts
|
|
226
|
+
readonly light = signal(localStorage.getItem('mw-theme') === 'light');
|
|
227
|
+
|
|
228
|
+
constructor() {
|
|
229
|
+
effect(() => {
|
|
230
|
+
const light = this.light();
|
|
231
|
+
document.body.classList.toggle('mw-theme-light', light);
|
|
232
|
+
localStorage.setItem('mw-theme', light ? 'light' : 'dark');
|
|
233
|
+
});
|
|
182
234
|
}</code></pre>
|
|
183
235
|
<h5 class="mw-mt-4">Reactive Forms</h5>
|
|
184
236
|
<p>
|
|
185
|
-
|
|
186
|
-
|
|
237
|
+
The <code>mw-field</code> wrapper groups label, control, hint and
|
|
238
|
+
error. Bind the error state yourself — the framework does not
|
|
239
|
+
style Angular's <code>ng-invalid</code> / <code>ng-touched</code>
|
|
240
|
+
classes:
|
|
187
241
|
</p>
|
|
188
242
|
<pre
|
|
189
243
|
class="mw-code-block"
|
|
@@ -206,10 +260,14 @@ toggleTheme() {
|
|
|
206
260
|
use the CDN link in <code>index.html</code>:
|
|
207
261
|
</p>
|
|
208
262
|
<pre class="mw-code-block"><code>// main.jsx / index.js
|
|
209
|
-
import './assets/maverick-wave.min.css'
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
import
|
|
263
|
+
import './assets/maverick-wave.min.css';</code></pre>
|
|
264
|
+
<p class="mw-text-warning">
|
|
265
|
+
<i class="fas fa-exclamation-triangle mw-mr-1"></i>
|
|
266
|
+
Do not import <code>maverick-wave.min.js</code> in a SPA — it
|
|
267
|
+
binds once on <code>DOMContentLoaded</code> and never sees anything
|
|
268
|
+
rendered later. Accordion, tabs, modal and theme toggle are class
|
|
269
|
+
toggles; bind them with <code>className</code> from state.
|
|
270
|
+
</p>
|
|
213
271
|
<p>Example usage in a React component:</p>
|
|
214
272
|
<pre class="mw-code-block"><code>function App() {
|
|
215
273
|
return (
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
<div
|
|
12
12
|
class="mw-d-flex mw-justify-between mw-items-center mw-p-3"
|
|
13
13
|
style="
|
|
14
|
-
background:
|
|
15
|
-
border-bottom: 1px solid var(--mw-
|
|
14
|
+
background: var(--mw-header-background);
|
|
15
|
+
border-bottom: 1px solid var(--mw-header-border);
|
|
16
16
|
"
|
|
17
17
|
>
|
|
18
18
|
<div class="mw-d-flex mw-items-center">
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
style="
|
|
21
21
|
font-weight: bold;
|
|
22
22
|
font-size: 1.2rem;
|
|
23
|
-
color: var(--mw-header-
|
|
23
|
+
color: var(--mw-header-text-color);
|
|
24
24
|
"
|
|
25
25
|
>
|
|
26
26
|
Your Logo
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
<div
|
|
55
55
|
class="mw-d-flex mw-justify-between mw-items-center mw-p-3"
|
|
56
56
|
style="
|
|
57
|
-
background:
|
|
58
|
-
border-bottom: 1px solid var(--mw-
|
|
57
|
+
background: var(--mw-header-background);
|
|
58
|
+
border-bottom: 1px solid var(--mw-header-border);
|
|
59
59
|
"
|
|
60
60
|
>
|
|
61
61
|
<div class="mw-localhost-indicator-pulse"></div>
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
style="
|
|
65
65
|
font-weight: bold;
|
|
66
66
|
font-size: 1.2rem;
|
|
67
|
-
color: var(--mw-header-
|
|
67
|
+
color: var(--mw-header-text-color);
|
|
68
68
|
"
|
|
69
69
|
>
|
|
70
70
|
Your Logo
|
|
@@ -78,3 +78,61 @@
|
|
|
78
78
|
</div>
|
|
79
79
|
</div>
|
|
80
80
|
</div>
|
|
81
|
+
|
|
82
|
+
<div class="mw-mt-6">
|
|
83
|
+
<h3 class="mw-mb-2">Profile Button (on a fake header here)</h3>
|
|
84
|
+
<p class="mw-text-muted">
|
|
85
|
+
Shows who is signed in: an avatar with initials plus the name. Below
|
|
86
|
+
<code>md</code> the name steps aside and only the round avatar remains, so
|
|
87
|
+
it keeps the same height as the login and burger buttons. Works outside a
|
|
88
|
+
header too — in a panel header or a toolbar.
|
|
89
|
+
</p>
|
|
90
|
+
<!-- Fake header -->
|
|
91
|
+
<div class="mw-mb-4" style="position: relative; overflow: hidden">
|
|
92
|
+
<div
|
|
93
|
+
class="mw-d-flex mw-justify-between mw-items-center mw-p-3"
|
|
94
|
+
style="
|
|
95
|
+
background: var(--mw-header-background);
|
|
96
|
+
border-bottom: 1px solid var(--mw-header-border);
|
|
97
|
+
"
|
|
98
|
+
>
|
|
99
|
+
<div class="mw-d-flex mw-items-center">
|
|
100
|
+
<div
|
|
101
|
+
style="
|
|
102
|
+
font-weight: bold;
|
|
103
|
+
font-size: 1.2rem;
|
|
104
|
+
color: var(--mw-header-text-color);
|
|
105
|
+
"
|
|
106
|
+
>
|
|
107
|
+
Your Logo
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
<div class="mw-d-flex mw-items-center mw-gap-4">
|
|
111
|
+
<a style="color: var(--mw-header-navbar-list-color)"> Home </a>
|
|
112
|
+
<a style="color: var(--mw-header-navbar-list-color)"> About </a>
|
|
113
|
+
<button class="mw-profile-btn" type="button">
|
|
114
|
+
<span class="mw-avatar mw-avatar-initials mw-avatar-xs">MW</span>
|
|
115
|
+
<span class="mw-profile-btn-name">Michael</span>
|
|
116
|
+
</button>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<p class="mw-text-muted mw-text-sm">
|
|
122
|
+
Without initials it also takes an icon:
|
|
123
|
+
</p>
|
|
124
|
+
<div class="mw-mb-4" style="position: relative; overflow: hidden">
|
|
125
|
+
<div
|
|
126
|
+
class="mw-d-flex mw-justify-end mw-items-center mw-p-3"
|
|
127
|
+
style="
|
|
128
|
+
background: var(--mw-header-background);
|
|
129
|
+
border-bottom: 1px solid var(--mw-header-border);
|
|
130
|
+
"
|
|
131
|
+
>
|
|
132
|
+
<button class="mw-profile-btn" type="button">
|
|
133
|
+
<i class="fas fa-user-circle"></i>
|
|
134
|
+
<span class="mw-profile-btn-name">Michael</span>
|
|
135
|
+
</button>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
</div>
|
|
@@ -44,9 +44,11 @@
|
|
|
44
44
|
></span>
|
|
45
45
|
<input
|
|
46
46
|
id="ig-price"
|
|
47
|
-
type="
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
type="text"
|
|
48
|
+
inputmode="decimal"
|
|
49
|
+
class="mw-input mw-input-numeric"
|
|
50
|
+
placeholder="0,00"
|
|
51
|
+
value="1.204,50"
|
|
50
52
|
/>
|
|
51
53
|
<span class="mw-input-group-suffix">EUR</span>
|
|
52
54
|
</div>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<h3 class="mw-section-subtitle">Page Header</h3>
|
|
2
|
+
|
|
3
|
+
<p class="mw-text-muted mw-mb-6">
|
|
4
|
+
The start of a content page: title and subtitle on the left, actions on the
|
|
5
|
+
right, wrapping when it gets tight. The counterpart to
|
|
6
|
+
<code>mw-section-title</code>, which is centered and decorated and belongs on
|
|
7
|
+
a landing page.
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
<div class="mw-grid-1">
|
|
11
|
+
<div class="mw-card mw-card-simple mw-mb-6">
|
|
12
|
+
<h4 class="mw-mb-4">With Actions</h4>
|
|
13
|
+
<header class="mw-page-header">
|
|
14
|
+
<div>
|
|
15
|
+
<h2>Blog Posts</h2>
|
|
16
|
+
<p>14 entries · 3 drafts</p>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="mw-page-header-actions">
|
|
19
|
+
<button type="button" class="mw-btn mw-btn-outline mw-btn-sm">
|
|
20
|
+
<i class="fas fa-filter"></i>
|
|
21
|
+
Filter
|
|
22
|
+
</button>
|
|
23
|
+
<button type="button" class="mw-btn mw-btn-primary mw-btn-sm">
|
|
24
|
+
<i class="fas fa-plus"></i>
|
|
25
|
+
New Post
|
|
26
|
+
</button>
|
|
27
|
+
</div>
|
|
28
|
+
</header>
|
|
29
|
+
<p class="mw-text-muted">Page content follows here.</p>
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<div class="mw-card mw-card-simple mw-mb-6">
|
|
33
|
+
<h4 class="mw-mb-4">Combined with Meta Info</h4>
|
|
34
|
+
<p class="mw-text-muted mw-text-sm mw-mb-3">
|
|
35
|
+
The counters fit naturally underneath the title instead of a subtitle
|
|
36
|
+
line.
|
|
37
|
+
</p>
|
|
38
|
+
<header class="mw-page-header">
|
|
39
|
+
<div>
|
|
40
|
+
<h2>Blog Posts</h2>
|
|
41
|
+
<div class="mw-meta-header">
|
|
42
|
+
<div class="mw-meta-item">
|
|
43
|
+
<i class="fas fa-list"></i>
|
|
44
|
+
<span>Amount: 14</span>
|
|
45
|
+
</div>
|
|
46
|
+
<div class="mw-meta-item">
|
|
47
|
+
<i class="fas fa-pen"></i>
|
|
48
|
+
<span>Drafts: 3</span>
|
|
49
|
+
</div>
|
|
50
|
+
<div class="mw-meta-item">
|
|
51
|
+
<i class="fas fa-eye"></i>
|
|
52
|
+
<span>Published: 11</span>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
<div class="mw-page-header-actions">
|
|
57
|
+
<button type="button" class="mw-btn mw-btn-primary mw-btn-sm">
|
|
58
|
+
<i class="fas fa-plus"></i>
|
|
59
|
+
New Post
|
|
60
|
+
</button>
|
|
61
|
+
</div>
|
|
62
|
+
</header>
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
<div class="mw-card mw-card-simple">
|
|
66
|
+
<h4 class="mw-mb-4">Without a Separator</h4>
|
|
67
|
+
<p class="mw-text-muted mw-text-sm mw-mb-3">
|
|
68
|
+
<code>mw-page-header-plain</code> drops the bottom rule for pages that
|
|
69
|
+
bring their own.
|
|
70
|
+
</p>
|
|
71
|
+
<header class="mw-page-header mw-page-header-plain">
|
|
72
|
+
<div>
|
|
73
|
+
<h2>Settings</h2>
|
|
74
|
+
<p>Manage your account</p>
|
|
75
|
+
</div>
|
|
76
|
+
</header>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
<th>Name</th>
|
|
16
16
|
<th>Position</th>
|
|
17
17
|
<th>Location</th>
|
|
18
|
+
<th>Status</th>
|
|
19
|
+
<th class="mw-text-numeric">Budget</th>
|
|
18
20
|
</tr>
|
|
19
21
|
</thead>
|
|
20
22
|
<tbody>
|
|
@@ -23,21 +25,35 @@
|
|
|
23
25
|
<td>John Doe</td>
|
|
24
26
|
<td>Developer</td>
|
|
25
27
|
<td>New York</td>
|
|
28
|
+
<td><span class="mw-tag mw-tag-success">Active</span></td>
|
|
29
|
+
<td class="mw-text-numeric">1,204.50</td>
|
|
26
30
|
</tr>
|
|
27
31
|
<tr>
|
|
28
32
|
<td>2</td>
|
|
29
33
|
<td>Jane Smith</td>
|
|
30
34
|
<td>Designer</td>
|
|
31
35
|
<td>London</td>
|
|
36
|
+
<td><span class="mw-tag mw-tag-warning">Pending</span></td>
|
|
37
|
+
<td class="mw-text-numeric">87.00</td>
|
|
32
38
|
</tr>
|
|
33
39
|
<tr>
|
|
34
40
|
<td>3</td>
|
|
35
41
|
<td>Bob Johnson</td>
|
|
36
42
|
<td>Manager</td>
|
|
37
43
|
<td>Berlin</td>
|
|
44
|
+
<td><span class="mw-tag mw-tag-muted">Draft</span></td>
|
|
45
|
+
<td class="mw-text-numeric">15,930.25</td>
|
|
38
46
|
</tr>
|
|
39
47
|
</tbody>
|
|
40
48
|
</table>
|
|
49
|
+
<p class="mw-text-muted mw-mt-3">
|
|
50
|
+
The <strong>Budget</strong> column uses
|
|
51
|
+
<strong>mw-text-numeric</strong> – right-aligned with tabular,
|
|
52
|
+
lining digits. The alignment comes from the right edge, so it works the
|
|
53
|
+
same for <code>1,204.50</code> and <code>1.204,50</code>; only the number
|
|
54
|
+
of decimal places has to be consistent per column. For the input side
|
|
55
|
+
there is <strong>mw-input-numeric</strong>.
|
|
56
|
+
</p>
|
|
41
57
|
</div>
|
|
42
58
|
|
|
43
59
|
<div class="mw-card mw-card-simple mw-mb-6">
|
|
@@ -78,6 +94,120 @@
|
|
|
78
94
|
</table>
|
|
79
95
|
</div>
|
|
80
96
|
|
|
97
|
+
<div class="mw-card mw-card-simple mw-mb-6">
|
|
98
|
+
<h4 class="mw-mb-2">Subtle Header & Sticky Header</h4>
|
|
99
|
+
<p class="mw-text-muted">
|
|
100
|
+
<code>mw-table-subtle</code> keeps the header quiet - a full primary bar
|
|
101
|
+
across every column shouts louder than the data it labels.
|
|
102
|
+
<code>mw-table-sticky-head</code> keeps it visible while the body scrolls;
|
|
103
|
+
it needs a scroll container with a height limit, which
|
|
104
|
+
<code>mw-table-responsive-scroll</code> provides. Scroll inside the table
|
|
105
|
+
to see it. Its height comes from
|
|
106
|
+
<code>--mw-table-scroll-height</code> (400px, 260px below <code>sm</code>)
|
|
107
|
+
— override it per table with
|
|
108
|
+
<code>style="--mw-table-scroll-height: 250px"</code>.
|
|
109
|
+
</p>
|
|
110
|
+
|
|
111
|
+
<div class="mw-table-responsive-scroll">
|
|
112
|
+
<table class="mw-table mw-table-subtle mw-table-sticky-head">
|
|
113
|
+
<thead>
|
|
114
|
+
<tr>
|
|
115
|
+
<th>#</th>
|
|
116
|
+
<th>Name</th>
|
|
117
|
+
<th>Position</th>
|
|
118
|
+
<th class="mw-text-numeric">Budget</th>
|
|
119
|
+
</tr>
|
|
120
|
+
</thead>
|
|
121
|
+
<tbody>
|
|
122
|
+
<tr>
|
|
123
|
+
<td>1</td>
|
|
124
|
+
<td>John Doe</td>
|
|
125
|
+
<td>Developer</td>
|
|
126
|
+
<td class="mw-text-numeric">12,400</td>
|
|
127
|
+
</tr>
|
|
128
|
+
<tr>
|
|
129
|
+
<td>2</td>
|
|
130
|
+
<td>Jane Smith</td>
|
|
131
|
+
<td>Designer</td>
|
|
132
|
+
<td class="mw-text-numeric">9,800</td>
|
|
133
|
+
</tr>
|
|
134
|
+
<tr>
|
|
135
|
+
<td>3</td>
|
|
136
|
+
<td>Bob Johnson</td>
|
|
137
|
+
<td>Manager</td>
|
|
138
|
+
<td class="mw-text-numeric">21,050</td>
|
|
139
|
+
</tr>
|
|
140
|
+
<tr>
|
|
141
|
+
<td>4</td>
|
|
142
|
+
<td>Alice Brown</td>
|
|
143
|
+
<td>Developer</td>
|
|
144
|
+
<td class="mw-text-numeric">11,300</td>
|
|
145
|
+
</tr>
|
|
146
|
+
<tr>
|
|
147
|
+
<td>5</td>
|
|
148
|
+
<td>Charlie Davis</td>
|
|
149
|
+
<td>Analyst</td>
|
|
150
|
+
<td class="mw-text-numeric">7,600</td>
|
|
151
|
+
</tr>
|
|
152
|
+
<tr>
|
|
153
|
+
<td>6</td>
|
|
154
|
+
<td>Emma Wilson</td>
|
|
155
|
+
<td>Designer</td>
|
|
156
|
+
<td class="mw-text-numeric">10,150</td>
|
|
157
|
+
</tr>
|
|
158
|
+
<tr>
|
|
159
|
+
<td>7</td>
|
|
160
|
+
<td>Frank Miller</td>
|
|
161
|
+
<td>Developer</td>
|
|
162
|
+
<td class="mw-text-numeric">13,900</td>
|
|
163
|
+
</tr>
|
|
164
|
+
<tr>
|
|
165
|
+
<td>8</td>
|
|
166
|
+
<td>Grace Lee</td>
|
|
167
|
+
<td>Manager</td>
|
|
168
|
+
<td class="mw-text-numeric">19,700</td>
|
|
169
|
+
</tr>
|
|
170
|
+
<tr>
|
|
171
|
+
<td>9</td>
|
|
172
|
+
<td>Henry Clark</td>
|
|
173
|
+
<td>Analyst</td>
|
|
174
|
+
<td class="mw-text-numeric">8,250</td>
|
|
175
|
+
</tr>
|
|
176
|
+
<tr>
|
|
177
|
+
<td>10</td>
|
|
178
|
+
<td>Ivy Turner</td>
|
|
179
|
+
<td>Developer</td>
|
|
180
|
+
<td class="mw-text-numeric">14,600</td>
|
|
181
|
+
</tr>
|
|
182
|
+
<tr>
|
|
183
|
+
<td>11</td>
|
|
184
|
+
<td>Jack Morris</td>
|
|
185
|
+
<td>Designer</td>
|
|
186
|
+
<td class="mw-text-numeric">9,400</td>
|
|
187
|
+
</tr>
|
|
188
|
+
<tr>
|
|
189
|
+
<td>12</td>
|
|
190
|
+
<td>Karen Hall</td>
|
|
191
|
+
<td>Manager</td>
|
|
192
|
+
<td class="mw-text-numeric">22,800</td>
|
|
193
|
+
</tr>
|
|
194
|
+
<tr>
|
|
195
|
+
<td>13</td>
|
|
196
|
+
<td>Liam Scott</td>
|
|
197
|
+
<td>Developer</td>
|
|
198
|
+
<td class="mw-text-numeric">12,950</td>
|
|
199
|
+
</tr>
|
|
200
|
+
<tr>
|
|
201
|
+
<td>14</td>
|
|
202
|
+
<td>Mia Adams</td>
|
|
203
|
+
<td>Analyst</td>
|
|
204
|
+
<td class="mw-text-numeric">7,900</td>
|
|
205
|
+
</tr>
|
|
206
|
+
</tbody>
|
|
207
|
+
</table>
|
|
208
|
+
</div>
|
|
209
|
+
</div>
|
|
210
|
+
|
|
81
211
|
<div class="mw-card mw-card-simple">
|
|
82
212
|
<h4 class="mw-mb-2">Responsive Table</h4>
|
|
83
213
|
<p class="mw-text-muted">
|
|
@@ -127,9 +127,10 @@ href="path/maverick-wave.min.css"></code></pre>
|
|
|
127
127
|
<li><code>'dark'</code>: Compiles only dark theme styles.</li>
|
|
128
128
|
<li><code>'light'</code>: Compiles only light theme styles.</li>
|
|
129
129
|
</ul>
|
|
130
|
-
<pre class="mw-code-block"><code>// Your
|
|
131
|
-
|
|
132
|
-
|
|
130
|
+
<pre class="mw-code-block"><code>// Your styles.scss
|
|
131
|
+
@use 'path/to/maverick-wave/src/scss/main' with (
|
|
132
|
+
$mw-theme-mode: 'switchable' // Or 'dark', 'light'
|
|
133
|
+
);</code></pre>
|
|
133
134
|
<p class="mw-text-warning mw-mt-2">
|
|
134
135
|
<i class="fas fa-exclamation-triangle mw-mr-1"></i>
|
|
135
136
|
Note: The main header/navigation currently retains its default dark
|
|
@@ -165,26 +166,29 @@ $mw-theme-mode: 'switchable'; // Or 'dark', 'light'
|
|
|
165
166
|
|
|
166
167
|
<h5 class="mw-mt-4 mw-mb-2">Method 2: SCSS Variable Overrides</h5>
|
|
167
168
|
<p>
|
|
168
|
-
Requires a Sass build process.
|
|
169
|
-
<
|
|
169
|
+
Requires a Sass build process. Pass the overrides through
|
|
170
|
+
<code>@use ... with (...)</code>:
|
|
170
171
|
</p>
|
|
171
|
-
<pre class="mw-code-block"><code>// your-
|
|
172
|
-
|
|
173
|
-
$
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
172
|
+
<pre class="mw-code-block"><code>// your-styles.scss
|
|
173
|
+
@use 'path/to/maverick-wave/src/scss/main' with (
|
|
174
|
+
$primary-color: #e94560,
|
|
175
|
+
$secondary-color: #f39c12
|
|
176
|
+
// ... other root colors ...
|
|
177
|
+
);</code></pre>
|
|
177
178
|
<p>
|
|
178
|
-
|
|
179
|
-
backgrounds)
|
|
179
|
+
Both methods end up at the same place: the derived tones (hover
|
|
180
|
+
colors, translucent backgrounds, borders) are calculated at runtime
|
|
181
|
+
with <code>color-mix()</code>, so a single root color is enough.
|
|
180
182
|
</p>
|
|
181
183
|
|
|
182
184
|
<h5 class="mw-mt-4 mw-mb-2">Adding Custom Fonts</h5>
|
|
183
185
|
<p>
|
|
184
186
|
Remember to load custom fonts using <code>@font-face</code> rules in
|
|
185
|
-
your CSS/SCSS before
|
|
186
|
-
<code>--mw-font-family-base</code>
|
|
187
|
-
<code
|
|
187
|
+
your CSS/SCSS before assigning them to
|
|
188
|
+
<code>--mw-font-family-base</code> (and
|
|
189
|
+
<code>--mw-font-family-heading</code> /
|
|
190
|
+
<code>--mw-font-family-mono</code>). The framework bundles no font and
|
|
191
|
+
falls back to a system stack.
|
|
188
192
|
</p>
|
|
189
193
|
<p class="mw-mt-4">
|
|
190
194
|
<button
|