srcdev-nuxt-components 9.4.11 → 9.5.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.
Files changed (623) hide show
  1. package/.claude/skills/component-aria-landmark.md +1 -1
  2. package/.claude/skills/component-dynamic-slots.md +0 -1
  3. package/.claude/skills/component-export-types.md +3 -3
  4. package/.claude/skills/component-inline-action-button.md +7 -7
  5. package/.claude/skills/component-local-style-override.md +134 -50
  6. package/.claude/skills/component-naming.md +107 -0
  7. package/.claude/skills/components/action-menu.md +18 -14
  8. package/.claude/skills/components/alert-content.md +110 -0
  9. package/.claude/skills/components/alert-mask-core.md +15 -1
  10. package/.claude/skills/components/alert-masked-content.md +95 -0
  11. package/.claude/skills/components/auto-grid.md +21 -13
  12. package/.claude/skills/components/canvas-switcher.md +3 -3
  13. package/.claude/skills/components/capture-qr-code.md +19 -9
  14. package/.claude/skills/components/carousel-flip.md +3 -3
  15. package/.claude/skills/components/container-glow.md +2 -2
  16. package/.claude/skills/components/content-docs.md +9 -5
  17. package/.claude/skills/components/cookie-consent-banner.md +16 -17
  18. package/.claude/skills/components/dashboard-quad-grid.md +4 -4
  19. package/.claude/skills/components/decode-qr-code.md +15 -9
  20. package/.claude/skills/components/display-avatar.md +16 -31
  21. package/.claude/skills/components/display-chip.md +15 -10
  22. package/.claude/skills/components/display-dialog.md +3 -1
  23. package/.claude/skills/components/display-pill.md +17 -75
  24. package/.claude/skills/components/display-prompt.md +11 -19
  25. package/.claude/skills/components/display-qr-code.md +5 -0
  26. package/.claude/skills/components/display-theme-switch.md +7 -6
  27. package/.claude/skills/components/display-toast.md +5 -6
  28. package/.claude/skills/components/entry-animation.md +2 -5
  29. package/.claude/skills/components/eyebrow-text.md +6 -4
  30. package/.claude/skills/components/form-field.md +79 -0
  31. package/.claude/skills/components/form-fieldset.md +75 -0
  32. package/.claude/skills/components/form-wrapper.md +71 -0
  33. package/.claude/skills/components/glass-panel.md +60 -51
  34. package/.claude/skills/components/grid-stack.md +8 -2
  35. package/.claude/skills/components/header-block.md +1 -1
  36. package/.claude/skills/components/hero-text.md +8 -6
  37. package/.claude/skills/components/input-button.md +72 -0
  38. package/.claude/skills/components/input-checkbox-radio.md +149 -0
  39. package/.claude/skills/components/input-checkbox.md +148 -0
  40. package/.claude/skills/components/input-description.md +102 -0
  41. package/.claude/skills/components/input-error.md +105 -0
  42. package/.claude/skills/components/input-label.md +119 -0
  43. package/.claude/skills/components/{input-number-core.md → input-number.md} +41 -36
  44. package/.claude/skills/components/input-radio.md +95 -0
  45. package/.claude/skills/components/input-range-core.md +4 -4
  46. package/.claude/skills/components/input-select-core.md +1 -1
  47. package/.claude/skills/components/input-text-core.md +8 -6
  48. package/.claude/skills/components/input-textarea-core.md +4 -4
  49. package/.claude/skills/components/layout-grid-by-cols.md +31 -43
  50. package/.claude/skills/components/link-text.md +2 -2
  51. package/.claude/skills/components/opening-hours.md +116 -0
  52. package/.claude/skills/components/page-hero-highlights.md +35 -35
  53. package/.claude/skills/components/page-row.md +1 -1
  54. package/.claude/skills/components/pending-effect.md +63 -0
  55. package/.claude/skills/components/price-list.md +72 -0
  56. package/.claude/skills/components/pricing-card.md +3 -3
  57. package/.claude/skills/components/profile-section.md +6 -4
  58. package/.claude/skills/components/samaritan-prompt.md +140 -0
  59. package/.claude/skills/components/scroll-reveal-frame.md +21 -20
  60. package/.claude/skills/components/scroll-reveal-image.md +31 -21
  61. package/.claude/skills/components/service-detail.md +2 -2
  62. package/.claude/skills/components/services-card-grid.md +5 -4
  63. package/.claude/skills/components/services-card.md +12 -10
  64. package/.claude/skills/components/site-navigation.md +20 -6
  65. package/.claude/skills/components/slider-gallery.md +88 -0
  66. package/.claude/skills/components/social-icons-list.md +12 -6
  67. package/.claude/skills/components/tab-navigation.md +1 -1
  68. package/.claude/skills/components/text-block.md +68 -0
  69. package/.claude/skills/components/toggle-switch-core.md +3 -3
  70. package/.claude/skills/components/triple-toggle-switch.md +85 -0
  71. package/.claude/skills/composable-zod-validation.md +1 -1
  72. package/.claude/skills/consumer-styles-structure.md +153 -0
  73. package/.claude/skills/icon-sets.md +3 -3
  74. package/.claude/skills/icon-sizing.md +66 -0
  75. package/.claude/skills/index.md +35 -16
  76. package/.claude/skills/new-app-scaffold.md +45 -7
  77. package/.claude/skills/pull-request-description.md +1 -0
  78. package/.claude/skills/storybook-add-story.md +53 -5
  79. package/.claude/skills/testing-add-playwright.md +1 -1
  80. package/.claude/skills/theming-colour-ramps.md +25 -3
  81. package/.claude/skills/theming-component-token-pattern.md +16 -16
  82. package/.claude/skills/theming-override-default.md +7 -0
  83. package/.claude/skills/theming-partial-override.md +1 -1
  84. package/.claude/skills/theming-typography-tokens.md +1 -1
  85. package/.claude/skills/vercel-node-version.md +1 -1
  86. package/.vscode/srcdev-component-action-menu.code-snippets +42 -0
  87. package/.vscode/srcdev-component-alert-content.code-snippets +36 -0
  88. package/.vscode/srcdev-component-alert-masked-content.code-snippets +35 -0
  89. package/.vscode/srcdev-component-auto-grid.code-snippets +39 -0
  90. package/.vscode/srcdev-component-capture-decode-qr-code.code-snippets +28 -0
  91. package/.vscode/srcdev-component-content-docs.code-snippets +4 -4
  92. package/.vscode/srcdev-component-cookie-consent-banner.code-snippets +33 -0
  93. package/.vscode/srcdev-component-display-avatar.code-snippets +28 -0
  94. package/.vscode/srcdev-component-display-chip.code-snippets +27 -0
  95. package/.vscode/srcdev-component-display-pill.code-snippets +38 -0
  96. package/.vscode/srcdev-component-display-prompt.code-snippets +10 -54
  97. package/.vscode/srcdev-component-display-qr-code.code-snippets +22 -0
  98. package/.vscode/srcdev-component-eyebrow-text.code-snippets +19 -0
  99. package/.vscode/srcdev-component-form-field.code-snippets +25 -0
  100. package/.vscode/srcdev-component-form-fieldset.code-snippets +36 -0
  101. package/.vscode/srcdev-component-form-wrapper.code-snippets +30 -0
  102. package/.vscode/srcdev-component-glass-panel.code-snippets +38 -0
  103. package/.vscode/srcdev-component-grid-stack.code-snippets +49 -0
  104. package/.vscode/srcdev-component-input-button.code-snippets +27 -0
  105. package/.vscode/srcdev-component-input-checkbox-radio.code-snippets +60 -0
  106. package/.vscode/srcdev-component-input-checkbox.code-snippets +48 -0
  107. package/.vscode/srcdev-component-input-description.code-snippets +44 -0
  108. package/.vscode/srcdev-component-input-error.code-snippets +30 -0
  109. package/.vscode/srcdev-component-input-label.code-snippets +39 -0
  110. package/.vscode/srcdev-component-input-number.code-snippets +11 -11
  111. package/.vscode/srcdev-component-input-radio.code-snippets +58 -0
  112. package/.vscode/srcdev-component-layout-grid-by-cols.code-snippets +46 -0
  113. package/.vscode/srcdev-component-link-text.code-snippets +30 -0
  114. package/.vscode/srcdev-component-opening-hours.code-snippets +40 -0
  115. package/.vscode/srcdev-component-page-hero-highlights.code-snippets +37 -0
  116. package/.vscode/srcdev-component-page-row.code-snippets +47 -0
  117. package/.vscode/srcdev-component-pending-effect.code-snippets +26 -0
  118. package/.vscode/srcdev-component-price-list.code-snippets +37 -0
  119. package/.vscode/srcdev-component-pricing-card.code-snippets +2 -2
  120. package/.vscode/srcdev-component-profile-section.code-snippets +36 -0
  121. package/.vscode/srcdev-component-samaritan-prompt.code-snippets +60 -0
  122. package/.vscode/srcdev-component-scroll-reveal-frame.code-snippets +36 -0
  123. package/.vscode/srcdev-component-scroll-reveal-image.code-snippets +46 -0
  124. package/.vscode/srcdev-component-services-card.code-snippets +4 -4
  125. package/.vscode/srcdev-component-services-grids.code-snippets +36 -0
  126. package/.vscode/srcdev-component-site-navigation.code-snippets +26 -18
  127. package/.vscode/srcdev-component-slider-gallery.code-snippets +9 -0
  128. package/.vscode/srcdev-component-social-icons-list.code-snippets +24 -0
  129. package/.vscode/srcdev-component-stepper-list.code-snippets +39 -0
  130. package/.vscode/srcdev-component-text-block.code-snippets +31 -0
  131. package/.vscode/srcdev-component-triple-toggle-switch.code-snippets +30 -0
  132. package/README.md +2 -2
  133. package/app/app.config.ts +10 -0
  134. package/app/assets/styles/setup/02.colours/_orange.css +11 -11
  135. package/app/assets/styles/setup/02.colours/_theme-params.css +2 -2
  136. package/app/assets/styles/setup/03.theming/_default.css +1 -22
  137. package/app/assets/styles/setup/03.theming/_theme-slots.css +1 -1
  138. package/app/assets/styles/setup/03.theming/_warning.css +8 -10
  139. package/app/assets/styles/setup/04.elements/forms/02.typography.css +0 -14
  140. package/app/assets/styles/setup/04.elements/forms/06.button-geometry.css +1 -1
  141. package/app/assets/styles/setup/index.css +1 -1
  142. package/app/components/01.atoms/alert-mask/AlertMaskCore.vue +23 -5
  143. package/app/components/01.atoms/alert-mask/CONSUMER-STYLING.md +23 -5
  144. package/app/components/01.atoms/alert-mask/stories/AlertMaskCore.stories.ts +45 -19
  145. package/app/components/01.atoms/alert-mask/tests/AlertMaskCore.spec.ts +35 -1
  146. package/app/components/01.atoms/animations/animated-svg-text/CONSUMER-STYLING.md +13 -0
  147. package/app/components/01.atoms/animations/clip-element/CONSUMER-STYLING.md +13 -0
  148. package/app/components/01.atoms/animations/clip-element/ClipElement.vue +2 -2
  149. package/app/components/01.atoms/animations/container-glow/CONSUMER-STYLING.md +26 -5
  150. package/app/components/01.atoms/animations/entry/.nuxt/app.config.mjs +21 -0
  151. package/app/components/01.atoms/animations/entry/.nuxt/components.d.ts +66 -0
  152. package/app/components/01.atoms/animations/entry/.nuxt/imports.d.ts +30 -0
  153. package/app/components/01.atoms/animations/entry/.nuxt/manifest/meta/test.json +1 -0
  154. package/app/components/01.atoms/animations/entry/.nuxt/types/app.config.d.ts +35 -0
  155. package/app/components/01.atoms/animations/entry/.nuxt/types/build.d.ts +23 -0
  156. package/app/components/01.atoms/animations/entry/.nuxt/types/builder-env.d.ts +1 -0
  157. package/app/components/01.atoms/animations/entry/.nuxt/types/components.d.ts +71 -0
  158. package/app/components/01.atoms/animations/entry/.nuxt/types/imports.d.ts +386 -0
  159. package/app/components/01.atoms/animations/entry/.nuxt/types/middleware.d.ts +11 -0
  160. package/app/components/01.atoms/animations/entry/.nuxt/types/modules.d.ts +79 -0
  161. package/app/components/01.atoms/animations/entry/.nuxt/types/nitro-layouts.d.ts +17 -0
  162. package/app/components/01.atoms/animations/entry/.nuxt/types/nitro-nuxt.d.ts +64 -0
  163. package/app/components/01.atoms/animations/entry/.nuxt/types/plugins.d.ts +29 -0
  164. package/app/components/01.atoms/animations/entry/.nuxt/types/runtime-config.d.ts +32 -0
  165. package/app/components/01.atoms/animations/entry/.nuxt/types/shared-imports.d.ts +10 -0
  166. package/app/components/01.atoms/animations/entry/.nuxt/types/vue-shim.d.ts +0 -0
  167. package/app/components/01.atoms/animations/entry/.nuxtrc +1 -0
  168. package/app/components/01.atoms/animations/entry/CONSUMER-STYLING.md +65 -0
  169. package/app/components/01.atoms/animations/entry/EntryAnimation.vue +6 -5
  170. package/app/components/01.atoms/animations/entry/node_modules/.cache/nuxt/chrome-workspace.json +1 -0
  171. package/app/components/01.atoms/animations/entry/node_modules/.cache/vite/client/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  172. package/app/components/01.atoms/animations/entry/stories/EntryAnimation.stories.ts +1 -1
  173. package/app/components/01.atoms/animations/entry/tests/EntryAnimation.spec.ts +25 -0
  174. package/app/components/01.atoms/animations/glowing-border/CONSUMER-STYLING.md +24 -5
  175. package/app/components/01.atoms/animations/marquee-scroller/CONSUMER-STYLING.md +20 -0
  176. package/app/components/01.atoms/animations/rotating-carousel-image/CONSUMER-STYLING.md +17 -0
  177. package/app/components/01.atoms/animations/scroll-reveal-frame/CONSUMER-STYLING.md +77 -0
  178. package/app/components/01.atoms/animations/scroll-reveal-frame/ScrollRevealFrame.vue +37 -78
  179. package/app/components/01.atoms/animations/scroll-reveal-frame/stories/ScrollRevealFrame.stories.ts +48 -0
  180. package/app/components/01.atoms/animations/scroll-reveal-frame/tests/ScrollRevealFrame.spec.ts +40 -33
  181. package/app/components/01.atoms/animations/scroll-reveal-frame/tests/__snapshots__/ScrollRevealFrame.spec.ts.snap +4 -4
  182. package/app/components/01.atoms/animations/scroll-reveal-image/CONSUMER-STYLING.md +74 -0
  183. package/app/components/01.atoms/animations/scroll-reveal-image/ScrollRevealImage.vue +14 -44
  184. package/app/components/01.atoms/animations/scroll-reveal-image/stories/ScrollRevealImage.stories.ts +50 -1
  185. package/app/components/01.atoms/animations/scroll-reveal-image/tests/ScrollRevealImage.spec.ts +27 -20
  186. package/app/components/01.atoms/animations/scroll-reveal-image/tests/__snapshots__/ScrollRevealImage.spec.ts.snap +4 -4
  187. package/app/components/01.atoms/animations/section-parallax/CONSUMER-STYLING.md +21 -4
  188. package/app/components/01.atoms/animations/view-timeline/CONSUMER-STYLING.md +25 -0
  189. package/app/components/01.atoms/banner-video/CONSUMER-STYLING.md +12 -5
  190. package/app/components/01.atoms/canvas-switcher/CONSUMER-STYLING.md +20 -7
  191. package/app/components/01.atoms/canvas-switcher/CanvasSwitcher.vue +12 -7
  192. package/app/components/01.atoms/card/CONSUMER-STYLING.md +47 -42
  193. package/app/components/01.atoms/card/CardCore.vue +7 -17
  194. package/app/components/01.atoms/clipped-panel/CONSUMER-STYLING.md +13 -0
  195. package/app/components/01.atoms/content-wrappers/docs-pages/CONSUMER-STYLING.md +127 -0
  196. package/app/components/01.atoms/content-wrappers/docs-pages/ContentDocs.vue +44 -77
  197. package/app/components/01.atoms/content-wrappers/docs-pages/stories/ContentDocs.stories.ts +3 -3
  198. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/CONSUMER-STYLING.md +14 -1
  199. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/stories/DashboardQuadGrid.stories.ts +2 -0
  200. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/CONSUMER-STYLING.md +13 -0
  201. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/stories/DashboardStatsGrid.stories.ts +2 -0
  202. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/CONSUMER-STYLING.md +72 -0
  203. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/LayoutGridByCols.vue +26 -25
  204. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/stories/LayoutGridByCols.stories.ts +91 -107
  205. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/tests/LayoutGridByCols.spec.ts +50 -15
  206. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/tests/__snapshots__/LayoutGridByCols.spec.ts.snap +5 -5
  207. package/app/components/01.atoms/display-banner/CONSUMER-STYLING.md +13 -0
  208. package/app/components/01.atoms/display-dialog/CONSUMER-STYLING.md +82 -54
  209. package/app/components/01.atoms/display-dialog/DisplayDialog.vue +38 -45
  210. package/app/components/01.atoms/display-dialog/stories/DisplayDialog.stories.ts +25 -0
  211. package/app/components/01.atoms/display-dialog/tests/DisplayDialog.spec.ts +21 -0
  212. package/app/components/01.atoms/display-pill/CONSUMER-STYLING.md +112 -0
  213. package/app/components/01.atoms/display-pill/DisplayPill.vue +88 -50
  214. package/app/components/01.atoms/display-pill/stories/DisplayPill.stories.ts +56 -3
  215. package/app/components/01.atoms/display-pill/tests/DisplayPill.spec.ts +104 -4
  216. package/app/components/01.atoms/display-pill/tests/__snapshots__/DisplayPill.spec.ts.snap +3 -3
  217. package/app/components/01.atoms/display-tooltip/CONSUMER-STYLING.md +22 -2
  218. package/app/components/01.atoms/display-tooltip/DisplayTooltip.vue +18 -26
  219. package/app/components/01.atoms/glass-panel/CONSUMER-STYLING.md +91 -0
  220. package/app/components/01.atoms/glass-panel/GlassPanel.vue +34 -30
  221. package/app/components/01.atoms/glass-panel/stories/GlassPanel.stories.ts +121 -0
  222. package/app/components/01.atoms/glass-panel/tests/GlassPanel.spec.ts +61 -0
  223. package/app/components/01.atoms/grids/auto-grid/AutoGrid.vue +5 -10
  224. package/app/components/01.atoms/grids/auto-grid/CONSUMER-STYLING.md +76 -0
  225. package/app/components/01.atoms/grids/auto-grid/stories/AutoGrid.stories.ts +5 -4
  226. package/app/components/01.atoms/grids/auto-grid/tests/AutoGrid.spec.ts +8 -0
  227. package/app/components/01.atoms/grids/column-flow-grid/CONSUMER-STYLING.md +11 -2
  228. package/app/components/01.atoms/grids/grid-stack/CONSUMER-STYLING.md +76 -0
  229. package/app/components/01.atoms/grids/grid-stack/GridStack.vue +6 -1
  230. package/app/components/01.atoms/grids/grid-stack/stories/GridStack.stories.ts +1 -1
  231. package/app/components/01.atoms/grids/grid-stack/tests/GridStack.spec.ts +35 -0
  232. package/app/components/01.atoms/grids/masonry-grid/CONSUMER-STYLING.md +11 -2
  233. package/app/components/01.atoms/navigation/breadcrumb/Breadcrumb.vue +5 -10
  234. package/app/components/01.atoms/navigation/breadcrumb/CONSUMER-STYLING.md +15 -0
  235. package/app/components/01.atoms/navigation/skip-links/CONSUMER-STYLING.md +13 -0
  236. package/app/components/01.atoms/navigation/tabs/CONSUMER-STYLING.md +21 -0
  237. package/app/components/01.atoms/page-row/CONSUMER-STYLING.md +46 -8
  238. package/app/components/01.atoms/page-row/PageRow.vue +17 -13
  239. package/app/components/01.atoms/page-row/stories/PageRow.stories.ts +8 -0
  240. package/app/components/01.atoms/page-row/tests/PageRow.spec.ts +7 -11
  241. package/app/components/01.atoms/pop-over/CONSUMER-STYLING.md +13 -0
  242. package/app/components/01.atoms/qr-code/CONSUMER-STYLING.md +48 -0
  243. package/app/components/01.atoms/qr-code/DisplayQrCode.vue +5 -1
  244. package/app/components/01.atoms/qr-code/stories/DisplayQrCode.stories.ts +11 -3
  245. package/app/components/01.atoms/qr-code/tests/DisplayQrCode.spec.ts +15 -0
  246. package/app/components/01.atoms/text-block/CONSUMER-STYLING.md +49 -0
  247. package/app/components/01.atoms/text-block/TextBlock.vue +13 -5
  248. package/app/components/01.atoms/text-block/stories/TextBlock.stories.ts +84 -0
  249. package/app/components/01.atoms/text-block/tests/TextBlock.spec.ts +78 -0
  250. package/app/components/01.atoms/text-block/tests/__snapshots__/TextBlock.spec.ts.snap +7 -0
  251. package/app/components/01.atoms/text-blocks/eyebrow-text/CONSUMER-STYLING.md +56 -0
  252. package/app/components/01.atoms/text-blocks/eyebrow-text/EyebrowText.vue +10 -5
  253. package/app/components/01.atoms/text-blocks/eyebrow-text/tests/EyebrowText.spec.ts +11 -0
  254. package/app/components/01.atoms/text-blocks/header-block/CONSUMER-STYLING.md +16 -1
  255. package/app/components/01.atoms/text-blocks/hero-text/CONSUMER-STYLING.md +74 -0
  256. package/app/components/01.atoms/text-blocks/hero-text/HeroText.vue +14 -9
  257. package/app/components/01.atoms/text-blocks/hero-text/tests/HeroText.spec.ts +11 -0
  258. package/app/components/01.atoms/text-blocks/link-text/CONSUMER-STYLING.md +45 -0
  259. package/app/components/01.atoms/text-blocks/link-text/LinkText.vue +15 -8
  260. package/app/components/01.atoms/text-blocks/link-text/tests/LinkText.spec.ts +11 -0
  261. package/app/components/01.atoms/ui-block-decorated/CONSUMER-STYLING.md +13 -0
  262. package/app/components/02.molecules/action-menu/ActionMenu.vue +28 -30
  263. package/app/components/02.molecules/action-menu/{ActionMenuItemCore.vue → ActionMenuItem.vue} +12 -14
  264. package/app/components/02.molecules/action-menu/CONSUMER-STYLING.md +90 -76
  265. package/app/components/02.molecules/action-menu/stories/ActionMenu.stories.ts +48 -41
  266. package/app/components/02.molecules/action-menu/tests/ActionMenu.spec.ts +46 -1
  267. package/app/components/02.molecules/action-menu/tests/{ActionMenuItemCore.spec.ts → ActionMenuItem.spec.ts} +11 -5
  268. package/app/components/02.molecules/action-menu/tests/__snapshots__/ActionMenuItem.spec.ts.snap +27 -0
  269. package/app/components/02.molecules/alert-content/AlertContent.vue +17 -8
  270. package/app/components/02.molecules/alert-content/AlertContentInner.vue +57 -30
  271. package/app/components/02.molecules/alert-content/CONSUMER-STYLING.md +84 -0
  272. package/app/components/02.molecules/alert-content/stories/AlertContent.stories.ts +39 -0
  273. package/app/components/02.molecules/alert-content/tests/AlertContent.spec.ts +32 -0
  274. package/app/components/02.molecules/alert-content/tests/AlertContentInner.spec.ts +32 -0
  275. package/app/components/02.molecules/alert-masked-content/AlertMaskedContent.vue +9 -5
  276. package/app/components/02.molecules/alert-masked-content/CONSUMER-STYLING.md +73 -0
  277. package/app/components/02.molecules/alert-masked-content/stories/AlertMaskedContent.stories.ts +91 -10
  278. package/app/components/02.molecules/alert-masked-content/tests/AlertMaskedContent.spec.ts +52 -0
  279. package/app/components/02.molecules/cookie-consent-banner/CONSUMER-STYLING.md +95 -0
  280. package/app/components/02.molecules/cookie-consent-banner/CookieConsentBanner.vue +149 -0
  281. package/app/components/{01.atoms → 02.molecules}/cookie-consent-banner/stories/CookieConsentBanner.stories.ts +22 -3
  282. package/app/components/{01.atoms → 02.molecules}/cookie-consent-banner/tests/CookieConsentBanner.spec.ts +81 -4
  283. package/app/components/02.molecules/display-avatar/CONSUMER-STYLING.md +63 -0
  284. package/app/components/02.molecules/display-avatar/DisplayAvatar.vue +120 -0
  285. package/app/components/{01.atoms → 02.molecules}/display-avatar/stories/DisplayAvatar.stories.ts +56 -14
  286. package/app/components/{01.atoms → 02.molecules}/display-avatar/tests/DisplayAvatar.spec.ts +43 -11
  287. package/app/components/02.molecules/display-avatar/tests/__snapshots__/DisplayAvatar.spec.ts.snap +11 -0
  288. package/app/components/02.molecules/display-chip/CONSUMER-STYLING.md +57 -0
  289. package/app/components/02.molecules/display-chip/DisplayChip.vue +50 -83
  290. package/app/components/02.molecules/display-chip/tests/DisplayChip.spec.ts +10 -10
  291. package/app/components/02.molecules/display-chip/tests/__snapshots__/DisplayChip.spec.ts.snap +4 -4
  292. package/app/components/02.molecules/display-theme-switch/CONSUMER-STYLING.md +25 -4
  293. package/app/components/02.molecules/display-theme-switch/DisplayThemeSwitch.vue +9 -6
  294. package/app/components/02.molecules/display-theme-switch/stories/DisplayThemeSwitch.stories.ts +6 -1
  295. package/app/components/02.molecules/display-theme-switch/tests/DisplayThemeSwitch.spec.ts +10 -1
  296. package/app/components/02.molecules/display-tooltip-defined/CONSUMER-STYLING.md +11 -0
  297. package/app/components/02.molecules/expandable/accordian/CONSUMER-STYLING.md +11 -4
  298. package/app/components/02.molecules/expandable/expanding-panel/CONSUMER-STYLING.md +12 -5
  299. package/app/components/02.molecules/expandable/expanding-panel-classic/CONSUMER-STYLING.md +12 -5
  300. package/app/components/02.molecules/input-copy/CONSUMER-STYLING.md +12 -5
  301. package/app/components/02.molecules/input-copy/InputCopy.vue +12 -25
  302. package/app/components/02.molecules/input-copy/stories/InputCopy.stories.ts +1 -1
  303. package/app/components/02.molecules/input-copy/tests/InputCopy.spec.ts +1 -1
  304. package/app/components/02.molecules/navigation/deep-expanding-menu/CONSUMER-STYLING.md +13 -0
  305. package/app/components/02.molecules/navigation/deep-expanding-menu-classic/CONSUMER-STYLING.md +11 -0
  306. package/app/components/02.molecules/navigation/site-navigation/CONSUMER-STYLING.md +109 -0
  307. package/app/components/02.molecules/navigation/site-navigation/SiteNavigation.vue +37 -55
  308. package/app/components/02.molecules/navigation/site-navigation/stories/SiteNavigation.stories.ts +22 -1
  309. package/app/components/02.molecules/navigation/site-navigation/tests/SiteNavigation.spec.ts +41 -6
  310. package/app/components/02.molecules/navigation/tab-navigation/CONSUMER-STYLING.md +13 -8
  311. package/app/components/02.molecules/navigation/tab-navigation/TabNavigation.vue +18 -36
  312. package/app/components/02.molecules/navigation/tab-navigation/stories/TabNavigation.stories.ts +1 -1
  313. package/app/components/02.molecules/navigation/tab-navigation/tests/TabNavigation.spec.ts +1 -1
  314. package/app/components/02.molecules/opening-hours/CONSUMER-STYLING.md +134 -0
  315. package/app/components/02.molecules/opening-hours/OpeningHours.vue +352 -0
  316. package/app/components/02.molecules/opening-hours/stories/OpeningHours.stories.ts +127 -0
  317. package/app/components/02.molecules/opening-hours/tests/OpeningHours.spec.ts +228 -0
  318. package/app/components/02.molecules/opening-hours/tests/OpeningHours.structuredData.spec.ts +45 -0
  319. package/app/components/02.molecules/opening-hours/tests/__snapshots__/OpeningHours.spec.ts.snap +23 -0
  320. package/app/components/02.molecules/opening-hours/tests/buildOpeningHoursSpecification.spec.ts +52 -0
  321. package/app/components/02.molecules/price-list/CONSUMER-STYLING.md +106 -0
  322. package/app/components/02.molecules/price-list/PriceList.vue +48 -40
  323. package/app/components/02.molecules/price-list/stories/PriceList.stories.ts +15 -2
  324. package/app/components/02.molecules/price-list/tests/PriceList.spec.ts +39 -2
  325. package/app/components/02.molecules/price-list/tests/__snapshots__/PriceList.spec.ts.snap +4 -16
  326. package/app/components/02.molecules/pricing-card/CONSUMER-STYLING.md +23 -5
  327. package/app/components/02.molecules/pricing-card/PricingCard.vue +31 -61
  328. package/app/components/02.molecules/pricing-card/stories/PricingCard.stories.ts +2 -0
  329. package/app/components/02.molecules/pricing-card/tests/PricingCard.spec.ts +14 -1
  330. package/app/components/02.molecules/profile-section/CONSUMER-STYLING.md +53 -0
  331. package/app/components/02.molecules/profile-section/ProfileSection.vue +53 -66
  332. package/app/components/02.molecules/profile-section/tests/ProfileSection.spec.ts +4 -4
  333. package/app/components/02.molecules/profile-section/tests/__snapshots__/ProfileSection.spec.ts.snap +6 -12
  334. package/app/components/02.molecules/prompt/CONSUMER-STYLING.md +51 -0
  335. package/app/components/{01.atoms → 02.molecules}/prompt/DisplayPrompt.vue +23 -8
  336. package/app/components/{01.atoms → 02.molecules}/prompt/stories/DisplayPrompt.stories.ts +18 -1
  337. package/app/components/{01.atoms → 02.molecules}/prompt/tests/DisplayPrompt.spec.ts +37 -7
  338. package/app/components/02.molecules/qr-code/CONSUMER-STYLING.md +66 -0
  339. package/app/components/02.molecules/qr-code/CaptureQrCode.vue +31 -12
  340. package/app/components/02.molecules/qr-code/DecodeQrCode.vue +55 -19
  341. package/app/components/02.molecules/qr-code/stories/CaptureQrCode.stories.ts +56 -0
  342. package/app/components/02.molecules/qr-code/stories/DecodeQrCode.stories.ts +53 -0
  343. package/app/components/02.molecules/qr-code/tests/CaptureQrCode.spec.ts +68 -20
  344. package/app/components/02.molecules/qr-code/tests/DecodeQrCode.spec.ts +44 -8
  345. package/app/components/02.molecules/samaritan-prompt/CONSUMER-STYLING.md +118 -0
  346. package/app/components/02.molecules/samaritan-prompt/SamaritanPrompt.vue +108 -51
  347. package/app/components/02.molecules/samaritan-prompt/SamaritanPromptMixed.vue +63 -62
  348. package/app/components/02.molecules/samaritan-prompt/stories/SamaritanPrompt.stories.ts +129 -0
  349. package/app/components/02.molecules/samaritan-prompt/stories/SamaritanPromptMixed.stories.ts +124 -0
  350. package/app/components/02.molecules/samaritan-prompt/tests/SamaritanPrompt.spec.ts +66 -0
  351. package/app/components/02.molecules/samaritan-prompt/tests/SamaritanPromptMixed.spec.ts +95 -17
  352. package/app/components/02.molecules/select-menu/CONSUMER-STYLING.md +11 -2
  353. package/app/components/02.molecules/social-icons-list/CONSUMER-STYLING.md +43 -0
  354. package/app/components/02.molecules/social-icons-list/SocialIconsList.vue +15 -15
  355. package/app/components/02.molecules/social-icons-list/stories/SocialIconsList.stories.ts +6 -1
  356. package/app/components/02.molecules/social-icons-list/tests/SocialIconsList.spec.ts +22 -1
  357. package/app/components/02.molecules/social-icons-list/tests/__snapshots__/SocialIconsList.spec.ts.snap +3 -3
  358. package/app/components/02.molecules/stepper-list/CONSUMER-STYLING.md +44 -5
  359. package/app/components/02.molecules/stepper-list/StepperList.vue +23 -43
  360. package/app/components/02.molecules/stepper-list/tests/StepperList.spec.ts +9 -0
  361. package/app/components/{01.atoms → 02.molecules}/toast/CONSUMER-STYLING.md +14 -0
  362. package/app/components/{01.atoms → 02.molecules}/toast/DisplayToast.vue +1 -2
  363. package/app/components/{01.atoms → 02.molecules}/toast/DisplayToastProvider.vue +1 -2
  364. package/app/components/{01.atoms → 02.molecules}/toast/stories/DisplayToast.stories.ts +1 -1
  365. package/app/components/{01.atoms → 02.molecules}/toast/stories/DisplayToastProvider.stories.ts +1 -1
  366. package/app/components/03.organisms/image-galleries/carousel-flip/CONSUMER-STYLING.md +13 -0
  367. package/app/components/03.organisms/image-galleries/slider-gallery/CONSUMER-STYLING.md +137 -0
  368. package/app/components/03.organisms/image-galleries/slider-gallery/SliderGallery.vue +378 -343
  369. package/app/components/03.organisms/image-galleries/slider-gallery/stories/SliderGallery.stories.ts +26 -1
  370. package/app/components/03.organisms/image-galleries/slider-gallery/tests/SliderGallery.spec.ts +102 -23
  371. package/app/components/03.organisms/image-galleries/slider-gallery/tests/__snapshots__/SliderGallery.spec.ts.snap +44 -44
  372. package/app/components/03.organisms/responsive-header/CONSUMER-STYLING.md +12 -1
  373. package/app/components/03.organisms/responsive-header/ResponsiveHeader.vue +0 -4
  374. package/app/components/03.organisms/services/service-detail/CONSUMER-STYLING.md +24 -3
  375. package/app/components/03.organisms/services/service-detail/ServiceDetail.vue +3 -3
  376. package/app/components/03.organisms/services/service-detail/stories/ServiceDetail.stories.ts +13 -13
  377. package/app/components/03.organisms/services/service-detail/tests/__snapshots__/ServiceDetail.spec.ts.snap +1 -1
  378. package/app/components/03.organisms/services/service-summary/CONSUMER-STYLING.md +24 -7
  379. package/app/components/03.organisms/services/service-summary/ServiceSummary.vue +3 -3
  380. package/app/components/03.organisms/services/service-summary/stories/ServiceSummary.stories.ts +1 -1
  381. package/app/components/03.organisms/services/service-summary/tests/__snapshots__/ServiceSummary.spec.ts.snap +1 -1
  382. package/app/components/03.organisms/services/services-card/CONSUMER-STYLING.md +11 -2
  383. package/app/components/03.organisms/services/services-card/ServicesCard.vue +17 -26
  384. package/app/components/03.organisms/services/services-card/tests/ServicesCard.spec.ts +21 -0
  385. package/app/components/03.organisms/services/services-grids/CONSUMER-STYLING.md +50 -0
  386. package/app/components/03.organisms/services/services-grids/ServicesCardGrid.vue +9 -16
  387. package/app/components/03.organisms/services/services-grids/stories/ServicesCardGrid.stories.ts +6 -0
  388. package/app/components/03.organisms/services/services-grids/tests/ServicesCardGrid.spec.ts +18 -0
  389. package/app/components/03.organisms/services/services-grids/tests/__snapshots__/ServiceSummaryGrid.spec.ts.snap +3 -3
  390. package/app/components/03.organisms/services/services-grids/tests/__snapshots__/ServicesCardGrid.spec.ts.snap +3 -3
  391. package/app/components/03.organisms/site-header/CONSUMER-STYLING.md +12 -1
  392. package/app/components/04.templates/page-hero-highlights/CONSUMER-STYLING.md +103 -0
  393. package/app/components/04.templates/page-hero-highlights/PageHeroHighlights.vue +144 -193
  394. package/app/components/04.templates/page-hero-highlights/PageHeroHighlightsHeader.vue +27 -37
  395. package/app/components/04.templates/page-hero-highlights/stories/PageHeroHighlights.stories.ts +56 -60
  396. package/app/components/04.templates/page-hero-highlights/stories/PageHeroHighlightsHeader.stories.ts +2 -2
  397. package/app/components/04.templates/page-hero-highlights/tests/PageHeroHighlights.spec.ts +10 -10
  398. package/app/components/04.templates/page-hero-highlights/tests/PageHeroHighlightsHeader.spec.ts +7 -7
  399. package/app/components/04.templates/page-hero-highlights/tests/__snapshots__/PageHeroHighlights.spec.ts.snap +6 -6
  400. package/app/components/05.forms/form-errors/CONSUMER-STYLING.md +112 -0
  401. package/app/components/05.forms/form-errors/InputError.vue +101 -122
  402. package/app/components/05.forms/form-errors/stories/InputError.stories.ts +125 -0
  403. package/app/components/05.forms/form-errors/tests/InputError.spec.ts +82 -31
  404. package/app/components/05.forms/form-field/CONSUMER-STYLING.md +91 -0
  405. package/app/components/05.forms/form-field/FormField.vue +26 -35
  406. package/app/components/05.forms/form-field/stories/FormField.stories.ts +104 -0
  407. package/app/components/05.forms/form-field/tests/FormField.spec.ts +75 -0
  408. package/app/components/05.forms/form-fieldset/CONSUMER-STYLING.md +88 -0
  409. package/app/components/05.forms/form-fieldset/FormFieldset.vue +34 -28
  410. package/app/components/05.forms/form-fieldset/stories/FormFieldset.stories.ts +84 -0
  411. package/app/components/05.forms/form-fieldset/tests/FormFieldset.spec.ts +111 -0
  412. package/app/components/05.forms/form-wrapper/CONSUMER-STYLING.md +101 -0
  413. package/app/components/05.forms/form-wrapper/FormWrapper.vue +32 -15
  414. package/app/components/05.forms/form-wrapper/stories/FormWrapper.stories.ts +75 -0
  415. package/app/components/05.forms/form-wrapper/tests/FormWrapper.spec.ts +57 -0
  416. package/app/components/05.forms/input-button/CONSUMER-STYLING.md +52 -7
  417. package/app/components/05.forms/input-button/{InputButtonCore.vue → InputButton.vue} +60 -18
  418. package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts → input-button.playwright.ts} +5 -5
  419. package/app/components/05.forms/input-button/stories/{InputButtonCore.stories.ts → InputButton.stories.ts} +8 -10
  420. package/app/components/05.forms/input-button/tests/{InputButtonCore.spec.ts → InputButton.spec.ts} +75 -19
  421. package/app/components/05.forms/input-button/tests/__snapshots__/{InputButtonCore.spec.ts.snap → InputButton.spec.ts.snap} +18 -18
  422. package/app/components/05.forms/input-checkbox/CONSUMER-STYLING.md +93 -0
  423. package/app/components/05.forms/input-checkbox/MultipleCheckboxes.vue +19 -25
  424. package/app/components/05.forms/input-checkbox/SingleCheckbox.vue +17 -43
  425. package/app/components/05.forms/input-checkbox/stories/MultipleCheckboxes.stories.ts +104 -0
  426. package/app/components/05.forms/input-checkbox/stories/SingleCheckbox.stories.ts +75 -0
  427. package/app/components/05.forms/input-checkbox/tests/MultipleCheckboxes.spec.ts +91 -53
  428. package/app/components/05.forms/input-checkbox/tests/SingleCheckbox.spec.ts +112 -0
  429. package/app/components/05.forms/input-checkbox-radio/CONSUMER-STYLING.md +115 -35
  430. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadio.vue +158 -0
  431. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioButton.vue +102 -101
  432. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioField.vue +100 -0
  433. package/app/components/05.forms/input-checkbox-radio/stories/{InputCheckboxRadioCore.stories.ts → InputCheckboxRadio.stories.ts} +23 -8
  434. package/app/components/05.forms/input-checkbox-radio/stories/InputCheckboxRadioButton.stories.ts +60 -16
  435. package/app/components/05.forms/input-checkbox-radio/stories/InputCheckboxRadioField.stories.ts +93 -0
  436. package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadio.spec.ts +174 -0
  437. package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadioButton.spec.ts +87 -0
  438. package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadioField.spec.ts +87 -0
  439. package/app/components/05.forms/input-description/CONSUMER-STYLING.md +177 -0
  440. package/app/components/05.forms/input-description/InputDescription.vue +45 -24
  441. package/app/components/05.forms/input-description/stories/InputDescription.stories.ts +160 -0
  442. package/app/components/05.forms/input-description/tests/InputDescription.spec.ts +62 -386
  443. package/app/components/05.forms/input-label/CONSUMER-STYLING.md +134 -0
  444. package/app/components/05.forms/input-label/InputLabel.vue +99 -38
  445. package/app/components/05.forms/input-label/stories/InputLabel.stories.ts +236 -0
  446. package/app/components/05.forms/input-label/tests/InputLabel.spec.ts +113 -342
  447. package/app/components/05.forms/input-number/CONSUMER-STYLING.md +16 -7
  448. package/app/components/05.forms/input-number/{InputNumberCore.vue → InputNumber.vue} +6 -6
  449. package/app/components/05.forms/input-number/{variants/InputNumberDefault.vue → InputNumberField.vue} +12 -15
  450. package/app/components/05.forms/input-number/stories/{InputNumberCore.stories.ts → InputNumber.stories.ts} +6 -6
  451. package/app/components/05.forms/input-number/{variants/stories/InputNumberDefault.stories.ts → stories/InputNumberField.stories.ts} +5 -5
  452. package/app/components/05.forms/input-number/tests/{InputNumberCore.spec.ts → InputNumber.spec.ts} +2 -2
  453. package/app/components/05.forms/input-number/{variants/tests/InputNumberDefault.spec.ts → tests/InputNumberField.spec.ts} +8 -8
  454. package/app/components/05.forms/input-radio/CONSUMER-STYLING.md +70 -0
  455. package/app/components/05.forms/input-radio/MultipleRadiobuttons.vue +19 -30
  456. package/app/components/05.forms/input-radio/stories/MultipleRadiobuttons.stories.ts +116 -0
  457. package/app/components/05.forms/input-radio/tests/MultipleRadioButtons.spec.ts +125 -74
  458. package/app/components/05.forms/input-range/CONSUMER-STYLING.md +13 -0
  459. package/app/components/05.forms/input-range/InputRangeCore.vue +1 -1
  460. package/app/components/05.forms/input-range/{variants/InputRangeDefault.vue → InputRangeDefault.vue} +7 -11
  461. package/app/components/05.forms/input-range/{variants/tests → tests}/InputRangeDefault.spec.ts +1 -1
  462. package/app/components/05.forms/input-select/CONSUMER-STYLING.md +11 -2
  463. package/app/components/05.forms/input-select/{variants/InputSelectWithLabel.vue → InputSelectWithLabel.vue} +6 -9
  464. package/app/components/05.forms/input-select/stories/InputSelectWithLabel.stories.ts +1 -1
  465. package/app/components/05.forms/input-text/CONSUMER-STYLING.md +12 -3
  466. package/app/components/05.forms/input-text/{variants/InputPasswordWithLabel.vue → InputPasswordWithLabel.vue} +3 -3
  467. package/app/components/05.forms/input-text/{variants/InputTextAsNumberWithLabel.vue → InputTextAsNumberWithLabel.vue} +12 -15
  468. package/app/components/05.forms/input-text/InputTextCore.vue +8 -11
  469. package/app/components/05.forms/input-text/{variants/InputTextWithLabel.vue → InputTextWithLabel.vue} +9 -10
  470. package/app/components/05.forms/input-text/stories/InputPasswordWithLabel.stories.ts +1 -1
  471. package/app/components/05.forms/input-text/stories/InputTextAsNumberWithLabel.stories.ts +1 -1
  472. package/app/components/05.forms/input-text/stories/InputTextWithLabel.stories.ts +1 -1
  473. package/app/components/05.forms/input-text/tests/InputPasswordWithLabel.spec.ts +2 -1
  474. package/app/components/05.forms/input-text/tests/InputTextAsNumberWithLabel.spec.ts +1 -1
  475. package/app/components/05.forms/input-text/tests/InputTextWithLabel.spec.ts +2 -1
  476. package/app/components/05.forms/input-textarea/CONSUMER-STYLING.md +11 -2
  477. package/app/components/05.forms/input-textarea/{variants/InputTextareaWithLabel.vue → InputTextareaWithLabel.vue} +3 -7
  478. package/app/components/05.forms/input-textarea/stories/InputTextareaWithLabel.stories.ts +1 -1
  479. package/app/components/05.forms/patterns/stories/ContactForm.stories.ts +9 -10
  480. package/app/components/05.forms/patterns/stories/LoginForm.stories.ts +10 -10
  481. package/app/components/05.forms/patterns/stories/MigratedFieldsForm.stories.ts +246 -101
  482. package/app/components/05.forms/pending-effect/CONSUMER-STYLING.md +92 -0
  483. package/app/components/05.forms/pending-effect/PendingEffect.vue +52 -45
  484. package/app/components/05.forms/pending-effect/stories/PendingEffect.stories.ts +132 -0
  485. package/app/components/05.forms/pending-effect/tests/PendingEffect.spec.ts +67 -0
  486. package/app/components/05.forms/toggle-switch/CONSUMER-STYLING.md +11 -2
  487. package/app/components/05.forms/toggle-switch/ToggleSwitchCore.vue +10 -29
  488. package/app/components/05.forms/toggle-switch/{variants/ToggleSwitchWithLabel.vue → ToggleSwitchWithLabel.vue} +5 -7
  489. package/app/components/05.forms/toggle-switch/{variants/ToggleSwitchWithLabelInline.vue → ToggleSwitchWithLabelInline.vue} +2 -4
  490. package/app/components/05.forms/toggle-switch/stories/ToggleSwitchWithLabel.stories.ts +1 -1
  491. package/app/components/05.forms/toggle-switch/stories/ToggleSwitchWithLabelInline.stories.ts +4 -1
  492. package/app/components/05.forms/toggle-switch/{variants/tests → tests}/ToggleSwitchWithLabel.spec.ts +26 -0
  493. package/app/components/05.forms/triple-toggle-switch/CONSUMER-STYLING.md +75 -62
  494. package/app/components/05.forms/triple-toggle-switch/TripleToggleSwitch.vue +243 -0
  495. package/app/components/05.forms/triple-toggle-switch/stories/TripleToggleSwitch.stories.ts +104 -0
  496. package/app/components/05.forms/triple-toggle-switch/tests/TripleToggleSwitch.spec.ts +138 -0
  497. package/app/composables/tests/useCancellableTimer.spec.ts +48 -0
  498. package/app/composables/tests/useMaxChildWidth.spec.ts +67 -0
  499. package/app/composables/useCancellableTimer.ts +27 -7
  500. package/app/composables/useMaxChildWidth.ts +4 -6
  501. package/app/types/app-config.d.ts +10 -0
  502. package/app/types/components/cookie-consent-banner.d.ts +3 -0
  503. package/app/types/components/index.ts +6 -1
  504. package/app/types/components/opening-hours.d.ts +48 -0
  505. package/app/types/components/price-list.d.ts +11 -0
  506. package/app/types/components/profile-section.d.ts +6 -0
  507. package/app/types/components/samaritan-prompt.d.ts +13 -0
  508. package/app/types/components/services-card.d.ts +9 -0
  509. package/app/types/components/slider-gallery.d.ts +2 -0
  510. package/app/types/components/social-icons-list.d.ts +2 -0
  511. package/app/types/forms/types.forms.d.ts +3 -0
  512. package/app/types/forms/types.zodFormControl.d.ts +0 -3
  513. package/app/utils/opening-hours.ts +44 -0
  514. package/nuxt.config.ts +5 -1
  515. package/package.json +2 -2
  516. package/ramps.config.mjs +1 -1
  517. package/.claude/commands/create-commit-message.md +0 -13
  518. package/.claude/commands/create-release-notes.md +0 -34
  519. package/.claude/commands/migrate-component.md +0 -169
  520. package/.claude/commands/run-commit.md +0 -13
  521. package/.claude/component-ledger/artifact-url.txt +0 -1
  522. package/.claude/component-ledger/audit.json +0 -1
  523. package/.claude/component-ledger/build.mjs +0 -164
  524. package/.claude/component-ledger/output.html +0 -569
  525. package/.claude/component-ledger/template.html +0 -569
  526. package/.claude/hooks/check-component-update.sh +0 -95
  527. package/.claude/hooks/refresh-component-ledger.sh +0 -32
  528. package/.claude/settings.json +0 -134
  529. package/.claude/settings.local.json +0 -38
  530. package/.claude/skills/components/alert-content-inner.md +0 -60
  531. package/.claude/skills/components/navigation-horizontal.md +0 -99
  532. package/.claude/skills/components/samaritan-prompt-mixed.md +0 -139
  533. package/app/components/01.atoms/content-wrappers/content-columns-2/ContentColumns2.vue +0 -51
  534. package/app/components/01.atoms/content-wrappers/content-columns-2/stories/ContentColumns2.stories.ts +0 -110
  535. package/app/components/01.atoms/content-wrappers/content-columns-2/tests/ContentColumns2.spec.ts +0 -105
  536. package/app/components/01.atoms/content-wrappers/content-columns-2/tests/__snapshots__/ContentColumns2.spec.ts.snap +0 -14
  537. package/app/components/01.atoms/content-wrappers/content-width/ContentWidth.vue +0 -88
  538. package/app/components/01.atoms/content-wrappers/content-width/stories/ContentWidth.stories.ts +0 -362
  539. package/app/components/01.atoms/content-wrappers/content-width/tests/ContentWidth.spec.ts +0 -132
  540. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/tests/__snapshots__/LayoutGrid.spec.ts.snap +0 -36
  541. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/LayoutGridByWidth.vue +0 -70
  542. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/stories/LayoutGridByWidth.stories.ts +0 -220
  543. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/LayoutGridByWidth.spec.ts +0 -174
  544. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/__snapshots__/LayoutGrid.spec.ts.snap +0 -36
  545. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/__snapshots__/LayoutGridByCols.spec.ts.snap +0 -36
  546. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/__snapshots__/LayoutGridByWidth.spec.ts.snap +0 -36
  547. package/app/components/01.atoms/cookie-consent-banner/CookieConsentBanner.vue +0 -148
  548. package/app/components/01.atoms/display-avatar/DisplayAvatar.vue +0 -130
  549. package/app/components/01.atoms/display-avatar/tests/__snapshots__/DisplayAvatar.spec.ts.snap +0 -11
  550. package/app/components/02.molecules/action-menu/tests/__snapshots__/ActionMenuItemCore.spec.ts.snap +0 -27
  551. package/app/components/02.molecules/navigation/navigation-horizontal/NavigationHorizontal.vue +0 -162
  552. package/app/components/02.molecules/navigation/navigation-horizontal/stories/NavigationHorizontal.stories.ts +0 -373
  553. package/app/components/02.molecules/navigation/navigation-horizontal/tests/NavigationHorizontal.spec.ts +0 -152
  554. package/app/components/02.molecules/navigation/navigation-horizontal/tests/__snapshots__/NavigationHorizontal.spec.ts.snap +0 -17
  555. package/app/components/02.molecules/qr-code/stories/QrCode.stories.ts +0 -101
  556. package/app/components/03.organisms/colour-finder/ColourFinder.vue +0 -1519
  557. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioCore.vue +0 -202
  558. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioWithLabel.vue +0 -105
  559. package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadioCore.spec.ts +0 -320
  560. package/app/components/05.forms/triple-toggle-switch/TripleToggleSwitchCore.vue +0 -314
  561. package/app/components/05.forms/triple-toggle-switch/stories/TripleToggleSwitchCore.stories.ts +0 -63
  562. package/.vscode/{srcdev-component-dialog.code-snippets → srcdev-component-display-dialog.code-snippets} +0 -0
  563. package/app/components/{01.atoms → 02.molecules}/toast/tests/DisplayToast.spec.ts +1 -1
  564. /package/app/components/{01.atoms → 02.molecules}/toast/tests/DisplayToastProvider.spec.ts +0 -0
  565. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-icons-secondary-chromium-darwin.png +0 -0
  566. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-icons-secondary-firefox-darwin.png +0 -0
  567. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-icons-secondary-webkit-darwin.png +0 -0
  568. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-icons-tertiary-chromium-darwin.png +0 -0
  569. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-icons-tertiary-firefox-darwin.png +0 -0
  570. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-icons-tertiary-webkit-darwin.png +0 -0
  571. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-primary-pending-chromium-darwin.png +0 -0
  572. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-primary-pending-firefox-darwin.png +0 -0
  573. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-primary-pending-webkit-darwin.png +0 -0
  574. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-secondary-pill-chromium-darwin.png +0 -0
  575. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-secondary-pill-firefox-darwin.png +0 -0
  576. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-secondary-pill-webkit-darwin.png +0 -0
  577. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-tertiary-readonly-chromium-darwin.png +0 -0
  578. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-tertiary-readonly-firefox-darwin.png +0 -0
  579. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-tertiary-readonly-webkit-darwin.png +0 -0
  580. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-chromium-darwin.png +0 -0
  581. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-firefox-darwin.png +0 -0
  582. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-default-chromium-darwin.png +0 -0
  583. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-default-firefox-darwin.png +0 -0
  584. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-default-webkit-darwin.png +0 -0
  585. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-error-chromium-darwin.png +0 -0
  586. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-error-firefox-darwin.png +0 -0
  587. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-error-webkit-darwin.png +0 -0
  588. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-success-chromium-darwin.png +0 -0
  589. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-success-firefox-darwin.png +0 -0
  590. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-success-webkit-darwin.png +0 -0
  591. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-warning-chromium-darwin.png +0 -0
  592. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-warning-firefox-darwin.png +0 -0
  593. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-warning-webkit-darwin.png +0 -0
  594. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-primary-chromium-darwin.png +0 -0
  595. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-primary-firefox-darwin.png +0 -0
  596. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-primary-webkit-darwin.png +0 -0
  597. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-secondary-chromium-darwin.png +0 -0
  598. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-secondary-firefox-darwin.png +0 -0
  599. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-secondary-webkit-darwin.png +0 -0
  600. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-tertiary-chromium-darwin.png +0 -0
  601. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-tertiary-firefox-darwin.png +0 -0
  602. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-tertiary-webkit-darwin.png +0 -0
  603. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-webkit-darwin.png +0 -0
  604. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/nuxt-icon-only-component-chromium-darwin.png +0 -0
  605. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/nuxt-icon-only-component-firefox-darwin.png +0 -0
  606. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/nuxt-icon-only-component-webkit-darwin.png +0 -0
  607. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-pending-chromium-darwin.png +0 -0
  608. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-pending-firefox-darwin.png +0 -0
  609. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-pending-webkit-darwin.png +0 -0
  610. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-pill-chromium-darwin.png +0 -0
  611. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-pill-firefox-darwin.png +0 -0
  612. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-pill-webkit-darwin.png +0 -0
  613. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-readonly-chromium-darwin.png +0 -0
  614. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-readonly-firefox-darwin.png +0 -0
  615. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-readonly-webkit-darwin.png +0 -0
  616. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/with-both-nuxt-icon-components-chromium-darwin.png +0 -0
  617. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/with-both-nuxt-icon-components-firefox-darwin.png +0 -0
  618. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/with-both-nuxt-icon-components-webkit-darwin.png +0 -0
  619. /package/app/components/05.forms/input-range/{variants/stories → stories}/InputRangeDefault.stories.ts +0 -0
  620. /package/app/components/05.forms/input-select/{variants/tests → tests}/InputSelectWithLabel.spec.ts +0 -0
  621. /package/app/components/05.forms/input-textarea/{variants/tests → tests}/InputTextareaWithLabel.spec.ts +0 -0
  622. /package/app/components/05.forms/toggle-switch/{variants/tests → tests}/ToggleSwitchWithLabelInline.spec.ts +0 -0
  623. /package/app/types/components/{navigation-horizontal.d.ts → nav-item.d.ts} +0 -0
