srcdev-nuxt-components 9.4.12 → 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 (622) 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 +12 -5
  327. package/app/components/02.molecules/pricing-card/PricingCard.vue +28 -60
  328. package/app/components/02.molecules/pricing-card/tests/PricingCard.spec.ts +1 -1
  329. package/app/components/02.molecules/profile-section/CONSUMER-STYLING.md +53 -0
  330. package/app/components/02.molecules/profile-section/ProfileSection.vue +53 -66
  331. package/app/components/02.molecules/profile-section/tests/ProfileSection.spec.ts +4 -4
  332. package/app/components/02.molecules/profile-section/tests/__snapshots__/ProfileSection.spec.ts.snap +6 -12
  333. package/app/components/02.molecules/prompt/CONSUMER-STYLING.md +51 -0
  334. package/app/components/{01.atoms → 02.molecules}/prompt/DisplayPrompt.vue +23 -8
  335. package/app/components/{01.atoms → 02.molecules}/prompt/stories/DisplayPrompt.stories.ts +18 -1
  336. package/app/components/{01.atoms → 02.molecules}/prompt/tests/DisplayPrompt.spec.ts +37 -7
  337. package/app/components/02.molecules/qr-code/CONSUMER-STYLING.md +66 -0
  338. package/app/components/02.molecules/qr-code/CaptureQrCode.vue +31 -12
  339. package/app/components/02.molecules/qr-code/DecodeQrCode.vue +55 -19
  340. package/app/components/02.molecules/qr-code/stories/CaptureQrCode.stories.ts +56 -0
  341. package/app/components/02.molecules/qr-code/stories/DecodeQrCode.stories.ts +53 -0
  342. package/app/components/02.molecules/qr-code/tests/CaptureQrCode.spec.ts +68 -20
  343. package/app/components/02.molecules/qr-code/tests/DecodeQrCode.spec.ts +44 -8
  344. package/app/components/02.molecules/samaritan-prompt/CONSUMER-STYLING.md +118 -0
  345. package/app/components/02.molecules/samaritan-prompt/SamaritanPrompt.vue +108 -51
  346. package/app/components/02.molecules/samaritan-prompt/SamaritanPromptMixed.vue +63 -62
  347. package/app/components/02.molecules/samaritan-prompt/stories/SamaritanPrompt.stories.ts +129 -0
  348. package/app/components/02.molecules/samaritan-prompt/stories/SamaritanPromptMixed.stories.ts +124 -0
  349. package/app/components/02.molecules/samaritan-prompt/tests/SamaritanPrompt.spec.ts +66 -0
  350. package/app/components/02.molecules/samaritan-prompt/tests/SamaritanPromptMixed.spec.ts +95 -17
  351. package/app/components/02.molecules/select-menu/CONSUMER-STYLING.md +11 -2
  352. package/app/components/02.molecules/social-icons-list/CONSUMER-STYLING.md +43 -0
  353. package/app/components/02.molecules/social-icons-list/SocialIconsList.vue +15 -15
  354. package/app/components/02.molecules/social-icons-list/stories/SocialIconsList.stories.ts +6 -1
  355. package/app/components/02.molecules/social-icons-list/tests/SocialIconsList.spec.ts +22 -1
  356. package/app/components/02.molecules/social-icons-list/tests/__snapshots__/SocialIconsList.spec.ts.snap +3 -3
  357. package/app/components/02.molecules/stepper-list/CONSUMER-STYLING.md +44 -5
  358. package/app/components/02.molecules/stepper-list/StepperList.vue +23 -43
  359. package/app/components/02.molecules/stepper-list/tests/StepperList.spec.ts +9 -0
  360. package/app/components/{01.atoms → 02.molecules}/toast/CONSUMER-STYLING.md +14 -0
  361. package/app/components/{01.atoms → 02.molecules}/toast/DisplayToast.vue +1 -2
  362. package/app/components/{01.atoms → 02.molecules}/toast/DisplayToastProvider.vue +1 -2
  363. package/app/components/{01.atoms → 02.molecules}/toast/stories/DisplayToast.stories.ts +1 -1
  364. package/app/components/{01.atoms → 02.molecules}/toast/stories/DisplayToastProvider.stories.ts +1 -1
  365. package/app/components/03.organisms/image-galleries/carousel-flip/CONSUMER-STYLING.md +13 -0
  366. package/app/components/03.organisms/image-galleries/slider-gallery/CONSUMER-STYLING.md +137 -0
  367. package/app/components/03.organisms/image-galleries/slider-gallery/SliderGallery.vue +378 -343
  368. package/app/components/03.organisms/image-galleries/slider-gallery/stories/SliderGallery.stories.ts +26 -1
  369. package/app/components/03.organisms/image-galleries/slider-gallery/tests/SliderGallery.spec.ts +102 -23
  370. package/app/components/03.organisms/image-galleries/slider-gallery/tests/__snapshots__/SliderGallery.spec.ts.snap +44 -44
  371. package/app/components/03.organisms/responsive-header/CONSUMER-STYLING.md +12 -1
  372. package/app/components/03.organisms/responsive-header/ResponsiveHeader.vue +0 -4
  373. package/app/components/03.organisms/services/service-detail/CONSUMER-STYLING.md +24 -3
  374. package/app/components/03.organisms/services/service-detail/ServiceDetail.vue +3 -3
  375. package/app/components/03.organisms/services/service-detail/stories/ServiceDetail.stories.ts +13 -13
  376. package/app/components/03.organisms/services/service-detail/tests/__snapshots__/ServiceDetail.spec.ts.snap +1 -1
  377. package/app/components/03.organisms/services/service-summary/CONSUMER-STYLING.md +24 -7
  378. package/app/components/03.organisms/services/service-summary/ServiceSummary.vue +3 -3
  379. package/app/components/03.organisms/services/service-summary/stories/ServiceSummary.stories.ts +1 -1
  380. package/app/components/03.organisms/services/service-summary/tests/__snapshots__/ServiceSummary.spec.ts.snap +1 -1
  381. package/app/components/03.organisms/services/services-card/CONSUMER-STYLING.md +11 -2
  382. package/app/components/03.organisms/services/services-card/ServicesCard.vue +17 -26
  383. package/app/components/03.organisms/services/services-card/tests/ServicesCard.spec.ts +21 -0
  384. package/app/components/03.organisms/services/services-grids/CONSUMER-STYLING.md +50 -0
  385. package/app/components/03.organisms/services/services-grids/ServicesCardGrid.vue +9 -16
  386. package/app/components/03.organisms/services/services-grids/stories/ServicesCardGrid.stories.ts +6 -0
  387. package/app/components/03.organisms/services/services-grids/tests/ServicesCardGrid.spec.ts +18 -0
  388. package/app/components/03.organisms/services/services-grids/tests/__snapshots__/ServiceSummaryGrid.spec.ts.snap +3 -3
  389. package/app/components/03.organisms/services/services-grids/tests/__snapshots__/ServicesCardGrid.spec.ts.snap +3 -3
  390. package/app/components/03.organisms/site-header/CONSUMER-STYLING.md +12 -1
  391. package/app/components/04.templates/page-hero-highlights/CONSUMER-STYLING.md +103 -0
  392. package/app/components/04.templates/page-hero-highlights/PageHeroHighlights.vue +144 -193
  393. package/app/components/04.templates/page-hero-highlights/PageHeroHighlightsHeader.vue +27 -37
  394. package/app/components/04.templates/page-hero-highlights/stories/PageHeroHighlights.stories.ts +56 -60
  395. package/app/components/04.templates/page-hero-highlights/stories/PageHeroHighlightsHeader.stories.ts +2 -2
  396. package/app/components/04.templates/page-hero-highlights/tests/PageHeroHighlights.spec.ts +10 -10
  397. package/app/components/04.templates/page-hero-highlights/tests/PageHeroHighlightsHeader.spec.ts +7 -7
  398. package/app/components/04.templates/page-hero-highlights/tests/__snapshots__/PageHeroHighlights.spec.ts.snap +6 -6
  399. package/app/components/05.forms/form-errors/CONSUMER-STYLING.md +112 -0
  400. package/app/components/05.forms/form-errors/InputError.vue +101 -122
  401. package/app/components/05.forms/form-errors/stories/InputError.stories.ts +125 -0
  402. package/app/components/05.forms/form-errors/tests/InputError.spec.ts +82 -31
  403. package/app/components/05.forms/form-field/CONSUMER-STYLING.md +91 -0
  404. package/app/components/05.forms/form-field/FormField.vue +26 -35
  405. package/app/components/05.forms/form-field/stories/FormField.stories.ts +104 -0
  406. package/app/components/05.forms/form-field/tests/FormField.spec.ts +75 -0
  407. package/app/components/05.forms/form-fieldset/CONSUMER-STYLING.md +88 -0
  408. package/app/components/05.forms/form-fieldset/FormFieldset.vue +34 -28
  409. package/app/components/05.forms/form-fieldset/stories/FormFieldset.stories.ts +84 -0
  410. package/app/components/05.forms/form-fieldset/tests/FormFieldset.spec.ts +111 -0
  411. package/app/components/05.forms/form-wrapper/CONSUMER-STYLING.md +101 -0
  412. package/app/components/05.forms/form-wrapper/FormWrapper.vue +32 -15
  413. package/app/components/05.forms/form-wrapper/stories/FormWrapper.stories.ts +75 -0
  414. package/app/components/05.forms/form-wrapper/tests/FormWrapper.spec.ts +57 -0
  415. package/app/components/05.forms/input-button/CONSUMER-STYLING.md +52 -7
  416. package/app/components/05.forms/input-button/{InputButtonCore.vue → InputButton.vue} +60 -18
  417. package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts → input-button.playwright.ts} +5 -5
  418. package/app/components/05.forms/input-button/stories/{InputButtonCore.stories.ts → InputButton.stories.ts} +8 -10
  419. package/app/components/05.forms/input-button/tests/{InputButtonCore.spec.ts → InputButton.spec.ts} +75 -19
  420. package/app/components/05.forms/input-button/tests/__snapshots__/{InputButtonCore.spec.ts.snap → InputButton.spec.ts.snap} +18 -18
  421. package/app/components/05.forms/input-checkbox/CONSUMER-STYLING.md +93 -0
  422. package/app/components/05.forms/input-checkbox/MultipleCheckboxes.vue +19 -25
  423. package/app/components/05.forms/input-checkbox/SingleCheckbox.vue +17 -43
  424. package/app/components/05.forms/input-checkbox/stories/MultipleCheckboxes.stories.ts +104 -0
  425. package/app/components/05.forms/input-checkbox/stories/SingleCheckbox.stories.ts +75 -0
  426. package/app/components/05.forms/input-checkbox/tests/MultipleCheckboxes.spec.ts +91 -53
  427. package/app/components/05.forms/input-checkbox/tests/SingleCheckbox.spec.ts +112 -0
  428. package/app/components/05.forms/input-checkbox-radio/CONSUMER-STYLING.md +115 -35
  429. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadio.vue +158 -0
  430. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioButton.vue +102 -101
  431. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioField.vue +100 -0
  432. package/app/components/05.forms/input-checkbox-radio/stories/{InputCheckboxRadioCore.stories.ts → InputCheckboxRadio.stories.ts} +23 -8
  433. package/app/components/05.forms/input-checkbox-radio/stories/InputCheckboxRadioButton.stories.ts +60 -16
  434. package/app/components/05.forms/input-checkbox-radio/stories/InputCheckboxRadioField.stories.ts +93 -0
  435. package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadio.spec.ts +174 -0
  436. package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadioButton.spec.ts +87 -0
  437. package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadioField.spec.ts +87 -0
  438. package/app/components/05.forms/input-description/CONSUMER-STYLING.md +177 -0
  439. package/app/components/05.forms/input-description/InputDescription.vue +45 -24
  440. package/app/components/05.forms/input-description/stories/InputDescription.stories.ts +160 -0
  441. package/app/components/05.forms/input-description/tests/InputDescription.spec.ts +62 -386
  442. package/app/components/05.forms/input-label/CONSUMER-STYLING.md +134 -0
  443. package/app/components/05.forms/input-label/InputLabel.vue +99 -38
  444. package/app/components/05.forms/input-label/stories/InputLabel.stories.ts +236 -0
  445. package/app/components/05.forms/input-label/tests/InputLabel.spec.ts +113 -342
  446. package/app/components/05.forms/input-number/CONSUMER-STYLING.md +16 -7
  447. package/app/components/05.forms/input-number/{InputNumberCore.vue → InputNumber.vue} +6 -6
  448. package/app/components/05.forms/input-number/{variants/InputNumberDefault.vue → InputNumberField.vue} +12 -15
  449. package/app/components/05.forms/input-number/stories/{InputNumberCore.stories.ts → InputNumber.stories.ts} +6 -6
  450. package/app/components/05.forms/input-number/{variants/stories/InputNumberDefault.stories.ts → stories/InputNumberField.stories.ts} +5 -5
  451. package/app/components/05.forms/input-number/tests/{InputNumberCore.spec.ts → InputNumber.spec.ts} +2 -2
  452. package/app/components/05.forms/input-number/{variants/tests/InputNumberDefault.spec.ts → tests/InputNumberField.spec.ts} +8 -8
  453. package/app/components/05.forms/input-radio/CONSUMER-STYLING.md +70 -0
  454. package/app/components/05.forms/input-radio/MultipleRadiobuttons.vue +19 -30
  455. package/app/components/05.forms/input-radio/stories/MultipleRadiobuttons.stories.ts +116 -0
  456. package/app/components/05.forms/input-radio/tests/MultipleRadioButtons.spec.ts +125 -74
  457. package/app/components/05.forms/input-range/CONSUMER-STYLING.md +13 -0
  458. package/app/components/05.forms/input-range/InputRangeCore.vue +1 -1
  459. package/app/components/05.forms/input-range/{variants/InputRangeDefault.vue → InputRangeDefault.vue} +7 -11
  460. package/app/components/05.forms/input-range/{variants/tests → tests}/InputRangeDefault.spec.ts +1 -1
  461. package/app/components/05.forms/input-select/CONSUMER-STYLING.md +11 -2
  462. package/app/components/05.forms/input-select/{variants/InputSelectWithLabel.vue → InputSelectWithLabel.vue} +6 -9
  463. package/app/components/05.forms/input-select/stories/InputSelectWithLabel.stories.ts +1 -1
  464. package/app/components/05.forms/input-text/CONSUMER-STYLING.md +12 -3
  465. package/app/components/05.forms/input-text/{variants/InputPasswordWithLabel.vue → InputPasswordWithLabel.vue} +3 -3
  466. package/app/components/05.forms/input-text/{variants/InputTextAsNumberWithLabel.vue → InputTextAsNumberWithLabel.vue} +12 -15
  467. package/app/components/05.forms/input-text/InputTextCore.vue +8 -11
  468. package/app/components/05.forms/input-text/{variants/InputTextWithLabel.vue → InputTextWithLabel.vue} +9 -10
  469. package/app/components/05.forms/input-text/stories/InputPasswordWithLabel.stories.ts +1 -1
  470. package/app/components/05.forms/input-text/stories/InputTextAsNumberWithLabel.stories.ts +1 -1
  471. package/app/components/05.forms/input-text/stories/InputTextWithLabel.stories.ts +1 -1
  472. package/app/components/05.forms/input-text/tests/InputPasswordWithLabel.spec.ts +2 -1
  473. package/app/components/05.forms/input-text/tests/InputTextAsNumberWithLabel.spec.ts +1 -1
  474. package/app/components/05.forms/input-text/tests/InputTextWithLabel.spec.ts +2 -1
  475. package/app/components/05.forms/input-textarea/CONSUMER-STYLING.md +11 -2
  476. package/app/components/05.forms/input-textarea/{variants/InputTextareaWithLabel.vue → InputTextareaWithLabel.vue} +3 -7
  477. package/app/components/05.forms/input-textarea/stories/InputTextareaWithLabel.stories.ts +1 -1
  478. package/app/components/05.forms/patterns/stories/ContactForm.stories.ts +9 -10
  479. package/app/components/05.forms/patterns/stories/LoginForm.stories.ts +10 -10
  480. package/app/components/05.forms/patterns/stories/MigratedFieldsForm.stories.ts +246 -101
  481. package/app/components/05.forms/pending-effect/CONSUMER-STYLING.md +92 -0
  482. package/app/components/05.forms/pending-effect/PendingEffect.vue +52 -45
  483. package/app/components/05.forms/pending-effect/stories/PendingEffect.stories.ts +132 -0
  484. package/app/components/05.forms/pending-effect/tests/PendingEffect.spec.ts +67 -0
  485. package/app/components/05.forms/toggle-switch/CONSUMER-STYLING.md +11 -2
  486. package/app/components/05.forms/toggle-switch/ToggleSwitchCore.vue +10 -29
  487. package/app/components/05.forms/toggle-switch/{variants/ToggleSwitchWithLabel.vue → ToggleSwitchWithLabel.vue} +5 -7
  488. package/app/components/05.forms/toggle-switch/{variants/ToggleSwitchWithLabelInline.vue → ToggleSwitchWithLabelInline.vue} +2 -4
  489. package/app/components/05.forms/toggle-switch/stories/ToggleSwitchWithLabel.stories.ts +1 -1
  490. package/app/components/05.forms/toggle-switch/stories/ToggleSwitchWithLabelInline.stories.ts +4 -1
  491. package/app/components/05.forms/toggle-switch/{variants/tests → tests}/ToggleSwitchWithLabel.spec.ts +26 -0
  492. package/app/components/05.forms/triple-toggle-switch/CONSUMER-STYLING.md +75 -62
  493. package/app/components/05.forms/triple-toggle-switch/TripleToggleSwitch.vue +243 -0
  494. package/app/components/05.forms/triple-toggle-switch/stories/TripleToggleSwitch.stories.ts +104 -0
  495. package/app/components/05.forms/triple-toggle-switch/tests/TripleToggleSwitch.spec.ts +138 -0
  496. package/app/composables/tests/useCancellableTimer.spec.ts +48 -0
  497. package/app/composables/tests/useMaxChildWidth.spec.ts +67 -0
  498. package/app/composables/useCancellableTimer.ts +27 -7
  499. package/app/composables/useMaxChildWidth.ts +4 -6
  500. package/app/types/app-config.d.ts +10 -0
  501. package/app/types/components/cookie-consent-banner.d.ts +3 -0
  502. package/app/types/components/index.ts +6 -1
  503. package/app/types/components/opening-hours.d.ts +48 -0
  504. package/app/types/components/price-list.d.ts +11 -0
  505. package/app/types/components/profile-section.d.ts +6 -0
  506. package/app/types/components/samaritan-prompt.d.ts +13 -0
  507. package/app/types/components/services-card.d.ts +9 -0
  508. package/app/types/components/slider-gallery.d.ts +2 -0
  509. package/app/types/components/social-icons-list.d.ts +2 -0
  510. package/app/types/forms/types.forms.d.ts +3 -0
  511. package/app/types/forms/types.zodFormControl.d.ts +0 -3
  512. package/app/utils/opening-hours.ts +44 -0
  513. package/nuxt.config.ts +5 -1
  514. package/package.json +2 -2
  515. package/ramps.config.mjs +1 -1
  516. package/.claude/commands/create-commit-message.md +0 -13
  517. package/.claude/commands/create-release-notes.md +0 -34
  518. package/.claude/commands/migrate-component.md +0 -169
  519. package/.claude/commands/run-commit.md +0 -13
  520. package/.claude/component-ledger/artifact-url.txt +0 -1
  521. package/.claude/component-ledger/audit.json +0 -1
  522. package/.claude/component-ledger/build.mjs +0 -164
  523. package/.claude/component-ledger/output.html +0 -569
  524. package/.claude/component-ledger/template.html +0 -569
  525. package/.claude/hooks/check-component-update.sh +0 -95
  526. package/.claude/hooks/refresh-component-ledger.sh +0 -32
  527. package/.claude/settings.json +0 -134
  528. package/.claude/settings.local.json +0 -38
  529. package/.claude/skills/components/alert-content-inner.md +0 -60
  530. package/.claude/skills/components/navigation-horizontal.md +0 -99
  531. package/.claude/skills/components/samaritan-prompt-mixed.md +0 -139
  532. package/app/components/01.atoms/content-wrappers/content-columns-2/ContentColumns2.vue +0 -51
  533. package/app/components/01.atoms/content-wrappers/content-columns-2/stories/ContentColumns2.stories.ts +0 -110
  534. package/app/components/01.atoms/content-wrappers/content-columns-2/tests/ContentColumns2.spec.ts +0 -105
  535. package/app/components/01.atoms/content-wrappers/content-columns-2/tests/__snapshots__/ContentColumns2.spec.ts.snap +0 -14
  536. package/app/components/01.atoms/content-wrappers/content-width/ContentWidth.vue +0 -88
  537. package/app/components/01.atoms/content-wrappers/content-width/stories/ContentWidth.stories.ts +0 -362
  538. package/app/components/01.atoms/content-wrappers/content-width/tests/ContentWidth.spec.ts +0 -132
  539. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/tests/__snapshots__/LayoutGrid.spec.ts.snap +0 -36
  540. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/LayoutGridByWidth.vue +0 -70
  541. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/stories/LayoutGridByWidth.stories.ts +0 -220
  542. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/LayoutGridByWidth.spec.ts +0 -174
  543. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/__snapshots__/LayoutGrid.spec.ts.snap +0 -36
  544. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/__snapshots__/LayoutGridByCols.spec.ts.snap +0 -36
  545. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/__snapshots__/LayoutGridByWidth.spec.ts.snap +0 -36
  546. package/app/components/01.atoms/cookie-consent-banner/CookieConsentBanner.vue +0 -148
  547. package/app/components/01.atoms/display-avatar/DisplayAvatar.vue +0 -130
  548. package/app/components/01.atoms/display-avatar/tests/__snapshots__/DisplayAvatar.spec.ts.snap +0 -11
  549. package/app/components/02.molecules/action-menu/tests/__snapshots__/ActionMenuItemCore.spec.ts.snap +0 -27
  550. package/app/components/02.molecules/navigation/navigation-horizontal/NavigationHorizontal.vue +0 -162
  551. package/app/components/02.molecules/navigation/navigation-horizontal/stories/NavigationHorizontal.stories.ts +0 -373
  552. package/app/components/02.molecules/navigation/navigation-horizontal/tests/NavigationHorizontal.spec.ts +0 -152
  553. package/app/components/02.molecules/navigation/navigation-horizontal/tests/__snapshots__/NavigationHorizontal.spec.ts.snap +0 -17
  554. package/app/components/02.molecules/qr-code/stories/QrCode.stories.ts +0 -101
  555. package/app/components/03.organisms/colour-finder/ColourFinder.vue +0 -1519
  556. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioCore.vue +0 -202
  557. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioWithLabel.vue +0 -105
  558. package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadioCore.spec.ts +0 -320
  559. package/app/components/05.forms/triple-toggle-switch/TripleToggleSwitchCore.vue +0 -314
  560. package/app/components/05.forms/triple-toggle-switch/stories/TripleToggleSwitchCore.stories.ts +0 -63
  561. package/.vscode/{srcdev-component-dialog.code-snippets → srcdev-component-display-dialog.code-snippets} +0 -0
  562. package/app/components/{01.atoms → 02.molecules}/toast/tests/DisplayToast.spec.ts +1 -1
  563. /package/app/components/{01.atoms → 02.molecules}/toast/tests/DisplayToastProvider.spec.ts +0 -0
  564. /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
  565. /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
  566. /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
  567. /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
  568. /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
  569. /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
  570. /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
  571. /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
  572. /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
  573. /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
  574. /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
  575. /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
  576. /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
  577. /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
  578. /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
  579. /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
  580. /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
  581. /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
  582. /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
  583. /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
  584. /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
  585. /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
  586. /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
  587. /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
  588. /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
  589. /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
  590. /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
  591. /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
  592. /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
  593. /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
  594. /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
  595. /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
  596. /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
  597. /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
  598. /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
  599. /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
  600. /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
  601. /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
  602. /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
  603. /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
  604. /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
  605. /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
  606. /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
  607. /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
  608. /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
  609. /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
  610. /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
  611. /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
  612. /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
  613. /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
  614. /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
  615. /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
  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-firefox-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-webkit-darwin.png +0 -0
  618. /package/app/components/05.forms/input-range/{variants/stories → stories}/InputRangeDefault.stories.ts +0 -0
  619. /package/app/components/05.forms/input-select/{variants/tests → tests}/InputSelectWithLabel.spec.ts +0 -0
  620. /package/app/components/05.forms/input-textarea/{variants/tests → tests}/InputTextareaWithLabel.spec.ts +0 -0
  621. /package/app/components/05.forms/toggle-switch/{variants/tests → tests}/ToggleSwitchWithLabelInline.spec.ts +0 -0
  622. /package/app/types/components/{navigation-horizontal.d.ts → nav-item.d.ts} +0 -0
