srcdev-nuxt-components 9.4.12 → 9.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (624) 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 +25 -6
  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 +36 -17
  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-toggle-switch.code-snippets +3 -1
  132. package/.vscode/srcdev-component-triple-toggle-switch.code-snippets +30 -0
  133. package/README.md +2 -2
  134. package/app/app.config.ts +10 -0
  135. package/app/assets/styles/setup/02.colours/_orange.css +11 -11
  136. package/app/assets/styles/setup/02.colours/_theme-params.css +2 -2
  137. package/app/assets/styles/setup/03.theming/_default.css +1 -22
  138. package/app/assets/styles/setup/03.theming/_theme-slots.css +1 -1
  139. package/app/assets/styles/setup/03.theming/_warning.css +8 -10
  140. package/app/assets/styles/setup/04.elements/forms/02.typography.css +0 -14
  141. package/app/assets/styles/setup/04.elements/forms/06.button-geometry.css +1 -1
  142. package/app/assets/styles/setup/index.css +1 -1
  143. package/app/components/01.atoms/alert-mask/AlertMaskCore.vue +23 -5
  144. package/app/components/01.atoms/alert-mask/CONSUMER-STYLING.md +23 -5
  145. package/app/components/01.atoms/alert-mask/stories/AlertMaskCore.stories.ts +45 -19
  146. package/app/components/01.atoms/alert-mask/tests/AlertMaskCore.spec.ts +35 -1
  147. package/app/components/01.atoms/animations/animated-svg-text/CONSUMER-STYLING.md +13 -0
  148. package/app/components/01.atoms/animations/clip-element/CONSUMER-STYLING.md +13 -0
  149. package/app/components/01.atoms/animations/clip-element/ClipElement.vue +2 -2
  150. package/app/components/01.atoms/animations/container-glow/CONSUMER-STYLING.md +26 -5
  151. package/app/components/01.atoms/animations/entry/.nuxt/app.config.mjs +21 -0
  152. package/app/components/01.atoms/animations/entry/.nuxt/components.d.ts +66 -0
  153. package/app/components/01.atoms/animations/entry/.nuxt/imports.d.ts +30 -0
  154. package/app/components/01.atoms/animations/entry/.nuxt/manifest/meta/test.json +1 -0
  155. package/app/components/01.atoms/animations/entry/.nuxt/types/app.config.d.ts +35 -0
  156. package/app/components/01.atoms/animations/entry/.nuxt/types/build.d.ts +23 -0
  157. package/app/components/01.atoms/animations/entry/.nuxt/types/builder-env.d.ts +1 -0
  158. package/app/components/01.atoms/animations/entry/.nuxt/types/components.d.ts +71 -0
  159. package/app/components/01.atoms/animations/entry/.nuxt/types/imports.d.ts +386 -0
  160. package/app/components/01.atoms/animations/entry/.nuxt/types/middleware.d.ts +11 -0
  161. package/app/components/01.atoms/animations/entry/.nuxt/types/modules.d.ts +79 -0
  162. package/app/components/01.atoms/animations/entry/.nuxt/types/nitro-layouts.d.ts +17 -0
  163. package/app/components/01.atoms/animations/entry/.nuxt/types/nitro-nuxt.d.ts +64 -0
  164. package/app/components/01.atoms/animations/entry/.nuxt/types/plugins.d.ts +29 -0
  165. package/app/components/01.atoms/animations/entry/.nuxt/types/runtime-config.d.ts +32 -0
  166. package/app/components/01.atoms/animations/entry/.nuxt/types/shared-imports.d.ts +10 -0
  167. package/app/components/01.atoms/animations/entry/.nuxt/types/vue-shim.d.ts +0 -0
  168. package/app/components/01.atoms/animations/entry/.nuxtrc +1 -0
  169. package/app/components/01.atoms/animations/entry/CONSUMER-STYLING.md +65 -0
  170. package/app/components/01.atoms/animations/entry/EntryAnimation.vue +6 -5
  171. package/app/components/01.atoms/animations/entry/node_modules/.cache/nuxt/chrome-workspace.json +1 -0
  172. package/app/components/01.atoms/animations/entry/node_modules/.cache/vite/client/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  173. package/app/components/01.atoms/animations/entry/stories/EntryAnimation.stories.ts +1 -1
  174. package/app/components/01.atoms/animations/entry/tests/EntryAnimation.spec.ts +25 -0
  175. package/app/components/01.atoms/animations/glowing-border/CONSUMER-STYLING.md +24 -5
  176. package/app/components/01.atoms/animations/marquee-scroller/CONSUMER-STYLING.md +20 -0
  177. package/app/components/01.atoms/animations/rotating-carousel-image/CONSUMER-STYLING.md +17 -0
  178. package/app/components/01.atoms/animations/scroll-reveal-frame/CONSUMER-STYLING.md +77 -0
  179. package/app/components/01.atoms/animations/scroll-reveal-frame/ScrollRevealFrame.vue +37 -78
  180. package/app/components/01.atoms/animations/scroll-reveal-frame/stories/ScrollRevealFrame.stories.ts +48 -0
  181. package/app/components/01.atoms/animations/scroll-reveal-frame/tests/ScrollRevealFrame.spec.ts +40 -33
  182. package/app/components/01.atoms/animations/scroll-reveal-frame/tests/__snapshots__/ScrollRevealFrame.spec.ts.snap +4 -4
  183. package/app/components/01.atoms/animations/scroll-reveal-image/CONSUMER-STYLING.md +74 -0
  184. package/app/components/01.atoms/animations/scroll-reveal-image/ScrollRevealImage.vue +14 -44
  185. package/app/components/01.atoms/animations/scroll-reveal-image/stories/ScrollRevealImage.stories.ts +50 -1
  186. package/app/components/01.atoms/animations/scroll-reveal-image/tests/ScrollRevealImage.spec.ts +27 -20
  187. package/app/components/01.atoms/animations/scroll-reveal-image/tests/__snapshots__/ScrollRevealImage.spec.ts.snap +4 -4
  188. package/app/components/01.atoms/animations/section-parallax/CONSUMER-STYLING.md +21 -4
  189. package/app/components/01.atoms/animations/view-timeline/CONSUMER-STYLING.md +25 -0
  190. package/app/components/01.atoms/banner-video/CONSUMER-STYLING.md +12 -5
  191. package/app/components/01.atoms/canvas-switcher/CONSUMER-STYLING.md +20 -7
  192. package/app/components/01.atoms/canvas-switcher/CanvasSwitcher.vue +12 -7
  193. package/app/components/01.atoms/card/CONSUMER-STYLING.md +47 -42
  194. package/app/components/01.atoms/card/CardCore.vue +7 -17
  195. package/app/components/01.atoms/clipped-panel/CONSUMER-STYLING.md +13 -0
  196. package/app/components/01.atoms/content-wrappers/docs-pages/CONSUMER-STYLING.md +127 -0
  197. package/app/components/01.atoms/content-wrappers/docs-pages/ContentDocs.vue +44 -77
  198. package/app/components/01.atoms/content-wrappers/docs-pages/stories/ContentDocs.stories.ts +3 -3
  199. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/CONSUMER-STYLING.md +14 -1
  200. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/stories/DashboardQuadGrid.stories.ts +2 -0
  201. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/CONSUMER-STYLING.md +13 -0
  202. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/stories/DashboardStatsGrid.stories.ts +2 -0
  203. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/CONSUMER-STYLING.md +72 -0
  204. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/LayoutGridByCols.vue +26 -25
  205. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/stories/LayoutGridByCols.stories.ts +91 -107
  206. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/tests/LayoutGridByCols.spec.ts +50 -15
  207. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/tests/__snapshots__/LayoutGridByCols.spec.ts.snap +5 -5
  208. package/app/components/01.atoms/display-banner/CONSUMER-STYLING.md +13 -0
  209. package/app/components/01.atoms/display-dialog/CONSUMER-STYLING.md +82 -54
  210. package/app/components/01.atoms/display-dialog/DisplayDialog.vue +38 -45
  211. package/app/components/01.atoms/display-dialog/stories/DisplayDialog.stories.ts +25 -0
  212. package/app/components/01.atoms/display-dialog/tests/DisplayDialog.spec.ts +21 -0
  213. package/app/components/01.atoms/display-pill/CONSUMER-STYLING.md +112 -0
  214. package/app/components/01.atoms/display-pill/DisplayPill.vue +88 -50
  215. package/app/components/01.atoms/display-pill/stories/DisplayPill.stories.ts +56 -3
  216. package/app/components/01.atoms/display-pill/tests/DisplayPill.spec.ts +104 -4
  217. package/app/components/01.atoms/display-pill/tests/__snapshots__/DisplayPill.spec.ts.snap +3 -3
  218. package/app/components/01.atoms/display-tooltip/CONSUMER-STYLING.md +22 -2
  219. package/app/components/01.atoms/display-tooltip/DisplayTooltip.vue +18 -26
  220. package/app/components/01.atoms/glass-panel/CONSUMER-STYLING.md +91 -0
  221. package/app/components/01.atoms/glass-panel/GlassPanel.vue +34 -30
  222. package/app/components/01.atoms/glass-panel/stories/GlassPanel.stories.ts +121 -0
  223. package/app/components/01.atoms/glass-panel/tests/GlassPanel.spec.ts +61 -0
  224. package/app/components/01.atoms/grids/auto-grid/AutoGrid.vue +5 -10
  225. package/app/components/01.atoms/grids/auto-grid/CONSUMER-STYLING.md +76 -0
  226. package/app/components/01.atoms/grids/auto-grid/stories/AutoGrid.stories.ts +5 -4
  227. package/app/components/01.atoms/grids/auto-grid/tests/AutoGrid.spec.ts +8 -0
  228. package/app/components/01.atoms/grids/column-flow-grid/CONSUMER-STYLING.md +11 -2
  229. package/app/components/01.atoms/grids/grid-stack/CONSUMER-STYLING.md +76 -0
  230. package/app/components/01.atoms/grids/grid-stack/GridStack.vue +6 -1
  231. package/app/components/01.atoms/grids/grid-stack/stories/GridStack.stories.ts +1 -1
  232. package/app/components/01.atoms/grids/grid-stack/tests/GridStack.spec.ts +35 -0
  233. package/app/components/01.atoms/grids/masonry-grid/CONSUMER-STYLING.md +11 -2
  234. package/app/components/01.atoms/navigation/breadcrumb/Breadcrumb.vue +5 -10
  235. package/app/components/01.atoms/navigation/breadcrumb/CONSUMER-STYLING.md +15 -0
  236. package/app/components/01.atoms/navigation/skip-links/CONSUMER-STYLING.md +13 -0
  237. package/app/components/01.atoms/navigation/tabs/CONSUMER-STYLING.md +21 -0
  238. package/app/components/01.atoms/page-row/CONSUMER-STYLING.md +46 -8
  239. package/app/components/01.atoms/page-row/PageRow.vue +17 -13
  240. package/app/components/01.atoms/page-row/stories/PageRow.stories.ts +8 -0
  241. package/app/components/01.atoms/page-row/tests/PageRow.spec.ts +7 -11
  242. package/app/components/01.atoms/pop-over/CONSUMER-STYLING.md +13 -0
  243. package/app/components/01.atoms/qr-code/CONSUMER-STYLING.md +48 -0
  244. package/app/components/01.atoms/qr-code/DisplayQrCode.vue +5 -1
  245. package/app/components/01.atoms/qr-code/stories/DisplayQrCode.stories.ts +11 -3
  246. package/app/components/01.atoms/qr-code/tests/DisplayQrCode.spec.ts +15 -0
  247. package/app/components/01.atoms/text-block/CONSUMER-STYLING.md +49 -0
  248. package/app/components/01.atoms/text-block/TextBlock.vue +13 -5
  249. package/app/components/01.atoms/text-block/stories/TextBlock.stories.ts +84 -0
  250. package/app/components/01.atoms/text-block/tests/TextBlock.spec.ts +78 -0
  251. package/app/components/01.atoms/text-block/tests/__snapshots__/TextBlock.spec.ts.snap +7 -0
  252. package/app/components/01.atoms/text-blocks/eyebrow-text/CONSUMER-STYLING.md +56 -0
  253. package/app/components/01.atoms/text-blocks/eyebrow-text/EyebrowText.vue +10 -5
  254. package/app/components/01.atoms/text-blocks/eyebrow-text/tests/EyebrowText.spec.ts +11 -0
  255. package/app/components/01.atoms/text-blocks/header-block/CONSUMER-STYLING.md +16 -1
  256. package/app/components/01.atoms/text-blocks/hero-text/CONSUMER-STYLING.md +74 -0
  257. package/app/components/01.atoms/text-blocks/hero-text/HeroText.vue +14 -9
  258. package/app/components/01.atoms/text-blocks/hero-text/tests/HeroText.spec.ts +11 -0
  259. package/app/components/01.atoms/text-blocks/link-text/CONSUMER-STYLING.md +45 -0
  260. package/app/components/01.atoms/text-blocks/link-text/LinkText.vue +15 -8
  261. package/app/components/01.atoms/text-blocks/link-text/tests/LinkText.spec.ts +11 -0
  262. package/app/components/01.atoms/ui-block-decorated/CONSUMER-STYLING.md +13 -0
  263. package/app/components/02.molecules/action-menu/ActionMenu.vue +28 -30
  264. package/app/components/02.molecules/action-menu/{ActionMenuItemCore.vue → ActionMenuItem.vue} +12 -14
  265. package/app/components/02.molecules/action-menu/CONSUMER-STYLING.md +90 -76
  266. package/app/components/02.molecules/action-menu/stories/ActionMenu.stories.ts +48 -41
  267. package/app/components/02.molecules/action-menu/tests/ActionMenu.spec.ts +46 -1
  268. package/app/components/02.molecules/action-menu/tests/{ActionMenuItemCore.spec.ts → ActionMenuItem.spec.ts} +11 -5
  269. package/app/components/02.molecules/action-menu/tests/__snapshots__/ActionMenuItem.spec.ts.snap +27 -0
  270. package/app/components/02.molecules/alert-content/AlertContent.vue +17 -8
  271. package/app/components/02.molecules/alert-content/AlertContentInner.vue +57 -30
  272. package/app/components/02.molecules/alert-content/CONSUMER-STYLING.md +84 -0
  273. package/app/components/02.molecules/alert-content/stories/AlertContent.stories.ts +39 -0
  274. package/app/components/02.molecules/alert-content/tests/AlertContent.spec.ts +32 -0
  275. package/app/components/02.molecules/alert-content/tests/AlertContentInner.spec.ts +32 -0
  276. package/app/components/02.molecules/alert-masked-content/AlertMaskedContent.vue +9 -5
  277. package/app/components/02.molecules/alert-masked-content/CONSUMER-STYLING.md +73 -0
  278. package/app/components/02.molecules/alert-masked-content/stories/AlertMaskedContent.stories.ts +91 -10
  279. package/app/components/02.molecules/alert-masked-content/tests/AlertMaskedContent.spec.ts +52 -0
  280. package/app/components/02.molecules/cookie-consent-banner/CONSUMER-STYLING.md +95 -0
  281. package/app/components/02.molecules/cookie-consent-banner/CookieConsentBanner.vue +149 -0
  282. package/app/components/{01.atoms → 02.molecules}/cookie-consent-banner/stories/CookieConsentBanner.stories.ts +22 -3
  283. package/app/components/{01.atoms → 02.molecules}/cookie-consent-banner/tests/CookieConsentBanner.spec.ts +81 -4
  284. package/app/components/02.molecules/display-avatar/CONSUMER-STYLING.md +63 -0
  285. package/app/components/02.molecules/display-avatar/DisplayAvatar.vue +120 -0
  286. package/app/components/{01.atoms → 02.molecules}/display-avatar/stories/DisplayAvatar.stories.ts +56 -14
  287. package/app/components/{01.atoms → 02.molecules}/display-avatar/tests/DisplayAvatar.spec.ts +43 -11
  288. package/app/components/02.molecules/display-avatar/tests/__snapshots__/DisplayAvatar.spec.ts.snap +11 -0
  289. package/app/components/02.molecules/display-chip/CONSUMER-STYLING.md +57 -0
  290. package/app/components/02.molecules/display-chip/DisplayChip.vue +50 -83
  291. package/app/components/02.molecules/display-chip/tests/DisplayChip.spec.ts +10 -10
  292. package/app/components/02.molecules/display-chip/tests/__snapshots__/DisplayChip.spec.ts.snap +4 -4
  293. package/app/components/02.molecules/display-theme-switch/CONSUMER-STYLING.md +25 -4
  294. package/app/components/02.molecules/display-theme-switch/DisplayThemeSwitch.vue +9 -6
  295. package/app/components/02.molecules/display-theme-switch/stories/DisplayThemeSwitch.stories.ts +6 -1
  296. package/app/components/02.molecules/display-theme-switch/tests/DisplayThemeSwitch.spec.ts +10 -1
  297. package/app/components/02.molecules/display-tooltip-defined/CONSUMER-STYLING.md +11 -0
  298. package/app/components/02.molecules/expandable/accordian/CONSUMER-STYLING.md +11 -4
  299. package/app/components/02.molecules/expandable/expanding-panel/CONSUMER-STYLING.md +12 -5
  300. package/app/components/02.molecules/expandable/expanding-panel-classic/CONSUMER-STYLING.md +12 -5
  301. package/app/components/02.molecules/input-copy/CONSUMER-STYLING.md +12 -5
  302. package/app/components/02.molecules/input-copy/InputCopy.vue +12 -25
  303. package/app/components/02.molecules/input-copy/stories/InputCopy.stories.ts +1 -1
  304. package/app/components/02.molecules/input-copy/tests/InputCopy.spec.ts +1 -1
  305. package/app/components/02.molecules/navigation/deep-expanding-menu/CONSUMER-STYLING.md +13 -0
  306. package/app/components/02.molecules/navigation/deep-expanding-menu-classic/CONSUMER-STYLING.md +11 -0
  307. package/app/components/02.molecules/navigation/site-navigation/CONSUMER-STYLING.md +109 -0
  308. package/app/components/02.molecules/navigation/site-navigation/SiteNavigation.vue +37 -55
  309. package/app/components/02.molecules/navigation/site-navigation/stories/SiteNavigation.stories.ts +22 -1
  310. package/app/components/02.molecules/navigation/site-navigation/tests/SiteNavigation.spec.ts +41 -6
  311. package/app/components/02.molecules/navigation/tab-navigation/CONSUMER-STYLING.md +13 -8
  312. package/app/components/02.molecules/navigation/tab-navigation/TabNavigation.vue +18 -36
  313. package/app/components/02.molecules/navigation/tab-navigation/stories/TabNavigation.stories.ts +1 -1
  314. package/app/components/02.molecules/navigation/tab-navigation/tests/TabNavigation.spec.ts +1 -1
  315. package/app/components/02.molecules/opening-hours/CONSUMER-STYLING.md +134 -0
  316. package/app/components/02.molecules/opening-hours/OpeningHours.vue +352 -0
  317. package/app/components/02.molecules/opening-hours/stories/OpeningHours.stories.ts +127 -0
  318. package/app/components/02.molecules/opening-hours/tests/OpeningHours.spec.ts +228 -0
  319. package/app/components/02.molecules/opening-hours/tests/OpeningHours.structuredData.spec.ts +45 -0
  320. package/app/components/02.molecules/opening-hours/tests/__snapshots__/OpeningHours.spec.ts.snap +23 -0
  321. package/app/components/02.molecules/opening-hours/tests/buildOpeningHoursSpecification.spec.ts +52 -0
  322. package/app/components/02.molecules/price-list/CONSUMER-STYLING.md +106 -0
  323. package/app/components/02.molecules/price-list/PriceList.vue +48 -40
  324. package/app/components/02.molecules/price-list/stories/PriceList.stories.ts +15 -2
  325. package/app/components/02.molecules/price-list/tests/PriceList.spec.ts +39 -2
  326. package/app/components/02.molecules/price-list/tests/__snapshots__/PriceList.spec.ts.snap +4 -16
  327. package/app/components/02.molecules/pricing-card/CONSUMER-STYLING.md +12 -5
  328. package/app/components/02.molecules/pricing-card/PricingCard.vue +28 -60
  329. package/app/components/02.molecules/pricing-card/tests/PricingCard.spec.ts +1 -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 +26 -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} +25 -12
  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 +2 -4
  491. package/app/components/05.forms/toggle-switch/stories/ToggleSwitchWithLabelInline.stories.ts +4 -1
  492. package/app/components/05.forms/toggle-switch/tests/ToggleSwitchWithLabel.spec.ts +133 -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/toggle-switch/variants/tests/ToggleSwitchWithLabel.spec.ts +0 -77
  561. package/app/components/05.forms/triple-toggle-switch/TripleToggleSwitchCore.vue +0 -314
  562. package/app/components/05.forms/triple-toggle-switch/stories/TripleToggleSwitchCore.stories.ts +0 -63
  563. package/.vscode/{srcdev-component-dialog.code-snippets → srcdev-component-display-dialog.code-snippets} +0 -0
  564. package/app/components/{01.atoms → 02.molecules}/toast/tests/DisplayToast.spec.ts +1 -1
  565. /package/app/components/{01.atoms → 02.molecules}/toast/tests/DisplayToastProvider.spec.ts +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-chromium-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-firefox-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-secondary-webkit-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-chromium-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-firefox-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-icons-tertiary-webkit-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-chromium-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-firefox-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-primary-pending-webkit-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-chromium-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-firefox-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-secondary-pill-webkit-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-chromium-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-firefox-darwin.png +0 -0
  580. /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
  581. /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
  582. /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
  583. /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
  584. /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
  585. /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
  586. /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
  587. /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
  588. /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
  589. /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
  590. /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
  591. /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
  592. /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
  593. /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
  594. /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
  595. /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
  596. /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
  597. /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
  598. /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
  599. /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
  600. /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
  601. /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
  602. /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
  603. /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
  604. /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
  605. /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
  606. /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
  607. /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
  608. /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
  609. /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
  610. /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
  611. /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
  612. /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
  613. /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
  614. /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
  615. /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
  616. /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
  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-chromium-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-firefox-darwin.png +0 -0
  619. /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
  620. /package/app/components/05.forms/input-range/{variants/stories → stories}/InputRangeDefault.stories.ts +0 -0
  621. /package/app/components/05.forms/input-select/{variants/tests → tests}/InputSelectWithLabel.spec.ts +0 -0
  622. /package/app/components/05.forms/input-textarea/{variants/tests → tests}/InputTextareaWithLabel.spec.ts +0 -0
  623. /package/app/components/05.forms/toggle-switch/{variants/tests → tests}/ToggleSwitchWithLabelInline.spec.ts +0 -0
  624. /package/app/types/components/{navigation-horizontal.d.ts → nav-item.d.ts} +0 -0
