maverick-wave 3.6.0 → 3.6.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 +17 -4
- package/.claude/skills/maverick-wave/examples/static-landing-page.md +5 -5
- package/.claude/skills/maverick-wave/references/components.md +15 -9
- package/.claude/skills/maverick-wave/references/layout.md +48 -2
- package/.claude/skills/maverick-wave/references/theming.md +1 -0
- package/CHANGELOG.md +12 -0
- package/maverick-wave.min.css +1 -1
- package/package.json +1 -1
- package/src/partials/cards-container.html +24 -19
- package/src/partials/timelines-container.html +4 -4
- package/src/partials/utilities-container.html +35 -0
- package/src/scss/components/_buttons.scss +1 -1
- package/src/scss/components/_cards.scss +89 -93
- package/src/scss/components/_gallery.scss +1 -1
- package/src/scss/components/_info.scss +1 -1
- package/src/scss/layout/_header.scss +10 -4
- package/src/scss/layout/_main.scss +33 -25
- package/src/scss/utilities/_display.scss +6 -0
|
@@ -44,14 +44,14 @@ Load the one you need - do not read them all up front.
|
|
|
44
44
|
```html
|
|
45
45
|
<link
|
|
46
46
|
rel="stylesheet"
|
|
47
|
-
href="https://cdn.jsdelivr.net/npm/maverick-wave@3.
|
|
47
|
+
href="https://cdn.jsdelivr.net/npm/maverick-wave@3.7.0/maverick-wave.min.css"
|
|
48
48
|
/>
|
|
49
49
|
<link
|
|
50
50
|
rel="stylesheet"
|
|
51
51
|
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css"
|
|
52
52
|
/>
|
|
53
53
|
...
|
|
54
|
-
<script src="https://cdn.jsdelivr.net/npm/maverick-wave@3.
|
|
54
|
+
<script src="https://cdn.jsdelivr.net/npm/maverick-wave@3.7.0/maverick-wave.min.js"></script>
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
Pin the version. The JS file is optional and only for server-rendered/static pages -
|
|
@@ -149,8 +149,8 @@ Everything below is documented in `references/components.md` unless marked other
|
|
|
149
149
|
**Actions** `mw-btn` (+ `primary`, `secondary`, `danger`, `success`, `outline`,
|
|
150
150
|
`link`, `link-muted`, `sm`, `lg`) · `mw-btn-mini` · `mw-button-bar`
|
|
151
151
|
|
|
152
|
-
**Containers** `mw-card` (+ `simple`, `
|
|
153
|
-
|
|
152
|
+
**Containers** `mw-card` (+ `simple`, `lg`, `xl`, `stack`, badge, ribbon) ·
|
|
153
|
+
`mw-panel` · `mw-tile` · `mw-accordion` · `mw-tabs` · `mw-modal` ·
|
|
154
154
|
`mw-item-list` family
|
|
155
155
|
|
|
156
156
|
**Data & status** `mw-table` (+ `subtle`, `sticky-head`, `cards`, `compact`,
|
|
@@ -197,6 +197,10 @@ ribbon) · `mw-panel` · `mw-tile` · `mw-accordion` · `mw-tabs` · `mw-modal`
|
|
|
197
197
|
7. **`--mw-text-muted-color` on a coloured surface is always wrong.** It follows
|
|
198
198
|
the theme; buttons, table headers and badges do not. Use
|
|
199
199
|
`--mw-accent-text-color` there, and `opacity` for disabled states.
|
|
200
|
+
`--mw-accent-text-color` is the text on a **brand** surface, so overriding it
|
|
201
|
+
for a light primary makes it dark everywhere it is used. The fixed grey
|
|
202
|
+
surfaces - tooltip, `mw-btn-mini`, `mw-info-mini`, gallery arrows - therefore
|
|
203
|
+
hardcode white and ignore the token.
|
|
200
204
|
8. **`mw-card` already lifts on hover** and `mw-btn` already has `inline-flex`
|
|
201
205
|
plus a gap for icons. Neither has a modifier class for it - adding one from
|
|
202
206
|
memory produces markup that does nothing.
|
|
@@ -206,3 +210,12 @@ ribbon) · `mw-panel` · `mw-tile` · `mw-accordion` · `mw-tabs` · `mw-modal`
|
|
|
206
210
|
set.
|
|
207
211
|
10. **Browser floor: `color-mix()`** - Chrome 111+, Safari 16.2+, Firefox 113+.
|
|
208
212
|
Older browsers get no colours at all, not merely worse ones.
|
|
213
|
+
11. **A component host between a container and its children breaks the layout,
|
|
214
|
+
silently.** Every `mw-*` flex or grid container styles its _children_ -
|
|
215
|
+
`mw-grid-*`, `mw-tags`, `mw-button-bar`, `mw-form-actions`, `mw-modal-footer`,
|
|
216
|
+
`mw-toast-stack`. In plain HTML the children are right there; in a SPA a
|
|
217
|
+
component host often sits in between and becomes the item instead, so it
|
|
218
|
+
shrinks to content width or swallows a whole grid row. Put `mw-d-contents` on
|
|
219
|
+
that host - it then generates no box and the children take the item role
|
|
220
|
+
back. Angular: `host: { class: 'mw-d-contents' }`. `mw-header` handles this
|
|
221
|
+
case on its own, the others do not.
|
|
@@ -15,7 +15,7 @@ wired up by hand.
|
|
|
15
15
|
|
|
16
16
|
<link
|
|
17
17
|
rel="stylesheet"
|
|
18
|
-
href="https://cdn.jsdelivr.net/npm/maverick-wave@3.
|
|
18
|
+
href="https://cdn.jsdelivr.net/npm/maverick-wave@3.7.0/maverick-wave.min.css"
|
|
19
19
|
/>
|
|
20
20
|
<link
|
|
21
21
|
rel="stylesheet"
|
|
@@ -169,7 +169,7 @@ wired up by hand.
|
|
|
169
169
|
<h2 class="mw-section-title">Pricing</h2>
|
|
170
170
|
|
|
171
171
|
<div class="mw-grid-3">
|
|
172
|
-
<div class="mw-card
|
|
172
|
+
<div class="mw-card">
|
|
173
173
|
<div class="mw-card-body">
|
|
174
174
|
<h3 class="mw-card-title">Starter</h3>
|
|
175
175
|
<hr class="mw-card-title-divider" />
|
|
@@ -187,7 +187,7 @@ wired up by hand.
|
|
|
187
187
|
</div>
|
|
188
188
|
</div>
|
|
189
189
|
|
|
190
|
-
<div class="mw-card
|
|
190
|
+
<div class="mw-card">
|
|
191
191
|
<div class="mw-card-badge mw-card-addon-success">Popular</div>
|
|
192
192
|
<div class="mw-card-body">
|
|
193
193
|
<h3 class="mw-card-title">Team</h3>
|
|
@@ -206,7 +206,7 @@ wired up by hand.
|
|
|
206
206
|
</div>
|
|
207
207
|
</div>
|
|
208
208
|
|
|
209
|
-
<div class="mw-card
|
|
209
|
+
<div class="mw-card">
|
|
210
210
|
<div class="mw-card-ribbon mw-card-addon-primary">Enterprise</div>
|
|
211
211
|
<div class="mw-card-body">
|
|
212
212
|
<h3 class="mw-card-title">Custom</h3>
|
|
@@ -332,7 +332,7 @@ wired up by hand.
|
|
|
332
332
|
<div class="mw-modal-backdrop" onclick="closeModal('demo')"></div>
|
|
333
333
|
</div>
|
|
334
334
|
|
|
335
|
-
<script src="https://cdn.jsdelivr.net/npm/maverick-wave@3.
|
|
335
|
+
<script src="https://cdn.jsdelivr.net/npm/maverick-wave@3.7.0/maverick-wave.min.js"></script>
|
|
336
336
|
<script>
|
|
337
337
|
// The only thing the shipped script does not cover: opening a modal.
|
|
338
338
|
// Closing works through .mw-modal-close, the backdrop is wired above.
|
|
@@ -61,7 +61,7 @@ Row of equally treated buttons, centered by default.
|
|
|
61
61
|
## Cards
|
|
62
62
|
|
|
63
63
|
```html
|
|
64
|
-
<div class="mw-card
|
|
64
|
+
<div class="mw-card">
|
|
65
65
|
<div class="mw-card-img">
|
|
66
66
|
<img src="cover.jpg" alt="" />
|
|
67
67
|
</div>
|
|
@@ -79,20 +79,26 @@ Row of equally treated buttons, centered by default.
|
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
- `mw-card` is the shell; the hover lift is built in and has no modifier class.
|
|
82
|
+
It is a flex column by default, so `mw-card-footer` sticks to the bottom and
|
|
83
|
+
cards in a grid line up without any extra class.
|
|
82
84
|
- `mw-card-simple` is the flat variant with even padding for arbitrary content.
|
|
83
|
-
Use it when you only need a padded surface
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
Use it when you only need a padded surface - it stays a block container, so
|
|
86
|
+
inline children keep flowing side by side.
|
|
87
|
+
- Image height: 210px, `mw-card-lg` 340px, `mw-card-xl` 480px. Set
|
|
88
|
+
`--mw-card-img-height` on the card for any other height.
|
|
87
89
|
`mw-card-img-contain` shows the whole image instead of cropping it.
|
|
88
|
-
- In `mw-card-footer` the last child is pushed to the right
|
|
89
|
-
footer stacks and children go full width.
|
|
90
|
+
- In `mw-card-footer` the last child is pushed to the right when there is more
|
|
91
|
+
than one; below `lg` the footer stacks and children go full width.
|
|
90
92
|
- `mw-card-badge` (top right corner) and `mw-card-ribbon` (diagonal banner) are
|
|
91
93
|
absolutely positioned overlays; colour them with `mw-card-addon-primary`,
|
|
92
94
|
`-secondary`, `-success`, `-warning`, `-danger`, `-info`.
|
|
95
|
+
- A card does not clip its content, so a tooltip or dropdown inside it can reach
|
|
96
|
+
outside. The exception is `mw-card-ribbon`: that banner has to be cut off at
|
|
97
|
+
the edge, so a card containing one switches to `overflow: hidden` and clips
|
|
98
|
+
everything else too.
|
|
93
99
|
|
|
94
100
|
```html
|
|
95
|
-
<div class="mw-card
|
|
101
|
+
<div class="mw-card">
|
|
96
102
|
<div class="mw-card-badge mw-card-addon-success">New</div>
|
|
97
103
|
...
|
|
98
104
|
</div>
|
|
@@ -523,7 +529,7 @@ Both are chronicles (CV, changelog), not schedulable time axes.
|
|
|
523
529
|
<div class="mw-timeline-big-date-sub">(3 years)</div>
|
|
524
530
|
</div>
|
|
525
531
|
<div class="mw-timeline-big-content">
|
|
526
|
-
<div class="mw-card
|
|
532
|
+
<div class="mw-card">...</div>
|
|
527
533
|
<div class="mw-timeline-big-event">
|
|
528
534
|
<span class="mw-timeline-big-event-date">05/2023</span>
|
|
529
535
|
<span class="mw-timeline-big-event-title">Certification</span>
|
|
@@ -143,7 +143,11 @@ as the header's first child under the same condition.
|
|
|
143
143
|
```
|
|
144
144
|
|
|
145
145
|
`data-tooltip="..."` is a global attribute hook, not a class - it works on any
|
|
146
|
-
element and shows a tooltip above it on hover.
|
|
146
|
+
element and shows a tooltip above it on hover or keyboard focus. It is pure CSS
|
|
147
|
+
(a pseudo element on the trigger), which also means anything that clips its
|
|
148
|
+
overflow cuts it off: a scroll container, or a card carrying a ribbon - plain
|
|
149
|
+
cards do not clip. Close to the screen edge the bubble can run out of the
|
|
150
|
+
viewport, so keep long tooltips off the outermost elements.
|
|
147
151
|
|
|
148
152
|
## Sections
|
|
149
153
|
|
|
@@ -271,12 +275,54 @@ Every one of them has a `-lg` twin with a wider gap (2.5rem instead of 1.35rem):
|
|
|
271
275
|
automatically.
|
|
272
276
|
|
|
273
277
|
**Display** - `mw-d-flex`, `mw-d-inline-flex`, `mw-d-block`, `mw-d-inline`,
|
|
274
|
-
`mw-d-inline-block`, `mw-d-grid`, `mw-d-none`.
|
|
278
|
+
`mw-d-inline-block`, `mw-d-grid`, `mw-d-none`, `mw-d-contents`.
|
|
275
279
|
|
|
276
280
|
There are no responsive display variants. Show/hide per breakpoint is the
|
|
277
281
|
application's job (media query in your own stylesheet, or `@if` in the
|
|
278
282
|
template).
|
|
279
283
|
|
|
284
|
+
### `mw-d-contents` - wrapper components inside a layout container
|
|
285
|
+
|
|
286
|
+
Every flex or grid container here styles its **children**. Plain HTML puts them
|
|
287
|
+
right there, a SPA usually does not:
|
|
288
|
+
|
|
289
|
+
```html
|
|
290
|
+
<!-- what the CSS expects -->
|
|
291
|
+
<div class="mw-grid-2">
|
|
292
|
+
<div class="mw-card">…</div>
|
|
293
|
+
<div class="mw-card">…</div>
|
|
294
|
+
</div>
|
|
295
|
+
|
|
296
|
+
<!-- what a component tree produces - one item, not two -->
|
|
297
|
+
<div class="mw-grid-2">
|
|
298
|
+
<app-card>…</app-card>
|
|
299
|
+
<app-card>…</app-card>
|
|
300
|
+
</div>
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Two cards side by side still work, because each host _is_ one item. It breaks
|
|
304
|
+
when one host wraps several intended items, or when a host sits between the
|
|
305
|
+
container and a single child that brings its own width - the host becomes the
|
|
306
|
+
item and shrinks to content width. Nothing errors, the layout is just wrong.
|
|
307
|
+
|
|
308
|
+
`mw-d-contents` on the host removes its box, so the children become the items:
|
|
309
|
+
|
|
310
|
+
```typescript
|
|
311
|
+
@Component({
|
|
312
|
+
selector: 'app-header',
|
|
313
|
+
host: { class: 'mw-d-contents' },
|
|
314
|
+
…
|
|
315
|
+
})
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
The trade-off: an element with `display: contents` has no box, so background,
|
|
319
|
+
padding, border and transforms on that host stop working. If you need those, keep
|
|
320
|
+
the box and give it `width: 100%` (flex row) or `mw-flex-1` instead.
|
|
321
|
+
|
|
322
|
+
`mw-header` already absorbs a wrapper on its own, no `mw-d-contents` needed
|
|
323
|
+
there. The grid, tag, button-bar, form-action, modal-footer and toast containers
|
|
324
|
+
do not.
|
|
325
|
+
|
|
280
326
|
**Flex** - `mw-flex-row`, `mw-flex-column`, `mw-flex-wrap`, `mw-flex-nowrap`,
|
|
281
327
|
`mw-flex-1`, `mw-flex-grow-1`, `mw-flex-shrink-0`,
|
|
282
328
|
`mw-justify-start|end|center|between|around|evenly`,
|
|
@@ -57,6 +57,7 @@ a palette switch meant setting 41 variables.
|
|
|
57
57
|
| `--mw-font-family-base`, `-heading`, `-mono` | Font stacks (default: system stacks - no font is bundled) |
|
|
58
58
|
| `--mw-hero-background` | Hero image (`url(...)`) |
|
|
59
59
|
| `--mw-transition` | Global transition (`all 0.3s ease`) |
|
|
60
|
+
| `--mw-card-img-height` | Per-card image height (default `210px`; `mw-card-lg`/`-xl` set it to 340px/480px) |
|
|
60
61
|
| `--mw-table-scroll-height` | Per-table height cap for `mw-table-responsive-scroll` |
|
|
61
62
|
| `--mw-internal-theme-mode` | Read-only: what `$mw-theme-mode` was compiled to |
|
|
62
63
|
|
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,18 @@ Patch releases are only for test purposes - here I only document major and minor
|
|
|
6
6
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
7
7
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
8
8
|
|
|
9
|
+
## [3.7.0] - 2026-08-07
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- Header container layout
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- Cards no longer create a stacking context
|
|
18
|
+
- Tooltips inside cards are no longer cut off
|
|
19
|
+
- Tooltip arrow visibility
|
|
20
|
+
|
|
9
21
|
## [3.6.0] - 2026-08-05
|
|
10
22
|
|
|
11
23
|
### Fixed
|