@@ -4,6 +4,8 @@ QR code decoder for static images. Accepts images via file picker or drag-and-dr
4
4
 
5
5
  **File**: `app/components/02.molecules/qr-code/DecodeQrCode.vue`
6
6
 
7
+ > **Changed 2026-09-28:** `.qr-code-capture`, `.qr-code-dropzone`, `.scanned-results` → `.decode-qr-code-capture`, `-dropzone`, `-results`. The file input now has a visible label and the drop zone instruction text (both props); the root is no longer forced to `aspect-ratio: 1 / 1`.
8
+
7
9
  ## Prerequisites
8
10
 
9
11
  The `nuxt-qrcode` Nuxt module must be registered in the consuming app's `nuxt.config.ts`:
@@ -21,6 +23,8 @@ No camera permission is required — this component works entirely with uploaded
21
23
 
22
24
  | Prop | Type | Default | Description |
23
25
  |------|------|---------|-------------|
26
+ | `upload-label` | `string` | `"Upload a QR code image"` | Visible label wrapping the file input (its accessible name) |
27
+ | `drop-label` | `string` | `"Or drop a QR code image here"` | Instruction text inside the drop zone |
24
28
  | `style-class-passthrough` | `string \| string[]` | `[]` | Extra classes on the root element |
25
29
 