@@ -9,6 +9,8 @@
9
9
  | `--wipe-away-vertical-animation-duration` | `1s` | `wipe-out` scroll-linked animation, browsers supporting `animation-timeline: view()` |
10
10
  | `--wipe-away-vertical-trailing-buffer` | `20vh` | `.trailing-buffer` height — release room after the last panel |
11
11
 
12
+ ---
13
+
12
14
  ## Only itemCount - 1 scrollingItem slots
13
15
 
14
16
  The last panel has nothing left to reveal, so it has no wipe animation and no `.scrolling-section`
@@ -20,6 +22,8 @@ as deep on screen as the others, since it got the same reveal lead-in as every o
20
22
  a whole dedicated section with no wipe to cut it short. `.trailing-buffer` (see token above)
21
23
  replaces that with a much smaller, purpose-built release cushion instead.
22
24
 
25
+ ---
26
+
23
27
  ## Pure CSS, no JS measurement
24
28
 
25
29
  The whole pin/reveal effect is CSS-only (grid overlay + `animation-timeline: view()`); there's
@@ -29,6 +33,8 @@ see below), and `.sticky-items-container` spans `grid-row: 1 / -1` to overlay al
29
33
  adding its own row — so the root's height is simply the sum of the scrolling sections' own content
30
34
  height plus the leading buffer, nothing extra to size manually.