@@ -20,7 +20,7 @@ for why both are safe.
20
20
 
21
21
  ---
22
22
 
23
- ## Global theming — recommended approach
23
+ ## Global theming
24
24
 
25
25
  Create `assets/styles/setup/07.components/expanding-panel.css` in the consuming app and set
26
26
  tokens on `:root`. This applies to every `ExpandingPanel` across the site.
@@ -36,7 +36,15 @@ tokens on `:root`. This applies to every `ExpandingPanel` across the site.
36
36
 
37
37
  ---
38
38
 
39
- ## Page-scoped overrides
39
+ ## Local overrides
40
+
41
+ Set the tokens above on an element you own (a page or section class, or a class added with
42
+ `:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
43
+ `@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
44
+ `<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
45
+ `:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
46
+
47
+ ### Page or section
40
48
 
41
49
  Override tokens for a specific section by scoping them under the page or layout wrapper.
42
50
  No `:deep()` is required (component styles are unscoped).
@@ -50,9 +58,7 @@ No `:deep()` is required (component styles are unscoped).
50
58
  }
51
59
  ```
52
60
 
53
- ---
54
-
55
- ## Per-instance overrides via styleClassPassthrough
61
+ ### One instance
56
62
 
57
63
  Use sparingly — prefer global or page-scoped CSS. When a single instance needs a distinct
58
64
  visual style, pass a modifier class:
@@ -104,3 +110,4 @@ visual style, pass a modifier class:
104
110
  and gets visually covered when the first panel opens. `contentIsOnTop` is for a single panel
105
111
  overlaying unrelated trailing page content, not for grouped/stacked accordion panels — use the
106
112
  default in-flow layout for those.
113
+
@@ -19,7 +19,7 @@ for why, and style a wrapper *inside* the `#content` slot instead.
19
19
 
