srcdev-nuxt-components 9.6.5 → 9.6.7
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/rules/consumer/a11y-no-focus-steal.md +14 -0
- package/.claude/skills/component-compliance-checklist.md +5 -1
- package/.claude/skills/components/display-toast.md +6 -3
- package/.claude/skills/components/page-hero-highlights.md +22 -18
- package/.claude/skills/components/social-icons-list.md +32 -5
- package/.claude/skills/css-dynamic-border-radius.md +114 -0
- package/.claude/skills/index.md +3 -2
- package/.claude/skills/storybook-add-story.md +6 -0
- package/.vscode/srcdev-component-display-toast.code-snippets +6 -8
- package/.vscode/srcdev-component-page-hero-highlights.code-snippets +2 -1
- package/.vscode/srcdev-component-social-icons-list.code-snippets +14 -0
- package/.vscode/srcdev-utility-dynamic-border-radius.code-snippets +31 -0
- package/app/assets/styles/setup/06.utility-classes/_dynamic-border-radius.css +27 -0
- package/app/assets/styles/setup/06.utility-classes/index.css +1 -0
- package/app/components/02.molecules/social-icons-list/CONSUMER-STYLING.md +97 -8
- package/app/components/02.molecules/social-icons-list/SocialIconsList.vue +80 -14
- package/app/components/02.molecules/social-icons-list/stories/SocialIconsList.stories.ts +230 -2
- package/app/components/02.molecules/social-icons-list/stories/social-icons-list-recipes.css +108 -0
- package/app/components/02.molecules/social-icons-list/tests/SocialIconsList.spec.ts +123 -52
- package/app/components/02.molecules/social-icons-list/tests/__snapshots__/SocialIconsList.spec.ts.snap +10 -4
- package/app/components/02.molecules/toast/CONSUMER-STYLING.md +9 -3
- package/app/components/02.molecules/toast/DisplayToast.vue +10 -10
- package/app/components/02.molecules/toast/DisplayToastProvider.vue +12 -4
- package/app/components/02.molecules/toast/stories/DisplayToast.stories.ts +200 -2
- package/app/components/02.molecules/toast/tests/DisplayToast.spec.ts +33 -12
- package/app/components/02.molecules/toast/tests/DisplayToastProvider.spec.ts +20 -0
- package/app/components/04.templates/page-hero-highlights/CONSUMER-STYLING.md +32 -12
- package/app/components/04.templates/page-hero-highlights/PageHeroHighlights.vue +56 -47
- package/app/components/04.templates/page-hero-highlights/stories/PageHeroHighlights.stories.ts +158 -307
- package/app/components/04.templates/page-hero-highlights/stories/PageHeroHighlightsHeader.stories.ts +10 -0
- package/app/components/04.templates/page-hero-highlights/tests/PageHeroHighlights.spec.ts +49 -27
- package/app/components/04.templates/page-hero-highlights/tests/PageHeroHighlightsHeader.spec.ts +42 -7
- package/app/components/04.templates/page-hero-highlights/tests/__snapshots__/PageHeroHighlights.spec.ts.snap +12 -10
- package/app/types/components/social-icons-list.d.ts +9 -0
- package/package.json +1 -1
|
@@ -198,21 +198,35 @@ describe("DisplayToast", () => {
|
|
|
198
198
|
|
|
199
199
|
// ─── Dismiss via Escape key ────────────────────────────────────────────────
|
|
200
200
|
|
|
201
|
-
it("transitions to hide class when Escape is pressed", async () => {
|
|
201
|
+
it("transitions to hide class when Escape is pressed on the toast", async () => {
|
|
202
202
|
await mountAndShow({ config: { behavior: { autoDismiss: false } } });
|
|
203
|
-
vi.advanceTimersByTime(
|
|
204
|
-
await nextTick();
|
|
203
|
+
vi.advanceTimersByTime(1);
|
|
205
204
|
toast()!.dispatchEvent(new KeyboardEvent("keydown", { key: "Escape", bubbles: true }));
|
|
206
205
|
await nextTick();
|
|
207
206
|
expect(toast()!.getAttribute("data-state")).toBe("hide");
|
|
208
207
|
});
|
|
209
208
|
|
|
209
|
+
it("dismisses on Escape pressed anywhere in the document, since it never takes focus", async () => {
|
|
210
|
+
await mountAndShow({ config: { behavior: { autoDismiss: false } } });
|
|
211
|
+
document.body.dispatchEvent(new KeyboardEvent("keydown", { key: "Escape", bubbles: true }));
|
|
212
|
+
await nextTick();
|
|
213
|
+
expect(toast()!.getAttribute("data-state")).toBe("hide");
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
it("ignores an Escape another handler has already claimed", async () => {
|
|
217
|
+
await mountAndShow({ config: { behavior: { autoDismiss: false } } });
|
|
218
|
+
const event = new KeyboardEvent("keydown", { key: "Escape", bubbles: true, cancelable: true });
|
|
219
|
+
event.preventDefault();
|
|
220
|
+
document.body.dispatchEvent(event);
|
|
221
|
+
await nextTick();
|
|
222
|
+
expect(toast()!.getAttribute("data-state")).toBe("show");
|
|
223
|
+
});
|
|
224
|
+
|
|
210
225
|
// ─── Dismiss via close button ─────────────────────────────────────────────
|
|
211
226
|
|
|
212
227
|
it("transitions to hide class when the close button is clicked", async () => {
|
|
213
228
|
await mountAndShow({ config: { behavior: { autoDismiss: false } } });
|
|
214
|
-
vi.advanceTimersByTime(
|
|
215
|
-
await nextTick();
|
|
229
|
+
vi.advanceTimersByTime(1);
|
|
216
230
|
(document.querySelector("[data-test-id='alert-dismiss']") as HTMLElement).click();
|
|
217
231
|
await nextTick();
|
|
218
232
|
expect(toast()!.getAttribute("data-state")).toBe("hide");
|
|
@@ -282,22 +296,29 @@ describe("DisplayToast", () => {
|
|
|
282
296
|
expect(toast()!.getAttribute("data-state")).toBe("hide");
|
|
283
297
|
});
|
|
284
298
|
|
|
285
|
-
it("does not
|
|
299
|
+
it("does not move focus to itself when shown", async () => {
|
|
300
|
+
await mountAndShow({ config: autoConfig });
|
|
301
|
+
vi.advanceTimersByTime(500);
|
|
302
|
+
await nextTick();
|
|
303
|
+
expect(document.activeElement).not.toBe(toast());
|
|
304
|
+
expect(toast()!.hasAttribute("data-paused")).toBe(false);
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
it("does not pause when focused after mouse input", async () => {
|
|
286
308
|
setFocusVisible(false);
|
|
287
309
|
await mountAndShow({ config: autoConfig });
|
|
288
|
-
|
|
310
|
+
(toast() as HTMLElement).focus();
|
|
289
311
|
await nextTick();
|
|
290
|
-
expect(document.activeElement).toBe(toast());
|
|
291
312
|
expect(toast()!.hasAttribute("data-paused")).toBe(false);
|
|
292
|
-
vi.advanceTimersByTime(
|
|
313
|
+
vi.advanceTimersByTime(1000);
|
|
293
314
|
await nextTick();
|
|
294
315
|
expect(toast()!.getAttribute("data-state")).toBe("hide");
|
|
295
316
|
});
|
|
296
317
|
|
|
297
|
-
it("pauses when
|
|
318
|
+
it("pauses when a keyboard user focuses the toast, until focus leaves", async () => {
|
|
298
319
|
setFocusVisible(true);
|
|
299
320
|
await mountAndShow({ config: autoConfig });
|
|
300
|
-
|
|
321
|
+
(toast() as HTMLElement).focus();
|
|
301
322
|
await nextTick();
|
|
302
323
|
expect(toast()!.hasAttribute("data-paused")).toBe(true);
|
|
303
324
|
vi.advanceTimersByTime(5000);
|
|
@@ -305,7 +326,7 @@ describe("DisplayToast", () => {
|
|
|
305
326
|
expect(toast()!.getAttribute("data-state")).toBe("show");
|
|
306
327
|
(toast() as HTMLElement).blur();
|
|
307
328
|
await nextTick();
|
|
308
|
-
vi.advanceTimersByTime(
|
|
329
|
+
vi.advanceTimersByTime(1000);
|
|
309
330
|
await nextTick();
|
|
310
331
|
expect(toast()!.getAttribute("data-state")).toBe("hide");
|
|
311
332
|
});
|
|
@@ -208,6 +208,26 @@ describe("DisplayToastProvider", () => {
|
|
|
208
208
|
expect(items().length).toBe(0);
|
|
209
209
|
});
|
|
210
210
|
|
|
211
|
+
it("does not move focus to a toast when it appears", async () => {
|
|
212
|
+
await mountProvider(DisplayToastProvider);
|
|
213
|
+
show({ behavior: { autoDismiss: false } });
|
|
214
|
+
await nextTick();
|
|
215
|
+
await nextTick();
|
|
216
|
+
expect(document.activeElement).not.toBe(item());
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
it("dismisses only the newest toast when Escape is pressed outside the toasts", async () => {
|
|
220
|
+
await mountProvider(DisplayToastProvider, { props: { maxVisible: 2 } });
|
|
221
|
+
show({ content: { text: "First" }, behavior: { autoDismiss: false } });
|
|
222
|
+
show({ content: { text: "Second" }, behavior: { autoDismiss: false } });
|
|
223
|
+
await nextTick();
|
|
224
|
+
expect(items().length).toBe(2);
|
|
225
|
+
document.body.dispatchEvent(new KeyboardEvent("keydown", { key: "Escape", bubbles: true }));
|
|
226
|
+
await nextTick();
|
|
227
|
+
expect(items().length).toBe(1);
|
|
228
|
+
expect(item()!.textContent).toContain("First");
|
|
229
|
+
});
|
|
230
|
+
|
|
211
231
|
// ─── Auto-dismiss timer ───────────────────────────────────────────────────
|
|
212
232
|
|
|
213
233
|
it("auto-dismisses after duration", async () => {
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
|
|
7
7
|
| Token | Default | Controls |
|
|
8
8
|
|---|---|---|
|
|
9
|
-
| `--page-hero-highlights-max-width` | `1064px` | Central column cap
|
|
9
|
+
| `--page-hero-highlights-max-width` | `1064px` | Central column cap with `width-constrained` |
|
|
10
10
|
| `--page-hero-highlights-gutter-mobile` | `16px` | Side gutter |
|
|
11
|
-
| `--page-hero-highlights-gutter-tablet` | `40px` | Side gutter at 768px+
|
|
12
|
-
| `--page-hero-highlights-gutter-desktop` | `32px` | Side gutter at 1024px+ |
|
|
13
|
-
| `--page-hero-highlights-header-background` | `
|
|
14
|
-
| `--page-hero-highlights-content-background` | `
|
|
11
|
+
| `--page-hero-highlights-gutter-tablet` | `40px` | Side gutter at 768px+ of the component's width |
|
|
12
|
+
| `--page-hero-highlights-gutter-desktop` | `32px` | Side gutter at 1024px+ of the component's width |
|
|
13
|
+
| `--page-hero-highlights-header-background` | `var(--theme-surface-subtle)` | Header zone background |
|
|
14
|
+
| `--page-hero-highlights-content-background` | `transparent` | Content zone background |
|
|
15
15
|
| `--page-hero-highlights-content-start-gap` | `1.2rem` | Space above the content panel |
|
|
16
16
|
| `--page-hero-highlights-content-end-gap` | `1.2rem` | Space below the content zone |
|
|
17
17
|
| `--page-hero-highlights-content-margin-block-start` | `2.4rem` | Space above the content slot |
|
|
@@ -23,24 +23,25 @@
|
|
|
23
23
|
|---|---|---|
|
|
24
24
|
| `--page-hero-highlights-strip-gap` | `1rem` | Gap between highlight items |
|
|
25
25
|
| `--page-hero-highlights-strip-inset` | `1.2rem` | Strip inline inset (with the content panel) |
|
|
26
|
+
| `--page-hero-highlights-item-min-width` | `12rem` | Narrowest an item gets with `highlights-equal-widths` before the strip wraps to a new row |
|
|
26
27
|
| `--page-hero-highlights-title-height` | `1fr` | Title row height |
|
|
27
28
|
| `--page-hero-highlights-title-height-baseline` | `4rem` | Title row height with `highlight-title-baseline` |
|
|
28
29
|
| `--page-hero-highlights-item-padding` | `1.2rem` | Item padding |
|
|
29
30
|
| `--page-hero-highlights-item-padding-block-start` | the item padding | Item top padding |
|
|
30
31
|
| `--page-hero-highlights-item-padding-block-start-baseline` | `0` | Item top padding with `highlight-title-baseline` |
|
|
31
32
|
| `--page-hero-highlights-item-rows-gap` | `1.2rem` | Gap between item title and body |
|
|
32
|
-
| `--page-hero-highlights-item-background` | `
|
|
33
|
-
| `--page-hero-highlights-item-border` | `1px solid
|
|
33
|
+
| `--page-hero-highlights-item-background` | `var(--page-bg, Canvas)` | Item background |
|
|
34
|
+
| `--page-hero-highlights-item-border` | `1px solid var(--theme-border)` | Item border |
|
|
34
35
|
| `--page-hero-highlights-item-border-radius` | `8px` | Item rounding |
|
|
35
|
-
| `--page-hero-highlights-item-colour` | `
|
|
36
|
+
| `--page-hero-highlights-item-colour` | `var(--theme-text)` | Item text colour |
|
|
36
37
|
|
|
37
38
|
### Content panel (`content-panel`, on by default)
|
|
38
39
|
|
|
39
40
|
| Token | Default | Controls |
|
|
40
41
|
|---|---|---|
|
|
41
|
-
| `--page-hero-highlights-panel-background` | `var(--
|
|
42
|
-
| `--page-hero-highlights-panel-border` | `1px solid var(--
|
|
43
|
-
| `--page-hero-highlights-panel-outline` | `
|
|
42
|
+
| `--page-hero-highlights-panel-background` | `var(--theme-surface-subtle)` | Panel background |
|
|
43
|
+
| `--page-hero-highlights-panel-border` | `1px solid var(--theme-border)` | Panel border |
|
|
44
|
+
| `--page-hero-highlights-panel-outline` | `none` | Panel outline |
|
|
44
45
|
| `--page-hero-highlights-panel-border-radius` | `0.8rem` | Panel rounding |
|
|
45
46
|
|
|
46
47
|
### PageHeroHighlightsHeader
|
|
@@ -56,6 +57,20 @@
|
|
|
56
57
|
Private (not public API): `--_max-width`, `--_gutter`, `--_strip-inset`, `--_title-height`,
|
|
57
58
|
`--_item-padding`, `--_item-padding-block-start`, `--_header-slot-grid-row`.
|
|
58
59
|
|
|
60
|
+
> Changed 2026-10-16:
|
|
61
|
+
>
|
|
62
|
+
> - `width-constrained` was inverted: `true` gave a full-width column and `false` capped it at
|
|
63
|
+
> `--page-hero-highlights-max-width`, the opposite of every doc. It now matches the docs (`true` caps it,
|
|
64
|
+
> `content-align` applies). Flip any `width-constrained` you set to get the old look.
|
|
65
|
+
> - The tablet and desktop gutters never applied: their `@container` queries had no container to
|
|
66
|
+
> match. The root is now a named `page-hero-highlights` inline-size container and the rows sit in a
|
|
67
|
+
> new `.page-hero-highlights-grid` wrapper, so the gutters step at the component's own width.
|
|
68
|
+
> - Colour defaults are light, from theme tokens (were `darkblue`, `white`, `black` and `--slate-*`):
|
|
69
|
+
> set the header, item and panel tokens to keep a dark header.
|
|
70
|
+
> - `highlights-equal-widths` now wraps onto new rows below `--page-hero-highlights-item-min-width`
|
|
71
|
+
> instead of squeezing every item into one row, and grid tracks are `minmax(0, …)` so long
|
|
72
|
+
> unbroken text can't widen the layout. Highlight items get `overflow-wrap: anywhere`.
|
|
73
|
+
>
|
|
59
74
|
> Changed 2026-09-28: every token used to be declared on the root with its value, under generic
|
|
60
75
|
> names (`--max-width`, `--header-row-background-colour`, `--highlight-*`, `--content-row-*`,
|
|
61
76
|
> `--content-slot-*`, `--phh-*`), so a value set on an ancestor never landed and the names could
|
|
@@ -74,7 +89,7 @@ Private (not public API): `--_max-width`, `--_gutter`, `--_strip-inset`, `--_tit
|
|
|
74
89
|
| `.highlight-title-baseline` | root | `highlight-title-baseline` |
|
|
75
90
|
| `.equal-widths` / `.flexible-widths`, `.justify-*` | `.page-hero-highlights-strip` | `highlights-equal-widths`, `highlights-justify` |
|
|
76
91
|
|
|
77
|
-
Inner classes: `.page-hero-highlights-header-row`, `.page-hero-highlights-header-slot`,
|
|
92
|
+
Inner classes: `.page-hero-highlights-grid` (the grid itself, inside the root), `.page-hero-highlights-header-row`, `.page-hero-highlights-header-slot`,
|
|
78
93
|
`.page-hero-highlights-strip`, `.page-hero-highlights-content-row` (its `::before` is the content
|
|
79
94
|
panel), `.page-hero-highlights-content-slot`; header component `.page-hero-highlights-header-start`,
|
|
80
95
|
`.page-hero-highlights-header-end`.
|
|
@@ -96,6 +111,11 @@ Set the tokens above on an element you own (a page or section class, or a class
|
|
|
96
111
|
`<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
|
|
97
112
|
`:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
|
|
98
113
|
|
|
114
|
+
**Caveat:** the root is an inline-size container (`container: page-hero-highlights / inline-size`), so it
|
|
115
|
+
can't size itself from its content: give it a width from its context (a block in normal flow is fine; as a
|
|
116
|
+
flex or grid item give it `inline-size: 100%` or a track). The highlight item padding tokens are
|
|
117
|
+
re-declared by `highlight-title-baseline`, so with that prop on, set the `-baseline` variants.
|
|
118
|
+
|
|
99
119
|
---
|
|
100
120
|
|
|
101
121
|
## Class passthrough
|
|
@@ -5,17 +5,19 @@
|
|
|
5
5
|
:class="[elementClasses, componentClasses]"
|
|
6
6
|
:aria-labelledby="ariaLabelledby"
|
|
7
7
|
>
|
|
8
|
-
<div class="page-hero-highlights-
|
|
9
|
-
<div class="page-hero-highlights-header-
|
|
10
|
-
<
|
|
8
|
+
<div class="page-hero-highlights-grid">
|
|
9
|
+
<div class="page-hero-highlights-header-row">
|
|
10
|
+
<div class="page-hero-highlights-header-slot">
|
|
11
|
+
<slot name="header" :heading-id="headingId"></slot>
|
|
12
|
+
</div>
|
|
11
13
|
</div>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
<div class="page-hero-highlights-strip" :class="highlightClasses">
|
|
15
|
+
<slot name="highlights"></slot>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="page-hero-highlights-content-row">
|
|
18
|
+
<div class="page-hero-highlights-content-slot">
|
|
19
|
+
<slot name="content"></slot>
|
|
20
|
+
</div>
|
|
19
21
|
</div>
|
|
20
22
|
</div>
|
|
21
23
|
</component>
|
|
@@ -79,13 +81,7 @@ watch(
|
|
|
79
81
|
--_item-padding-block-start: var(--page-hero-highlights-item-padding-block-start, var(--_item-padding));
|
|
80
82
|
--_header-slot-grid-row: 1;
|
|
81
83
|
|
|
82
|
-
|
|
83
|
-
--_gutter: var(--page-hero-highlights-gutter-tablet, 40px);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
@container (width >= 1024px) {
|
|
87
|
-
--_gutter: var(--page-hero-highlights-gutter-desktop, 32px);
|
|
88
|
-
}
|
|
84
|
+
container: page-hero-highlights / inline-size;
|
|
89
85
|
|
|
90
86
|
&.highlight-title-baseline {
|
|
91
87
|
--_title-height: var(--page-hero-highlights-title-height-baseline, 4rem);
|
|
@@ -93,38 +89,44 @@ watch(
|
|
|
93
89
|
--_header-slot-grid-row: 1 / span 2;
|
|
94
90
|
}
|
|
95
91
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
grid-template-columns: var(--_gutter) 1fr var(--_gutter);
|
|
102
|
-
}
|
|
92
|
+
.page-hero-highlights-grid {
|
|
93
|
+
display: grid;
|
|
94
|
+
grid-template-rows: auto var(--_title-height) 1fr auto;
|
|
95
|
+
grid-template-columns: var(--_gutter) minmax(0, 1fr) var(--_gutter);
|
|
96
|
+
gap: 0;
|
|
103
97
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
grid-template-columns: var(--_gutter) minmax(0, var(--_max-width)) minmax(var(--_gutter), 1fr);
|
|
98
|
+
@container page-hero-highlights (width >= 768px) {
|
|
99
|
+
--_gutter: var(--page-hero-highlights-gutter-tablet, 40px);
|
|
107
100
|
}
|
|
108
101
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
max(var(--_gutter), (100% - var(--_max-width)) / 2)
|
|
112
|
-
1fr
|
|
113
|
-
max(var(--_gutter), (100% - var(--_max-width)) / 2);
|
|
102
|
+
@container page-hero-highlights (width >= 1024px) {
|
|
103
|
+
--_gutter: var(--page-hero-highlights-gutter-desktop, 32px);
|
|
114
104
|
}
|
|
115
105
|
}
|
|
116
106
|
|
|
107
|
+
&.width-constrained.content-align-start .page-hero-highlights-grid {
|
|
108
|
+
grid-template-columns: var(--_gutter) minmax(0, var(--_max-width)) minmax(var(--_gutter), 1fr);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
&.width-constrained.content-align-center .page-hero-highlights-grid {
|
|
112
|
+
grid-template-columns:
|
|
113
|
+
max(var(--_gutter), (100% - var(--_max-width)) / 2)
|
|
114
|
+
minmax(0, 1fr)
|
|
115
|
+
max(var(--_gutter), (100% - var(--_max-width)) / 2);
|
|
116
|
+
}
|
|
117
|
+
|
|
117
118
|
.page-hero-highlights-header-row {
|
|
118
119
|
grid-column: 1 / -1;
|
|
119
120
|
grid-row: 1 / 3;
|
|
120
121
|
display: grid;
|
|
121
122
|
grid-template-columns: subgrid;
|
|
122
123
|
grid-template-rows: subgrid;
|
|
123
|
-
background-color: var(--page-hero-highlights-header-background,
|
|
124
|
+
background-color: var(--page-hero-highlights-header-background, var(--theme-surface-subtle));
|
|
124
125
|
|
|
125
126
|
.page-hero-highlights-header-slot {
|
|
126
127
|
grid-column: 2;
|
|
127
128
|
grid-row: var(--_header-slot-grid-row);
|
|
129
|
+
min-inline-size: 0;
|
|
128
130
|
container-type: inline-size;
|
|
129
131
|
}
|
|
130
132
|
}
|
|
@@ -134,19 +136,27 @@ watch(
|
|
|
134
136
|
grid-row: 2 / 4;
|
|
135
137
|
position: relative;
|
|
136
138
|
z-index: 1;
|
|
139
|
+
min-inline-size: 0;
|
|
137
140
|
gap: var(--page-hero-highlights-strip-gap, 1rem);
|
|
138
141
|
margin-inline-start: 0;
|
|
139
142
|
|
|
140
143
|
&.equal-widths {
|
|
141
144
|
display: grid;
|
|
142
|
-
grid-
|
|
143
|
-
|
|
145
|
+
grid-template-columns: repeat(
|
|
146
|
+
auto-fit,
|
|
147
|
+
minmax(min(100%, var(--page-hero-highlights-item-min-width, 12rem)), 1fr)
|
|
148
|
+
);
|
|
144
149
|
}
|
|
145
150
|
|
|
146
151
|
&.flexible-widths {
|
|
147
152
|
display: flex;
|
|
148
153
|
flex-wrap: wrap;
|
|
149
154
|
justify-content: center;
|
|
155
|
+
|
|
156
|
+
& > * {
|
|
157
|
+
min-inline-size: 0;
|
|
158
|
+
max-inline-size: 100%;
|
|
159
|
+
}
|
|
150
160
|
}
|
|
151
161
|
|
|
152
162
|
&.justify-start {
|
|
@@ -173,18 +183,19 @@ watch(
|
|
|
173
183
|
display: grid;
|
|
174
184
|
grid-template-rows: subgrid;
|
|
175
185
|
grid-auto-flow: row;
|
|
186
|
+
overflow-wrap: anywhere;
|
|
176
187
|
padding-block: var(--_item-padding-block-start) var(--_item-padding);
|
|
177
188
|
padding-inline: var(--_item-padding);
|
|
178
|
-
background-color: var(--page-hero-highlights-item-background,
|
|
179
|
-
border: var(--page-hero-highlights-item-border, 1px solid
|
|
189
|
+
background-color: var(--page-hero-highlights-item-background, var(--page-bg, Canvas));
|
|
190
|
+
border: var(--page-hero-highlights-item-border, 1px solid var(--theme-border));
|
|
180
191
|
border-radius: var(--page-hero-highlights-item-border-radius, 8px);
|
|
181
|
-
color: var(--page-hero-highlights-item-colour,
|
|
192
|
+
color: var(--page-hero-highlights-item-colour, var(--theme-text));
|
|
182
193
|
|
|
183
194
|
.page-hero-highlights-item-title {
|
|
184
195
|
display: grid;
|
|
185
196
|
grid-row: 2;
|
|
186
197
|
align-items: end;
|
|
187
|
-
|
|
198
|
+
block-size: var(--_title-height);
|
|
188
199
|
}
|
|
189
200
|
|
|
190
201
|
.page-hero-highlights-item-body {
|
|
@@ -202,12 +213,13 @@ watch(
|
|
|
202
213
|
grid-template-rows: subgrid;
|
|
203
214
|
position: relative;
|
|
204
215
|
isolation: isolate;
|
|
205
|
-
background-color: var(--page-hero-highlights-content-background,
|
|
216
|
+
background-color: var(--page-hero-highlights-content-background, transparent);
|
|
206
217
|
padding-block-end: var(--page-hero-highlights-content-end-gap, 1.2rem);
|
|
207
218
|
|
|
208
219
|
.page-hero-highlights-content-slot {
|
|
209
220
|
grid-column: 2;
|
|
210
221
|
grid-row: 2;
|
|
222
|
+
min-inline-size: 0;
|
|
211
223
|
margin-block: var(--page-hero-highlights-content-margin-block-start, 2.4rem)
|
|
212
224
|
var(--page-hero-highlights-content-margin, var(--_strip-inset));
|
|
213
225
|
margin-inline: 0;
|
|
@@ -222,15 +234,12 @@ watch(
|
|
|
222
234
|
.page-hero-highlights-content-row {
|
|
223
235
|
&::before {
|
|
224
236
|
content: "";
|
|
225
|
-
display: grid;
|
|
226
|
-
grid-template-columns: subgrid;
|
|
227
|
-
grid-template-rows: subgrid;
|
|
228
237
|
grid-column: 2;
|
|
229
238
|
grid-row: 1 / span 2;
|
|
230
|
-
margin-
|
|
231
|
-
background-color: var(--page-hero-highlights-panel-background, var(--
|
|
232
|
-
border: var(--page-hero-highlights-panel-border, 1px solid var(--
|
|
233
|
-
outline: var(--page-hero-highlights-panel-outline,
|
|
239
|
+
margin-block-start: var(--page-hero-highlights-content-start-gap, 1.2rem);
|
|
240
|
+
background-color: var(--page-hero-highlights-panel-background, var(--theme-surface-subtle));
|
|
241
|
+
border: var(--page-hero-highlights-panel-border, 1px solid var(--theme-border));
|
|
242
|
+
outline: var(--page-hero-highlights-panel-outline, none);
|
|
234
243
|
border-radius: var(--page-hero-highlights-panel-border-radius, 0.8rem);
|
|
235
244
|
}
|
|
236
245
|
|