31
35
 
36
+ ---
37
+
32
38
  ## Leading buffer
33
39
 
34
40
  `.leading-buffer` is a fixed `100vh` spacer rendered before the first scrolling section. Without
@@ -37,6 +43,8 @@ timeline range at initial page load (before any scrolling happens), so the first
37
43
  appear partially wiped on load. The buffer guarantees a full viewport of scroll run-up regardless
38
44
  of how much real content precedes the component.
39
45
 
46
+ ---
47
+
40
48
  ## No `animation-timeline: view()` support
41
49
 
42
50
  Browsers without support (checked via `@supports not (animation-timeline: view())`) get the
@@ -44,6 +52,8 @@ sticky/grid-overlay/animation rules dropped entirely — `.sticky-item`s just re
44
52
  stacked panels in document flow, and `.scrolling-section`s are hidden. No JS fallback, no
45
53
  opacity crossfade.
46
54
 
55
+ ---
56
+
47
57
  ## Sticky vertical centering — no transform
48
58
 
49
59
  `.sticky-items-container` centers itself with `top: calc((100vh - var(--wipe-away-vertical-height, 100vh)) / 2)` — a plain calc(), not a `transform: translateY()`. Do not
@@ -59,12 +69,27 @@ the last panel and whatever content follows the component.
59
69
  }