20
20
  ---
21
21
 
22
- ## Global theming — recommended approach
22
+ ## Global theming
23
23
 
24
24
  Create `assets/styles/setup/07.components/expanding-panel-classic.css` in the consuming app and set
25
25
  tokens on `:root`. This applies to every `ExpandingPanelClassic` across the site.
@@ -35,7 +35,15 @@ tokens on `:root`. This applies to every `ExpandingPanelClassic` across the site
35
35
 
36
36
  ---
37
37
 
38
- ## Page-scoped overrides
38
+ ## Local overrides
39
+
40
+ Set the tokens above on an element you own (a page or section class, or a class added with
41
+ `:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
42
+ `@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
43
+ `<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
44
+ `:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
45
+
46
+ ### Page or section
39
47
 
40
48
  Override tokens for a specific section by scoping them under the page or layout wrapper.
41
49
  No `:deep()` is required (component styles are unscoped).
@@ -49,9 +57,7 @@ No `:deep()` is required (component styles are unscoped).
49
57
  }
50
58
  ```
51
59
 
52
- ---
53
-
54
- ## Per-instance overrides via styleClassPassthrough
60
+ ### One instance
55
61
 
56
62
  Use sparingly — prefer global or page-scoped CSS. When a single instance needs a distinct
57
63
  visual style, pass a modifier class:
@@ -101,3 +107,4 @@ visual style, pass a modifier class:
101
107
  and gets visually covered when the first panel opens. `contentIsOnTop` is for a single panel
102
108
  overlaying unrelated trailing page content, not for grouped/stacked accordion panels — use the
103
109
  default in-flow layout for those.
110
+
@@ -26,7 +26,7 @@ or instance) without touching the component itself.
26
26
 
27
27
  ---
28
28
 
29
- ## Global theming — app-level CSS file
29
+ ## Global theming
30
30
 
31
31
  Create `assets/styles/setup/07.components/input-copy.css` in the consuming app and set tokens on
32
32
  `:root`. These values apply to every `InputCopy` instance across the site.
@@ -44,7 +44,15 @@ Create `assets/styles/setup/07.components/input-copy.css` in the consuming app a
44
44
 
45
45
  ---
46
46
 
47
- ## Per-instance overrides via inline styles
47
+ ## Local overrides
48
+
49
+ Set the tokens above on an element you own (a page or section class, or a class added with
50
+ `:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
51
+ `@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
52
+ `<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
53
+ `:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
54
+
55
+ ### One instance
48
56
 
49
57
  Override tokens directly on a single InputCopy instance:
50
58
 
@@ -59,9 +67,7 @@ Override tokens directly on a single InputCopy instance:
59
67
  />
60
68
  ```
