srcdev-nuxt-components 9.6.11 → 9.6.13

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.
Files changed (77) hide show
  1. package/.claude/rules/consumer/ids-from-useid.md +2 -1
  2. package/.claude/rules/consumer/vfor-keys-from-data.md +14 -0
  3. package/.claude/skills/component-compliance-checklist.md +24 -1
  4. package/.claude/skills/component-naming.md +1 -0
  5. package/.claude/skills/components/banner-video.md +24 -30
  6. package/.claude/skills/components/content-docs.md +18 -5
  7. package/.claude/skills/components/display-dialog.md +16 -6
  8. package/.claude/skills/components/{display-tooltip-defined.md → display-tooltip-rich.md} +40 -42
  9. package/.claude/skills/components/display-tooltip.md +17 -6
  10. package/.claude/skills/components/form-field.md +15 -0
  11. package/.claude/skills/components/form-fieldset.md +18 -2
  12. package/.claude/skills/components/marquee-scroller.md +51 -14
  13. package/.claude/skills/components/skip-links.md +16 -0
  14. package/.claude/skills/composable-tooltips-guide.md +4 -4
  15. package/.claude/skills/index.md +6 -6
  16. package/.claude/skills/testing-add-unit-test.md +8 -0
  17. package/.vscode/srcdev-component-banner-video.code-snippets +38 -25
  18. package/.vscode/srcdev-component-content-docs.code-snippets +69 -60
  19. package/.vscode/srcdev-component-display-dialog.code-snippets +7 -5
  20. package/.vscode/srcdev-component-display-tooltip-rich.code-snippets +50 -0
  21. package/.vscode/srcdev-component-display-tooltip.code-snippets +31 -0
  22. package/.vscode/srcdev-component-form-field.code-snippets +7 -6
  23. package/.vscode/srcdev-component-form-fieldset.code-snippets +12 -12
  24. package/.vscode/srcdev-component-marquee-scroller.code-snippets +31 -28
  25. package/.vscode/srcdev-component-skip-links.code-snippets +1 -1
  26. package/app/components/01.atoms/animations/marquee-scroller/CONSUMER-STYLING.md +77 -54
  27. package/app/components/01.atoms/animations/marquee-scroller/MarqueeScroller.vue +103 -91
  28. package/app/components/01.atoms/animations/marquee-scroller/stories/MarqueeScroller.stories.ts +132 -3
  29. package/app/components/01.atoms/animations/marquee-scroller/tests/MarqueeScroller.spec.ts +190 -102
  30. package/app/components/01.atoms/animations/marquee-scroller/tests/__snapshots__/MarqueeScroller.spec.ts.snap +17 -13
  31. package/app/components/01.atoms/banner-video/BannerVideo.vue +51 -19
  32. package/app/components/01.atoms/banner-video/CONSUMER-STYLING.md +59 -40
  33. package/app/components/01.atoms/banner-video/stories/BannerVideo.stories.ts +88 -1
  34. package/app/components/01.atoms/banner-video/tests/BannerVideo.spec.ts +127 -78
  35. package/app/components/01.atoms/banner-video/tests/__snapshots__/BannerVideo.spec.ts.snap +12 -4
  36. package/app/components/01.atoms/content-wrappers/docs-pages/CONSUMER-STYLING.md +42 -14
  37. package/app/components/01.atoms/content-wrappers/docs-pages/ContentDocs.vue +86 -112
  38. package/app/components/01.atoms/content-wrappers/docs-pages/stories/ContentDocs.stories.ts +134 -8
  39. package/app/components/01.atoms/content-wrappers/docs-pages/tests/ContentDocs.spec.ts +131 -65
  40. package/app/components/01.atoms/display-dialog/CONSUMER-STYLING.md +28 -3
  41. package/app/components/01.atoms/display-dialog/DisplayDialog.vue +39 -31
  42. package/app/components/01.atoms/display-dialog/stories/DisplayDialog.stories.ts +92 -1
  43. package/app/components/01.atoms/display-dialog/tests/DisplayDialog.spec.ts +87 -41
  44. package/app/components/01.atoms/display-dialog/tests/__snapshots__/DisplayDialog.spec.ts.snap +5 -1
  45. package/app/components/01.atoms/display-tooltip/CONSUMER-STYLING.md +70 -24
  46. package/app/components/01.atoms/display-tooltip/DisplayTooltip.vue +24 -12
  47. package/app/components/01.atoms/display-tooltip/stories/DisplayTooltip.stories.ts +89 -2
  48. package/app/components/01.atoms/display-tooltip/tests/DisplayTooltip.spec.ts +65 -18
  49. package/app/components/01.atoms/display-tooltip/tests/__snapshots__/DisplayTooltip.spec.ts.snap +3 -3
  50. package/app/components/01.atoms/navigation/skip-links/CONSUMER-STYLING.md +65 -19
  51. package/app/components/01.atoms/navigation/skip-links/SkipLinks.vue +20 -14
  52. package/app/components/01.atoms/navigation/skip-links/stories/SkipLinks.stories.ts +89 -20
  53. package/app/components/01.atoms/navigation/skip-links/tests/SkipLinks.spec.ts +70 -10
  54. package/app/components/02.molecules/display-tooltip-rich/CONSUMER-STYLING.md +110 -0
  55. package/app/components/02.molecules/display-tooltip-rich/DisplayTooltipRich.vue +148 -0
  56. package/app/components/02.molecules/display-tooltip-rich/stories/DisplayTooltipRich.stories.ts +254 -0
  57. package/app/components/02.molecules/display-tooltip-rich/tests/DisplayTooltipRich.spec.ts +156 -0
  58. package/app/components/02.molecules/display-tooltip-rich/tests/__snapshots__/DisplayTooltipRich.spec.ts.snap +22 -0
  59. package/app/components/02.molecules/navigation/deep-expanding-menu/DeepExpandingMenu.vue +1 -0
  60. package/app/components/02.molecules/navigation/deep-expanding-menu/tests/__snapshots__/DeepExpandingMenu.spec.ts.snap +1 -1
  61. package/app/components/03.organisms/image-galleries/carousel-flip/CarouselFlip.vue +1 -0
  62. package/app/components/05.forms/form-field/CONSUMER-STYLING.md +7 -0
  63. package/app/components/05.forms/form-field/stories/FormField.stories.ts +116 -2
  64. package/app/components/05.forms/form-fieldset/CONSUMER-STYLING.md +11 -1
  65. package/app/components/05.forms/form-fieldset/FormFieldset.vue +4 -2
  66. package/app/components/05.forms/form-fieldset/stories/FormFieldset.stories.ts +68 -4
  67. package/app/components/05.forms/form-fieldset/tests/FormFieldset.spec.ts +10 -0
  68. package/app/composables/tests/useTooltips.spec.ts +3 -3
  69. package/app/types/components/index.ts +1 -1
  70. package/package.json +1 -1
  71. package/.vscode/srcdev-component-display-tooltip-defined.code-snippets +0 -29
  72. package/app/components/02.molecules/display-tooltip-defined/CONSUMER-STYLING.md +0 -53
  73. package/app/components/02.molecules/display-tooltip-defined/DisplayTooltipDefined.vue +0 -117
  74. package/app/components/02.molecules/display-tooltip-defined/stories/DisplayTooltipDefined.stories.ts +0 -129
  75. package/app/components/02.molecules/display-tooltip-defined/tests/DisplayTooltipDefined.spec.ts +0 -85
  76. package/app/components/02.molecules/display-tooltip-defined/tests/__snapshots__/DisplayTooltipDefined.spec.ts.snap +0 -17
  77. /package/app/types/components/{display-tooltip-defined.d.ts → display-tooltip-rich.d.ts} +0 -0