60
70
  ```
61
71
 
72
+ ---
73
+
62
74
  ## Reduced motion
63
75
 
64
76
  The wipe animation is disabled under `prefers-reduced-motion: reduce` (`animation: none;
65
77
  clip-path: none;`) — panels render fully visible with no clip.
66
78
 
79
+ ---
80
+
81
+ ## Local overrides
82
+
83
+ Set the tokens above on an element you own (a page or section class, or a class added with
84
+ `:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
85
+ `@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
86
+ `<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
87
+ `:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
88
+
89
+ ---
90
+
67
91
  ## Class passthrough
68
92
 
69
93
  `styleClassPassthrough` (string or string array) is applied to the root element via
70
94
  `useStyleClassPassthrough`.
95
+
@@ -55,7 +55,7 @@ component doesn't cover), replace it with the `toggle-icon` scoped slot, which r
55
55
 
56
56
  ---
57
57
 
58
- ## Global theming — recommended approach
58
+ ## Global theming
59
59
 
60
60
  Create `assets/styles/setup/07.components/banner-video.css` in the consuming app and set
61
61
  tokens on `:root`. This applies to every `BannerVideo` across the site.
@@ -72,7 +72,15 @@ tokens on `:root`. This applies to every `BannerVideo` across the site.
72
72
 
73
73
  ---
74
74
 
75
- ## Page-scoped overrides
75
+ ## Local overrides
76
+
77
+ Set the tokens above on an element you own (a page or section class, or a class added with
78
+ `:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
79
+ `@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
80
+ `<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
81
+ `:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
82
+
83
+ ### Page or section
76
84
 
77
85
  Override tokens for a specific banner by scoping them under the page or layout wrapper.
78
86
  No `:deep()` is required (component styles are unscoped).
@@ -88,9 +96,7 @@ No `:deep()` is required (component styles are unscoped).
88
96
  }
89
97
  ```