61
69
 
62
- ---
63
-
64
- ## Page-scoped overrides
70
+ ### Page or section
65
71
 
66
72
  When input-copy appears in a specific page context (e.g., checkout success page), scope overrides
67
73
  under the page wrapper:
@@ -141,3 +147,4 @@ Or show only the icon on mobile and text on desktop (default behavior):
141
147
  /* Default: button shows only icon on mobile, icon + text on desktop (480px+) */
142
148
  /* No override needed; this is the built-in behavior */
143
149
  ```
150
+
@@ -108,15 +108,9 @@ onUnmounted(() => {
108
108
  <style lang="css">
109
109
  @layer components {
110
110
  .input-copy {
111
- --_input-bg: var(--input-copy-input-bg, var(--slate-00));
112
- --_input-border: var(--input-copy-input-border, 1px solid var(--slate-03));
113
111
  --_input-border-radius: var(--input-copy-input-border-radius, 0.4rem);
114
- --_input-padding: var(--input-copy-input-padding, 0.8rem 1rem);
115
- --_input-text-color: var(--input-copy-input-text-color, #333);
116
- --_input-placeholder-color: var(--input-copy-input-placeholder-color, #999);
117
112
  --_input-font-size: var(--input-copy-input-font-size, 0.95rem);
118
113
 
119
- --_button-bg: var(--input-copy-button-bg, var(--input-button-primary-surface, var(--theme-surface)));
120
114
  --_button-bg-hover: var(
121
115
  --input-copy-button-bg-hover,
122
116
  var(--input-button-primary-surface-hover, var(--theme-surface-hover))
@@ -125,13 +119,6 @@ onUnmounted(() => {
125
119
  --input-copy-button-text-color,
126
120
  var(--input-button-primary-text, var(--theme-on-surface))
127
121
  );
128
- --_button-padding: var(--input-copy-button-padding, 0.8rem 1.2rem);
129
- --_button-border-radius: var(--input-copy-button-border-radius, 0.4rem);
130
- --_button-gap: var(--input-copy-button-gap, 0.6rem);
131
-
132
- --_description-color: var(--input-copy-description-color, #666);
133
- --_description-font-size: var(--input-copy-description-font-size, 0.85rem);
134
- --_description-margin: var(--input-copy-description-margin, 0.6rem 0 0 0);
135
122
 
136
123
  display: flex;
137
124
  flex-direction: column;
@@ -148,16 +135,16 @@ onUnmounted(() => {
148
135
  flex: 1;
149
136
  min-width: 0;
150
137
 
151
- padding: var(--_input-padding);
152
- background-color: var(--_input-bg);
153
- border: var(--_input-border);
138
+ padding: var(--input-copy-input-padding, 0.8rem 1rem);
139
+ background-color: var(--input-copy-input-bg, var(--slate-00));
140
+ border: var(--input-copy-input-border, 1px solid var(--slate-03));
154
141
  border-radius: var(--_input-border-radius);
155
142
  font-size: var(--_input-font-size);
156
- color: var(--_input-text-color);
143
+ color: var(--input-copy-input-text-color, #333);
157
144
  font-family: inherit;
158
145
 
159
146
  &::placeholder {
160
- color: var(--_input-placeholder-color);
147
+ color: var(--input-copy-input-placeholder-color, #999);
161
148
  }
162
149
 
163
150
  &:focus {
@@ -169,13 +156,13 @@ onUnmounted(() => {
169
156
  .input-copy__button {
170
157
  display: flex;
171
158
  align-items: center;
172
- gap: var(--_button-gap);
173
- padding: var(--_button-padding);
159
+ gap: var(--input-copy-button-gap, 0.6rem);
160
+ padding: var(--input-copy-button-padding, 0.8rem 1.2rem);
174
161
 
175
- background-color: var(--_button-bg);
162
+ background-color: var(--input-copy-button-bg, var(--input-button-primary-surface, var(--theme-surface)));
176
163
  color: var(--_button-text-color);
177
164
  border: none;
178
- border-radius: var(--_button-border-radius);
165
+ border-radius: var(--input-copy-button-border-radius, 0.4rem);
179
166
  font-size: var(--_input-font-size);
180
167
  font-weight: 500;
181
168
  cursor: pointer;
@@ -207,9 +194,9 @@ onUnmounted(() => {
207
194
  }
208
195
 
209
196
  .input-copy__description {
210
- margin: var(--_description-margin);
211
- font-size: var(--_description-font-size);
212
- color: var(--_description-color);
197
+ margin: var(--input-copy-description-margin, 0.6rem 0 0 0);
198
+ font-size: var(--input-copy-description-font-size, 0.85rem);
199
+ color: var(--input-copy-description-color, #666);
213
200
  }
214
201
  }
215
202
  </style>
@@ -75,7 +75,7 @@ export const LicenseKey: Story = {
75
75
 
76
76
  export const APIToken: Story = {
77
77
  args: {
78
- value: "ghp_16C7e42F292c6912E7710c838347Ae178B4a",
78
+ value: "example_token_not_real_0123456789abcdef",
79
79
  label: "API token",
80
80
  description: "Your API token for authentication. Do not share this token.",
81
81
  },
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect, vi, beforeEach } from "vitest";
2
- import { mount, flushPromises } from "@vue/test-utils";
2
+ import { mount } from "@vue/test-utils";
3
3
  import InputCopy from "../InputCopy.vue";
4
4
 
5
5
  describe("InputCopy", () => {
@@ -35,6 +35,8 @@ Or scope to a single instance via `styleClassPassthrough`:
35
35
  <DeepExpandingMenu style-class-passthrough="main-nav">...</DeepExpandingMenu>
36
36
  ```