26
30
  ## CSS classes
@@ -28,17 +32,19 @@ No camera permission is required — this component works entirely with uploaded
28
32
  | Class | Where | Description |
29
33
  |-------|-------|-------------|
30
34
  | `.decode-qr-code` | root | always present |
31
- | `.qr-code-capture` | file input | the `QrcodeCapture` file-picker element |
32
- | `.qr-code-dropzone` | drop zone | the `QrcodeDropZone` drag-and-drop area |
33
- | `.scanned-results` | inner | shown when at least one code has been decoded |
35
+ | `.decode-qr-code-capture` | file input | the `QrcodeCapture` file-picker element |
36
+ | `.decode-qr-code-dropzone` | drop zone | the `QrcodeDropZone` drag-and-drop area |
37
+ | `.decode-qr-code-upload` | label | wraps `.decode-qr-code-upload-label` and the file input |
38
+ | `.decode-qr-code-dropzone.is-dropping` | drop zone | an image is being dragged over it |
39
+ | `.decode-qr-code-results` | inner | polite live region, always rendered; its `<ul>` appears once a code is decoded |
34
40
 
35
41
  ## Behaviour
36
42
 
37
- - Two input methods are rendered side by side: a file picker (`.qr-code-capture`) and a drag-and-drop zone (`.qr-code-dropzone`)
38
- - Both share the same `onDetect` handler — results are displayed in the same `.scanned-results` list regardless of input method
43
+ - Two input methods are rendered side by side: a file picker (`.decode-qr-code-capture`) and a drag-and-drop zone (`.decode-qr-code-dropzone`)
44
+ - Both share the same `onDetect` handler — results are displayed in the same `.decode-qr-code-results` list regardless of input method
39
45
  - Detected QR codes replace the previous results — each decode is a fresh result set