90
98
 
91
- ---
92
-
93
- ## Per-instance overrides via styleClassPassthrough
99
+ ### One instance
94
100
 
95
101
  Use sparingly — prefer global or page-scoped CSS. When a single instance needs a distinct
96
102
  visual style, pass a modifier class:
@@ -118,3 +124,4 @@ visual style, pass a modifier class:
118
124
  consuming apps are expected to reskin per-brand.
119
125
  - `aspectRatio`, `objectFit`, `verticalPosition`, and `horizontalPosition` are props, not
120
126
  tokens — set them directly on the component.
127
+
@@ -1,6 +1,6 @@
1
1
  # CanvasSwitcher — Consumer Styling
2
2
 
3
- CanvasSwitcher renders its buttons via `InputButtonCore` (`variant="tertiary"`, icon-only) — see
3
+ CanvasSwitcher renders its buttons via `InputButton` (`variant="tertiary"`, icon-only) — see
4
4
  that component's own `CONSUMER-STYLING.md` for the button surface/hover/focus tokens it inherits.
5
5
  CanvasSwitcher itself exposes the following public tokens:
6
6
 
@@ -8,15 +8,10 @@ CanvasSwitcher itself exposes the following public tokens:
8
8
  |---|---|---|
9
9
  | `--canvas-switcher-gap` | `2rem` | Gap between the switcher's own children (currently just the list) |
10
10
  | `--canvas-switcher-item-gap` | `1rem` | Gap between each button in the list |
11
- | `--canvas-switcher-icon-size` | `2.4rem` | Width/height of each icon |
11
+ | `--canvas-switcher-icon-size` | `1.6rem`, `2.2rem` from 768px | Width/height of each icon (setting it replaces both defaults) |
12
12
  | `--canvas-switcher-icon-colour` | `var(--slate-10)` | Icon colour, resting state |
13
13
  | `--canvas-switcher-icon-colour-current` | `var(--green-10)` | Icon colour when that button's canvas is selected (`aria-pressed="true"`) |
14
14
 
