srcdev-nuxt-components 9.6.0 → 9.6.1
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/component-compliance-checklist.md +8 -2
- package/.claude/skills/component-dynamic-slots.md +3 -3
- package/.claude/skills/component-export-types.md +10 -16
- package/.claude/skills/component-naming.md +1 -1
- package/.claude/skills/components/alert-content.md +9 -1
- package/.claude/skills/components/container-glow.md +21 -8
- package/.claude/skills/components/display-avatar.md +13 -7
- package/.claude/skills/components/display-chip.md +37 -24
- package/.claude/skills/components/display-pill.md +58 -10
- package/.claude/skills/components/display-prompt.md +8 -5
- package/.claude/skills/components/display-toast.md +21 -4
- package/.claude/skills/components/glowing-border.md +20 -2
- package/.claude/skills/components/responsive-header.md +11 -1
- package/.claude/skills/components/select-menu.md +54 -5
- package/.claude/skills/components/site-header.md +2 -2
- package/.claude/skills/components/tabbed-content.md +300 -0
- package/.claude/skills/composable-anchor-scroll.md +16 -15
- package/.claude/skills/index.md +4 -4
- package/.claude/skills/storybook-add-story.md +53 -0
- package/.claude/skills/theming-status-tokens.md +60 -0
- package/.vscode/srcdev-component-display-avatar.code-snippets +2 -1
- package/.vscode/srcdev-component-display-chip.code-snippets +3 -2
- package/.vscode/srcdev-component-display-pill.code-snippets +10 -0
- package/.vscode/srcdev-component-responsive-header.code-snippets +6 -0
- package/.vscode/srcdev-component-select-menu.code-snippets +28 -0
- package/.vscode/{srcdev-component-tabs-core.code-snippets → srcdev-component-tabbed-content.code-snippets} +35 -16
- package/app/assets/styles/setup/03.theming/_status.css +24 -0
- package/app/assets/styles/setup/03.theming/index.css +1 -0
- package/app/components/01.atoms/animations/container-glow/CONSUMER-STYLING.md +39 -35
- package/app/components/01.atoms/animations/container-glow/ContainerGlow.vue +25 -15
- package/app/components/01.atoms/animations/container-glow/stories/ContainerGlow.stories.ts +130 -24
- package/app/components/01.atoms/animations/container-glow/tests/ContainerGlow.spec.ts +45 -0
- package/app/components/01.atoms/animations/container-glow/tests/__snapshots__/ContainerGlow.spec.ts.snap +2 -2
- package/app/components/01.atoms/animations/glowing-border/CONSUMER-STYLING.md +76 -19
- package/app/components/01.atoms/animations/glowing-border/GlowingBorder.vue +12 -10
- package/app/components/01.atoms/animations/glowing-border/stories/GlowingBorder.stories.ts +201 -42
- package/app/components/01.atoms/animations/glowing-border/tests/GlowingBorder.spec.ts +15 -4
- package/app/components/01.atoms/animations/glowing-border/tests/__snapshots__/GlowingBorder.spec.ts.snap +1 -1
- package/app/components/01.atoms/display-pill/CONSUMER-STYLING.md +75 -9
- package/app/components/01.atoms/display-pill/DisplayPill.vue +57 -24
- package/app/components/01.atoms/display-pill/stories/DisplayPill.stories.ts +240 -16
- package/app/components/01.atoms/display-pill/tests/DisplayPill.spec.ts +43 -14
- package/app/components/01.atoms/display-pill/tests/__snapshots__/DisplayPill.spec.ts.snap +3 -3
- package/app/components/01.atoms/tabbed-content/CONSUMER-STYLING.md +201 -0
- package/app/components/01.atoms/tabbed-content/TabbedContent.vue +750 -0
- package/app/components/01.atoms/tabbed-content/stories/TabbedContent.stories.ts +279 -0
- package/app/components/01.atoms/tabbed-content/tests/TabbedContent.spec.ts +816 -0
- package/app/components/02.molecules/alert-content/AlertContent.vue +11 -2
- package/app/components/02.molecules/alert-content/AlertContentInner.vue +19 -0
- package/app/components/02.molecules/alert-content/CONSUMER-STYLING.md +17 -4
- package/app/components/02.molecules/alert-content/stories/AlertContent.stories.ts +200 -17
- package/app/components/02.molecules/alert-content/tests/AlertContent.spec.ts +33 -0
- package/app/components/02.molecules/display-avatar/CONSUMER-STYLING.md +7 -5
- package/app/components/02.molecules/display-avatar/DisplayAvatar.vue +6 -2
- package/app/components/02.molecules/display-avatar/stories/DisplayAvatar.stories.ts +24 -3
- package/app/components/02.molecules/display-avatar/tests/DisplayAvatar.spec.ts +19 -0
- package/app/components/02.molecules/display-avatar/tests/__snapshots__/DisplayAvatar.spec.ts.snap +2 -1
- package/app/components/02.molecules/display-chip/CONSUMER-STYLING.md +52 -19
- package/app/components/02.molecules/display-chip/DisplayChip.vue +72 -54
- package/app/components/02.molecules/display-chip/stories/DisplayChip.stories.ts +103 -6
- package/app/components/02.molecules/display-chip/tests/DisplayChip.spec.ts +98 -29
- package/app/components/02.molecules/display-chip/tests/__snapshots__/DisplayChip.spec.ts.snap +8 -4
- package/app/components/02.molecules/prompt/CONSUMER-STYLING.md +9 -1
- package/app/components/02.molecules/prompt/DisplayPrompt.vue +2 -2
- package/app/components/02.molecules/prompt/stories/DisplayPrompt.stories.ts +208 -71
- package/app/components/02.molecules/prompt/tests/DisplayPrompt.spec.ts +19 -6
- package/app/components/02.molecules/select-menu/CONSUMER-STYLING.md +66 -8
- package/app/components/02.molecules/select-menu/SelectMenu.vue +141 -18
- package/app/components/02.molecules/select-menu/stories/SelectMenu.stories.ts +232 -2
- package/app/components/02.molecules/select-menu/tests/SelectMenu.spec.ts +151 -0
- package/app/components/02.molecules/select-menu/tests/__snapshots__/SelectMenu.spec.ts.snap +6 -2
- package/app/components/02.molecules/toast/CONSUMER-STYLING.md +91 -27
- package/app/components/02.molecules/toast/DisplayToast.vue +109 -50
- package/app/components/02.molecules/toast/DisplayToastProvider.vue +109 -45
- package/app/components/02.molecules/toast/stories/DisplayToast.stories.ts +23 -0
- package/app/components/02.molecules/toast/stories/DisplayToastProvider.stories.ts +73 -0
- package/app/components/02.molecules/toast/tests/DisplayToast.spec.ts +132 -18
- package/app/components/02.molecules/toast/tests/DisplayToastProvider.spec.ts +105 -39
- package/app/components/03.organisms/responsive-header/CONSUMER-STYLING.md +38 -11
- package/app/components/03.organisms/responsive-header/NavigationItems.vue +27 -12
- package/app/components/03.organisms/responsive-header/ResponsiveHeader.vue +35 -20
- package/app/components/03.organisms/responsive-header/stories/ResponsiveHeader.stories.ts +1 -1
- package/app/components/03.organisms/services/service-detail/tests/__snapshots__/ServiceDetail.spec.ts.snap +1 -1
- package/app/components/03.organisms/services/service-summary/tests/__snapshots__/ServiceSummary.spec.ts.snap +1 -1
- package/app/components/03.organisms/services/services-grids/tests/__snapshots__/ServiceSummaryGrid.spec.ts.snap +3 -3
- package/app/composables/useTabs.ts +148 -206
- package/app/types/components/display-chip.d.ts +8 -4
- package/app/types/components/display-toast.d.ts +2 -0
- package/app/types/components/index.ts +0 -1
- package/app/types/components/select-menu.d.ts +2 -0
- package/app/utils/pausableTimeout.ts +41 -0
- package/nuxt.config.ts +1 -1
- package/package.json +1 -1
- package/.claude/skills/components/tab-navigation.md +0 -288
- package/.claude/skills/components/tabs-core.md +0 -187
- package/.vscode/srcdev-component-tab-navigation.code-snippets +0 -30
- package/app/components/01.atoms/navigation/tabs/CONSUMER-STYLING.md +0 -120
- package/app/components/01.atoms/navigation/tabs/TabsCore.vue +0 -272
- package/app/components/01.atoms/navigation/tabs/stories/TabsCore.stories.ts +0 -199
- package/app/components/01.atoms/navigation/tabs/tests/TabsCore.spec.ts +0 -274
- package/app/components/02.molecules/navigation/tab-navigation/CONSUMER-STYLING.md +0 -191
- package/app/components/02.molecules/navigation/tab-navigation/TabNavigation.vue +0 -550
- package/app/components/02.molecules/navigation/tab-navigation/stories/TabNavigation.stories.ts +0 -259
- package/app/components/02.molecules/navigation/tab-navigation/tests/TabNavigation.spec.ts +0 -379
- package/app/components/02.molecules/navigation/tab-navigation/tests/__snapshots__/TabNavigation.spec.ts.snap +0 -33
- package/app/composables/useNavCollapse.ts +0 -86
- package/app/types/components/nav-item.d.ts +0 -11
|
@@ -20,25 +20,51 @@ are documented alongside it since that's where they're consumed.
|
|
|
20
20
|
| `--responsive-header-padding-block` / `--responsive-header-padding-inline` | `0` | Root element padding. |
|
|
21
21
|
| `--responsive-header-max-height` | `none` | Root element max-height. |
|
|
22
22
|
| `--responsive-header-inline-size` | `100%` | Root element inline-size. |
|
|
23
|
-
| `--responsive-header-
|
|
23
|
+
| `--responsive-header-link-color-hover` | `--responsive-header-link-color` | Top-bar link/summary colour on the hovered item. Unset, an active item keeps its active colour. |
|
|
24
|
+
| `--responsive-header-link-color-active` | `--responsive-header-link-color` | Top-bar link/summary colour on the active item (current route or hash). |
|
|
25
|
+
| `--responsive-header-sub-nav-bg` / `-border` / `-border-radius` / `-padding` | `var(--page-bg, var(--theme-surface-subtle))` / `1px solid color-mix(in oklch, var(--theme-text) 20%, transparent)` / `8px` / `12px` | Top-bar dropdown panel (`.main-navigation-sub-nav`). |
|
|
24
26
|
| `--responsive-header-sub-nav-max-inline-size` | `min(48rem, calc(100vw - 3.2rem))` | Widest the top-bar dropdown panel gets; long child names wrap inside it. |
|
|
25
27
|
| `--responsive-header-sub-nav-max-block-size` | `70vh` | Tallest the top-bar dropdown panel gets before it scrolls, so a long child list stays reachable under a sticky header. |
|
|
26
|
-
| `--responsive-header-overflow-btn-bg` / `-size` / `-border` / `-outline` / `-icon-color` / `-hover-outline` | `
|
|
27
|
-
| `--responsive-header-overflow-nav-bg` / `-border` / `-border-radius` / `-padding-block` | `
|
|
28
|
+
| `--responsive-header-overflow-btn-bg` / `-size` / `-border` / `-outline` / `-icon-color` / `-hover-outline` | `transparent` / `20px` / `1px solid color-mix(in oklch, var(--theme-text) 20%, transparent)` / `1px solid transparent` / `inherit` / `1px solid var(--theme-border-focus)` | Overflow burger button. |
|
|
29
|
+
| `--responsive-header-overflow-nav-bg` / `-border` / `-border-radius` / `-padding-block` | `var(--page-bg, var(--theme-surface-subtle))` / `1px solid color-mix(in oklch, var(--theme-text) 20%, transparent)` / `8px` / `12px` | Overflow panel container. |
|
|
28
30
|
| `--responsive-header-overflow-nav-max-block-size` | `70vh` | Tallest the overflow panel gets before it scrolls. |
|
|
29
|
-
| `--
|
|
31
|
+
| `--responsive-nav-decorator-indicator-color` | `currentColor` | Active-item indicator bar/underline. |
|
|
32
|
+
| `--responsive-nav-decorator-hovered-indicator-color` | inherits the above | Indicator colour while hovering. |
|
|
33
|
+
| `--responsive-nav-decorator-hovered-bg` | `color-mix(in oklch, var(--theme-text) 8%, transparent)` | Hover highlight background behind the hovered item. |
|
|
34
|
+
|
|
35
|
+
### Overflow panel content (`NavigationItems`)
|
|
36
|
+
|
|
37
|
+
| Token | Default | Controls |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| `--overflow-nav-link-color` | `inherit` | Link/summary colour in the overflow panel. |
|
|
40
|
+
| `--overflow-nav-link-color-hover` | `--overflow-nav-link-color` | Colour on the hovered item. Unset, an active item keeps its active colour. |
|
|
41
|
+
| `--overflow-nav-link-color-active` | `--overflow-nav-link-color` | Colour on the active item. |
|
|
42
|
+
| `--overflow-nav-link-border-color` | `color-mix(in oklch, var(--theme-text) 12%, transparent)` | Divider under each row. |
|
|
43
|
+
| `--overflow-nav-sub-item-color` / `--overflow-nav-sub-item-font-size` | `inherit` / `inherit` | Child links inside a group. |
|
|
44
|
+
| `--overflow-nav-decorator-indicator-color` | `currentColor` | Active-row indicator bar. |
|
|
45
|
+
| `--overflow-nav-decorator-hovered-indicator-color` | inherits the above | Indicator colour while hovering. |
|
|
46
|
+
| `--overflow-nav-decorator-hovered-bg` | `color-mix(in oklch, var(--theme-text) 6%, transparent)` | Hover highlight behind a row. |
|
|
47
|
+
| `--overflow-nav-padding-inline` / `--overflow-nav-items-padding-block` / `--overflow-nav-items-gap` | `0.8rem` / `0.8rem` / `0px` | Row spacing. |
|
|
48
|
+
| `--overflow-nav-max-inline-size` | `calc(100vw - 3.2rem)` | Widest the overflow panel's content gets; long names wrap inside it. |
|
|
49
|
+
|
|
50
|
+
Private: `--_link-color` / `--_overflow-link-color` carry the per-state (hover/active) link colour
|
|
51
|
+
from the item to its link and summary. Not public API.
|
|
30
52
|
|
|
31
53
|
Link and dropdown text is never line-clamped: it names where the link goes. Long unbroken names
|
|
32
54
|
wrap inside the dropdown and overflow panels; in the top bar, an item too wide to fit moves to the
|
|
33
55
|
overflow menu.
|
|
34
56
|
|
|
57
|
+
> **Changed 2026-10-07**: the defaults assumed a dark bar: `Canvas` panel and button backgrounds,
|
|
58
|
+
> translucent white borders (`#ffffff90`, `#efefef75`), a white button outline/hover outline and
|
|
59
|
+
> white-tint hover highlights, all near-invisible on a light header. They now come from the
|
|
60
|
+
> `--theme-*` slots and `--page-bg` (see the tables). A dark header sets these tokens. Also added
|
|
61
|
+
> the `-link-color-hover` / `-link-color-active` tokens (top bar and overflow panel), which
|
|
62
|
+
> TabNavigation had and ResponsiveHeader lacked.
|
|
63
|
+
|
|
35
64
|
> **Changed 2026-10-05**: the dropdown and overflow panels had no maximum size, so a long child
|
|
36
|
-
> name or a long child list ran off-screen. They are now capped by the
|
|
65
|
+
> name or a long child list ran off-screen. They are now capped by the max-size tokens above.
|
|
37
66
|
> `--_overflow-drop-down-width`, a private token nothing ever set, is gone (`min-width: fit-content`
|
|
38
67
|
> directly).
|
|
39
|
-
| `--responsive-nav-decorator-indicator-color` | `currentColor` | Active-item indicator bar/underline. |
|
|
40
|
-
| `--responsive-nav-decorator-hovered-indicator-color` | inherits the above | Indicator colour while hovering. |
|
|
41
|
-
| `--responsive-nav-decorator-hovered-bg` | `oklch(100% 0 0 / 8%)` | Hover highlight background behind the hovered item. |
|
|
42
68
|
|
|
43
69
|
---
|
|
44
70
|
|
|
@@ -50,8 +76,9 @@ tokens on a scope class matching the one passed via `styleClassPassthrough`:
|
|
|
50
76
|
```css
|
|
51
77
|
/* assets/styles/setup/07.components/responsive-header.css */
|
|
52
78
|
.site-header-nav {
|
|
53
|
-
--responsive-header-link-color: var(--
|
|
54
|
-
--responsive-header-
|
|
79
|
+
--responsive-header-link-color: var(--theme-text);
|
|
80
|
+
--responsive-header-link-color-hover: var(--theme-accent);
|
|
81
|
+
--responsive-header-link-color-active: var(--theme-accent);
|
|
55
82
|
--responsive-header-padding-inline: 1.2rem;
|
|
56
83
|
|
|
57
84
|
/* Fixed, NOT a fluid var(--step-*) token — see the token table above. */
|
|
@@ -89,7 +116,7 @@ Set the tokens above on an element you own (a page or section class, or a class
|
|
|
89
116
|
`0` during the initial geometry pass and then pops in afterward with nothing to detect it.
|
|
90
117
|
See `.decorator-icon`/the chevron `.icon` in the component's own `<style>` block for the
|
|
91
118
|
pattern (`1.35em` square, `flex-shrink: 0`).
|
|
92
|
-
- `NavigationItems`' own tokens (`--overflow-nav-*`)
|
|
119
|
+
- `NavigationItems`' own tokens (`--overflow-nav-*`) have their own table above since
|
|
93
120
|
they style the overflow-panel's *content*, distinct from `ResponsiveHeader`'s own tokens
|
|
94
121
|
above which style the top bar and the overflow *button*/*container*.
|
|
95
122
|
|
|
@@ -240,13 +240,15 @@ watch(
|
|
|
240
240
|
--overflow-nav-items-padding-block (default: 0.8rem)
|
|
241
241
|
|
|
242
242
|
--overflow-nav-link-color (default: inherit)
|
|
243
|
-
--overflow-nav-link-
|
|
243
|
+
--overflow-nav-link-color-hover (default: --overflow-nav-link-color)
|
|
244
|
+
--overflow-nav-link-color-active (default: --overflow-nav-link-color)
|
|
245
|
+
--overflow-nav-link-border-color (default: color-mix(in oklch, var(--theme-text) 12%, transparent))
|
|
244
246
|
--overflow-nav-sub-item-color (default: inherit)
|
|
245
247
|
--overflow-nav-sub-item-font-size (default: inherit)
|
|
246
248
|
|
|
247
249
|
--overflow-nav-decorator-indicator-color (default: currentColor)
|
|
248
250
|
--overflow-nav-decorator-hovered-indicator-color (default: inherits --overflow-nav-decorator-indicator-color)
|
|
249
|
-
--overflow-nav-decorator-hovered-bg (default:
|
|
251
|
+
--overflow-nav-decorator-hovered-bg (default: color-mix(in oklch, var(--theme-text) 6%, transparent))
|
|
250
252
|
──────────────────────────────────────────────────────────────────────── */
|
|
251
253
|
|
|
252
254
|
--_max-inline-size: var(--overflow-nav-max-inline-size, calc(100vw - 3.2rem));
|
|
@@ -276,13 +278,26 @@ watch(
|
|
|
276
278
|
display: block;
|
|
277
279
|
}
|
|
278
280
|
|
|
281
|
+
/* Per-state link colour; hover falls back to the item's current state. Unset means the resting colour. */
|
|
282
|
+
&.is-active {
|
|
283
|
+
--_overflow-link-color: var(--overflow-nav-link-color-active);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
&.is-hovered {
|
|
287
|
+
--_overflow-link-color: var(--overflow-nav-link-color-hover, var(--overflow-nav-link-color-active));
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
&.is-hovered:not(.is-active) {
|
|
291
|
+
--_overflow-link-color: var(--overflow-nav-link-color-hover);
|
|
292
|
+
}
|
|
293
|
+
|
|
279
294
|
.overflow-navigation-link {
|
|
280
295
|
text-decoration: none;
|
|
281
|
-
color: var(--overflow-nav-link-color, inherit);
|
|
296
|
+
color: var(--_overflow-link-color, var(--overflow-nav-link-color, inherit));
|
|
282
297
|
padding-block: var(--overflow-nav-items-padding-block, 0.8rem);
|
|
283
298
|
padding-inline: var(--overflow-nav-padding-inline, 0.8rem);
|
|
284
299
|
display: flex;
|
|
285
|
-
border-bottom: 0.1rem solid var(--overflow-nav-link-border-color,
|
|
300
|
+
border-bottom: 0.1rem solid var(--overflow-nav-link-border-color, color-mix(in oklch, var(--theme-text) 12%, transparent));
|
|
286
301
|
}
|
|
287
302
|
|
|
288
303
|
.overflow-navigation-details {
|
|
@@ -300,8 +315,8 @@ watch(
|
|
|
300
315
|
padding-block: var(--overflow-nav-items-padding-block, 0.8rem);
|
|
301
316
|
padding-inline: var(--overflow-nav-padding-inline, 0.8rem);
|
|
302
317
|
gap: 1rem;
|
|
303
|
-
color: var(--overflow-nav-link-color, inherit);
|
|
304
|
-
border-bottom: 0.1rem solid var(--overflow-nav-link-border-color,
|
|
318
|
+
color: var(--_overflow-link-color, var(--overflow-nav-link-color, inherit));
|
|
319
|
+
border-bottom: 0.1rem solid var(--overflow-nav-link-border-color, color-mix(in oklch, var(--theme-text) 12%, transparent));
|
|
305
320
|
|
|
306
321
|
.label-wrapper {
|
|
307
322
|
min-inline-size: 0;
|
|
@@ -316,7 +331,7 @@ watch(
|
|
|
316
331
|
border-bottom: 0.1rem solid transparent;
|
|
317
332
|
}
|
|
318
333
|
+ .expanding-panel-content {
|
|
319
|
-
border-bottom: 0.1rem solid var(--overflow-nav-link-border-color,
|
|
334
|
+
border-bottom: 0.1rem solid var(--overflow-nav-link-border-color, color-mix(in oklch, var(--theme-text) 12%, transparent));
|
|
320
335
|
.overflow-navigation-sub-nav-inner {
|
|
321
336
|
margin-top: var(--overflow-nav-items-gap, 0px);
|
|
322
337
|
}
|
|
@@ -361,8 +376,8 @@ watch(
|
|
|
361
376
|
padding-block: var(--overflow-nav-items-padding-block, 0.8rem);
|
|
362
377
|
padding-inline: var(--overflow-nav-padding-inline, 0.8rem);
|
|
363
378
|
gap: 1rem;
|
|
364
|
-
color: var(--overflow-nav-link-color, inherit);
|
|
365
|
-
border-bottom: 0.1rem solid var(--overflow-nav-link-border-color,
|
|
379
|
+
color: var(--_overflow-link-color, var(--overflow-nav-link-color, inherit));
|
|
380
|
+
border-bottom: 0.1rem solid var(--overflow-nav-link-border-color, color-mix(in oklch, var(--theme-text) 12%, transparent));
|
|
366
381
|
|
|
367
382
|
.label-wrapper {
|
|
368
383
|
min-inline-size: 0;
|
|
@@ -377,7 +392,7 @@ watch(
|
|
|
377
392
|
border-bottom: 0.1rem solid transparent;
|
|
378
393
|
}
|
|
379
394
|
+ .expanding-panel-classic-content {
|
|
380
|
-
border-bottom: 0.1rem solid var(--overflow-nav-link-border-color,
|
|
395
|
+
border-bottom: 0.1rem solid var(--overflow-nav-link-border-color, color-mix(in oklch, var(--theme-text) 12%, transparent));
|
|
381
396
|
.overflow-navigation-sub-nav-inner {
|
|
382
397
|
margin-top: var(--overflow-nav-items-gap, 0px);
|
|
383
398
|
}
|
|
@@ -486,7 +501,7 @@ watch(
|
|
|
486
501
|
right: 0;
|
|
487
502
|
top: anchor(top);
|
|
488
503
|
bottom: anchor(bottom);
|
|
489
|
-
background: var(--overflow-nav-decorator-hovered-bg,
|
|
504
|
+
background: var(--overflow-nav-decorator-hovered-bg, color-mix(in oklch, var(--theme-text) 6%, transparent));
|
|
490
505
|
z-index: 1;
|
|
491
506
|
opacity: 0;
|
|
492
507
|
transition:
|
|
@@ -552,7 +567,7 @@ watch(
|
|
|
552
567
|
right: 0;
|
|
553
568
|
top: anchor(top);
|
|
554
569
|
bottom: anchor(bottom);
|
|
555
|
-
background: var(--overflow-nav-decorator-hovered-bg,
|
|
570
|
+
background: var(--overflow-nav-decorator-hovered-bg, color-mix(in oklch, var(--theme-text) 6%, transparent));
|
|
556
571
|
border-inline-start: 2px solid var(
|
|
557
572
|
--overflow-nav-decorator-hovered-indicator-color,
|
|
558
573
|
var(--overflow-nav-decorator-indicator-color, currentColor)
|
|
@@ -751,30 +751,32 @@ watch(
|
|
|
751
751
|
|
|
752
752
|
--responsive-header-color (default: inherit)
|
|
753
753
|
--responsive-header-link-color (default: inherit)
|
|
754
|
+
--responsive-header-link-color-hover (default: --responsive-header-link-color)
|
|
755
|
+
--responsive-header-link-color-active (default: --responsive-header-link-color)
|
|
754
756
|
|
|
755
|
-
--responsive-header-sub-nav-bg (default:
|
|
756
|
-
--responsive-header-sub-nav-border (default: 1px solid
|
|
757
|
+
--responsive-header-sub-nav-bg (default: var(--page-bg, var(--theme-surface-subtle)))
|
|
758
|
+
--responsive-header-sub-nav-border (default: 1px solid color-mix(in oklch, var(--theme-text) 20%, transparent))
|
|
757
759
|
--responsive-header-sub-nav-border-radius (default: 8px)
|
|
758
760
|
--responsive-header-sub-nav-padding (default: 12px)
|
|
759
761
|
--responsive-header-sub-nav-max-inline-size (default: min(48rem, calc(100vw - 3.2rem)))
|
|
760
762
|
--responsive-header-sub-nav-max-block-size (default: 70vh)
|
|
761
763
|
|
|
762
|
-
--responsive-header-overflow-btn-bg (default:
|
|
764
|
+
--responsive-header-overflow-btn-bg (default: transparent)
|
|
763
765
|
--responsive-header-overflow-btn-size (default: 20px)
|
|
764
|
-
--responsive-header-overflow-btn-border (default: 1px solid
|
|
765
|
-
--responsive-header-overflow-btn-outline (default: 1px solid
|
|
766
|
+
--responsive-header-overflow-btn-border (default: 1px solid color-mix(in oklch, var(--theme-text) 20%, transparent))
|
|
767
|
+
--responsive-header-overflow-btn-outline (default: 1px solid transparent)
|
|
766
768
|
--responsive-header-overflow-btn-icon-color (default: inherit)
|
|
767
|
-
--responsive-header-overflow-btn-hover-outline (default: 1px solid
|
|
769
|
+
--responsive-header-overflow-btn-hover-outline (default: 1px solid var(--theme-border-focus))
|
|
768
770
|
|
|
769
|
-
--responsive-header-overflow-nav-bg (default:
|
|
770
|
-
--responsive-header-overflow-nav-border (default: 1px solid
|
|
771
|
+
--responsive-header-overflow-nav-bg (default: var(--page-bg, var(--theme-surface-subtle)))
|
|
772
|
+
--responsive-header-overflow-nav-border (default: 1px solid color-mix(in oklch, var(--theme-text) 20%, transparent))
|
|
771
773
|
--responsive-header-overflow-nav-border-radius (default: 8px)
|
|
772
774
|
--responsive-header-overflow-nav-padding-block (default: 12px)
|
|
773
775
|
--responsive-header-overflow-nav-max-block-size (default: 70vh)
|
|
774
776
|
|
|
775
777
|
--responsive-nav-decorator-indicator-color (default: currentColor)
|
|
776
778
|
--responsive-nav-decorator-hovered-indicator-color (default: inherits --responsive-nav-decorator-indicator-color)
|
|
777
|
-
--responsive-nav-decorator-hovered-bg (default:
|
|
779
|
+
--responsive-nav-decorator-hovered-bg (default: color-mix(in oklch, var(--theme-text) 8%, transparent))
|
|
778
780
|
|
|
779
781
|
--responsive-header-link-font-size (default: inherit)
|
|
780
782
|
--responsive-header-main-nav-justify-content (default: space-between)
|
|
@@ -854,7 +856,7 @@ watch(
|
|
|
854
856
|
gap: 6px;
|
|
855
857
|
white-space: nowrap;
|
|
856
858
|
font-size: var(--responsive-header-link-font-size, inherit);
|
|
857
|
-
color: var(--responsive-header-link-color, inherit);
|
|
859
|
+
color: var(--_link-color, var(--responsive-header-link-color, inherit));
|
|
858
860
|
text-decoration: none;
|
|
859
861
|
cursor: pointer;
|
|
860
862
|
margin-inline-start: 0;
|
|
@@ -916,7 +918,7 @@ watch(
|
|
|
916
918
|
position: relative;
|
|
917
919
|
z-index: 4;
|
|
918
920
|
font-size: var(--responsive-header-link-font-size, inherit);
|
|
919
|
-
color: var(--responsive-header-link-color, inherit);
|
|
921
|
+
color: var(--_link-color, var(--responsive-header-link-color, inherit));
|
|
920
922
|
|
|
921
923
|
&::-webkit-details-marker,
|
|
922
924
|
&::marker {
|
|
@@ -932,9 +934,9 @@ watch(
|
|
|
932
934
|
position: absolute;
|
|
933
935
|
|
|
934
936
|
padding: var(--responsive-header-sub-nav-padding, 12px);
|
|
935
|
-
border: var(--responsive-header-sub-nav-border, 1px solid
|
|
937
|
+
border: var(--responsive-header-sub-nav-border, 1px solid color-mix(in oklch, var(--theme-text) 20%, transparent));
|
|
936
938
|
border-radius: var(--responsive-header-sub-nav-border-radius, 8px);
|
|
937
|
-
background-color: var(--responsive-header-sub-nav-bg,
|
|
939
|
+
background-color: var(--responsive-header-sub-nav-bg, var(--page-bg, var(--theme-surface-subtle)));
|
|
938
940
|
translate: 0 12px;
|
|
939
941
|
|
|
940
942
|
min-width: var(--_main-navigation-item-width);
|
|
@@ -980,6 +982,19 @@ watch(
|
|
|
980
982
|
margin-inline-start: var(--_main-navigation-item-width);
|
|
981
983
|
}
|
|
982
984
|
}
|
|
985
|
+
|
|
986
|
+
/* Per-state link colour; hover falls back to the item's current state. Unset means the resting colour. */
|
|
987
|
+
&.is-active {
|
|
988
|
+
--_link-color: var(--responsive-header-link-color-active);
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
&.is-hovered {
|
|
992
|
+
--_link-color: var(--responsive-header-link-color-hover, var(--responsive-header-link-color-active));
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
&.is-hovered:not(.is-active) {
|
|
996
|
+
--_link-color: var(--responsive-header-link-color-hover);
|
|
997
|
+
}
|
|
983
998
|
}
|
|
984
999
|
|
|
985
1000
|
&:last-child {
|
|
@@ -1071,9 +1086,9 @@ watch(
|
|
|
1071
1086
|
|
|
1072
1087
|
aspect-ratio: 1;
|
|
1073
1088
|
border-radius: 4px;
|
|
1074
|
-
border: var(--responsive-header-overflow-btn-border, 1px solid
|
|
1075
|
-
outline: var(--responsive-header-overflow-btn-outline, 1px solid
|
|
1076
|
-
background-color: var(--responsive-header-overflow-btn-bg,
|
|
1089
|
+
border: var(--responsive-header-overflow-btn-border, 1px solid color-mix(in oklch, var(--theme-text) 20%, transparent));
|
|
1090
|
+
outline: var(--responsive-header-overflow-btn-outline, 1px solid transparent);
|
|
1091
|
+
background-color: var(--responsive-header-overflow-btn-bg, transparent);
|
|
1077
1092
|
|
|
1078
1093
|
width: var(--_icon-size);
|
|
1079
1094
|
overflow: hidden;
|
|
@@ -1089,7 +1104,7 @@ watch(
|
|
|
1089
1104
|
&:hover,
|
|
1090
1105
|
&:focus-visible {
|
|
1091
1106
|
--_icon-zoom: 1.2;
|
|
1092
|
-
outline: var(--responsive-header-overflow-btn-hover-outline, 1px solid
|
|
1107
|
+
outline: var(--responsive-header-overflow-btn-hover-outline, 1px solid var(--theme-border-focus));
|
|
1093
1108
|
}
|
|
1094
1109
|
|
|
1095
1110
|
.icon {
|
|
@@ -1115,8 +1130,8 @@ watch(
|
|
|
1115
1130
|
position: absolute;
|
|
1116
1131
|
top: 135%;
|
|
1117
1132
|
right: 0;
|
|
1118
|
-
background-color: var(--responsive-header-overflow-nav-bg,
|
|
1119
|
-
border: var(--responsive-header-overflow-nav-border, 1px solid
|
|
1133
|
+
background-color: var(--responsive-header-overflow-nav-bg, var(--page-bg, var(--theme-surface-subtle)));
|
|
1134
|
+
border: var(--responsive-header-overflow-nav-border, 1px solid color-mix(in oklch, var(--theme-text) 20%, transparent));
|
|
1120
1135
|
border-radius: var(--responsive-header-overflow-nav-border-radius, 8px);
|
|
1121
1136
|
padding-block: var(--responsive-header-overflow-nav-padding-block, 12px);
|
|
1122
1137
|
margin: 0;
|
|
@@ -1172,7 +1187,7 @@ watch(
|
|
|
1172
1187
|
right: anchor(right);
|
|
1173
1188
|
top: anchor(top);
|
|
1174
1189
|
bottom: anchor(bottom);
|
|
1175
|
-
background: var(--responsive-nav-decorator-hovered-bg,
|
|
1190
|
+
background: var(--responsive-nav-decorator-hovered-bg, color-mix(in oklch, var(--theme-text) 8%, transparent));
|
|
1176
1191
|
border-radius: 4px;
|
|
1177
1192
|
z-index: 1;
|
|
1178
1193
|
opacity: 0;
|
|
@@ -246,7 +246,7 @@ export const SamePageAnchorLinks: Story = {
|
|
|
246
246
|
"smooth-scroll to the section (an instant jump under reduced motion), and are active by hash rather than by " +
|
|
247
247
|
"route; the first anchor is active on load. `anchorScrollOffset` (80 here) leaves room for the sticky header. " +
|
|
248
248
|
"Route links like Blog mix in as normal. Narrow the canvas so items move into the overflow menu: anchor links " +
|
|
249
|
-
"there scroll the same way and close the menu.
|
|
249
|
+
"there scroll the same way and close the menu.",
|
|
250
250
|
},
|
|
251
251
|
},
|
|
252
252
|
},
|
|
@@ -21,7 +21,7 @@ exports[`ServiceDetail > renders correct HTML structure 1`] = `
|
|
|
21
21
|
<h1 id="v-0-0" class="hero-text display axis-horizontal">
|
|
22
22
|
<!--v-if--><span class="text-block-0 normal">Balayage</span>
|
|
23
23
|
</h1>
|
|
24
|
-
<div class="service-detail__hero-pills"><span class="display-pill md neutral"><!--v-if--><span class="display-pill-label">2.5 - 3.5 hours</span></span><span class="display-pill md neutral"><!--v-if--><span class="display-pill-label">From £95</span></span></div>
|
|
24
|
+
<div class="service-detail__hero-pills"><span class="display-pill" data-size="md" data-variant="neutral"><!--v-if--><span class="display-pill-label">2.5 - 3.5 hours</span></span><span class="display-pill" data-size="md" data-variant="neutral"><!--v-if--><span class="display-pill-label">From £95</span></span></div>
|
|
25
25
|
</div>
|
|
26
26
|
</div>
|
|
27
27
|
</div>
|
|
@@ -9,7 +9,7 @@ exports[`ServiceSummary > renders correct HTML structure 1`] = `
|
|
|
9
9
|
<h2 id="v-0-0" class="hero-text mb-20 title axis-horizontal">
|
|
10
10
|
<!--v-if--><span class="text-block-0 normal">Test Service</span>
|
|
11
11
|
</h2>
|
|
12
|
-
<div class="service-summary__pills"><span class="display-pill md neutral"><!--v-if--><span class="display-pill-label">60 mins</span></span><span class="display-pill md neutral"><!--v-if--><span class="display-pill-label">From £50</span></span></div>
|
|
12
|
+
<div class="service-summary__pills"><span class="display-pill" data-size="md" data-variant="neutral"><!--v-if--><span class="display-pill-label">60 mins</span></span><span class="display-pill" data-size="md" data-variant="neutral"><!--v-if--><span class="display-pill-label">From £50</span></span></div>
|
|
13
13
|
<p class="page-body-normal">What this service is</p>
|
|
14
14
|
</div>
|
|
15
15
|
</div>
|
|
@@ -10,7 +10,7 @@ exports[`ServiceSummaryGrid > renders correct HTML structure 1`] = `
|
|
|
10
10
|
<h2 id="v-0-0-0" class="hero-text mb-20 title axis-horizontal">
|
|
11
11
|
<!--v-if--><span class="text-block-0 normal">Locs Installation</span>
|
|
12
12
|
</h2>
|
|
13
|
-
<div class="service-summary__pills"><span class="display-pill md neutral"><!--v-if--><span class="display-pill-label">60 mins</span></span><span class="display-pill md neutral"><!--v-if--><span class="display-pill-label">From £50</span></span></div>
|
|
13
|
+
<div class="service-summary__pills"><span class="display-pill" data-size="md" data-variant="neutral"><!--v-if--><span class="display-pill-label">60 mins</span></span><span class="display-pill" data-size="md" data-variant="neutral"><!--v-if--><span class="display-pill-label">From £50</span></span></div>
|
|
14
14
|
<p class="page-body-normal">What this service is.</p>
|
|
15
15
|
</div>
|
|
16
16
|
</div>
|
|
@@ -23,7 +23,7 @@ exports[`ServiceSummaryGrid > renders correct HTML structure 1`] = `
|
|
|
23
23
|
<h2 id="v-0-0-1" class="hero-text mb-20 title axis-horizontal">
|
|
24
24
|
<!--v-if--><span class="text-block-0 normal">Locs Retwist</span>
|
|
25
25
|
</h2>
|
|
26
|
-
<div class="service-summary__pills"><span class="display-pill md neutral"><!--v-if--><span class="display-pill-label">60 mins</span></span><span class="display-pill md neutral"><!--v-if--><span class="display-pill-label">From £50</span></span></div>
|
|
26
|
+
<div class="service-summary__pills"><span class="display-pill" data-size="md" data-variant="neutral"><!--v-if--><span class="display-pill-label">60 mins</span></span><span class="display-pill" data-size="md" data-variant="neutral"><!--v-if--><span class="display-pill-label">From £50</span></span></div>
|
|
27
27
|
<p class="page-body-normal">What this service is.</p>
|
|
28
28
|
</div>
|
|
29
29
|
</div>
|
|
@@ -36,7 +36,7 @@ exports[`ServiceSummaryGrid > renders correct HTML structure 1`] = `
|
|
|
36
36
|
<h2 id="v-0-0-2" class="hero-text mb-20 title axis-horizontal">
|
|
37
37
|
<!--v-if--><span class="text-block-0 normal">Colour Treatment</span>
|
|
38
38
|
</h2>
|
|
39
|
-
<div class="service-summary__pills"><span class="display-pill md neutral"><!--v-if--><span class="display-pill-label">60 mins</span></span><span class="display-pill md neutral"><!--v-if--><span class="display-pill-label">From £50</span></span></div>
|
|
39
|
+
<div class="service-summary__pills"><span class="display-pill" data-size="md" data-variant="neutral"><!--v-if--><span class="display-pill-label">60 mins</span></span><span class="display-pill" data-size="md" data-variant="neutral"><!--v-if--><span class="display-pill-label">From £50</span></span></div>
|
|
40
40
|
<p class="page-body-normal">What this service is.</p>
|
|
41
41
|
</div>
|
|
42
42
|
</div>
|