40
- - If the decoded array is empty, `.scanned-results` is hidden
41
- - The drop zone has a dashed border and minimum height by default — style with `.qr-code-dropzone` to customise
46
+ - If the decoded array is empty, the results `<ul>` isn't rendered (the live-region wrapper stays)
47
+ - The drop zone has a dashed border and minimum height by default — style with `.decode-qr-code-dropzone` to customise
42
48
 
43
49
  ## Usage
44
50
 
@@ -63,7 +69,7 @@ With styling:
63
69
  gap: 1.6rem;
64
70
  }
65
71
 
66
- .my-decoder .qr-code-dropzone {
72
+ .my-decoder .decode-qr-code-dropzone {
67
73
  min-height: 12rem;
68
74
  border-radius: 1rem;
69
75
  border-color: var(--theme-input-border);
@@ -72,7 +78,7 @@ With styling:
72
78
  justify-content: center;
73
79
  }
74
80
 
75
- .my-decoder .scanned-results {
81
+ .my-decoder .decode-qr-code-results {
76
82
  margin-block-start: 1.6rem;
77
83
  font-size: 1.4rem;
78
84
  }
@@ -24,11 +24,13 @@
24
24
 
25
25
  | Size | Diameter | Font size |
26
26
  | ---- | -------- | --------- |
27
- | `xs` | 24px | 0.75rem |
28
- | `s` | 32px | 0.875rem |
29
- | `md` | 40px | 1rem |
30
- | `lg` | 48px | 1.125rem |
31
- | `xl` | 56px | 1.25rem |
27
+ | `xs` | 2.4rem (24px) | 1.2rem (12px) |
28
+ | `s` | 3.2rem (32px) | 1.4rem (14px) |
29
+ | `md` | 4rem (40px) | 1.6rem (16px) |
30
+ | `lg` | 4.8rem (48px) | 1.8rem (18px) |
31
+ | `xl` | 5.6rem (56px) | 2rem (20px) |
32
+
33
+ Each step is a token (`--display-avatar-size-md`, `--display-avatar-font-size-md`, ...), and `--display-avatar-size`/`--display-avatar-font-size` override the scale for one avatar or an area. A custom `size` string renders at `md` unless you set `--display-avatar-size`. Full list in `CONSUMER-STYLING.md`.
32
34
 
33
35
  ---
34
36
 
@@ -49,6 +51,10 @@ When `src` is not set, a `<span>` renders the fallback value:
49
51
  2. `alt` initials — first character of each word, capped at two characters.
50
52
  3. Empty string — if neither is set.
51
53
 
54
+ When `alt` is set, the initials are `aria-hidden` and the full `alt` is rendered as `sr-only` text, so a screen reader announces "Jane Smith" rather than "J S". With only `text`, the text is read as-is.
55
+
56
+ With `src`, the image uses `alt`, or an empty (decorative) `alt` when none is given. Pass `alt` unless the name is already visible next to the avatar.
57
+
52
58
  ```
53
59
  alt="John Doe" → "JD"
54
60
  alt="Alice" → "A"
@@ -134,7 +140,7 @@ interface DisplayChipConfig {
134
140
  ```vue
135
141
  <DisplayAvatar size="xl">
136
142
  <template #default>
137
- <img src="/images/profile.jpg" alt="Jane Smith" class="avatar-image" />
143
+ <img src="/images/profile.jpg" alt="Jane Smith" class="display-avatar-image" />
138
144
  </template>
139
145
  </DisplayAvatar>
140
146
  ```
@@ -144,38 +150,16 @@ interface DisplayChipConfig {
144
150
  ```vue
145
151
  <DisplayAvatar alt="Jane Smith">
146
152
  <template #icon>
147
- <Icon name="bi:check-circle-fill" class="avatar-icon" />
153
+ <Icon name="bi:check-circle-fill" class="display-avatar-icon" />
148
154
  </template>
149
155
  </DisplayAvatar>
150
156
  ```
151
157
 
152
158
  ---
153
159
 
154
- ## Local style override scaffold
155
-
156
- ```vue
157
- <DisplayAvatar
158
- alt="Jane Smith"
159
- :style-class-passthrough="['profile-avatar']"
160
- />
161
-
162
- <style>
163
- /* ─── DisplayAvatar local overrides ────────────────────────────────
164
- Scope by your wrapper class, then nest .display-avatar directly.
165
- No :deep() needed (component styles are unscoped).
166
- Delete this block if no overrides are needed.
167
- ─────────────────────────────────────────────────────────────────── */
168
- .my-page-section {
169
- .display-avatar {
170
- &.profile-avatar {
171
- /* custom overrides */
172
- }
173
- }
174
- }
175
- </style>
176
- ```
160
+ ## Styling
177
161
 
178
- See [component-local-style-override.md](../component-local-style-override.md) for the full pattern.
162
+ Tokens for size, background, text colour, radius and icon size are in `CONSUMER-STYLING.md` next to the component; overrides follow [component-local-style-override.md](../component-local-style-override.md). Give an icon in the `#icon` slot the `display-avatar-icon` class to size it with `--display-avatar-icon-size`.
179
163
 
180
164
  ---
181
165
 
@@ -185,3 +169,4 @@ See [component-local-style-override.md](../component-local-style-override.md) fo
185
169
  - When `chip` is set, the root element becomes `DisplayChip` and the `as` prop is ignored.
186
170
  - `class` and `style` are **not** declared as explicit props — they fall through to the root element automatically via Vue's attribute inheritance (`inheritAttrs: true`). Do not re-add them as props; doing so pulls them out of `$attrs` and breaks automatic inheritance.
187
171
  - `NuxtImg` is used for the image, so `@nuxt/image` must be installed in the consuming app.
172
+ - 2026-09-27 migration: moved from `01.atoms` to `02.molecules` (it composes `DisplayChip`). Font sizes fixed (they were 16px-root rem values, rendering at 7.5–12.5px here); sizes and colours are now public tokens, with a `--theme-*` background and text colour instead of no background and faint `--slate-03` text. The hardcoded English `"Avatar"` alt fallback became an empty (decorative) alt, and initials now announce the full `alt`. Classes `.avatar-image`/`.avatar-icon` became `.display-avatar-image`/`.display-avatar-icon`. A stray `style-class-passthrough` attribute is no longer rendered on a native root, and the chip config now reacts to prop changes.
@@ -1,5 +1,7 @@
1
1
  # DisplayChip Component
2
2
 
3
+ > **Renamed 2026-09-27:** root class `.display-chip-core` → `.display-chip`. Status colours are now public tokens (`--display-chip-colour-*`, were unprefixed `--color-*`); the geometry vars fed from `config` are private (`--_chip-*`).
4
+
3
5
  ## Overview
4
6
 
5
7
  `DisplayChip` renders a small status indicator dot (or icon/label badge) that is absolutely positioned on a parent element using CSS trigonometric functions. It works by applying a radial-gradient mask to the parent's content, creating a clean cutout behind the chip. Supports circle and square parent shapes.
@@ -53,12 +55,15 @@ Default config: `{ size: "12px", maskWidth: "4px", offset: "0px", angle: "90deg"
53
55
 
54
56
  Apply status via `styleClassPassthrough` — the component has built-in colour variants:
55
57
 
56
- | Class | Colour |
57
- | ---------- | ----------------------- |
58
- | (none) | `slategrey` (offline) |
59
- | `online` | `rgb(0, 255, 135)` |
60
- | `idle` | `rgb(255, 185, 51)` |
61
- | `dnd` | `rgb(255, 40, 80)` |
58
+ | Class | Token | Default |
59
+ | --- | --- | --- |
60
+ | (none) | `--display-chip-colour-offline` | `slategrey` |
61
+ | `online` | `--display-chip-colour-online` | `rgb(0, 255, 135)` |
62
+ | `idle` | `--display-chip-colour-idle` | `rgb(255, 185, 51)` |
63
+ | `dnd` | `--display-chip-colour-dnd` | `rgb(255, 40, 80)` |
64
+
65
+ Icon and label colour: `--display-chip-text-colour` (default `black`). Full reference:
66
+ `app/components/02.molecules/display-chip/CONSUMER-STYLING.md`.
62
67
 
63
68
  ```vue
64
69
  <DisplayChip :style-class-passthrough="['online']">...</DisplayChip>
@@ -186,15 +191,15 @@ See [display-avatar.md](./display-avatar.md) for the full API.
186
191
 
187
192
  <style>
188
193
  /* ─── DisplayChip local overrides ──────────────────────────────────
189
- Scope by your wrapper class, then nest .display-chip-core directly.
194
+ Scope by your wrapper class, then nest .display-chip directly.
190
195
  No :deep() needed (component styles are unscoped).
191
196
  Delete this block if no overrides are needed.
192
197
  ─────────────────────────────────────────────────────────────────── */
193
198
  .my-page-section {
194
- .display-chip-core {
199
+ .display-chip {
195
200
  &.my-chip {
196
201
  /* override colour vars, e.g. */
197
- --color-online: hotpink;
202
+ --display-chip-colour-online: hotpink;
198
203
  }
199
204
  }
200
205
  }
@@ -209,5 +214,5 @@ See [display-avatar.md](./display-avatar.md) for the full API.
209
214
  - `shape` must match the actual shape of the slot content — the position maths differs between `circle` (radius-based) and `square` (clamped corner-aware).
210
215
  - `config` values are geometric inputs to CSS `calc(cos())` / `calc(sin())` expressions. Pass them as strings with units (`"12px"`, `"45deg"`), not plain numbers.
211
216
  - The chip dot is rendered via `::after` pseudo-element; icon and label sit above it at `z-index: 2`.
212
- - The mask cutout is applied to all direct children of `.display-chip-core` except `.chip-icon` and `.chip-label` — ensure the host element is a direct child.
217
+ - The mask cutout is applied to all direct children of `.display-chip` except `.chip-icon` and `.chip-label` — ensure the host element is a direct child.
213
218
  - `DisplayChipConfig` and `DisplayChipProps` are both exported from the layer types. Use `DisplayChipConfig` when passing geometry values (the `config` prop). Use `DisplayChipProps` only if you need to pass the full component prop set (e.g. when building a wrapper component).
@@ -21,6 +21,7 @@ open/close state management.
21
21
  | `justifyDialog` | `'start' \| 'center' \| 'end'` | `'center'` | Horizontal position of panel within overlay. |
22
22
  | `alignDialog` | `'start' \| 'center' \| 'end'` | `'center'` | Vertical position of panel within overlay. |
23
23
  | `closeIcon` | `string` | app.config | Icon name for the header close button. Override per-instance or set globally via `app.config`. |
24
+ | `closeLabel` | `string` | app.config (`"Close"`) | Screen-reader text on the icon-only close button. Pass a translated string, or set it site-wide via `app.config`. |
24
25
  | `styleClassPassthrough` | `string \| string[]` | `[]` | Extra classes applied to the root `<dialog>` element. |
25
26
 
26
27
  ## Slots
@@ -120,6 +121,7 @@ export default defineAppConfig({
120
121
  alignDialog: "end",
121
122
  lockViewport: true,
122
123
  closeIcon: "heroicons:x-mark",
124
+ closeLabel: "Fermer",
123
125
  theme: "info",
124
126
  },
125
127
  },
@@ -130,7 +132,7 @@ Per-instance props always win — app.config only fills in when a prop is absent
130
132
 
131
133
  ## CSS token API
132
134
 
133
- See `CONSUMER-STYLING.md` in the component folder for the full token reference. Prefer global
135
+ See `CONSUMER-STYLING.md` in the component folder for the full token reference. The four `--display-dialog-inner-*` panel tokens resolve on `.display-dialog-inner` (since 2026-09-27), so they can be set per variant (`.display-dialog-inner.alert { ... }`); `fullscreen` ignores radius/border/outline. Colour defaults use `--colour-text-default` / `--page-bg`, not `light-dark()`. Prefer global
134
136
  CSS over per-instance overrides — dialogs are site-wide UI:
135
137
 
136
138
  ```css
@@ -8,8 +8,8 @@ A classic pill/badge component for displaying status labels, tags, or metadata.
8
8
 
9
9
  | Prop | Type | Default | Description |
10
10
  |------|------|---------|-------------|
11
- | `tag` | `"span" \| "div" \| "button" \| "a"` | `"span"` | Root element. Use `"button"` or `"a"` for interactive pills — cursor auto-switches to pointer |
12
- | `label` | `string` | `undefined` | Pill text. When set, renders inside `.pill-label` and suppresses the default slot |
11
+ | `tag` | `"span" \| "div" \| "button" \| "a"` | `"span"` | Root element. Use `"button"` or `"a"` for interactive pills: cursor switches to pointer and a `:focus-visible` outline is shown. A `button` gets `type="button"`; pass `href` (falls through) for an `a`. |
12
+ | `label` | `string` | `undefined` | Pill text. When set, renders inside `.display-pill-label` and suppresses the default slot |
13
13
  | `size` | `"sm" \| "md" \| "lg"` | `"md"` | Size variant |
14
14
  | `variant` | `"default" \| "primary" \| "success" \| "warning" \| "danger" \| "neutral"` | `"default"` | Colour variant |
15
15
  | `reversed` | `boolean` | `false` | Reverses icon/label order (`flex-direction: row-reverse`) |
@@ -19,7 +19,7 @@ A classic pill/badge component for displaying status labels, tags, or metadata.
19
19
 
20
20
  | Slot | Description |
21
21
  |------|-------------|
22
- | `icon` | Icon content — rendered before the label by default, after when `reversed=true` |
22
+ | `icon` | Icon content, wrapped in `.display-pill-icon` (sized by `--display-pill-icon-size`) — rendered before the label by default, after when `reversed=true` |
23
23
  | `default` | Custom label content — only used when the `label` prop is not set |
24
24
 
25
25
  ## Basic usage
@@ -67,57 +67,9 @@ When `label` is not set, the default slot is rendered instead:
67
67
 
68
68
  ## CSS token API
69
69
 
70
- All tokens follow the `--theme-pill-*` convention and fall back to project colour tokens.
71
-
72
- ### Colour
73
-
74
- | Token | Default |
75
- |-------|---------|
76
- | `--theme-pill-bg` | `var(--slate-01)` |
77
- | `--theme-pill-color` | `var(--slate-09)` |
78
- | `--theme-pill-primary-bg` | `var(--blue-01)` |
79
- | `--theme-pill-primary-color` | `var(--blue-09)` |
80
- | `--theme-pill-success-bg` | `var(--green-01)` |
81
- | `--theme-pill-success-color` | `var(--green-10)` |
82
- | `--theme-pill-warning-bg` | `var(--yellow-08, #fef9c3)` |
83
- | `--theme-pill-warning-color` | `var(--yellow-03, #a16207)` |
84
- | `--theme-pill-danger-bg` | `var(--red-01)` |
85
- | `--theme-pill-danger-color` | `var(--red-10)` |
86
- | `--theme-pill-neutral-bg` | `var(--slate-08)` |
87
- | `--theme-pill-neutral-color` | `var(--slate-03)` |
88
-
89
- ### Border
90
-
91
- | Token | Default |
92
- |-------|---------|
93
- | `--theme-pill-border-color` | `transparent` |
94
- | `--theme-pill-border-width` | `1px` |
95
- | `--theme-pill-border-style` | `solid` |
96
- | `--theme-pill-border-radius` | `100vw` |
97
-
98
- ### Outline
99
-
100
- | Token | Default |
101
- |-------|---------|
102
- | `--theme-pill-outline` | `none` |
103
- | `--theme-pill-outline-offset` | `0px` |
104
-
105
- ### Typography & spacing
106
-
107
- | Token | Default |
108
- |-------|---------|
109
- | `--theme-pill-font-size` | `1.2rem` |
110
- | `--theme-pill-font-size-sm` | `1rem` |
111
- | `--theme-pill-font-size-lg` | `1.4rem` |
112
- | `--theme-pill-font-weight` | `500` |
113
- | `--theme-pill-padding-x` | `1rem` |
114
- | `--theme-pill-padding-y` | `0.4rem` |
115
- | `--theme-pill-gap` | `0.5rem` |
116
- | `--theme-pill-icon-size` | `1.4rem` |
117
-
118
- ## Theming via styleClassPassthrough
119
-
120
- Override tokens by targeting `.your-class.display-pill` — no `:deep()` needed:
70
+ Full token list in `CONSUMER-STYLING.md` next to the component. All tokens are `--display-pill-*` (renamed from `--theme-pill-*` on 2026-09-27; `bg`/`color` became `background`/`text-colour`).
71
+
72
+ Colour resolves as **variant token → base token → variant default**: `--display-pill-background`/`-text-colour` restyle every variant; `--display-pill-success-background` etc. win for that variant only. Sizes have `-sm`/`-lg` suffixed tokens for font size and icon size only; padding and gap are the icon size times a ratio (`--display-pill-padding-inline-ratio` 0.7, `-padding-inline-icon-ratio` 0.4, `-padding-block-ratio` 0.3, `-gap-ratio` 0.35), so spacing scales with the pill. Absolute `--display-pill-padding-inline`/`-padding-block`/`-gap` tokens still override. The icon side of a pill gets `--display-pill-padding-inline-icon` (tighter than `--display-pill-padding-inline`), placed by `data-icon-position` (`start`, `end` when `reversed`, `only` for icon-only, absent with no icon), so label-only pills stay evenly padded.
121
73
 
122
74
  ```vue
123
75
  <DisplayPill label="New" variant="primary" style-class-passthrough="pill-new" />
@@ -125,33 +77,22 @@ Override tokens by targeting `.your-class.display-pill` — no `:deep()` needed:
125
77
 
126
78
  ```css
127
79
  .pill-new.display-pill {
128
- --theme-pill-primary-bg: var(--green-01);
129
- --theme-pill-primary-color: var(--green-10);
130
- --theme-pill-border-color: currentColor;
131
- --theme-pill-border-width: 1.5px;
132
- }
133
- ```
134
-
135
- ## Border and outline examples
136
-
137
- ```css
138
- /* Solid border */
139
- .bordered.display-pill {
140
- --theme-pill-border-color: currentColor;
141
- --theme-pill-border-width: 1.5px;
80
+ --display-pill-primary-background: var(--green-01);
81
+ --display-pill-primary-text-colour: var(--green-10);
82
+ --display-pill-border-colour: currentColor;
83
+ --display-pill-border-width: 0.15rem;
142
84
  }
143
85
 
144
86
  /* Dashed border */
145
87
  .dashed.display-pill {
146
- --theme-pill-border-color: currentColor;
147
- --theme-pill-border-width: 1.5px;
148
- --theme-pill-border-style: dashed;
88
+ --display-pill-border-colour: currentColor;
89
+ --display-pill-border-style: dashed;
149
90
  }
150
91
 
151
- /* Focus-ring style outline */
152
- .outlined.display-pill {
153
- --theme-pill-outline: 2px solid currentColor;
154
- --theme-pill-outline-offset: 3px;
92
+ /* Decorative outline ring */
93
+ .ringed.display-pill {
94
+ --display-pill-outline: 0.2rem solid currentColor;
95
+ --display-pill-outline-offset: 0.3rem;
155
96
  }
156
97
  ```
157
98
 
@@ -160,3 +101,4 @@ Override tokens by targeting `.your-class.display-pill` — no `:deep()` needed:
160
101
  - `border-radius` defaults to `100vw` — this always collapses to the tightest possible radius on the shorter axis, making it geometry-independent (no magic number needed).
161
102
  - `cursor: default` and `user-select: none` are applied unconditionally. `cursor: pointer` is applied automatically via `:is(button, a)` when `tag` is interactive.
162
103
  - All variant colour pairs use a light-tint background (`--color-01`) with a dark text colour (`--color-09`/`--color-10`) to ensure WCAG AA contrast. The project colour scale runs `00` (lightest) → `10` (darkest) — the opposite of Tailwind.
104
+ - 2026-09-27 migration: tokens renamed `--theme-pill-*` → `--display-pill-*`; variants now fall back to the base colour tokens (so `ServiceSummary`/`ServiceDetail`'s pill overrides finally apply); `warning` moved from a non-existent `--yellow-*` ramp (hex fallbacks) to `--orange-01`/`--orange-10`; icon slot wrapped and sized (the icon-size tokens were unused); `.pill-label` → `.display-pill-label`; `button` pills get `type="button"` and a visible focus outline (the base `outline: none` suppressed it); single-use private pass-throughs inlined.
@@ -1,12 +1,14 @@
1
1
  # DisplayPrompt
2
2
 
3
+ > **Changed 2026-09-28:** root class `.display-prompt-core` → `.display-prompt` (and `data-test-id` `display-prompt-core-{theme}` → `display-prompt-{theme}`). The documented `outlined` passthrough modifier never had any CSS behind it and was removed from this doc.
4
+
3
5
  ## Overview
4
6
 
5
7
  `DisplayPrompt` is an inline notification banner with a themed icon, title, optional content, and
6
8
  an optional dismiss button. It collapses in-place via CSS grid animation rather than removing from
7
9
  the DOM. Dismiss can be controlled locally (closes itself) or by a parent via `v-model`.
8
10
 
9
- **Location**: `app/components/01.atoms/prompt/DisplayPrompt.vue`
11
+ **Location**: `app/components/02.molecules/prompt/DisplayPrompt.vue`
10
12
  **Types**: `~/types/components` — `DisplayPromptTheme`, `SemanticTheme`
11
13
 
12
14
  ## Props
@@ -17,7 +19,8 @@ the DOM. Dismiss can be controlled locally (closes itself) or by a parent via `v
17
19
  | `dismissible` | `boolean` | `false` | Shows a close button. |
18
20
  | `useAutoFocus` | `boolean` | `false` | Focuses the prompt root element on mount. |
19
21
  | `masked` | `boolean` | `false` | SVG glass border — swaps `AlertContent` for `AlertMaskedContent`. |
20
- | `styleClassPassthrough` | `string \| string[]` | `[]` | Extra classes on the inner wrapper. Supported modifier: `"outlined"`. |
22
+ | `closeLabel` | `string` | `"Close this prompt"` | Screen-reader label for the dismiss button. Also settable via `app.config`; the `#customTitle` slot still overrides it. |
23
+ | `styleClassPassthrough` | `string \| string[]` | `[]` | Extra classes on the inner `.display-prompt-wrapper` (not the root). Reactive after mount. |
21
24
  | `v-model` | `boolean` | `false` | Optional parent control — see dismiss behaviour below. |
22
25
 
23
26
  ## Slots
@@ -28,7 +31,7 @@ the DOM. Dismiss can be controlled locally (closes itself) or by a parent via `v
28
31
  | `#content` | Body text below the title. The `<p>` element is omitted when this slot is empty. |
29
32
  | `#customDecoratorIcon` | Replaces the default theme icon. |
30
33
  | `#customCloseIcon` | Replaces the default × close icon inside the dismiss button. |
31
- | `#customTitle` | Screen-reader label for the dismiss button (default: `"Close this prompt"`). |
34
+ | `#customTitle` | Screen-reader label for the dismiss button (defaults to the `closeLabel` prop). |
32
35
 
33
36
  ## Themes
34
37
 
@@ -53,7 +56,9 @@ Two modes depending on whether `v-model` is bound:
53
56
  | `v-model="true"` | Emits `update:modelValue = false`; internal state unchanged — parent controls visibility |
54
57
 
55
58
  The `.closed` class triggers a CSS grid row animation (`grid-template-rows: 1fr → 0fr`) with
56
- `opacity: 0` and `pointer-events: none`.
59
+ `opacity: 0` and `pointer-events: none`, and the root becomes `inert` so the dismiss button leaves the
60
+ tab order and the accessibility tree. The transition is off under `prefers-reduced-motion: reduce`;
61
+ its duration is `--display-prompt-transition-duration` (`200ms`).
57
62
 
58
63
  ## app.config defaults
59
64
 
@@ -69,6 +74,7 @@ export default defineAppConfig({
69
74
  dismissible: true,
70
75
  masked: false,
71
76
  useAutoFocus: false,
77
+ closeLabel: "Fermer",
72
78
  },
73
79
  },
74
80
  })
@@ -114,20 +120,6 @@ const showPrompt = ref(true)
114
120
  </template>
115
121
  ```
116
122
 
117
- ## `styleClassPassthrough` modifiers
118
-
119
- | Class | Effect |
120
- |---|---|
121
- | `"outlined"` | Adds `1px solid var(--theme-border)` border to the wrapper |
122
-
123
- Apply via prop:
124
-
125
- ```vue
126
- <DisplayPrompt :style-class-passthrough="['outlined']" theme="error">
127
- <template #title>Something went wrong.</template>
128
- </DisplayPrompt>
129
- ```
130
-
131
123
  ## CSS token override
132
124
 
133
125
  Scope overrides using your page or section wrapper class — no `:deep()` needed:
@@ -156,7 +148,7 @@ glass effect to be visible.
156
148
  ## Notes
157
149
 
158
150
  - `DisplayPromptTheme` is an alias for `SemanticTheme` (`"info" | "success" | "warning" | "error"`).
159
- - The root element always has `tabindex="0"` — it is focusable whether or not `dismissible` is set.
151
+ - The root gets `tabindex="-1"` only when `useAutoFocus` is on, so it can take programmatic focus without joining the tab order (it used to be `tabindex="0"` always).
160
152
  - `useAutoFocus` focuses the root element on mount (useful when injecting a prompt in response to a
161
153
  user action that has already moved focus elsewhere).
162
154
  - The `#title` slot renders unconditionally — an empty title `<p>` will still appear. Always
@@ -14,6 +14,7 @@ Renders a styled QR code SVG from a string value. Supports colour, size, corner
14
14
  | `black-color` | `string` | `"currentColor"` | Colour for the dark modules |
15
15
  | `white-color` | `string` | `"transparent"` | Colour for the light modules |
16
16
  | `size` | `string` | `"256px"` | Width of the QR code (height matches via `aspect-ratio: 1 / 1`) |
17
+ | `aria-label` | `string` | `"QR code"` | Accessible name for the QR image (root has `role="img"`). Pass something specific and translated, e.g. "Scan to book an appointment". |
17
18
  | `style-class-passthrough` | `string \| string[]` | `[]` | Extra classes on the root element |
18
19
 
19
20
  ### QrCodeVariant type
@@ -29,6 +30,10 @@ const variant: QrCodeVariant = {
29
30
  };
30
31
  ```
31
32
 
33
+ ## CSS token
34
+
35
+ `--display-qr-code-size` overrides the `size` prop when set (e.g. on a page wrapper). Full reference: `app/components/01.atoms/qr-code/CONSUMER-STYLING.md`.
36
+
32
37
  ## CSS classes
33
38
 
34
39
  | Class | Where | Description |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: DisplayThemeSwitch
3
- description: DisplayThemeSwitch system/light/dark theme picker wired to useSettingsStore, wraps TripleToggleSwitchCore
3
+ description: DisplayThemeSwitch system/light/dark theme picker wired to useSettingsStore, wraps TripleToggleSwitch
4
4
  type: reference
5
5
  ---
6
6
 
@@ -9,7 +9,7 @@ type: reference
9
9
  ## Overview
10
10
 
11
11
  `DisplayThemeSwitch` is a system/light/dark colour-scheme picker. It's a thin wrapper around
12
- `TripleToggleSwitchCore` (`app/components/05.forms/triple-toggle-switch/`), wired to
12
+ `TripleToggleSwitch` (`app/components/05.forms/triple-toggle-switch/`), wired to
13
13
  `useSettingsStore` (`app/stores/useSettingsStore.ts`) so selecting an option updates the app's
14
14
  `colourScheme` state and applies the matching class (`system`/`light`/`dark`) to
15
15
  `<html>`. Renders inside `<ClientOnly>` since the store's persisted value isn't known until
@@ -20,6 +20,7 @@ hydration.
20
20
  | Prop | Type | Default | Description |
21
21
  |------|------|---------|-------------|
22
22
  | `styleClassPassthrough` | `string \| string[]` | `[]` | Extra classes on the root. Pass `"small"` for compact sizing. |
23
+ | `ariaLabel` | `string` | `"Colour scheme"` | Accessible name for the radiogroup. |
23
24
  | `systemLabel` | `string` | `"System"` | Accessible label for the system option. |
24
25
  | `lightLabel` | `string` | `"Light"` | Accessible label for the light option. |
25
26
  | `darkLabel` | `string` | `"Dark"` | Accessible label for the dark option. |
@@ -42,8 +43,8 @@ hydration.
42
43
  ## Styling
43
44
 
44
45
  No `--display-theme-switch-*` tokens of its own — every visual aspect (colour, marker gradient,
45
- sizing) is delegated to `TripleToggleSwitchCore`'s public `--triple-toggle-switch-*` tokens. See
46
- CONSUMER-STYLING.md here and `TripleToggleSwitchCore`'s own CONSUMER-STYLING.md.
46
+ sizing) is delegated to `TripleToggleSwitch`'s public `--triple-toggle-switch-*` tokens. See
47
+ CONSUMER-STYLING.md here and `TripleToggleSwitch`'s own CONSUMER-STYLING.md.
47
48
 
48
49
  ## Notes
49
50
 
@@ -51,10 +52,10 @@ CONSUMER-STYLING.md here and `TripleToggleSwitchCore`'s own CONSUMER-STYLING.md.
51
52
  `02.molecules/`. Added `systemLabel`/`lightLabel`/`darkLabel`/`systemIcon`/`lightIcon`/`darkIcon`
52
53
  props — the three option labels/icons were previously hardcoded English strings with no override
53
54
  hook. Removed a large block of dead/duplicate CSS in this component's own `<style>` that either
54
- no-op-duplicated `TripleToggleSwitchCore`'s own default styling (same selectors, same values) or
55
+ no-op-duplicated `TripleToggleSwitch`'s own default styling (same selectors, same values) or
55
56
  actively bypassed its public `--triple-toggle-switch-*` tokens with hardcoded literals (a
56
57
  consumer setting e.g. `--triple-toggle-switch-surface` globally would have been silently
57
58
  overridden back). Only the genuine `small`-variant sizing override remains, now driving
58
- `TripleToggleSwitchCore`'s own public sizing tokens (`--triple-toggle-switch-gap`/`-padding`/
59
+ `TripleToggleSwitch`'s own public sizing tokens (`--triple-toggle-switch-gap`/`-padding`/
59
60
  `-option-padding`/`-icon-size`, added in the same migration) instead of reaching into its
60
61
  private `--_form-*`/`--_scheme-icon-font-size` locals directly.
@@ -11,10 +11,9 @@ Two patterns are available depending on the use case:
11
11
 
12
12
  **Locations**:
13
13
 
14
- - `app/components/01.atoms/toast/DisplayToast.vue`
15
- - `app/components/01.atoms/toast/DisplayToastProvider.vue`
14
+ - `app/components/02.molecules/toast/DisplayToast.vue`
15
+ - `app/components/02.molecules/toast/DisplayToastProvider.vue`
16
16
  - `app/composables/useToastQueue.ts`
17
- - `app/components/01.atoms/toast/molecules/DefaultToastContent.vue`
18
17
 
19
18
  **Types**: `~/types/components` — `DisplayToastConfig`, `DisplayToastTheme`, `ToastQueueEntry`, `ToastQueueStatus`
20
19
 
@@ -81,7 +80,7 @@ Resolution chain: **`config` prop → app.config → hardcoded fallback**.
81
80
 
82
81
  | Slot | Description |
83
82
  |---|---|
84
- | `default` | Replaces `DefaultToastContent` entirely. `has-theme`, `tabindex`, and `aria-describedby` are omitted — accessibility is the caller's responsibility. |
83
+ | `default` | Replaces the built-in `AlertContent`/`AlertMaskedContent` entirely. `has-theme`, `tabindex`, and `aria-describedby` are omitted — accessibility is the caller's responsibility. |
85
84
  | `#customToastIcon` | Replaces the default theme icon. |
86
85
  | `#title` | Replaces `config.content.title`. Do not provide both slot and config value. |
87
86
  | `#description` | Replaces `config.content.description`. Do not provide both slot and config value. |
@@ -224,11 +223,11 @@ appearing behind a consumer's own sticky header.
224
223
 
225
224
  ### Masked variant
226
225
 
227
- Setting `appearance.masked: true` swaps `AlertContent` for `AlertMaskedContent`, which uses an SVG-based border and a semi-transparent background (`rgba(0,0,0,0.3)`) so page content is faintly visible beneath the toast.
226
+ Setting `appearance.masked: true` swaps `AlertContent` for `AlertMaskedContent`, which uses an SVG-based border and a semi-transparent background (the theme's `--theme-surface-subtle` at 80%) so page content is faintly visible beneath the toast.
228
227
 
229
228
  The SVG border shape matches the standard toast exactly (8px left radius, 4px right, 6px accent-colour left bar via `--theme-accent`). Override any dimension or colour via a `maskConfig` prop if using `AlertMaskedContent` standalone.
230
229
 
231
- The inner content layout is handled by the shared `AlertContentInner` molecule — both variants reuse it. `AlertMaskedContent` overrides `--_alert-content-inner-bg: transparent` so the glass effect shows through.
230
+ The inner content layout is handled by the shared `AlertContentInner` molecule — both variants reuse it. `AlertMaskedContent` sets `--alert-content-inner-background: transparent` so the glass effect shows through.
232
231
 
233
232
  ### Provider notes
234
233
 
@@ -67,7 +67,7 @@ every item, it just omits the animation class for the ones that don't need it:
67
67
 
68
68
  None — this component has no `--entry-animation-*` tokens or CSS of its own. The animation
69
69
  keyframes, timing, and `prefers-reduced-motion` guard live in the shared utility class
70
- (`entry-slide-in`/`entry-zoom-reveal`/`entry-exit-blur`), not in this component.
70
+ (`entry-slide-in`/`entry-zoom-reveal`/`entry-exit-blur`), not in this component. Full reference: `app/components/01.atoms/animations/entry/CONSUMER-STYLING.md`.
71
71
 
72
72
  ---
73
73
 
@@ -82,7 +82,4 @@ keyframes, timing, and `prefers-reduced-motion` guard live in the shared utility
82
82
 
83
83
  ## Notes
84
84
 
85
- - **No animation reactivity**: `animationType`/`skipAnimation` are read once at mount to toggle the
86
- utility class — changing either prop after mount does not currently re-toggle the class. This
87
- matches the component's existing usage pattern (animation type is always set once per instance,
88
- never swapped at runtime); flag it if a future consumer needs runtime toggling.
85
+ - **Reactive**: `animationType`, `skipAnimation` and `styleClassPassthrough` can all change after mount; the animation class is bound in the template (it used to be set once at setup, fixed 2026-09-27). Note that switching the class on an element already in view restarts its scroll-driven timeline from wherever the scroll position currently is.
@@ -61,11 +61,13 @@ EyebrowText is commonly placed directly above a `HeroText` heading:
61
61
 
62
62
  | Value | CSS variable |
63
63
  |-------|-------------|
64
- | `large` | `--eyebrow-text-large` |
65
- | `medium` | `--eyebrow-text-medium` |
66
- | `small` | `--eyebrow-text-small` |
64
+ | `large` | `--eyebrow-text-large` (default `1.4rem`) |
65
+ | `medium` | `--eyebrow-text-medium` (default `1.2rem`) |
66
+ | `small` | `--eyebrow-text-small` (default `1rem`) |
67
67
 
68
- Define these CSS custom properties in your consuming app to control sizes.
68
+ The library theme sets these on `:root`; the component has matching fallbacks. The text is filled
69
+ with `--eyebrow-text-bg-img` (gold/rose gradient by default) via `background-clip: text`. Full
70
+ reference: `app/components/01.atoms/text-blocks/eyebrow-text/CONSUMER-STYLING.md`.
69
71
 
70
72
  ## Styling
71
73