15
- ## Class passthrough
16
-
17
- `styleClassPassthrough` (string or string[]) is applied to the root `.canvas-switcher` element via
18
- `useStyleClassPassthrough()`.
19
-
20
15
  ## Canvas-size utility classes
21
16
 
22
17
  `.mobileCanvas`, `.tabletCanvas`, `.laptopCanvas`, `.desktopCanvas`, `.fullWidthCanvas` are also
@@ -25,3 +20,21 @@ the same `MediaCanvas` value returned by `v-model:canvas-name` directly as a cla
25
20
  wrapper to constrain its width — see `DashboardQuadGrid`/`DashboardStatsGrid` stories for the pattern. These are
26
21
  plain global utility classes, not overridable via a CSS custom property; import `CanvasSwitcher`
27
22
  (or otherwise ensure its styles are bundled) wherever you rely on them.
23
+
24
+ ---
25
+
26
+ ## Local overrides
27
+
28
+ Set the tokens above on an element you own (a page or section class, or a class added with
29
+ `:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
30
+ `@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
31
+ `<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
32
+ `:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
33
+
34
+ ---
35
+
36
+ ## Class passthrough
37
+
38
+ `styleClassPassthrough` (string or string[]) is applied to the root `.canvas-switcher` element via
39
+ `useStyleClassPassthrough()`.
40
+
@@ -2,7 +2,7 @@
2
2
  <div class="canvas-switcher" :class="[elementClasses]">
3
3
  <ul class="canvas-switcher-list">
4
4
  <li v-for="option in canvasOptions" :key="option.value">
5
- <InputButtonCore
5
+ <InputButton
6
6
  type="button"
7
7
  variant="tertiary"
8
8
  class="canvas-switcher-button"
@@ -11,9 +11,9 @@
11
11
  @click="updateCanvas(option.value)"
12
12
  >
13
13
  <template #iconOnly>
14
- <Icon :name="option.icon" class="icon"></Icon>
14
+ <Icon :name="option.icon" class="icon" />
15
15
  </template>
16
- </InputButtonCore>
16
+ </InputButton>
17
17
  </li>
18
18
  </ul>
19
19
  </div>
@@ -36,7 +36,7 @@ const props = withDefaults(defineProps<Props>(), {
36
36
  styleClassPassthrough: () => [],
37
37
  });
38
38
 
39
- const canvasName = defineModel<MediaCanvas>("canvasName");
39
+ const canvasName = defineModel<MediaCanvas | undefined>("canvasName", { default: undefined });
40
40
 
41
41
  const canvasOptions: CanvasOption[] = [
42
42
  { value: "mobileCanvas", label: "Mobile", icon: "ic:baseline-phone-iphone" },
@@ -77,7 +77,7 @@ watch(
77
77
  padding: 0;
78
78
  }
79
79
 
80
- .canvas-switcher-button.input-button-core {
80
+ .canvas-switcher-button.input-button {
81
81
  color: var(--canvas-switcher-icon-colour, var(--slate-10));
82
82
 
83
83
  &[aria-pressed="true"] {
@@ -85,8 +85,13 @@ watch(
85
85
  }
86
86
 
87
87
  .icon {
88
- width: var(--canvas-switcher-icon-size, 2.4rem);
89
- height: var(--canvas-switcher-icon-size, 2.4rem);
88
+ --_icon-size-default: 1.6rem;
89
+ width: var(--canvas-switcher-icon-size, var(--_icon-size-default));
90
+ height: var(--canvas-switcher-icon-size, var(--_icon-size-default));
91
+
92
+ @media (min-width: 768px) {
93
+ --_icon-size-default: 2.2rem;
94
+ }
90
95
  }
91
96
  }
92
97
 
@@ -27,7 +27,7 @@ or instance) without touching the component itself.
27
27
 
28
28
  ---
29
29
 
30
- ## Global theming — app-level CSS file
30
+ ## Global theming
31
31
 
32
32
  Create `assets/styles/setup/07.components/card-core.css` in the consuming app and set tokens on
33
33
  `:root`. These values apply to every `CardCore` instance across the site.
@@ -44,7 +44,15 @@ Create `assets/styles/setup/07.components/card-core.css` in the consuming app an
44
44
 
45
45
  ---
46
46
 
47
- ## Per-variant overrides
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
+ ### Per variant
48
56
 
49
57
  Variants override internal tokens directly, so target the variant class to change their colours:
50
58
 
@@ -73,43 +81,7 @@ Variants override internal tokens directly, so target the variant class to chang
73
81
  }
74
82
  ```
75
83
 
76
- ---
77
-
78
- ## Blurred backdrop pattern
79
-
80
- Set `--card-core-lower-background-image` and `--card-core-lower-background-color` to create a
81
- blurred translucent layer behind the card content. The `::before` pseudo-element handles the blur
82
- and the scale hides the blur-edge artefact.
83
-
84
- ```css
85
- .card-core {
86
- &.hero-card {
87
- --card-core-lower-background-image: url("/images/hero.jpg");
88
- --card-core-lower-background-blur: 24px;
89
- --card-core-lower-scale: 1.15;
90
- --card-core-lower-background-color: rgb(0 0 0 / 30%); /* tint over image */
91
- --card-core-background-color: transparent;
92
- }
93
- }
94
- ```
95
-
96
- Or inline for a single instance:
97
-
98
- ```vue
99
- <CardCore
100
- variant="solid"
101
- style="
102
- --card-core-lower-background-image: url('/images/hero.jpg');
103
- --card-core-lower-background-blur: 20px;
104
- "
105
- >
106
- ...
107
- </CardCore>
108
- ```
109
-
110
- ---
111
-
112
- ## Page-scoped overrides
84
+ ### Page or section
113
85
 
114
86
  When a card appears in a specific page context, scope overrides under the page wrapper. No
115
87
  `:deep()` is required (component styles are unscoped).
@@ -128,9 +100,7 @@ When a card appears in a specific page context, scope overrides under the page w
128
100
  }
129
101
  ```
130
102
 
131
- ---
132
-
133
- ## Per-instance overrides via styleClassPassthrough
103
+ ### One instance
134
104
 
135
105
  ```vue
136
106
  <CardCore :style-class-passthrough="['featured']">
@@ -150,6 +120,40 @@ When a card appears in a specific page context, scope overrides under the page w
150
120
 
151
121
  ---
152
122
 
123
+ ## Blurred backdrop pattern
124
+
125
+ Set `--card-core-lower-background-image` and `--card-core-lower-background-color` to create a
126
+ blurred translucent layer behind the card content. The `::before` pseudo-element handles the blur
127
+ and the scale hides the blur-edge artefact.
128
+
129
+ ```css
130
+ .card-core {
131
+ &.hero-card {
132
+ --card-core-lower-background-image: url("/images/hero.jpg");
133
+ --card-core-lower-background-blur: 24px;
134
+ --card-core-lower-scale: 1.15;
135
+ --card-core-lower-background-color: rgb(0 0 0 / 30%); /* tint over image */
136
+ --card-core-background-color: transparent;
137
+ }
138
+ }
139
+ ```
140
+
141
+ Or inline for a single instance:
142
+
143
+ ```vue
144
+ <CardCore
145
+ variant="solid"
146
+ style="
147
+ --card-core-lower-background-image: url('/images/hero.jpg');
148
+ --card-core-lower-background-blur: 20px;
149
+ "
150
+ >
151
+ ...
152
+ </CardCore>
153
+ ```
154
+
155
+ ---
156
+
153
157
  ## Card row targeting
154
158
 
155
159
  Slot content is wrapped in `.card-row.card-row-{name}`. Target rows for padding, borders, or
@@ -173,3 +177,4 @@ backgrounds without modifying the component:
173
177
  }
174
178
  }
175
179
  ```
180
+
@@ -41,23 +41,14 @@ watch(
41
41
  <style lang="css">
42
42
  @layer components {
43
43
  .card-core {
44
- --_card-row-gap: var(--card-core-row-gap, 1rem);
45
- --_card-padding: var(--card-core-inner-padding, 1rem);
46
- --_card-lower-background-image: var(--card-core-lower-background-image, none);
47
- --_card-lower-background-position: var(--card-core-lower-background-position, center);
48
- --_card-lower-background-color: var(--card-core-lower-background-color, transparent);
49
- --_card-lower-background-blur: var(--card-core-lower-background-blur, 16px);
50
- --_card-lower-scale: var(--card-core-lower-scale, 1.1);
51
- --_card-background-image: var(--card-core-background-image, none);
52
44
  --_card-background-color: var(--card-core-background-color, transparent);
53
45
  --_card-border: var(--card-core-border, 0.2rem solid var(--slate-08));
54
- --_card-border-radius: var(--card-core-border-radius, 0.5rem);
55
46
  --_card-box-shadow: var(--card-core-box-shadow, 0.1rem 0.1rem 0.4rem oklch(from var(--slate-08) l c h / 0.45));
56
47
 
57
48
  display: grid;
58
49
  grid-auto-flow: row;
59
- gap: var(--_card-row-gap);
60
- border-radius: var(--_card-border-radius);
50
+ gap: var(--card-core-row-gap, 1rem);
51
+ border-radius: var(--card-core-border-radius, 0.5rem);
61
52
  overflow: hidden;
62
53
  position: relative;
63
54
 
@@ -69,13 +60,13 @@ watch(
69
60
  content: "";
70
61
  position: absolute;
71
62
  inset: 0;
72
- background-color: var(--_card-lower-background-color);
73
- background-image: var(--_card-lower-background-image);
74
- background-position: var(--_card-lower-background-position, center);
63
+ background-color: var(--card-core-lower-background-color, transparent);
64
+ background-image: var(--card-core-lower-background-image, none);
65
+ background-position: var(--card-core-lower-background-position, center);
75
66
  background-size: cover;
76
67
  background-repeat: no-repeat;
77
- filter: blur(var(--_card-lower-background-blur));
78
- scale: var(--_card-lower-scale);
68
+ filter: blur(var(--card-core-lower-background-blur, 16px));
69
+ scale: var(--card-core-lower-scale, 1.1);
79
70
  z-index: 0;
80
71
  }
81
72
 
@@ -101,7 +92,6 @@ watch(
101
92
 
102
93
  &.soft {
103
94
  --_card-background-color: color-mix(in oklab, var(--slate-01) 20%, transparent);
104
- --_card-box-shadow-color: color-mix(in oklab, var(--slate-02) 80%, transparent);
105
95
  }
106
96
 
107
97
  &.outline {
@@ -28,6 +28,8 @@ Or scope to a single instance via `styleClassPassthrough`:
28
28
  }
29
29
  ```
30
30
 
31
+ ---
32
+
31
33
  ## Shapes are fixed-size, not tokenised
32
34
 
33
35
  Each `variant`'s notched/cutout shape is drawn with `clip-path: path("...")` using literal pixel
@@ -37,3 +39,14 @@ radii, notch size, overall dimensions — is **not** overridable via tokens or `
37
39
  overrides. Changing `width` on the element stretches the box without moving the clip-path
38
40
  coordinates, which will misalign the shape. If a different size or geometry is needed, that
39
41
  requires a new variant with its own `path()` string, not a CSS override.
42
+
43
+ ---
44
+
45
+ ## Local overrides
46
+
47
+ Set the tokens above on an element you own (a page or section class, or a class added with
48
+ `:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
49
+ `@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
50
+ `<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
51
+ `:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
52
+
@@ -0,0 +1,127 @@
1
+ # ContentDocs — Consumer Styling Guide
2
+
3
+ ## Public token API
4
+
5
+ Most tokens come in a **shared** form (`--content-docs-heading-*`, `-panel-*`, `-link-*`) that
6
+ styles both the docs nav and the page nav, plus **per-side** forms (`--content-docs-nav-*`,
7
+ `--content-docs-page-nav-*`) that fall back to the shared one when unset.
8
+
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.
13
+
14
+ ### Headings
15
+
16
+ | Shared token | Default | Per-side overrides |
17
+ |---|---|---|
18
+ | `--content-docs-heading-font-size` | `1.4rem` | `--content-docs-nav-heading-font-size`, `--content-docs-page-nav-heading-font-size` |
19
+ | `--content-docs-heading-font-weight` | `700` | `-nav-heading-font-weight`, `-page-nav-heading-font-weight` |
20
+ | `--content-docs-heading-color` | `var(--colour-text-default)` | `-nav-heading-color`, `-page-nav-heading-color` |
21
+ | `--content-docs-heading-bg` | `transparent` | `-nav-heading-bg`, `-page-nav-heading-bg` |
22
+ | `--content-docs-heading-margin` | `0` | `-nav-heading-margin`, `-page-nav-heading-margin` |
23
+ | `--content-docs-heading-padding-block` | `0.4rem 0.8rem` | `-nav-heading-padding-block`, `-page-nav-heading-padding-block` |
24
+ | `--content-docs-heading-padding-inline` | `0` | `-nav-heading-padding-inline`, `-page-nav-heading-padding-inline` |
25
+
26
+ ### Panels (the `<nav>` list containers)
27
+
28
+ | Token | Default | Notes |
29
+ |---|---|---|
30
+ | `--content-docs-panel-bg` | `var(--page-bg)` | Per-side: `--content-docs-nav-panel-bg`, `--content-docs-page-nav-panel-bg` |
31
+ | `--content-docs-panel-padding-block` | `0.8rem` | Shared only |
32
+ | `--content-docs-panel-padding-inline` | `0.8rem` | Shared only |
33
+ | `--content-docs-panel-border-radius` | `0.5rem` | Shared only |
34
+
35
+ ### Links
36
+
37
+ | Shared token | Default | Per-side overrides |
38
+ |---|---|---|
39
+ | `--content-docs-link-color` | `var(--colour-text-default)` | `-nav-link-color`, `-page-nav-link-color` |
40
+ | `--content-docs-link-hover-bg` | `var(--theme-surface-subtle)` | `-nav-link-hover-bg`, `-page-nav-link-hover-bg` |
41
+ | `--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` |
44
+ | `--content-docs-link-bg` | `transparent` | Shared only |
45
+ | `--content-docs-link-font-size` | `1.4rem` | Shared only |
46
+ | `--content-docs-link-padding-block` | `0.6rem` | Shared only |
47
+ | `--content-docs-link-padding-inline` | `0.8rem` | Shared only |
48
+ | `--content-docs-link-margin-block` | `0` | Shared only |
49
+ | `--content-docs-link-border-radius` | `0.4rem` | Shared only |
50
+
51
+ ### Link icons
52
+
53
+ | Token | Default | Notes |
54
+ |---|---|---|
55
+ | `--content-docs-link-icon-size` | `1.6rem` | Icon column width and icon `font-size` (both lists) |
56
+ | `--content-docs-link-icon-gap` | `0.6rem` | Gap between icon and label (both lists) |
57
+ | `--content-docs-nav-link-icon-order` | `ltr` | `rtl` puts the icon after the label in the docs nav |
58
+ | `--content-docs-page-nav-link-icon-order` | `ltr` | Same, for the page nav |
59
+
60
+ > Changed 2026-09-27: renamed from `--docs-nav-link-icon-size`, `--docs-nav-link-icon-gap`,
61
+ > `--docs-nav-link-icon-order` and `--docs-page-nav-link-icon-order`. The size is now applied as
62
+ > `font-size`; as `width`/`height` it was silently overridden by `@nuxt/icon`'s own rule.
63
+
64
+ ### Layout
65
+
66
+ | Token | Default | Notes |
67
+ |---|---|---|
68
+ | `--content-docs-nav-column-width` | `23rem` | Docs nav track at 1024px+ container width |
69
+ | `--content-docs-page-nav-column-width` | `22rem` | Page nav track at 1024px+ |
70
+ | `--content-docs-page-nav-column-width-tablet` | `20rem` | Page nav track at 768px–1023px |
71
+
72
+ Link transitions also read the library-wide `--control-transition-duration` (`200ms`) and
73
+ `--control-transition-ease` (`ease`); focus rings use `--theme-ring`.
74
+
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.
78
+
79
+ ---
80
+
81
+ ## State hooks
82
+
83
+ | Selector | When |
84
+ |---|---|
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
+
91
+ The collapsible wrappers are `ExpandingPanelClassic` by default (`.expanding-panel-classic-*`
92
+ classes) or `ExpandingPanel` with `panel-variant="modern"` (`.expanding-panel-*`). Style both if
93
+ you target them.
94
+
95
+ ---
96
+
97
+ ## Breakpoints
98
+
99
+ Container queries on `.content-docs` (`container-name: contentDocs`), matched in script by
100
+ `useContainerBreakpoints`:
101
+
102
+ | Container width | Layout |
103
+ |---|---|
104
+ | < 768px | Single column; both navs are collapsible panels that overlay content |
105
+ | 768px–1023px | Page nav pinned open in a right-hand column; docs nav collapsible above content |
106
+ | ≥ 1024px | Three columns, both navs pinned open |
107
+
108
+ ---
109
+
110
+ ## Local overrides
111
+
112
+ Set the tokens above on an element you own (a page or section class, or a class added with
113
+ `:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
114
+ `@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
115
+ `<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
116
+ `:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
117
+
118
+ **Caveat:** set the public `--content-docs-*` tokens, not the `--_*` names. The `--_*` chain is
119
+ re-declared on `.content-docs` itself, so an ancestor value for a `--_*` name never lands.
120
+
121
+ ---
122
+
123
+ ## Class passthrough
124
+
125
+ `style-class-passthrough` adds classes to the root `.content-docs` element, which is where the
126
+ token fallback chain is resolved, so tokens set on a passthrough class land for the whole
127
+ component.