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
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
# Example: static landing page
|
|
2
|
+
|
|
3
|
+
A complete page without a framework - this is the case the shipped
|
|
4
|
+
`maverick-wave.min.js` is built for: accordion, tabs, mobile navigation, theme
|
|
5
|
+
toggle and scroll spy all work by themselves. Only opening a modal has to be
|
|
6
|
+
wired up by hand.
|
|
7
|
+
|
|
8
|
+
```html
|
|
9
|
+
<!doctype html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8" />
|
|
13
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
14
|
+
<title>Acme Analytics</title>
|
|
15
|
+
|
|
16
|
+
<link
|
|
17
|
+
rel="stylesheet"
|
|
18
|
+
href="https://cdn.jsdelivr.net/npm/maverick-wave@3.4.0/maverick-wave.min.css"
|
|
19
|
+
/>
|
|
20
|
+
<link
|
|
21
|
+
rel="stylesheet"
|
|
22
|
+
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css"
|
|
23
|
+
/>
|
|
24
|
+
|
|
25
|
+
<style>
|
|
26
|
+
/* Brand colours - one token per family, the rest is derived */
|
|
27
|
+
:root {
|
|
28
|
+
--mw-primary-color: #0f766e;
|
|
29
|
+
--mw-secondary-color: #f39c12;
|
|
30
|
+
--mw-hero-background: url('/assets/hero.jpg');
|
|
31
|
+
}
|
|
32
|
+
</style>
|
|
33
|
+
</head>
|
|
34
|
+
|
|
35
|
+
<body>
|
|
36
|
+
<header class="mw-header">
|
|
37
|
+
<div class="mw-container">
|
|
38
|
+
<div class="mw-logo">
|
|
39
|
+
<button type="button" onclick="location.href='#home'">
|
|
40
|
+
<img src="/assets/logo.svg" alt="Acme" />
|
|
41
|
+
</button>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<div class="mw-header-actions">
|
|
45
|
+
<nav class="mw-navbar">
|
|
46
|
+
<ul class="mw-navbar-list">
|
|
47
|
+
<li class="mw-navbar-item">
|
|
48
|
+
<a href="#features" class="mw-navbar-link">Features</a>
|
|
49
|
+
</li>
|
|
50
|
+
<li class="mw-navbar-item">
|
|
51
|
+
<a href="#pricing" class="mw-navbar-link">Pricing</a>
|
|
52
|
+
</li>
|
|
53
|
+
<li class="mw-navbar-item">
|
|
54
|
+
<a href="#faq" class="mw-navbar-link">FAQ</a>
|
|
55
|
+
</li>
|
|
56
|
+
</ul>
|
|
57
|
+
</nav>
|
|
58
|
+
|
|
59
|
+
<div class="mw-theme-toggle mw-ml-5">
|
|
60
|
+
<div class="mw-theme-toggle-slider">
|
|
61
|
+
<div class="mw-theme-toggle-icon">
|
|
62
|
+
<i class="fas fa-moon"></i>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<div class="mw-menu-btn"><div class="mw-menu-btn-burger"></div></div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</header>
|
|
71
|
+
|
|
72
|
+
<main class="mw-main">
|
|
73
|
+
<!-- Hero: the container goes full-bleed because it contains mw-hero -->
|
|
74
|
+
<section id="home" class="mw-section">
|
|
75
|
+
<div class="mw-container">
|
|
76
|
+
<div class="mw-hero">
|
|
77
|
+
<div class="mw-home mw-home-content-fade">
|
|
78
|
+
<div class="mw-home-text">
|
|
79
|
+
<h1>Acme <span class="mw-text-primary">Analytics</span></h1>
|
|
80
|
+
<p>Numbers that answer questions instead of raising them.</p>
|
|
81
|
+
</div>
|
|
82
|
+
<div class="mw-d-flex mw-gap-8 mw-justify-center mw-mb-7">
|
|
83
|
+
<button
|
|
84
|
+
type="button"
|
|
85
|
+
class="mw-btn mw-btn-primary mw-btn-lg"
|
|
86
|
+
onclick="openModal('demo')"
|
|
87
|
+
>
|
|
88
|
+
Book a demo
|
|
89
|
+
</button>
|
|
90
|
+
<a href="#features" class="mw-btn mw-btn-outline mw-btn-lg"
|
|
91
|
+
>Learn more</a
|
|
92
|
+
>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
</section>
|
|
98
|
+
|
|
99
|
+
<!-- Features -->
|
|
100
|
+
<section id="features" class="mw-section mw-section-alternate">
|
|
101
|
+
<div class="mw-container">
|
|
102
|
+
<h2 class="mw-section-title">Features</h2>
|
|
103
|
+
|
|
104
|
+
<div class="mw-grid-3">
|
|
105
|
+
<div class="mw-card mw-card-stack">
|
|
106
|
+
<div class="mw-card-stack-header">
|
|
107
|
+
<div class="mw-card-stack-icon">
|
|
108
|
+
<i class="fas fa-bolt"></i>
|
|
109
|
+
</div>
|
|
110
|
+
<h5 class="mw-card-stack-title">Fast</h5>
|
|
111
|
+
</div>
|
|
112
|
+
<div class="mw-card-stack-body">
|
|
113
|
+
<p class="mw-card-stack-text">
|
|
114
|
+
Dashboards render in under a second.
|
|
115
|
+
</p>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
|
|
119
|
+
<div class="mw-card mw-card-stack">
|
|
120
|
+
<div class="mw-card-stack-header">
|
|
121
|
+
<div class="mw-card-stack-icon">
|
|
122
|
+
<i class="fas fa-shield-halved"></i>
|
|
123
|
+
</div>
|
|
124
|
+
<h5 class="mw-card-stack-title">Secure</h5>
|
|
125
|
+
</div>
|
|
126
|
+
<div class="mw-card-stack-body">
|
|
127
|
+
<p class="mw-card-stack-text">EU hosting, SSO, audit log.</p>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
<div class="mw-card mw-card-stack">
|
|
132
|
+
<div class="mw-card-stack-header">
|
|
133
|
+
<div class="mw-card-stack-icon">
|
|
134
|
+
<i class="fas fa-plug"></i>
|
|
135
|
+
</div>
|
|
136
|
+
<h5 class="mw-card-stack-title">Connected</h5>
|
|
137
|
+
</div>
|
|
138
|
+
<div class="mw-card-stack-body">
|
|
139
|
+
<div class="mw-tags mw-tags-primary">
|
|
140
|
+
<span class="mw-tags-item">Postgres</span>
|
|
141
|
+
<span class="mw-tags-item">BigQuery</span>
|
|
142
|
+
<span class="mw-tags-item">S3</span>
|
|
143
|
+
</div>
|
|
144
|
+
<p class="mw-card-stack-text">Twelve connectors, no ETL.</p>
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
|
|
149
|
+
<div class="mw-grid-3 mw-mt-8">
|
|
150
|
+
<div class="mw-info mw-info-counter mw-info-primary">
|
|
151
|
+
<div class="mw-info-value">120+</div>
|
|
152
|
+
<div class="mw-info-label">Teams</div>
|
|
153
|
+
</div>
|
|
154
|
+
<div class="mw-info mw-info-counter mw-info-success">
|
|
155
|
+
<div class="mw-info-value">99.9%</div>
|
|
156
|
+
<div class="mw-info-label">Uptime</div>
|
|
157
|
+
</div>
|
|
158
|
+
<div class="mw-info mw-info-counter">
|
|
159
|
+
<div class="mw-info-value">24/7</div>
|
|
160
|
+
<div class="mw-info-label">Support</div>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
</section>
|
|
165
|
+
|
|
166
|
+
<!-- Pricing -->
|
|
167
|
+
<section id="pricing" class="mw-section">
|
|
168
|
+
<div class="mw-container">
|
|
169
|
+
<h2 class="mw-section-title">Pricing</h2>
|
|
170
|
+
|
|
171
|
+
<div class="mw-grid-3">
|
|
172
|
+
<div class="mw-card mw-card-content">
|
|
173
|
+
<div class="mw-card-body">
|
|
174
|
+
<h3 class="mw-card-title">Starter</h3>
|
|
175
|
+
<hr class="mw-card-title-divider" />
|
|
176
|
+
<p class="mw-card-text">For small teams getting started.</p>
|
|
177
|
+
<ul class="mw-list mw-list-check">
|
|
178
|
+
<li>3 dashboards</li>
|
|
179
|
+
<li>1 data source</li>
|
|
180
|
+
</ul>
|
|
181
|
+
<div class="mw-card-footer">
|
|
182
|
+
<button type="button" class="mw-btn mw-btn-outline">
|
|
183
|
+
Choose
|
|
184
|
+
</button>
|
|
185
|
+
<span class="mw-text-numeric mw-text-lg">29 €</span>
|
|
186
|
+
</div>
|
|
187
|
+
</div>
|
|
188
|
+
</div>
|
|
189
|
+
|
|
190
|
+
<div class="mw-card mw-card-content">
|
|
191
|
+
<div class="mw-card-badge mw-card-addon-success">Popular</div>
|
|
192
|
+
<div class="mw-card-body">
|
|
193
|
+
<h3 class="mw-card-title">Team</h3>
|
|
194
|
+
<hr class="mw-card-title-divider" />
|
|
195
|
+
<p class="mw-card-text">For growing organisations.</p>
|
|
196
|
+
<ul class="mw-list mw-list-check">
|
|
197
|
+
<li>Unlimited dashboards</li>
|
|
198
|
+
<li>SSO</li>
|
|
199
|
+
</ul>
|
|
200
|
+
<div class="mw-card-footer">
|
|
201
|
+
<button type="button" class="mw-btn mw-btn-primary">
|
|
202
|
+
Choose
|
|
203
|
+
</button>
|
|
204
|
+
<span class="mw-text-numeric mw-text-lg">99 €</span>
|
|
205
|
+
</div>
|
|
206
|
+
</div>
|
|
207
|
+
</div>
|
|
208
|
+
|
|
209
|
+
<div class="mw-card mw-card-content">
|
|
210
|
+
<div class="mw-card-ribbon mw-card-addon-primary">Enterprise</div>
|
|
211
|
+
<div class="mw-card-body">
|
|
212
|
+
<h3 class="mw-card-title">Custom</h3>
|
|
213
|
+
<hr class="mw-card-title-divider" />
|
|
214
|
+
<p class="mw-card-text">On premise, custom SLA.</p>
|
|
215
|
+
<div class="mw-card-footer">
|
|
216
|
+
<button
|
|
217
|
+
type="button"
|
|
218
|
+
class="mw-btn mw-btn-outline"
|
|
219
|
+
onclick="openModal('demo')"
|
|
220
|
+
>
|
|
221
|
+
Contact us
|
|
222
|
+
</button>
|
|
223
|
+
</div>
|
|
224
|
+
</div>
|
|
225
|
+
</div>
|
|
226
|
+
</div>
|
|
227
|
+
</div>
|
|
228
|
+
</section>
|
|
229
|
+
|
|
230
|
+
<!-- FAQ -->
|
|
231
|
+
<section id="faq" class="mw-section mw-section-alternate">
|
|
232
|
+
<div class="mw-container">
|
|
233
|
+
<h2 class="mw-section-title">FAQ</h2>
|
|
234
|
+
|
|
235
|
+
<div class="mw-accordion">
|
|
236
|
+
<div class="mw-accordion-item">
|
|
237
|
+
<div class="mw-accordion-header active">
|
|
238
|
+
<h3>Where is the data stored?</h3>
|
|
239
|
+
<i class="fas fa-chevron-down mw-accordion-icon"></i>
|
|
240
|
+
</div>
|
|
241
|
+
<div class="mw-accordion-content active">
|
|
242
|
+
<div class="mw-accordion-content-inner">
|
|
243
|
+
<p>In Frankfurt, in our own data centre.</p>
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
246
|
+
</div>
|
|
247
|
+
|
|
248
|
+
<div class="mw-accordion-item">
|
|
249
|
+
<div class="mw-accordion-header">
|
|
250
|
+
<h3>Can I cancel monthly?</h3>
|
|
251
|
+
<i class="fas fa-chevron-down mw-accordion-icon"></i>
|
|
252
|
+
</div>
|
|
253
|
+
<div class="mw-accordion-content">
|
|
254
|
+
<div class="mw-accordion-content-inner">
|
|
255
|
+
<p>Yes, at the end of every billing period.</p>
|
|
256
|
+
</div>
|
|
257
|
+
</div>
|
|
258
|
+
</div>
|
|
259
|
+
</div>
|
|
260
|
+
|
|
261
|
+
<div class="mw-alert mw-alert-info mw-mt-6">
|
|
262
|
+
<div class="mw-alert-icon"><i class="fas fa-lightbulb"></i></div>
|
|
263
|
+
<div class="mw-alert-content">
|
|
264
|
+
<span class="mw-alert-title">Still unsure?</span>
|
|
265
|
+
<p>Book a 20 minute demo - no sales pitch.</p>
|
|
266
|
+
</div>
|
|
267
|
+
</div>
|
|
268
|
+
</div>
|
|
269
|
+
</section>
|
|
270
|
+
</main>
|
|
271
|
+
|
|
272
|
+
<footer class="mw-footer">
|
|
273
|
+
<div class="mw-container">
|
|
274
|
+
<div class="mw-footer-top">
|
|
275
|
+
<div class="mw-footer-column">
|
|
276
|
+
<h3>Acme Analytics</h3>
|
|
277
|
+
<p>Numbers that answer questions.</p>
|
|
278
|
+
</div>
|
|
279
|
+
<div class="mw-footer-column">
|
|
280
|
+
<h3>Product</h3>
|
|
281
|
+
<ul>
|
|
282
|
+
<li><a href="#features">Features</a></li>
|
|
283
|
+
<li><a href="#pricing">Pricing</a></li>
|
|
284
|
+
</ul>
|
|
285
|
+
</div>
|
|
286
|
+
</div>
|
|
287
|
+
|
|
288
|
+
<div class="mw-social-links">
|
|
289
|
+
<a href="#" data-tooltip="GitHub"><i class="fab fa-github"></i></a>
|
|
290
|
+
<a href="mailto:hi@example.com" data-tooltip="Mail"
|
|
291
|
+
><i class="fa fa-envelope"></i
|
|
292
|
+
></a>
|
|
293
|
+
</div>
|
|
294
|
+
|
|
295
|
+
<p class="mw-copyright">© 2026 Acme</p>
|
|
296
|
+
</div>
|
|
297
|
+
</footer>
|
|
298
|
+
|
|
299
|
+
<!-- Modal: markup stays in the DOM, mw-modal-open shows it -->
|
|
300
|
+
<div id="demo" class="mw-modal-overlay">
|
|
301
|
+
<div class="mw-modal">
|
|
302
|
+
<div class="mw-modal-header">
|
|
303
|
+
<h4 class="mw-modal-title">Book a demo</h4>
|
|
304
|
+
<button type="button" class="mw-modal-close">𝗫</button>
|
|
305
|
+
</div>
|
|
306
|
+
<div class="mw-modal-body">
|
|
307
|
+
<form class="mw-form">
|
|
308
|
+
<div class="mw-field">
|
|
309
|
+
<label class="mw-field-label mw-required" for="demo-email"
|
|
310
|
+
>Email</label
|
|
311
|
+
>
|
|
312
|
+
<div class="mw-input-group">
|
|
313
|
+
<span class="mw-input-group-prefix"
|
|
314
|
+
><i class="fas fa-envelope"></i
|
|
315
|
+
></span>
|
|
316
|
+
<input id="demo-email" type="email" class="mw-input" required />
|
|
317
|
+
</div>
|
|
318
|
+
</div>
|
|
319
|
+
</form>
|
|
320
|
+
</div>
|
|
321
|
+
<div class="mw-modal-footer">
|
|
322
|
+
<button
|
|
323
|
+
type="button"
|
|
324
|
+
class="mw-btn mw-btn-outline"
|
|
325
|
+
onclick="closeModal('demo')"
|
|
326
|
+
>
|
|
327
|
+
Cancel
|
|
328
|
+
</button>
|
|
329
|
+
<button type="button" class="mw-btn mw-btn-primary">Send</button>
|
|
330
|
+
</div>
|
|
331
|
+
</div>
|
|
332
|
+
<div class="mw-modal-backdrop" onclick="closeModal('demo')"></div>
|
|
333
|
+
</div>
|
|
334
|
+
|
|
335
|
+
<script src="https://cdn.jsdelivr.net/npm/maverick-wave@3.4.0/maverick-wave.min.js"></script>
|
|
336
|
+
<script>
|
|
337
|
+
// The only thing the shipped script does not cover: opening a modal.
|
|
338
|
+
// Closing works through .mw-modal-close, the backdrop is wired above.
|
|
339
|
+
function openModal(id) {
|
|
340
|
+
document.getElementById(id).classList.add('mw-modal-open');
|
|
341
|
+
}
|
|
342
|
+
function closeModal(id) {
|
|
343
|
+
document.getElementById(id).classList.remove('mw-modal-open');
|
|
344
|
+
}
|
|
345
|
+
</script>
|
|
346
|
+
</body>
|
|
347
|
+
</html>
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
## Notes
|
|
351
|
+
|
|
352
|
+
- The theme toggle needs no code - the script persists the choice under
|
|
353
|
+
`localStorage['mw-theme']` and toggles `mw-theme-light` on `<body>`.
|
|
354
|
+
- The scroll spy sets `active` on the `mw-navbar-link` whose `href` matches the
|
|
355
|
+
`section[id]` currently in view - the `<section id="…">` elements are the
|
|
356
|
+
contract.
|
|
357
|
+
- `mw-navbar` without a size class collapses at `md`. With four to five links
|
|
358
|
+
use `mw-navbar-medium`, with six or more `mw-navbar-large`.
|
|
359
|
+
- The hero container becomes full-bleed only because it contains `mw-hero`; the
|
|
360
|
+
other `mw-container` elements stay at `min(1200px, 89%)`.
|
|
361
|
+
- Overriding `--mw-primary-color` in a `<style>` block is enough - hover tones,
|
|
362
|
+
translucent backgrounds and the border accent follow via `color-mix()`.
|