@@ -7,9 +7,12 @@ styles both the docs nav and the page nav, plus **per-side** forms (`--content-d
7
7
  `--content-docs-page-nav-*`) that fall back to the shared one when unset.
8
8
 
9
9
  > Changed 2026-09-27: defaults no longer call `light-dark()` themselves (unsupported on older iPad
10
- > Safari). Colours now come from the global scheme-aware tokens (`--colour-text-default`,
11
- > `--page-bg`, `--theme-surface-subtle`), so they still follow light/dark mode. The active-link
12
- > pill is a fixed green pair that reads the same in both.
10
+ > Safari). Text and panel colours come from the global page tokens (`--colour-text-default`,
11
+ > `--page-bg`); hover from `--theme-surface-subtle`.
12
+ >
13
+ > Changed 2026-10-18: the active-link pill was a fixed green pair (`--green-01` / `--green-10`). It
14
+ > now follows the theme: `--theme-surface` with `--theme-on-surface` text. Set
15
+ > `--content-docs-link-active-bg` / `-color` to keep the old look.
13
16
 
14
17
  ### Headings
15
18
 
@@ -39,14 +42,16 @@ styles both the docs nav and the page nav, plus **per-side** forms (`--content-d
39
42
  | `--content-docs-link-color` | `var(--colour-text-default)` | `-nav-link-color`, `-page-nav-link-color` |
40
43
  | `--content-docs-link-hover-bg` | `var(--theme-surface-subtle)` | `-nav-link-hover-bg`, `-page-nav-link-hover-bg` |
41
44
  | `--content-docs-link-hover-color` | the link colour | `-nav-link-hover-color`, `-page-nav-link-hover-color` |
42
- | `--content-docs-link-active-bg` | `var(--green-01)` | `-nav-link-active-bg`, `-page-nav-link-active-bg` |
43
- | `--content-docs-link-active-color` | `var(--green-10)` | `-nav-link-active-color`, `-page-nav-link-active-color` |
45
+ | `--content-docs-link-active-bg` | `var(--theme-surface)` | `-nav-link-active-bg`, `-page-nav-link-active-bg` |
46
+ | `--content-docs-link-active-color` | `var(--theme-on-surface)` | `-nav-link-active-color`, `-page-nav-link-active-color` |
44
47
  | `--content-docs-link-bg` | `transparent` | Shared only |
45
48
  | `--content-docs-link-font-size` | `1.4rem` | Shared only |
46
49
  | `--content-docs-link-padding-block` | `0.6rem` | Shared only |
47
50
  | `--content-docs-link-padding-inline` | `0.8rem` | Shared only |
48
51
  | `--content-docs-link-margin-block` | `0` | Shared only |
49
52
  | `--content-docs-link-border-radius` | `0.4rem` | Shared only |
53
+ | `--content-docs-link-focus-outline-width` | `0.2rem` | Shared only. Keyboard focus ring, drawn inside the link (`outline-offset: -0.2rem`) |
54
+ | `--content-docs-link-focus-outline-color` | `var(--theme-border-focus)` | Shared only |
50
55
 
51
56
  ### Link icons
52
57
 
@@ -70,11 +75,11 @@ styles both the docs nav and the page nav, plus **per-side** forms (`--content-d
70
75
  | `--content-docs-page-nav-column-width-tablet` | `20rem` | Page nav track at 768px–1023px |
71
76
 
72
77
  Link transitions also read the library-wide `--control-transition-duration` (`200ms`) and
73
- `--control-transition-ease` (`ease`); focus rings use `--theme-ring`.
78
+ `--control-transition-ease` (`ease`).
74
79
 
75
- The `--_*` variables declared on `.content-docs` (e.g. `--_link-color`, `--_panel-bg`)
76
- are the resolved shared/per-side fallback chain: not public API. Set the `--content-docs-*`
77
- tokens instead.
80
+ Private tokens (not public API), declared on `.content-docs`: `--_heading-*` and `--_link-color`,
81
+ `--_link-hover-*`, `--_link-active-*`, `--_panel-bg` (the shared values each per-side token falls
82
+ back to), and `--_link-focus-outline` (width + colour). Set the `--content-docs-*` tokens instead.
78
83
 
79
84
  ---
80
85
 
@@ -82,11 +87,28 @@ tokens instead.
82
87
 
83
88
  | Selector | When |
84
89
  |---|---|
85
- | `.docs-nav-link.is-active`, `.docs-page-nav-link.is-active` | The link matching `v-model:active-nav-item` / `v-model:active-page-nav-item` (also gets `aria-current="page"`) |
86
-
87
- Inner classes: `.content-docs-inner` (grid), `.docs-nav`, `.docs-content`, `.docs-page-nav` (grid
88
- areas), `.docs-nav-heading`, `.docs-page-nav-heading`, `.docs-nav-list`, `.docs-page-nav-list`
89
- (the `<nav>`s), `.docs-nav-link`, `.docs-page-nav-link`, `-link-icon`, `-link-label`.
90
+ | `.content-docs-nav-link[aria-current="page"]`, `.content-docs-page-nav-link[aria-current="page"]` | The link whose `to` matches `v-model:active-nav-item` / `v-model:active-page-nav-item`. Every item sharing that `to` matches |
91
+
92
+ Inner classes: `.content-docs-inner` (grid), `.content-docs-nav`, `.content-docs-content`,
93
+ `.content-docs-page-nav` (grid areas, each `min-inline-size: 0`), `.content-docs-nav-heading`,
94
+ `.content-docs-page-nav-heading`, `.content-docs-nav-list`, `.content-docs-page-nav-list` (the
95
+ `<nav>`s; their `<ul>`s carry `role="list"`), `.content-docs-nav-link`, `.content-docs-page-nav-link`,
96
+ and each link's `-icon` and `-label`.
97
+
98
+ > **Changed 2026-10-18**: generic class names collided with consumer CSS (a docs site is the likeliest
99
+ > place to already have a `.docs-nav`). Every inner class gained the `content-docs-` prefix:
100
+ >
101
+ > | Old | New |
102
+ > |---|---|
103
+ > | `.docs-nav`, `.docs-content`, `.docs-page-nav` | `.content-docs-nav`, `.content-docs-content`, `.content-docs-page-nav` |
104
+ > | `.docs-nav-heading`, `.docs-page-nav-heading` | `.content-docs-nav-heading`, `.content-docs-page-nav-heading` |
105
+ > | `.docs-nav-list`, `.docs-page-nav-list` | `.content-docs-nav-list`, `.content-docs-page-nav-list` |
106
+ > | `.docs-nav-link`, `.docs-page-nav-link` (and `-icon`, `-label`) | `.content-docs-nav-link`, `.content-docs-page-nav-link` (and `-icon`, `-label`) |
107
+ > | `.is-active` | removed: select `[aria-current="page"]` |
108
+ >
109
+ > The three grid areas now set `min-inline-size: 0` and the grid tracks are `minmax(0, 1fr)`, so a
110
+ > consumer `min-width: 0` on them is no longer needed. `.content-docs-content` also sets
111
+ > `overflow-wrap: break-word`. Token names are unchanged.
90
112
 
91
113
  The collapsible wrappers are `ExpandingPanelClassic` by default (`.expanding-panel-classic-*`
92
114
  classes) or `ExpandingPanel` with `panel-variant="modern"` (`.expanding-panel-*`). Style both if
@@ -105,6 +127,12 @@ Container queries on `.content-docs` (`container-name: contentDocs`), matched in
105
127
  | 768px–1023px | Page nav pinned open in a right-hand column; docs nav collapsible above content |
106
128
  | ≥ 1024px | Three columns, both navs pinned open |
107
129
 
130
+ Labels and headings wrap anywhere (`overflow-wrap: anywhere`), so an unbroken label stays inside its
131
+ column. Labels take their direction from their own text (`unicode-bidi: plaintext`), so a
132
+ right-to-left label reads and aligns right-to-left even though the link sets `direction` for the
133
+ icon-order trick. The page itself is assumed left-to-right: on a `dir="rtl"` page set both
134
+ `-icon-order` tokens to `rtl` to put icons at the inline start.
135
+
108
136
  ---
109
137
 
110
138
  ## Local overrides
@@ -1,10 +1,10 @@
1
1
  <template>
2
2
  <component :is="tag" ref="rootEl" class="content-docs" :class="[elementClasses]">
3
3
  <div class="content-docs-inner">
4
- <div v-if="hasDocsContent()" class="docs-content">
4
+ <div v-if="hasDocsContent()" class="content-docs-content">
5
5
  <slot name="docsContent"></slot>
6
6
  </div>
7
- <div v-if="hasDocsNav" class="docs-nav">
7
+ <div v-if="hasDocsNav" class="content-docs-nav">
8
8
  <component
9
9
  :is="panelComponent"
10
10
  v-model="docsNavPanelOpen"
@@ -14,25 +14,24 @@
14
14
  :content-is-on-top="docsNavOnTop"
15
15
  >
16
16
  <template #summary>
17
- <h3 class="docs-nav-heading">{{ docsNavLabel }}</h3>
17
+ <h3 class="content-docs-nav-heading">{{ docsNavLabel }}</h3>
18
18
  </template>
19
19
  <template #content>
20
- <nav class="docs-nav-list" :aria-label="docsNavAriaLabel">
21
- <ul>
22
- <li v-for="item in docsNavItems" :key="item.to">
20
+ <nav class="content-docs-nav-list" :aria-label="docsNavAriaLabel">
21
+ <ul role="list">
22
+ <li v-for="(item, index) in docsNavItems" :key="`${index}-${item.to}`">
23
23
  <component
24
24
  :is="NuxtLink"
25
25
  :to="item.to"
26
- class="docs-nav-link"
27
- :class="{ 'is-active': item.to === activeNavItem }"
26
+ class="content-docs-nav-link"
28
27
  :aria-current="item.to === activeNavItem ? 'page' : undefined"
29
28
  @click="
30
29
  activeNavItem = item.to;
31
30
  docsNavPanelOpen = false;
32
31
  "
33
32
  >
34
- <Icon v-if="item.icon" :name="item.icon" class="docs-nav-link-icon" aria-hidden="true" />
35
- <span class="docs-nav-link-label">{{ item.label }}</span>
33
+ <Icon v-if="item.icon" :name="item.icon" class="content-docs-nav-link-icon" aria-hidden="true" />
34
+ <span class="content-docs-nav-link-label">{{ item.label }}</span>
36
35
  </component>
37
36
  </li>
38
37
  </ul>
@@ -40,7 +39,7 @@
40
39
  </template>
41
40
  </component>
42
41
  </div>
43
- <div v-if="hasDocsPageNav" class="docs-page-nav">
42
+ <div v-if="hasDocsPageNav" class="content-docs-page-nav">
44
43
  <component
45
44
  :is="panelComponent"
46
45
  v-model="docsPageNavPanelOpen"
@@ -50,25 +49,24 @@
50
49
  :content-is-on-top="docsPageNavOnTop"
51
50
  >
52
51
  <template #summary>
53
- <h3 class="docs-page-nav-heading">{{ docsPageNavLabel }}</h3>
52
+ <h3 class="content-docs-page-nav-heading">{{ docsPageNavLabel }}</h3>
54
53
  </template>
55
54
  <template #content>
56
- <nav class="docs-page-nav-list" :aria-label="docsPageNavAriaLabel">
57
- <ul>
58
- <li v-for="item in docsPageNavItems" :key="item.to">
55
+ <nav class="content-docs-page-nav-list" :aria-label="docsPageNavAriaLabel">
56
+ <ul role="list">
57
+ <li v-for="(item, index) in docsPageNavItems" :key="`${index}-${item.to}`">
59
58
  <component
60
59
  :is="NuxtLink"
61
60
  :to="item.to"
62
- class="docs-page-nav-link"
63
- :class="{ 'is-active': item.to === activePageNavItem }"
61
+ class="content-docs-page-nav-link"
64
62
  :aria-current="item.to === activePageNavItem ? 'page' : undefined"
65
63
  @click="
66
64
  activePageNavItem = item.to;
67
65
  docsPageNavPanelOpen = false;
68
66
  "
69
67
  >
70
- <Icon v-if="item.icon" :name="item.icon" class="docs-page-nav-link-icon" aria-hidden="true" />
71
- <span class="docs-page-nav-link-label">{{ item.label }}</span>
68
+ <Icon v-if="item.icon" :name="item.icon" class="content-docs-page-nav-link-icon" aria-hidden="true" />
69
+ <span class="content-docs-page-nav-link-label">{{ item.label }}</span>
72
70
  </component>
73
71
  </li>
74
72
  </ul>
@@ -167,36 +165,21 @@ const docsPageNavPanelName = computed(() => (isMobile.value ? panelGroupId : `${
167
165
  --_heading-padding-inline: var(--content-docs-heading-padding-inline, 0);
168
166
 
169
167
  --_panel-bg: var(--content-docs-panel-bg, var(--page-bg));
170
- --_panel-padding-block: var(--content-docs-panel-padding-block, 0.8rem);
171
- --_panel-padding-inline: var(--content-docs-panel-padding-inline, 0.8rem);
172
- --_panel-border-radius: var(--content-docs-panel-border-radius, 0.5rem);
173
-
174
- --_link-font-size: var(--content-docs-link-font-size, 1.4rem);
175
- --_link-padding-block: var(--content-docs-link-padding-block, 0.6rem);
176
- --_link-padding-inline: var(--content-docs-link-padding-inline, 0.8rem);
177
- --_link-margin-block: var(--content-docs-link-margin-block, 0);
178
- --_link-border-radius: var(--content-docs-link-border-radius, 0.4rem);
168
+
179
169
  --_link-color: var(--content-docs-link-color, var(--colour-text-default));
180
- --_link-bg: var(--content-docs-link-bg, transparent);
181
170
  --_link-hover-bg: var(--content-docs-link-hover-bg, var(--theme-surface-subtle));
182
171
  --_link-hover-color: var(--content-docs-link-hover-color, var(--_link-color));
183
- --_link-active-bg: var(--content-docs-link-active-bg, var(--green-01));
184
- --_link-active-color: var(--content-docs-link-active-color, var(--green-10));
185
-
186
- --_page-nav-heading-padding-block: var(
187
- --content-docs-page-nav-heading-padding-block,
188
- var(--_heading-padding-block)
189
- );
190
- --_page-nav-heading-padding-inline: var(
191
- --content-docs-page-nav-heading-padding-inline,
192
- var(--_heading-padding-inline)
193
- );
172
+ --_link-active-bg: var(--content-docs-link-active-bg, var(--theme-surface));
173
+ --_link-active-color: var(--content-docs-link-active-color, var(--theme-on-surface));
174
+ --_link-focus-outline: var(--content-docs-link-focus-outline-width, 0.2rem) solid
175
+ var(--content-docs-link-focus-outline-color, var(--theme-border-focus));
194
176
 
195
177
  container-type: inline-size;
196
178
  container-name: contentDocs;
197
179
 
198
180
  .content-docs-inner {
199
181
  display: grid;
182
+ grid-template-columns: minmax(0, 1fr);
200
183
  grid-template-areas:
201
184
  "docsNav"
202
185
  "docsPageNav"
@@ -208,20 +191,20 @@ const docsPageNavPanelName = computed(() => (isMobile.value ? panelGroupId : `${
208
191
  grid-template-areas:
209
192
  "docsNav docsPageNav"
210
193
  "docsContent docsPageNav";
211
- gap: 1.6rem;
212
- grid-template-columns: 1fr var(--content-docs-page-nav-column-width-tablet, 20rem);
194
+ grid-template-columns: minmax(0, 1fr) var(--content-docs-page-nav-column-width-tablet, 20rem);
213
195
  grid-template-rows: auto 1fr;
214
196
  }
215
197
 
216
198
  @container contentDocs (width >= 1024px) {
217
- grid-template-areas: "docsNav docsContent docsPageNav";
218
- gap: 1.6rem;
219
- grid-template-columns: var(--content-docs-nav-column-width, 23rem) 1fr var(--content-docs-page-nav-column-width, 22rem);
199
+ grid-template-areas: "docsNav docsContent docsPageNav";
200
+ grid-template-columns:
201
+ var(--content-docs-nav-column-width, 23rem) minmax(0, 1fr)
202
+ var(--content-docs-page-nav-column-width, 22rem);
220
203
  }
221
204
 
222
- .docs-nav {
205
+ .content-docs-nav {
223
206
  grid-area: docsNav;
224
- align-items: start;
207
+ min-inline-size: 0;
225
208
 
226
209
  @container contentDocs (width >= 1024px) {
227
210
  .expanding-panel-summary,
@@ -230,13 +213,16 @@ const docsPageNavPanelName = computed(() => (isMobile.value ? panelGroupId : `${
230
213
  }
231
214
  }
232
215
  }
233
- .docs-content {
216
+
217
+ .content-docs-content {
234
218
  grid-area: docsContent;
235
- align-items: start;
219
+ min-inline-size: 0;
220
+ overflow-wrap: break-word;
236
221
  }
237
- .docs-page-nav {
222
+
223
+ .content-docs-page-nav {
238
224
  grid-area: docsPageNav;
239
- align-items: start;
225
+ min-inline-size: 0;
240
226
 
241
227
  @container contentDocs (width >= 768px) {
242
228
  .expanding-panel-summary,
@@ -247,7 +233,13 @@ const docsPageNavPanelName = computed(() => (isMobile.value ? panelGroupId : `${
247
233
  }
248
234
  }
249
235
 
250
- .docs-nav-heading {
236
+ .content-docs-nav-heading,
237
+ .content-docs-page-nav-heading {
238
+ min-inline-size: 0;
239
+ overflow-wrap: anywhere;
240
+ }
241
+
242
+ .content-docs-nav-heading {
251
243
  font-size: var(--content-docs-nav-heading-font-size, var(--_heading-font-size));
252
244
  font-weight: var(--content-docs-nav-heading-font-weight, var(--_heading-font-weight));
253
245
  color: var(--content-docs-nav-heading-color, var(--_heading-color));
@@ -256,21 +248,22 @@ const docsPageNavPanelName = computed(() => (isMobile.value ? panelGroupId : `${
256
248
  padding-block: var(--content-docs-nav-heading-padding-block, var(--_heading-padding-block));
257
249
  padding-inline: var(--content-docs-nav-heading-padding-inline, var(--_heading-padding-inline));
258
250
  }
259
- .docs-page-nav-heading {
251
+
252
+ .content-docs-page-nav-heading {
260
253
  font-size: var(--content-docs-page-nav-heading-font-size, var(--_heading-font-size));
261
254
  font-weight: var(--content-docs-page-nav-heading-font-weight, var(--_heading-font-weight));
262
255
  color: var(--content-docs-page-nav-heading-color, var(--_heading-color));
263
256
  background-color: var(--content-docs-page-nav-heading-bg, var(--_heading-bg));
264
257
  margin: var(--content-docs-page-nav-heading-margin, var(--_heading-margin));
265
- padding-block: var(--_page-nav-heading-padding-block);
266
- padding-inline: var(--_page-nav-heading-padding-inline);
258
+ padding-block: var(--content-docs-page-nav-heading-padding-block, var(--_heading-padding-block));
259
+ padding-inline: var(--content-docs-page-nav-heading-padding-inline, var(--_heading-padding-inline));
267
260
  }
268
261
 
269
- .docs-nav-list {
270
- border-radius: var(--_panel-border-radius);
271
- padding-block: var(--_panel-padding-block);
272
- padding-inline: var(--_panel-padding-inline);
273
- background-color: var(--content-docs-nav-panel-bg, var(--_panel-bg));
262
+ .content-docs-nav-list,
263
+ .content-docs-page-nav-list {
264
+ border-radius: var(--content-docs-panel-border-radius, 0.5rem);
265
+ padding-block: var(--content-docs-panel-padding-block, 0.8rem);
266
+ padding-inline: var(--content-docs-panel-padding-inline, 0.8rem);
274
267
 
275
268
  ul {
276
269
  list-style: none;
@@ -281,103 +274,84 @@ const docsPageNavPanelName = computed(() => (isMobile.value ? panelGroupId : `${
281
274
  gap: 0.4rem;
282
275
  }
283
276
  }
284
- .docs-page-nav-list {
285
- border-radius: var(--_panel-border-radius);
286
- padding-block: var(--_panel-padding-block);
287
- padding-inline: var(--_panel-padding-inline);
288
- background-color: var(--content-docs-page-nav-panel-bg, var(--_panel-bg));
289
277
 
290
- ul {
291
- list-style: none;
292
- margin: 0;
293
- padding: 0;
294
- display: flex;
295
- flex-direction: column;
296
- gap: 0.4rem;
297
- }
278
+ .content-docs-nav-list {
279
+ background-color: var(--content-docs-nav-panel-bg, var(--_panel-bg));
280
+ }
281
+
282
+ .content-docs-page-nav-list {
283
+ background-color: var(--content-docs-page-nav-panel-bg, var(--_panel-bg));
298
284
  }
299
285
 
300
- .docs-nav-link {
286
+ .content-docs-nav-link,
287
+ .content-docs-page-nav-link {
301
288
  display: grid;
302
- grid-template-columns: var(--content-docs-link-icon-size, 1.6rem) 1fr;
289
+ grid-template-columns: var(--content-docs-link-icon-size, 1.6rem) minmax(0, 1fr);
303
290
  align-items: center;
304
291
  gap: var(--content-docs-link-icon-gap, 0.6rem);
305
- border-radius: var(--_link-border-radius);
306
- font-size: var(--_link-font-size);
307
- padding-block: var(--_link-padding-block);
308
- padding-inline: var(--_link-padding-inline);
309
- margin-block: var(--_link-margin-block);
310
- background-color: var(--_link-bg);
292
+ border-radius: var(--content-docs-link-border-radius, 0.4rem);
293
+ font-size: var(--content-docs-link-font-size, 1.4rem);
294
+ padding-block: var(--content-docs-link-padding-block, 0.6rem);
295
+ padding-inline: var(--content-docs-link-padding-inline, 0.8rem);
296
+ margin-block: var(--content-docs-link-margin-block, 0);
297
+ background-color: var(--content-docs-link-bg, transparent);
311
298
  text-decoration: none;
312
- direction: var(--content-docs-nav-link-icon-order, ltr);
313
- color: var(--content-docs-nav-link-color, var(--_link-color));
314
299
  transition:
315
300
  background-color var(--control-transition-duration, 200ms) var(--control-transition-ease, ease),
316
301
  color var(--control-transition-duration, 200ms) var(--control-transition-ease, ease);
317
302
 
318
303
  &:focus-visible {
319
- outline: 0.2rem solid var(--theme-ring, currentcolor);
304
+ outline: var(--_link-focus-outline);
320
305
  outline-offset: -0.2rem;
321
306
  }
307
+ }
308
+
309
+ .content-docs-nav-link {
310
+ direction: var(--content-docs-nav-link-icon-order, ltr);
311
+ color: var(--content-docs-nav-link-color, var(--_link-color));
322
312
 
323
313
  &:hover {
324
314
  background-color: var(--content-docs-nav-link-hover-bg, var(--_link-hover-bg));
325
315
  color: var(--content-docs-nav-link-hover-color, var(--_link-hover-color));
326
316
  }
327
317
 
328
- &.is-active {
318
+ &[aria-current="page"] {
329
319
  background-color: var(--content-docs-nav-link-active-bg, var(--_link-active-bg));
330
320
  color: var(--content-docs-nav-link-active-color, var(--_link-active-color));
331
321
  font-weight: 600;
332
322
  }
333
323
  }
334
- .docs-page-nav-link {
335
- display: grid;
336
- grid-template-columns: var(--content-docs-link-icon-size, 1.6rem) 1fr;
337
- align-items: center;
338
- gap: var(--content-docs-link-icon-gap, 0.6rem);
339
- border-radius: var(--_link-border-radius);
340
- font-size: var(--_link-font-size);
341
- padding-block: var(--_link-padding-block);
342
- padding-inline: var(--_link-padding-inline);
343
- margin-block: var(--_link-margin-block);
344
- background-color: var(--_link-bg);
345
- text-decoration: none;
324
+
325
+ .content-docs-page-nav-link {
346
326
  direction: var(--content-docs-page-nav-link-icon-order, ltr);
347
327
  color: var(--content-docs-page-nav-link-color, var(--_link-color));
348
- transition:
349
- background-color var(--control-transition-duration, 200ms) var(--control-transition-ease, ease),
350
- color var(--control-transition-duration, 200ms) var(--control-transition-ease, ease);
351
-
352
- &:focus-visible {
353
- outline: 0.2rem solid var(--theme-ring, currentcolor);
354
- outline-offset: -0.2rem;
355
- }
356
328
 
357
329
  &:hover {
358
330
  background-color: var(--content-docs-page-nav-link-hover-bg, var(--_link-hover-bg));
359
331
  color: var(--content-docs-page-nav-link-hover-color, var(--_link-hover-color));
360
332
  }
361
333
 
362
- &.is-active {
334
+ &[aria-current="page"] {
363
335
  background-color: var(--content-docs-page-nav-link-active-bg, var(--_link-active-bg));
364
336
  color: var(--content-docs-page-nav-link-active-color, var(--_link-active-color));
365
337
  font-weight: 600;
366
338
  }
367
339
  }
368
340
 
369
- .docs-nav-link-icon,
370
- .docs-page-nav-link-icon {
341
+ .content-docs-nav-link-icon,
342
+ .content-docs-page-nav-link-icon {
371
343
  grid-column: 1;
372
344
  direction: ltr;
373
- flex-shrink: 0;
374
345
  font-size: var(--content-docs-link-icon-size, 1.6rem);
375
346
  }
376
347
 
377
- .docs-nav-link-label,
378
- .docs-page-nav-link-label {
348
+ .content-docs-nav-link-label,
349
+ .content-docs-page-nav-link-label {
379
350
  grid-column: 2;
380
- direction: ltr;
351
+ min-inline-size: 0;
352
+ overflow-wrap: anywhere;
353
+ unicode-bidi: plaintext;
354
+ text-align: start;
381
355
  }
382
356
  }
383
357
  }