maverick-wave 5.22.0 → 5.23.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 +11 -4
- package/.claude/skills/mw-maverick-wave/references/components.md +123 -11
- package/.claude/skills/mw-maverick-wave/references/layout.md +10 -0
- package/.claude/skills/mw-maverick-wave/references/theming.md +5 -0
- package/CHANGELOG.md +8 -0
- package/README.md +2 -2
- package/index.html +18 -0
- package/maverick-wave.min.css +3 -3
- package/package.json +2 -2
- package/src/partials/contact-container.html +85 -0
- package/src/partials/documentation-container.html +3 -0
- package/src/partials/leader-row-container.html +139 -0
- package/src/partials/lunch-menu-container.html +341 -0
- package/src/scss/abstracts/_functions.scss +38 -7
- package/src/scss/components/_contact.scss +29 -0
- package/src/scss/components/_date-stamp.scss +141 -0
- package/src/scss/components/_index.scss +3 -0
- package/src/scss/components/_leader-row.scss +89 -0
- package/src/scss/components/_pricing.scss +4 -0
- package/src/scss/layout/_grid.scss +6 -0
- package/src/scss/layout/_main.scss +16 -0
|
@@ -232,6 +232,8 @@ none of them survive into the compiled CSS. Full list in `references/theming.md`
|
|
|
232
232
|
end a key of `$font-sizes` or a plain rem/px length. The rem term is the
|
|
233
233
|
point: a vw-only clamp ignores the reader's font size and stops responding to
|
|
234
234
|
zoom. A headline passes `$to: 'xl'`.
|
|
235
|
+
- `fluid-container($min, $max, $from, $to)` - the same ramp in `cqi` against the
|
|
236
|
+
container. Use it instead of `fluid()` inside a `@container` block.
|
|
235
237
|
- `media-up($bp)` / `media-down($bp)` - the breakpoint map as a query.
|
|
236
238
|
- `touch-context($bp: 'md')` - coarse pointer _or_ narrow viewport, the condition
|
|
237
239
|
every target-size rule in the framework hangs under.
|
|
@@ -255,10 +257,13 @@ Everything below is documented in `references/components.md` unless marked other
|
|
|
255
257
|
**Containers** `mw-card` (+ `simple`, `lg`, `xl`, `stack`, badge, ribbon,
|
|
256
258
|
feature frame) ·
|
|
257
259
|
`mw-panel` · `mw-tile` · `mw-accordion` · `mw-tabs` · `mw-modal` ·
|
|
258
|
-
`mw-item-list` family · `mw-offer` (+ `-head`, `-name`)
|
|
260
|
+
`mw-item-list` family · `mw-offer` (+ `-head`, `-name`) ·
|
|
261
|
+
`mw-leader-row` (+ `-label`, `-value`, `-top`, `-dashed`, `-solid`) ·
|
|
262
|
+
`mw-date-stamp` (+ `-day`, `-date`, `-body`, `-today`) ·
|
|
263
|
+
`mw-contact` (+ `-row`, `-label`)
|
|
259
264
|
|
|
260
265
|
**Pricing** `mw-price` (+ `-amount`, `-fraction`, `-currency`, `-original`,
|
|
261
|
-
`-period`, `-word`, `-note`, `sm`/`lg`, `inline`, `center`, `plain`)
|
|
266
|
+
`-period`, `-word`, `-note`, `xs`/`sm`/`lg`, `inline`, `center`, `plain`)
|
|
262
267
|
|
|
263
268
|
**Data & status** `mw-table` (+ `subtle`, `sticky-head`, `cards`, `compact`,
|
|
264
269
|
`hover`, responsive wrappers) · `mw-kanban` (+ `plain`, `compact`) ·
|
|
@@ -290,8 +295,10 @@ feature frame) ·
|
|
|
290
295
|
`mw-input-group` · `mw-prefilled` · `mw-form` / `mw-form-group` /
|
|
291
296
|
`mw-form-actions` · `mw-login`
|
|
292
297
|
|
|
293
|
-
**Layout** (`references/layout.md`) `mw-main` · `mw-container`
|
|
294
|
-
`mw-
|
|
298
|
+
**Layout** (`references/layout.md`) `mw-main` · `mw-container` (+ `-narrow`) ·
|
|
299
|
+
`mw-content` ·
|
|
300
|
+
`mw-section` (+ `mw-section-intro`) · `mw-page-header` · `mw-grid-*`
|
|
301
|
+
(+ `mw-grid-even`) ·
|
|
295
302
|
`mw-columns-2/3` · `mw-row-split` · `mw-hero` (+ `mw-scroll-hint`, `-end`) ·
|
|
296
303
|
`mw-parallax` (+ `-media`, `-content`, `-dimmed`, `-sticky`, `-rise`,
|
|
297
304
|
`-slow`, `-pattern`) · `mw-footer`
|
|
@@ -336,9 +336,9 @@ tag:
|
|
|
336
336
|
```
|
|
337
337
|
|
|
338
338
|
- Everything in the row is sized in `em` off `--mw-price-size`, so
|
|
339
|
-
`mw-price-sm` (1.5rem) and `mw-price-lg` (3rem) move
|
|
340
|
-
cents, unit and struck original included. Set the
|
|
341
|
-
size.
|
|
339
|
+
`mw-price-xs` (1.3rem), `mw-price-sm` (1.5rem) and `mw-price-lg` (3rem) move
|
|
340
|
+
the whole row at once - cents, unit and struck original included. Set the
|
|
341
|
+
token yourself for any other size.
|
|
342
342
|
- `mw-price-original` is muted **and** struck, and it takes its own line
|
|
343
343
|
**above** the new price. Muted alone reads as a footnote; the line is what
|
|
344
344
|
says this is no longer the price. The rule is drawn explicitly, because the
|
|
@@ -351,8 +351,8 @@ tag:
|
|
|
351
351
|
baseline, not raised to the cap height - raised cents are a discounter's idiom
|
|
352
352
|
and make a service price read cheaper than it is.
|
|
353
353
|
- `mw-price-currency` and `mw-price-period` stop shrinking at 0.8rem, and
|
|
354
|
-
`mw-price-original` at 0.9rem.
|
|
355
|
-
|
|
354
|
+
`mw-price-original` at 0.9rem. At `mw-price-xs` the `em` chain would put them
|
|
355
|
+
under 10px, which is where the floor earns its keep.
|
|
356
356
|
- `mw-price-word` for "On request" or "Free" - bold, so it holds the same slot in
|
|
357
357
|
a row of cards, but set well below a figure. Its line box is scaled back up to
|
|
358
358
|
the amount's, so a word and a number in neighbouring cards land on one line.
|
|
@@ -361,12 +361,12 @@ tag:
|
|
|
361
361
|
- A `mw-tag` or `mw-badge` placed directly in the row is centred against the
|
|
362
362
|
digits rather than hung off their baseline.
|
|
363
363
|
|
|
364
|
-
| Class
|
|
365
|
-
|
|
|
366
|
-
| `mw-price-sm/lg`
|
|
367
|
-
| `mw-price-inline`
|
|
368
|
-
| `mw-price-center`
|
|
369
|
-
| `mw-price-plain`
|
|
364
|
+
| Class | What it does |
|
|
365
|
+
| ------------------- | ---------------------------------------------- |
|
|
366
|
+
| `mw-price-xs/sm/lg` | Retunes `--mw-price-size`, everything follows |
|
|
367
|
+
| `mw-price-inline` | Old price in front of the new one, on one line |
|
|
368
|
+
| `mw-price-center` | Centres the row |
|
|
369
|
+
| `mw-price-plain` | Body colour instead of the brand |
|
|
370
370
|
|
|
371
371
|
A struck-through price is a visual convention a screen reader does not pass on -
|
|
372
372
|
`<s>` is announced by almost none of them. Wherever an old and a new price stand
|
|
@@ -1473,6 +1473,81 @@ deprecated). Any card fits into the content wrapper.
|
|
|
1473
1473
|
across it. Nothing to switch on. It is skipped on `mw-avatar-initials`, on
|
|
1474
1474
|
touch, under `prefers-reduced-motion` and under `mw-hover-static`.
|
|
1475
1475
|
|
|
1476
|
+
## Date stamp
|
|
1477
|
+
|
|
1478
|
+
The date on a dated card - an event, a changelog entry, a day on a menu. It
|
|
1479
|
+
answers to the **card**, not the viewport: narrow, it is a muted line above the
|
|
1480
|
+
title; once the card is wide enough that a single column would leave its right
|
|
1481
|
+
half empty, the same markup becomes a column on the left.
|
|
1482
|
+
|
|
1483
|
+
```html
|
|
1484
|
+
<article class="mw-card mw-offer">
|
|
1485
|
+
<div class="mw-card-body">
|
|
1486
|
+
<p class="mw-date-stamp mw-date-stamp-today">
|
|
1487
|
+
<span class="mw-date-stamp-day">Fri</span>
|
|
1488
|
+
<span class="mw-date-stamp-date">18.09.</span>
|
|
1489
|
+
</p>
|
|
1490
|
+
<div class="mw-date-stamp-body">
|
|
1491
|
+
<h4 class="mw-text-base mw-text-bold mw-mb-2">Baked fish fillet</h4>
|
|
1492
|
+
<p class="mw-text-sm mw-text-muted mw-mb-0">In beer batter.</p>
|
|
1493
|
+
</div>
|
|
1494
|
+
<p class="mw-price mw-price-xs">
|
|
1495
|
+
<span class="mw-price-amount">11.90</span>
|
|
1496
|
+
<span class="mw-price-currency">Euro</span>
|
|
1497
|
+
</p>
|
|
1498
|
+
</div>
|
|
1499
|
+
</article>
|
|
1500
|
+
```
|
|
1501
|
+
|
|
1502
|
+
- `mw-date-stamp-body` wraps everything that is not the stamp or the price. It
|
|
1503
|
+
is `display: contents` on a narrow card, so the body still sees the title and
|
|
1504
|
+
the price as its own children - which is what `mw-offer` selects on. On a wide
|
|
1505
|
+
card it becomes the middle column.
|
|
1506
|
+
- The price is a **sibling** of the wrapper, not inside it. Give the card one
|
|
1507
|
+
and it gets a third column at the right edge; leave it out and the card is two
|
|
1508
|
+
columns. With more than one dish per card, put the price on a
|
|
1509
|
+
`mw-leader-row` with the dish instead - an empty third track would still
|
|
1510
|
+
charge the card a gap.
|
|
1511
|
+
- Write the day as `Fri`, not `FRI` - the uppercase is `text-transform`, so a
|
|
1512
|
+
screen reader still reads a word rather than three letters.
|
|
1513
|
+
- Day column width, day font size, the column gap and the card's block padding
|
|
1514
|
+
all ramp with the **card**, from 420px to 900px wide, via
|
|
1515
|
+
`fluid-container()`. A narrow card in a wide window gets narrow-card sizing -
|
|
1516
|
+
which is the point of putting the switch in a container query at all.
|
|
1517
|
+
- `mw-date-stamp-today` drops the muting for a **fill**: on a wide card it spans
|
|
1518
|
+
the full card height, rounded to the card's own left corners and cut square
|
|
1519
|
+
against the content. A text colour would compete with the price, which is
|
|
1520
|
+
already the brand colour.
|
|
1521
|
+
- Cards in a stack want `mw-grid-even` next to `mw-grid-1`, or the card with the
|
|
1522
|
+
longer description ends up taller than the rest of the week.
|
|
1523
|
+
|
|
1524
|
+
## Contact
|
|
1525
|
+
|
|
1526
|
+
How to reach someone - postal address, phone, mail. It belongs on an
|
|
1527
|
+
`<address>`, and undoing that element's italics is most of what the component
|
|
1528
|
+
does; the rest is a label column wide enough that the values line up.
|
|
1529
|
+
|
|
1530
|
+
```html
|
|
1531
|
+
<address class="mw-contact">
|
|
1532
|
+
<p class="mw-text-bold">Gasthaus Lamm</p>
|
|
1533
|
+
<p>Marktplatz 3<br />72622 Musterhausen</p>
|
|
1534
|
+
<p class="mw-contact-row">
|
|
1535
|
+
<span class="mw-contact-label">Phone</span>
|
|
1536
|
+
<a class="mw-link" href="tel:+497123456789">07123 456789</a>
|
|
1537
|
+
</p>
|
|
1538
|
+
</address>
|
|
1539
|
+
```
|
|
1540
|
+
|
|
1541
|
+
- `<address>` is for the contact details of its nearest `<article>` or of the
|
|
1542
|
+
page - not for any postal address that happens to be on it.
|
|
1543
|
+
- The label column is 5rem and fixed. An auto column is as wide as its own word,
|
|
1544
|
+
so "Phone" and "Email" would start their values in different places.
|
|
1545
|
+
- Wrap phone and mail in `tel:` and `mailto:` links and mark them `mw-link` -
|
|
1546
|
+
in a block of plain lines an unstyled link reads as text.
|
|
1547
|
+
- Opening hours are **not** part of this. A day, its times and a line between
|
|
1548
|
+
them is a `mw-leader-row` in a `<dl>`, one row per day, and a note for the
|
|
1549
|
+
rest.
|
|
1550
|
+
|
|
1476
1551
|
## Item lists
|
|
1477
1552
|
|
|
1478
1553
|
Layout containers for arbitrary children - the children need no classes.
|
|
@@ -1533,6 +1608,43 @@ rest, see `references/forms.md`) work here too. Row height is a list concern -
|
|
|
1533
1608
|
use the list's own `-compact` / `-large` modifiers rather than
|
|
1534
1609
|
`mw-checkbox-sm` / `-lg`, which sit on the wrong element to reach the box.
|
|
1535
1610
|
|
|
1611
|
+
## Leader row
|
|
1612
|
+
|
|
1613
|
+
A label on the left, its value on the right, a dotted line bridging the gap -
|
|
1614
|
+
the row a menu, a table of contents and an invoice all draw. The markup is two
|
|
1615
|
+
spans; the line is the row's own `::before`, so it stays out of the
|
|
1616
|
+
accessibility tree and no filler element needs `aria-hidden`.
|
|
1617
|
+
|
|
1618
|
+
```html
|
|
1619
|
+
<p class="mw-leader-row mw-leader-row-top">
|
|
1620
|
+
<span class="mw-leader-row-label mw-text-bold">Roast pork with dumpling</span>
|
|
1621
|
+
<span class="mw-leader-row-value mw-text-bold mw-text-primary">17.50</span>
|
|
1622
|
+
</p>
|
|
1623
|
+
```
|
|
1624
|
+
|
|
1625
|
+
- Label and value is what `<dl>` is for, and since HTML 5.2 a `<div>` may group
|
|
1626
|
+
a `<dt>` and its `<dd>` inside one - so the semantic version costs no extra
|
|
1627
|
+
element over the `<p>`. Put `mw-leader-row` on that `<div>`. Use it where the
|
|
1628
|
+
pair **is** the content; where every row also carries a description, a `<p>`
|
|
1629
|
+
stays simpler.
|
|
1630
|
+
- `mw-leader-row-top` keeps the value beside the **first** line of a wrapping
|
|
1631
|
+
label instead of the last. On a menu that is where the price belongs - next to
|
|
1632
|
+
the dish, not somewhere down in its description.
|
|
1633
|
+
- A second `mw-leader-row-value` needs no extra class. Both sit after the
|
|
1634
|
+
leader, with a mark in the leader's colour between them - "11.30 - 14.00 |
|
|
1635
|
+
17.00 - 23.00". Without it the pair reads as one long range.
|
|
1636
|
+
- Values are set in tabular figures and never break, so a column of them lines
|
|
1637
|
+
up. The label wraps between its words and stops at its longest one; past that
|
|
1638
|
+
the whole row wraps, with the values dropping under the label. Nothing shrinks
|
|
1639
|
+
to one letter per line.
|
|
1640
|
+
- Keep `mw-price` out of a leader row: it sets its own baseline and the leader
|
|
1641
|
+
would no longer meet it. Plain text in the value span, or the price in a
|
|
1642
|
+
column of its own.
|
|
1643
|
+
|
|
1644
|
+
`mw-leader-row-dashed` and `mw-leader-row-solid` swap the line style; a single
|
|
1645
|
+
row retunes with `--mw-leader-row-color`, `--mw-leader-row-style` and
|
|
1646
|
+
`--mw-leader-row-width`.
|
|
1647
|
+
|
|
1536
1648
|
## HTML lists
|
|
1537
1649
|
|
|
1538
1650
|
`mw-list` is the base (spacing for `li`), combined with one of:
|
|
@@ -35,6 +35,11 @@
|
|
|
35
35
|
desktop; stepping the gutter at a breakpoint instead would make the container
|
|
36
36
|
jump backwards at the step. Both values are tokens,
|
|
37
37
|
`--mw-container-gutter` and `--mw-container-width`.
|
|
38
|
+
- `mw-container-narrow` sits **inside** a `mw-container` and gives the content
|
|
39
|
+
80% of it, back to 90% below `lg` and the full width below `md`. For a column
|
|
40
|
+
of full-width cards, where a 1200px line leaves more empty card than content.
|
|
41
|
+
It centers itself; put nothing else in it that has to line up with the
|
|
42
|
+
headings outside.
|
|
38
43
|
- `mw-content` (`flex: 1` + top padding) is the alternative to `mw-section` when
|
|
39
44
|
a page has one single content area. `mw-content-centered` centers it
|
|
40
45
|
vertically over the full viewport - login pages, error pages.
|
|
@@ -459,6 +464,11 @@ way.
|
|
|
459
464
|
| `mw-grid-flex` | 12 columns + `mw-col-span-1` … `mw-col-span-12` | single column below `md` |
|
|
460
465
|
| `mw-grid` | no template, just grid + gap | - |
|
|
461
466
|
|
|
467
|
+
`mw-grid-even` is a modifier, not a grid - add it to one of the above and every
|
|
468
|
+
row becomes as tall as the tallest instead of as tall as its own contents. For a
|
|
469
|
+
column of cards that should end on one line even when one of them carries an
|
|
470
|
+
extra sentence.
|
|
471
|
+
|
|
462
472
|
Every one of them has a `-lg` twin with a wider gap (2.5rem instead of 1.35rem):
|
|
463
473
|
`mw-grid-2-lg`, `mw-grid-3-lg`, `mw-grid-4-lg`, `mw-grid-5-lg`, `mw-grid-1-lg`,
|
|
464
474
|
`mw-grid-auto-lg`, `mw-grid-flex-lg`, `mw-grid-lg`.
|
|
@@ -389,6 +389,11 @@ Functions read the maps: `spacing('4')`, `font-size('lg')`,
|
|
|
389
389
|
responding to zoom. The default range ends at `md` because that is where the
|
|
390
390
|
stepped heading sizes it replaces reached their largest value - a headline
|
|
391
391
|
that should keep growing passes `$to: 'xl'`.
|
|
392
|
+
- `fluid-container($min, $max, $from, $to)` - the same ramp measured against the
|
|
393
|
+
container instead of the viewport, so the slope lands in `cqi`. For anything
|
|
394
|
+
inside a `@container` block: sizing there off `vw` hands a 440px card in a
|
|
395
|
+
1400px window the measurements a 900px card was drawn for. The endpoints are
|
|
396
|
+
container widths, not breakpoint names, because a container has none.
|
|
392
397
|
- `media-up($bp)` / `media-down($bp)` - the `$breakpoints` map as range syntax,
|
|
393
398
|
`width >= bp` and `width < bp`, so the two never overlap at the breakpoint.
|
|
394
399
|
- `touch-context($bp: 'md')` - coarse pointer _or_ narrow viewport. Every
|
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,14 @@ 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
|
+
## [5.23.0] - 2026-09-20
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- leader-row
|
|
14
|
+
- lunch menu with 2 variants
|
|
15
|
+
- contact cards
|
|
16
|
+
|
|
9
17
|
## [5.22.0] - 2026-09-19
|
|
10
18
|
|
|
11
19
|
### Fixed
|
package/README.md
CHANGED
|
@@ -45,12 +45,12 @@ The result is a framework that balances utility with simplicity, offering develo
|
|
|
45
45
|
<title>My MaverickWave Project</title>
|
|
46
46
|
<link
|
|
47
47
|
rel="stylesheet"
|
|
48
|
-
href="https://cdn.jsdelivr.net/npm/maverick-wave@5.
|
|
48
|
+
href="https://cdn.jsdelivr.net/npm/maverick-wave@5.23.0/maverick-wave.min.css"
|
|
49
49
|
/>
|
|
50
50
|
</head>
|
|
51
51
|
<body>
|
|
52
52
|
<!-- Your content here -->
|
|
53
|
-
<script src="https://cdn.jsdelivr.net/npm/maverick-wave@5.
|
|
53
|
+
<script src="https://cdn.jsdelivr.net/npm/maverick-wave@5.23.0/maverick-wave.min.js"></script>
|
|
54
54
|
</body>
|
|
55
55
|
</html>
|
|
56
56
|
```
|
package/index.html
CHANGED
|
@@ -659,6 +659,7 @@
|
|
|
659
659
|
<a href="#modals" class="mw-section-btn">Modals</a>
|
|
660
660
|
<a href="#html-lists" class="mw-section-btn">HTML Lists</a>
|
|
661
661
|
<a href="#item-lists" class="mw-section-btn">Item Lists</a>
|
|
662
|
+
<a href="#leader-row" class="mw-section-btn">Leader Row</a>
|
|
662
663
|
<a href="#stepper" class="mw-section-btn">Stepper</a>
|
|
663
664
|
<a href="#parallax" class="mw-section-btn">Parallax</a>
|
|
664
665
|
</nav>
|
|
@@ -705,6 +706,11 @@
|
|
|
705
706
|
@@include('./src/partials/item-lists-container.html')
|
|
706
707
|
</div>
|
|
707
708
|
|
|
709
|
+
<!-- Leader Row container -->
|
|
710
|
+
<div id="leader-row">
|
|
711
|
+
@@include('./src/partials/leader-row-container.html')
|
|
712
|
+
</div>
|
|
713
|
+
|
|
708
714
|
<!-- Stepper container -->
|
|
709
715
|
<div id="stepper">
|
|
710
716
|
@@include('./src/partials/stepper-container.html')
|
|
@@ -899,6 +905,8 @@
|
|
|
899
905
|
<a href="#tables" class="mw-section-btn">Tables</a>
|
|
900
906
|
<a href="#kanban" class="mw-section-btn">Kanban</a>
|
|
901
907
|
<a href="#calendar" class="mw-section-btn">Calendar</a>
|
|
908
|
+
<a href="#lunch-menu" class="mw-section-btn">Lunch Menu</a>
|
|
909
|
+
<a href="#contact" class="mw-section-btn">Contact</a>
|
|
902
910
|
<a href="#pagination" class="mw-section-btn">Pagination</a>
|
|
903
911
|
<a href="#timelines" class="mw-section-btn">Timelines</a>
|
|
904
912
|
<a href="#gallery" class="mw-section-btn">Image Gallery</a>
|
|
@@ -937,6 +945,16 @@
|
|
|
937
945
|
@@include('./src/partials/calendar-container.html')
|
|
938
946
|
</div>
|
|
939
947
|
|
|
948
|
+
<!-- Lunch Menu container -->
|
|
949
|
+
<div id="lunch-menu">
|
|
950
|
+
@@include('./src/partials/lunch-menu-container.html')
|
|
951
|
+
</div>
|
|
952
|
+
|
|
953
|
+
<!-- Contact container -->
|
|
954
|
+
<div id="contact">
|
|
955
|
+
@@include('./src/partials/contact-container.html')
|
|
956
|
+
</div>
|
|
957
|
+
|
|
940
958
|
<!-- Pagination container -->
|
|
941
959
|
<div id="pagination">
|
|
942
960
|
@@include('./src/partials/pagination-container.html')
|