37
37
 
38
+ ---
39
+
38
40
  ## Not tokenised
39
41
 
40
42
  - The `@position-try` fallback offsets (`--anchor-left`/`--anchor-right`) are fixed at `1rem` —
@@ -42,3 +44,14 @@ Or scope to a single instance via `styleClassPassthrough`:
42
44
  overridden per-instance without a new `@position-try` block.
43
45
  - Anchor names and popover target ids are generated per-instance via `useId()` and are not
44
46
  consumer-configurable — they only need to be unique, not meaningful.
47
+
48
+ ---
49
+
50
+ ## Local overrides
51
+
52
+ Set the tokens above on an element you own (a page or section class, or a class added with
53
+ `:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
54
+ `@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
55
+ `<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
56
+ `:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
57
+
@@ -38,3 +38,14 @@ Or scope to a single instance via `styleClassPassthrough`:
38
38
  ```vue
39
39
  <DeepExpandingMenuClassic style-class-passthrough="main-nav">...</DeepExpandingMenuClassic>
40
40
  ```
41
+
42
+ ---
43
+
44
+ ## Local overrides
45
+
46
+ Set the tokens above on an element you own (a page or section class, or a class added with
47
+ `:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
48
+ `@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
49
+ `<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
50
+ `:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
51
+
@@ -0,0 +1,109 @@
1
+ # SiteNavigation — Consumer Styling Guide
2
+
3
+ ## Public token API
4
+
5
+ Defaults that read `var(--slate-01, currentColor)` use the library palette when it's loaded and fall
6
+ back to the inherited text colour otherwise.
7
+
8
+ ### Horizontal nav
9
+
10
+ | Token | Default | Controls |
11
+ |---|---|---|
12
+ | `--site-nav-link-color` | `var(--slate-01, currentColor)` | Link colour |
13
+ | `--site-nav-link-hover-color` | `var(--slate-04, <link colour>)` | Link colour on hover |
14
+ | `--site-nav-link-active-color` | `var(--slate-01, <link colour>)` | Active link colour |
15
+ | `--site-nav-link-accent` | `var(--slate-01, currentColor)` | Link accent colour |
16
+ | `--site-nav-link-size` | `1.6rem` | Link font size |
17
+ | `--site-nav-link-weight` | `400` | Link font weight |
18
+ | `--site-nav-link-tracking` | `0.06em` | Link letter spacing |
19
+ | `--site-nav-gap` | `2.2rem` | Gap between links |
20
+ | `--site-nav-transition` | `250ms ease` | Link colour transition |
21
+ | `--site-nav-decorator-indicator-color` | `var(--slate-01, currentColor)` | Sliding underline bar |
22
+ | `--site-nav-decorator-hovered-bg` | `transparent` | Sliding pill behind the hovered link |
23
+ | `--site-nav-decorator-active-bg` | `transparent` | Pill behind the active link |
24
+
25
+ > Changed 2026-09-27: `--site-nav-decorator-hovered-bg` and `--site-nav-decorator-active-bg` are
26
+ > new. The values were hardcoded `transparent` with no override, unlike the panel equivalents.
27
+
28
+ ### Collapsed panel
29
+
30
+ | Token | Default | Controls |
31
+ |---|---|---|
32
+ | `--site-nav-panel-bg` | `var(--page-bg, #1a1614)` | Panel background |
33
+ | `--site-nav-panel-border-color` | `color-mix(in oklch, var(--slate-01, #c0847a) 35%, transparent)` | Top border when open |
34
+ | `--site-nav-panel-item-border` | `color-mix(in oklch, var(--slate-01, white) 8%, transparent)` | Divider between panel links |
35
+ | `--site-nav-panel-link-color` | `var(--slate-01, currentColor)` | Panel link colour |
36
+ | `--site-nav-panel-link-hover-color` | `var(--slate-04, <panel link colour>)` | Panel link hover colour |
37
+ | `--site-nav-panel-link-active-color` | `var(--slate-01, <panel link colour>)` | Active panel link colour |
38
+ | `--site-nav-panel-padding-block` | `1.4rem` | Panel link vertical padding |
39
+ | `--site-nav-panel-padding-inline` | `1.5rem` | Panel link horizontal padding |
40
+ | `--site-nav-panel-slide-duration` | `350ms` | Open/close slide duration |
41
+ | `--site-nav-panel-slide-easing` | `cubic-bezier(0.4, 0, 0.2, 1)` | Open/close easing |
42
+ | `--site-nav-panel-decorator-indicator-color` | `var(--slate-01, currentColor)` | Panel indicator bar |
43
+ | `--site-nav-panel-decorator-hovered-bg` | `transparent` | Pill behind the hovered panel link |
44
+ | `--site-nav-panel-decorator-active-bg` | `transparent` | Pill behind the active panel link |
45
+ | `--site-nav-panel-indicator-left` | `0` | Indicator bar left position |
46
+ | `--site-nav-panel-indicator-right` | `auto` | Indicator bar right position |
47
+
48
+ ### Burger button
49
+
50
+ | Token | Default | Controls |
51
+ |---|---|---|
52
+ | `--site-nav-burger-color` | `var(--slate-01, currentColor)` | Bar colour |
53
+ | `--site-nav-burger-width` | `22px` | Bar width |
54
+ | `--site-nav-burger-height` | `1.5px` | Bar thickness |
55
+ | `--site-nav-burger-gap` | `5px` | Gap between bars |
56
+ | `--site-nav-burger-transition` | `300ms ease` | Open/close morph |
57
+
58
+ ### Backdrop (teleported to `<body>`)
59
+
60
+ | Token | Default | Controls |
61
+ |---|---|---|
62
+ | `--site-nav-backdrop-bg` | `oklch(0% 0 0 / 55%)` | Scrim colour |
63
+ | `--site-nav-backdrop-blur` | `3px` | Blur behind the scrim |
64
+ | `--site-nav-backdrop-duration` | `350ms` | Fade duration |
65
+ | `--site-nav-backdrop-z-index` | `10` | Scrim stacking order; keep your header above it |
66
+
67
+ > Changed 2026-09-27: `--site-nav-backdrop-z-index` is new (was a hardcoded `10`).
68
+
69
+ The `--_*` variables declared on `.site-navigation` are the resolved copies of the tokens above
70
+ that are read in more than one place: not public API.
71
+
72
+ ---
73
+
74
+ ## State hooks
75
+
76
+ | Hook | Element | When |
77
+ |---|---|---|
78
+ | `.site-navigation--left`, `--center`, `--right` | root `<nav>` | `nav-align` |
79
+ | `.is-collapsed` | root | Links don't fit, so the burger and panel are shown |
80
+ | `.is-loaded` | root | First measurement done (the nav is `opacity: 0` until then) |
81
+ | `.menu-open` | root | Panel open |
82
+ | `.is-animated` | root | Indicator transitions enabled (after first layout) |
83
+ | `li.is-active` | nav and panel items | Item matches the current route |
84
+ | `.is-open` | `.site-nav-burger`, `.site-nav-panel`, `.site-nav-backdrop` | Panel open |
85
+
86
+ Inner classes: `.site-nav-list`, `.site-nav-link`, `.site-nav-burger`, `.burger-bar`,
87
+ `.site-nav-panel`, `.site-nav-panel-inner`, `.site-nav-panel-list`, `.site-nav-panel-link`,
88
+ `.site-nav-backdrop`; decorators `.nav__hovered`, `.nav__active`, `.nav__active-indicator`.
89
+ Each item `li` also gets its `NavItem.cssName`.
90
+
91
+ ---
92
+
93
+ ## Local overrides
94
+
95
+ Set the tokens above on an element you own (a page or section class, or a class added with
96
+ `:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
97
+ `@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
98
+ `<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
99
+ `:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
100
+
101
+ **Caveat:** the backdrop is teleported to `<body>`, outside your header, so the
102
+ `--site-nav-backdrop-*` tokens only land when set on `:root`, `html` or `body`.
103
+
104
+ ---
105
+
106
+ ## Class passthrough
107
+
108
+ `style-class-passthrough` adds classes to the root `<nav>`. Reactive after mount. It doesn't reach
109
+ the teleported backdrop.
@@ -32,14 +32,14 @@
32
32
  <li aria-hidden="true" role="none" class="nav-indicator-li"><div class="nav__active-indicator"></div></li>
33
33
  </ul>
34
34
 
35
- <InputButtonCore
35
+ <InputButton
36
36
  v-if="isCollapsed && isLoaded"
37
37
  class="site-nav-burger"
38
38
  :class="{ 'is-open': isMenuOpen }"
39
39
  variant="tertiary"
40
- :button-text="isMenuOpen ? 'Close navigation menu' : 'Open navigation menu'"
40
+ :button-text="isMenuOpen ? closeMenuLabel : openMenuLabel"
41
41
  :aria-expanded="String(isMenuOpen)"
42
- aria-controls="site-nav-panel"
42
+ :aria-controls="panelId"
43
43
  @click="toggleMenu"
44
44
  >
45
45
  <template #iconOnly>
@@ -47,7 +47,7 @@
47
47
  <span class="burger-bar" aria-hidden="true"></span>
48
48
  <span class="burger-bar" aria-hidden="true"></span>
49
49
  </template>
50
- </InputButtonCore>
50
+ </InputButton>
51
51
 
52
52
  <Teleport to="body">
53
53
  <div
@@ -61,7 +61,7 @@
61
61
 
62
62
  <div
63
63
  v-if="isCollapsed && isLoaded"
64
- id="site-nav-panel"
64
+ :id="panelId"
65
65
  class="site-nav-panel"
66
66
  :class="{ 'is-open': isMenuOpen }"
67
67
  :inert="!isMenuOpen ? true : undefined"
@@ -108,14 +108,22 @@ interface Props {
108
108
  styleClassPassthrough?: string | string[];
109
109
  /** aria-label on the nav landmark — override for localisation. */
110
110
  ariaLabel?: string;
111
+ /** Burger button label while the menu is closed — override for localisation. */
112
+ openMenuLabel?: string;
113
+ /** Burger button label while the menu is open — override for localisation. */
114
+ closeMenuLabel?: string;
111
115
  }
112
116
 
113
117
  const props = withDefaults(defineProps<Props>(), {
114
118
  navAlign: "left",
115
119
  styleClassPassthrough: () => [],
116
120
  ariaLabel: "Site navigation",
121
+ openMenuLabel: "Open navigation menu",
122
+ closeMenuLabel: "Close navigation menu",
117
123
  });
118
124
 
125
+ const panelId = `site-nav-panel-${useId()}`;
126
+
119
127
  // ─── Animation gate — prevents indicator from transitioning on first paint ───
120
128
 
121
129
  const isAnimated = ref(false);
@@ -390,18 +398,14 @@ watch(
390
398
  <style lang="css">
391
399
  @layer components {
392
400
  .site-nav-backdrop {
393
- --_backdrop-bg: var(--site-nav-backdrop-bg, oklch(0% 0 0 / 55%));
394
- --_backdrop-blur: var(--site-nav-backdrop-blur, 3px);
395
- --_backdrop-duration: var(--site-nav-backdrop-duration, 350ms);
396
-
397
401
  position: fixed;
398
402
  inset: 0;
399
- z-index: 10;
400
- background: var(--_backdrop-bg);
401
- backdrop-filter: blur(var(--_backdrop-blur));
403
+ z-index: var(--site-nav-backdrop-z-index, 10);
404
+ background: var(--site-nav-backdrop-bg, oklch(0% 0 0 / 55%));
405
+ backdrop-filter: blur(var(--site-nav-backdrop-blur, 3px));
402
406
  opacity: 0;
403
407
  pointer-events: none;
404
- transition: opacity var(--_backdrop-duration) ease;
408
+ transition: opacity var(--site-nav-backdrop-duration, 350ms) ease;
405
409
 
406
410
  &.is-open {
407
411
  opacity: 1;
@@ -412,31 +416,14 @@ watch(
412
416
  .site-navigation {
413
417
  /* ─── Public token API ────────────────────────────────────────────── */
414
418
 
415
- /* Decorators — horizontal nav */
416
- --_decorator-hovered-bg: transparent;
417
- --_decorator-active-bg: transparent;
418
- --_decorator-indicator-color: var(--site-nav-decorator-indicator-color, var(--slate-01, currentColor));
419
-
420
- /* Decorators — panel */
421
- --_panel-decorator-hovered-bg: var(--site-nav-panel-decorator-hovered-bg, transparent);
422
- --_panel-decorator-active-bg: var(--site-nav-panel-decorator-active-bg, transparent);
423
- --_panel-decorator-indicator-color: var(--site-nav-panel-decorator-indicator-color, var(--slate-01, currentColor));
424
- --_panel-indicator-left: var(--site-nav-panel-indicator-left, 0);
425
- --_panel-indicator-right: var(--site-nav-panel-indicator-right, auto);
426
-
427
419
  /* Horizontal nav */
428
420
  --_link-color: var(--site-nav-link-color, var(--slate-01, currentColor));
429
- --_link-hover-color: var(--site-nav-link-hover-color, var(--slate-04, var(--_link-color)));
430
- --_link-active-color: var(--site-nav-link-active-color, var(--slate-01, var(--_link-color)));
431
421
  --_link-size: var(--site-nav-link-size, 1.6rem);
432
422
  --_link-tracking: var(--site-nav-link-tracking, 0.06em);
433
423
  --_link-weight: var(--site-nav-link-weight, 400);
434
- --_link-accent: var(--site-nav-link-accent, var(--slate-01, currentColor));
435
- --_nav-gap: var(--site-nav-gap, 2.2rem);
436
424
  --_nav-transition: var(--site-nav-transition, 250ms ease);
437
425
 
438
426
  /* Panel */
439
- --_panel-bg: var(--site-nav-panel-bg, var(--page-bg, #1a1614));
440
427
  --_panel-border-color: var(
441
428
  --site-nav-panel-border-color,
442
429
  color-mix(in oklch, var(--slate-01, #c0847a) 35%, transparent)
@@ -446,15 +433,10 @@ watch(
446
433
  color-mix(in oklch, var(--slate-01, white) 8%, transparent)
447
434
  );
448
435
  --_panel-link-color: var(--site-nav-panel-link-color, var(--slate-01, currentColor));
449
- --_panel-link-hover-color: var(--site-nav-panel-link-hover-color, var(--slate-04, var(--_panel-link-color)));
450
- --_panel-link-active-color: var(--site-nav-panel-link-active-color, var(--slate-01, var(--_panel-link-color)));
451
- --_panel-padding-block: var(--site-nav-panel-padding-block, 1.4rem);
452
- --_panel-padding-inline: var(--site-nav-panel-padding-inline, 1.5rem);
453
436
  --_panel-slide-duration: var(--site-nav-panel-slide-duration, 350ms);
454
437
  --_panel-slide-easing: var(--site-nav-panel-slide-easing, cubic-bezier(0.4, 0, 0.2, 1));
455
438
 
456
439
  /* Burger */
457
- --_burger-bar-width: var(--site-nav-burger-width, 22px);
458
440
  --_burger-bar-height: var(--site-nav-burger-height, 1.5px);
459
441
  --_burger-bar-gap: var(--site-nav-burger-gap, 5px);
460
442
  --_burger-color: var(--site-nav-burger-color, var(--slate-01, currentColor));
@@ -478,7 +460,7 @@ watch(
478
460
  margin: 0;
479
461
  padding: 0;
480
462
  display: flex;
481
- gap: var(--_nav-gap);
463
+ gap: var(--site-nav-gap, 2.2rem);
482
464
  align-items: center;
483
465
  position: relative;
484
466
 
@@ -522,13 +504,13 @@ watch(
522
504
  }
523
505
 
524
506
  .nav__hovered {
525
- background: var(--_decorator-hovered-bg);
507
+ background: var(--site-nav-decorator-hovered-bg, transparent);
526
508
  border-radius: 4px;
527
509
  z-index: 1;
528
510
  }
529
511
 
530
512
  .nav__active {
531
- background: var(--_decorator-active-bg);
513
+ background: var(--site-nav-decorator-active-bg, transparent);
532
514
  border-radius: 4px;
533
515
  z-index: 2;
534
516
  }
@@ -536,7 +518,7 @@ watch(
536
518
  .nav__active-indicator {
537
519
  top: auto;
538
520
  height: 2px;
539
- background-color: var(--_decorator-indicator-color);
521
+ background-color: var(--site-nav-decorator-indicator-color, var(--slate-01, currentColor));
540
522
  z-index: 3;
541
523
  }
542
524
 
@@ -558,12 +540,12 @@ watch(
558
540
 
559
541
  &:hover,
560
542
  &:focus-visible {
561
- color: var(--_link-hover-color);
543
+ color: var(--site-nav-link-hover-color, var(--slate-04, var(--_link-color)));
562
544
  outline: none;
563
545
  }
564
546
  }
565
547
  li.is-active .site-nav-link {
566
- color: var(--_link-active-color);
548
+ color: var(--site-nav-link-active-color, var(--slate-01, var(--_link-color)));
567
549
  }
568
550
  }
569
551
 
@@ -581,13 +563,13 @@ watch(
581
563
  justify-content: end;
582
564
  }
583
565
 
584
- /* ─── Burger button (InputButtonCore) ──────────────────────────── */
566
+ /* ─── Burger button (InputButton) ──────────────────────────── */
585
567
 
586
- .site-nav-burger.input-button-core.icon-only {
568
+ .site-nav-burger.input-button.icon-only {
587
569
  margin-inline-start: auto;
588
570
  color: var(--_burger-color);
589
571
 
590
- /* Strip all InputButtonCore visual styling */
572
+ /* Strip all InputButton visual styling */
591
573
  background: none;
592
574
  border: none;
593
575
  outline: none;
@@ -617,7 +599,7 @@ watch(
617
599
 
618
600
  .burger-bar {
619
601
  display: block;
620
- width: var(--_burger-bar-width);
602
+ width: var(--site-nav-burger-width, 22px);
621
603
  height: var(--_burger-bar-height);
622
604
  background: currentColor;
623
605
  border-radius: 1px;
@@ -666,7 +648,7 @@ watch(
666
648
 
667
649
  .site-nav-panel-inner {
668
650
  overflow: hidden;
669
- background-color: var(--_panel-bg);
651
+ background-color: var(--site-nav-panel-bg, var(--page-bg, #1a1614));
670
652
  }
671
653
 
672
654
  .site-nav-panel-list {
@@ -710,23 +692,23 @@ watch(
710
692
  }
711
693
 
712
694
  .nav__active-indicator {
713
- left: var(--_panel-indicator-left, 0);
714
- right: var(--_panel-indicator-right, auto);
695
+ left: var(--site-nav-panel-indicator-left, 0);
696
+ right: var(--site-nav-panel-indicator-right, auto);
715
697
  width: 2px;
716
698
  }
717
699
 
718
700
  .nav__hovered {
719
- background: var(--_panel-decorator-hovered-bg);
701
+ background: var(--site-nav-panel-decorator-hovered-bg, transparent);
720
702
  z-index: 1;
721
703
  }
722
704
 
723
705
  .nav__active {
724
- background: var(--_panel-decorator-active-bg);
706
+ background: var(--site-nav-panel-decorator-active-bg, transparent);
725
707
  z-index: 2;
726
708
  }
727
709
 
728
710
  .nav__active-indicator {
729
- background: var(--_panel-decorator-indicator-color);
711
+ background: var(--site-nav-panel-decorator-indicator-color, var(--slate-01, currentColor));
730
712
  z-index: 3;
731
713
  }
732
714
 
@@ -747,20 +729,20 @@ watch(
747
729
  font-weight: var(--_link-weight);
748
730
  letter-spacing: var(--_link-tracking);
749
731
  text-decoration: none;
750
- padding-block: var(--_panel-padding-block);
751
- padding-inline: var(--_panel-padding-inline);
732
+ padding-block: var(--site-nav-panel-padding-block, 1.4rem);
733
+ padding-inline: var(--site-nav-panel-padding-inline, 1.5rem);
752
734
  position: relative;
753
735
  z-index: 4;
754
736
  transition: color var(--_nav-transition);
755
737
 
756
738
  &:hover,
757
739
  &:focus-visible {
758
- color: var(--_panel-link-hover-color);
740
+ color: var(--site-nav-panel-link-hover-color, var(--slate-04, var(--_panel-link-color)));
759
741
  outline: none;
760
742
  }
761
743
  }
762
744
  li.is-active .site-nav-panel-link {
763
- color: var(--_panel-link-active-color);
745
+ color: var(--site-nav-panel-link-active-color, var(--slate-01, var(--_panel-link-color)));
764
746
  }
765
747
  }
766
748
  }