srcdev-nuxt-components 9.4.12 → 9.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (624) hide show
  1. package/.claude/skills/component-aria-landmark.md +1 -1
  2. package/.claude/skills/component-dynamic-slots.md +0 -1
  3. package/.claude/skills/component-export-types.md +3 -3
  4. package/.claude/skills/component-inline-action-button.md +7 -7
  5. package/.claude/skills/component-local-style-override.md +134 -50
  6. package/.claude/skills/component-naming.md +107 -0
  7. package/.claude/skills/components/action-menu.md +18 -14
  8. package/.claude/skills/components/alert-content.md +110 -0
  9. package/.claude/skills/components/alert-mask-core.md +15 -1
  10. package/.claude/skills/components/alert-masked-content.md +95 -0
  11. package/.claude/skills/components/auto-grid.md +21 -13
  12. package/.claude/skills/components/canvas-switcher.md +3 -3
  13. package/.claude/skills/components/capture-qr-code.md +19 -9
  14. package/.claude/skills/components/carousel-flip.md +3 -3
  15. package/.claude/skills/components/container-glow.md +2 -2
  16. package/.claude/skills/components/content-docs.md +9 -5
  17. package/.claude/skills/components/cookie-consent-banner.md +16 -17
  18. package/.claude/skills/components/dashboard-quad-grid.md +4 -4
  19. package/.claude/skills/components/decode-qr-code.md +15 -9
  20. package/.claude/skills/components/display-avatar.md +16 -31
  21. package/.claude/skills/components/display-chip.md +15 -10
  22. package/.claude/skills/components/display-dialog.md +3 -1
  23. package/.claude/skills/components/display-pill.md +17 -75
  24. package/.claude/skills/components/display-prompt.md +11 -19
  25. package/.claude/skills/components/display-qr-code.md +5 -0
  26. package/.claude/skills/components/display-theme-switch.md +7 -6
  27. package/.claude/skills/components/display-toast.md +5 -6
  28. package/.claude/skills/components/entry-animation.md +2 -5
  29. package/.claude/skills/components/eyebrow-text.md +6 -4
  30. package/.claude/skills/components/form-field.md +79 -0
  31. package/.claude/skills/components/form-fieldset.md +75 -0
  32. package/.claude/skills/components/form-wrapper.md +71 -0
  33. package/.claude/skills/components/glass-panel.md +60 -51
  34. package/.claude/skills/components/grid-stack.md +8 -2
  35. package/.claude/skills/components/header-block.md +1 -1
  36. package/.claude/skills/components/hero-text.md +8 -6
  37. package/.claude/skills/components/input-button.md +72 -0
  38. package/.claude/skills/components/input-checkbox-radio.md +149 -0
  39. package/.claude/skills/components/input-checkbox.md +148 -0
  40. package/.claude/skills/components/input-description.md +102 -0
  41. package/.claude/skills/components/input-error.md +105 -0
  42. package/.claude/skills/components/input-label.md +119 -0
  43. package/.claude/skills/components/{input-number-core.md → input-number.md} +41 -36
  44. package/.claude/skills/components/input-radio.md +95 -0
  45. package/.claude/skills/components/input-range-core.md +4 -4
  46. package/.claude/skills/components/input-select-core.md +1 -1
  47. package/.claude/skills/components/input-text-core.md +8 -6
  48. package/.claude/skills/components/input-textarea-core.md +4 -4
  49. package/.claude/skills/components/layout-grid-by-cols.md +31 -43
  50. package/.claude/skills/components/link-text.md +2 -2
  51. package/.claude/skills/components/opening-hours.md +116 -0
  52. package/.claude/skills/components/page-hero-highlights.md +35 -35
  53. package/.claude/skills/components/page-row.md +1 -1
  54. package/.claude/skills/components/pending-effect.md +63 -0
  55. package/.claude/skills/components/price-list.md +72 -0
  56. package/.claude/skills/components/pricing-card.md +3 -3
  57. package/.claude/skills/components/profile-section.md +6 -4
  58. package/.claude/skills/components/samaritan-prompt.md +140 -0
  59. package/.claude/skills/components/scroll-reveal-frame.md +21 -20
  60. package/.claude/skills/components/scroll-reveal-image.md +31 -21
  61. package/.claude/skills/components/service-detail.md +2 -2
  62. package/.claude/skills/components/services-card-grid.md +5 -4
  63. package/.claude/skills/components/services-card.md +12 -10
  64. package/.claude/skills/components/site-navigation.md +20 -6
  65. package/.claude/skills/components/slider-gallery.md +88 -0
  66. package/.claude/skills/components/social-icons-list.md +12 -6
  67. package/.claude/skills/components/tab-navigation.md +1 -1
  68. package/.claude/skills/components/text-block.md +68 -0
  69. package/.claude/skills/components/toggle-switch-core.md +25 -6
  70. package/.claude/skills/components/triple-toggle-switch.md +85 -0
  71. package/.claude/skills/composable-zod-validation.md +1 -1
  72. package/.claude/skills/consumer-styles-structure.md +153 -0
  73. package/.claude/skills/icon-sets.md +3 -3
  74. package/.claude/skills/icon-sizing.md +66 -0
  75. package/.claude/skills/index.md +36 -17
  76. package/.claude/skills/new-app-scaffold.md +45 -7
  77. package/.claude/skills/pull-request-description.md +1 -0
  78. package/.claude/skills/storybook-add-story.md +53 -5
  79. package/.claude/skills/testing-add-playwright.md +1 -1
  80. package/.claude/skills/theming-colour-ramps.md +25 -3
  81. package/.claude/skills/theming-component-token-pattern.md +16 -16
  82. package/.claude/skills/theming-override-default.md +7 -0
  83. package/.claude/skills/theming-partial-override.md +1 -1
  84. package/.claude/skills/theming-typography-tokens.md +1 -1
  85. package/.claude/skills/vercel-node-version.md +1 -1
  86. package/.vscode/srcdev-component-action-menu.code-snippets +42 -0
  87. package/.vscode/srcdev-component-alert-content.code-snippets +36 -0
  88. package/.vscode/srcdev-component-alert-masked-content.code-snippets +35 -0
  89. package/.vscode/srcdev-component-auto-grid.code-snippets +39 -0
  90. package/.vscode/srcdev-component-capture-decode-qr-code.code-snippets +28 -0
  91. package/.vscode/srcdev-component-content-docs.code-snippets +4 -4
  92. package/.vscode/srcdev-component-cookie-consent-banner.code-snippets +33 -0
  93. package/.vscode/srcdev-component-display-avatar.code-snippets +28 -0
  94. package/.vscode/srcdev-component-display-chip.code-snippets +27 -0
  95. package/.vscode/srcdev-component-display-pill.code-snippets +38 -0
  96. package/.vscode/srcdev-component-display-prompt.code-snippets +10 -54
  97. package/.vscode/srcdev-component-display-qr-code.code-snippets +22 -0
  98. package/.vscode/srcdev-component-eyebrow-text.code-snippets +19 -0
  99. package/.vscode/srcdev-component-form-field.code-snippets +25 -0
  100. package/.vscode/srcdev-component-form-fieldset.code-snippets +36 -0
  101. package/.vscode/srcdev-component-form-wrapper.code-snippets +30 -0
  102. package/.vscode/srcdev-component-glass-panel.code-snippets +38 -0
  103. package/.vscode/srcdev-component-grid-stack.code-snippets +49 -0
  104. package/.vscode/srcdev-component-input-button.code-snippets +27 -0
  105. package/.vscode/srcdev-component-input-checkbox-radio.code-snippets +60 -0
  106. package/.vscode/srcdev-component-input-checkbox.code-snippets +48 -0
  107. package/.vscode/srcdev-component-input-description.code-snippets +44 -0
  108. package/.vscode/srcdev-component-input-error.code-snippets +30 -0
  109. package/.vscode/srcdev-component-input-label.code-snippets +39 -0
  110. package/.vscode/srcdev-component-input-number.code-snippets +11 -11
  111. package/.vscode/srcdev-component-input-radio.code-snippets +58 -0
  112. package/.vscode/srcdev-component-layout-grid-by-cols.code-snippets +46 -0
  113. package/.vscode/srcdev-component-link-text.code-snippets +30 -0
  114. package/.vscode/srcdev-component-opening-hours.code-snippets +40 -0
  115. package/.vscode/srcdev-component-page-hero-highlights.code-snippets +37 -0
  116. package/.vscode/srcdev-component-page-row.code-snippets +47 -0
  117. package/.vscode/srcdev-component-pending-effect.code-snippets +26 -0
  118. package/.vscode/srcdev-component-price-list.code-snippets +37 -0
  119. package/.vscode/srcdev-component-pricing-card.code-snippets +2 -2
  120. package/.vscode/srcdev-component-profile-section.code-snippets +36 -0
  121. package/.vscode/srcdev-component-samaritan-prompt.code-snippets +60 -0
  122. package/.vscode/srcdev-component-scroll-reveal-frame.code-snippets +36 -0
  123. package/.vscode/srcdev-component-scroll-reveal-image.code-snippets +46 -0
  124. package/.vscode/srcdev-component-services-card.code-snippets +4 -4
  125. package/.vscode/srcdev-component-services-grids.code-snippets +36 -0
  126. package/.vscode/srcdev-component-site-navigation.code-snippets +26 -18
  127. package/.vscode/srcdev-component-slider-gallery.code-snippets +9 -0
  128. package/.vscode/srcdev-component-social-icons-list.code-snippets +24 -0
  129. package/.vscode/srcdev-component-stepper-list.code-snippets +39 -0
  130. package/.vscode/srcdev-component-text-block.code-snippets +31 -0
  131. package/.vscode/srcdev-component-toggle-switch.code-snippets +3 -1
  132. package/.vscode/srcdev-component-triple-toggle-switch.code-snippets +30 -0
  133. package/README.md +2 -2
  134. package/app/app.config.ts +10 -0
  135. package/app/assets/styles/setup/02.colours/_orange.css +11 -11
  136. package/app/assets/styles/setup/02.colours/_theme-params.css +2 -2
  137. package/app/assets/styles/setup/03.theming/_default.css +1 -22
  138. package/app/assets/styles/setup/03.theming/_theme-slots.css +1 -1
  139. package/app/assets/styles/setup/03.theming/_warning.css +8 -10
  140. package/app/assets/styles/setup/04.elements/forms/02.typography.css +0 -14
  141. package/app/assets/styles/setup/04.elements/forms/06.button-geometry.css +1 -1
  142. package/app/assets/styles/setup/index.css +1 -1
  143. package/app/components/01.atoms/alert-mask/AlertMaskCore.vue +23 -5
  144. package/app/components/01.atoms/alert-mask/CONSUMER-STYLING.md +23 -5
  145. package/app/components/01.atoms/alert-mask/stories/AlertMaskCore.stories.ts +45 -19
  146. package/app/components/01.atoms/alert-mask/tests/AlertMaskCore.spec.ts +35 -1
  147. package/app/components/01.atoms/animations/animated-svg-text/CONSUMER-STYLING.md +13 -0
  148. package/app/components/01.atoms/animations/clip-element/CONSUMER-STYLING.md +13 -0
  149. package/app/components/01.atoms/animations/clip-element/ClipElement.vue +2 -2
  150. package/app/components/01.atoms/animations/container-glow/CONSUMER-STYLING.md +26 -5
  151. package/app/components/01.atoms/animations/entry/.nuxt/app.config.mjs +21 -0
  152. package/app/components/01.atoms/animations/entry/.nuxt/components.d.ts +66 -0
  153. package/app/components/01.atoms/animations/entry/.nuxt/imports.d.ts +30 -0
  154. package/app/components/01.atoms/animations/entry/.nuxt/manifest/meta/test.json +1 -0
  155. package/app/components/01.atoms/animations/entry/.nuxt/types/app.config.d.ts +35 -0
  156. package/app/components/01.atoms/animations/entry/.nuxt/types/build.d.ts +23 -0
  157. package/app/components/01.atoms/animations/entry/.nuxt/types/builder-env.d.ts +1 -0
  158. package/app/components/01.atoms/animations/entry/.nuxt/types/components.d.ts +71 -0
  159. package/app/components/01.atoms/animations/entry/.nuxt/types/imports.d.ts +386 -0
  160. package/app/components/01.atoms/animations/entry/.nuxt/types/middleware.d.ts +11 -0
  161. package/app/components/01.atoms/animations/entry/.nuxt/types/modules.d.ts +79 -0
  162. package/app/components/01.atoms/animations/entry/.nuxt/types/nitro-layouts.d.ts +17 -0
  163. package/app/components/01.atoms/animations/entry/.nuxt/types/nitro-nuxt.d.ts +64 -0
  164. package/app/components/01.atoms/animations/entry/.nuxt/types/plugins.d.ts +29 -0
  165. package/app/components/01.atoms/animations/entry/.nuxt/types/runtime-config.d.ts +32 -0
  166. package/app/components/01.atoms/animations/entry/.nuxt/types/shared-imports.d.ts +10 -0
  167. package/app/components/01.atoms/animations/entry/.nuxt/types/vue-shim.d.ts +0 -0
  168. package/app/components/01.atoms/animations/entry/.nuxtrc +1 -0
  169. package/app/components/01.atoms/animations/entry/CONSUMER-STYLING.md +65 -0
  170. package/app/components/01.atoms/animations/entry/EntryAnimation.vue +6 -5
  171. package/app/components/01.atoms/animations/entry/node_modules/.cache/nuxt/chrome-workspace.json +1 -0
  172. package/app/components/01.atoms/animations/entry/node_modules/.cache/vite/client/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  173. package/app/components/01.atoms/animations/entry/stories/EntryAnimation.stories.ts +1 -1
  174. package/app/components/01.atoms/animations/entry/tests/EntryAnimation.spec.ts +25 -0
  175. package/app/components/01.atoms/animations/glowing-border/CONSUMER-STYLING.md +24 -5
  176. package/app/components/01.atoms/animations/marquee-scroller/CONSUMER-STYLING.md +20 -0
  177. package/app/components/01.atoms/animations/rotating-carousel-image/CONSUMER-STYLING.md +17 -0
  178. package/app/components/01.atoms/animations/scroll-reveal-frame/CONSUMER-STYLING.md +77 -0
  179. package/app/components/01.atoms/animations/scroll-reveal-frame/ScrollRevealFrame.vue +37 -78
  180. package/app/components/01.atoms/animations/scroll-reveal-frame/stories/ScrollRevealFrame.stories.ts +48 -0
  181. package/app/components/01.atoms/animations/scroll-reveal-frame/tests/ScrollRevealFrame.spec.ts +40 -33
  182. package/app/components/01.atoms/animations/scroll-reveal-frame/tests/__snapshots__/ScrollRevealFrame.spec.ts.snap +4 -4
  183. package/app/components/01.atoms/animations/scroll-reveal-image/CONSUMER-STYLING.md +74 -0
  184. package/app/components/01.atoms/animations/scroll-reveal-image/ScrollRevealImage.vue +14 -44
  185. package/app/components/01.atoms/animations/scroll-reveal-image/stories/ScrollRevealImage.stories.ts +50 -1
  186. package/app/components/01.atoms/animations/scroll-reveal-image/tests/ScrollRevealImage.spec.ts +27 -20
  187. package/app/components/01.atoms/animations/scroll-reveal-image/tests/__snapshots__/ScrollRevealImage.spec.ts.snap +4 -4
  188. package/app/components/01.atoms/animations/section-parallax/CONSUMER-STYLING.md +21 -4
  189. package/app/components/01.atoms/animations/view-timeline/CONSUMER-STYLING.md +25 -0
  190. package/app/components/01.atoms/banner-video/CONSUMER-STYLING.md +12 -5
  191. package/app/components/01.atoms/canvas-switcher/CONSUMER-STYLING.md +20 -7
  192. package/app/components/01.atoms/canvas-switcher/CanvasSwitcher.vue +12 -7
  193. package/app/components/01.atoms/card/CONSUMER-STYLING.md +47 -42
  194. package/app/components/01.atoms/card/CardCore.vue +7 -17
  195. package/app/components/01.atoms/clipped-panel/CONSUMER-STYLING.md +13 -0
  196. package/app/components/01.atoms/content-wrappers/docs-pages/CONSUMER-STYLING.md +127 -0
  197. package/app/components/01.atoms/content-wrappers/docs-pages/ContentDocs.vue +44 -77
  198. package/app/components/01.atoms/content-wrappers/docs-pages/stories/ContentDocs.stories.ts +3 -3
  199. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/CONSUMER-STYLING.md +14 -1
  200. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/stories/DashboardQuadGrid.stories.ts +2 -0
  201. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/CONSUMER-STYLING.md +13 -0
  202. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/stories/DashboardStatsGrid.stories.ts +2 -0
  203. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/CONSUMER-STYLING.md +72 -0
  204. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/LayoutGridByCols.vue +26 -25
  205. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/stories/LayoutGridByCols.stories.ts +91 -107
  206. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/tests/LayoutGridByCols.spec.ts +50 -15
  207. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/tests/__snapshots__/LayoutGridByCols.spec.ts.snap +5 -5
  208. package/app/components/01.atoms/display-banner/CONSUMER-STYLING.md +13 -0
  209. package/app/components/01.atoms/display-dialog/CONSUMER-STYLING.md +82 -54
  210. package/app/components/01.atoms/display-dialog/DisplayDialog.vue +38 -45
  211. package/app/components/01.atoms/display-dialog/stories/DisplayDialog.stories.ts +25 -0
  212. package/app/components/01.atoms/display-dialog/tests/DisplayDialog.spec.ts +21 -0
  213. package/app/components/01.atoms/display-pill/CONSUMER-STYLING.md +112 -0
  214. package/app/components/01.atoms/display-pill/DisplayPill.vue +88 -50
  215. package/app/components/01.atoms/display-pill/stories/DisplayPill.stories.ts +56 -3
  216. package/app/components/01.atoms/display-pill/tests/DisplayPill.spec.ts +104 -4
  217. package/app/components/01.atoms/display-pill/tests/__snapshots__/DisplayPill.spec.ts.snap +3 -3
  218. package/app/components/01.atoms/display-tooltip/CONSUMER-STYLING.md +22 -2
  219. package/app/components/01.atoms/display-tooltip/DisplayTooltip.vue +18 -26
  220. package/app/components/01.atoms/glass-panel/CONSUMER-STYLING.md +91 -0
  221. package/app/components/01.atoms/glass-panel/GlassPanel.vue +34 -30
  222. package/app/components/01.atoms/glass-panel/stories/GlassPanel.stories.ts +121 -0
  223. package/app/components/01.atoms/glass-panel/tests/GlassPanel.spec.ts +61 -0
  224. package/app/components/01.atoms/grids/auto-grid/AutoGrid.vue +5 -10
  225. package/app/components/01.atoms/grids/auto-grid/CONSUMER-STYLING.md +76 -0
  226. package/app/components/01.atoms/grids/auto-grid/stories/AutoGrid.stories.ts +5 -4
  227. package/app/components/01.atoms/grids/auto-grid/tests/AutoGrid.spec.ts +8 -0
  228. package/app/components/01.atoms/grids/column-flow-grid/CONSUMER-STYLING.md +11 -2
  229. package/app/components/01.atoms/grids/grid-stack/CONSUMER-STYLING.md +76 -0
  230. package/app/components/01.atoms/grids/grid-stack/GridStack.vue +6 -1
  231. package/app/components/01.atoms/grids/grid-stack/stories/GridStack.stories.ts +1 -1
  232. package/app/components/01.atoms/grids/grid-stack/tests/GridStack.spec.ts +35 -0
  233. package/app/components/01.atoms/grids/masonry-grid/CONSUMER-STYLING.md +11 -2
  234. package/app/components/01.atoms/navigation/breadcrumb/Breadcrumb.vue +5 -10
  235. package/app/components/01.atoms/navigation/breadcrumb/CONSUMER-STYLING.md +15 -0
  236. package/app/components/01.atoms/navigation/skip-links/CONSUMER-STYLING.md +13 -0
  237. package/app/components/01.atoms/navigation/tabs/CONSUMER-STYLING.md +21 -0
  238. package/app/components/01.atoms/page-row/CONSUMER-STYLING.md +46 -8
  239. package/app/components/01.atoms/page-row/PageRow.vue +17 -13
  240. package/app/components/01.atoms/page-row/stories/PageRow.stories.ts +8 -0
  241. package/app/components/01.atoms/page-row/tests/PageRow.spec.ts +7 -11
  242. package/app/components/01.atoms/pop-over/CONSUMER-STYLING.md +13 -0
  243. package/app/components/01.atoms/qr-code/CONSUMER-STYLING.md +48 -0
  244. package/app/components/01.atoms/qr-code/DisplayQrCode.vue +5 -1
  245. package/app/components/01.atoms/qr-code/stories/DisplayQrCode.stories.ts +11 -3
  246. package/app/components/01.atoms/qr-code/tests/DisplayQrCode.spec.ts +15 -0
  247. package/app/components/01.atoms/text-block/CONSUMER-STYLING.md +49 -0
  248. package/app/components/01.atoms/text-block/TextBlock.vue +13 -5
  249. package/app/components/01.atoms/text-block/stories/TextBlock.stories.ts +84 -0
  250. package/app/components/01.atoms/text-block/tests/TextBlock.spec.ts +78 -0
  251. package/app/components/01.atoms/text-block/tests/__snapshots__/TextBlock.spec.ts.snap +7 -0
  252. package/app/components/01.atoms/text-blocks/eyebrow-text/CONSUMER-STYLING.md +56 -0
  253. package/app/components/01.atoms/text-blocks/eyebrow-text/EyebrowText.vue +10 -5
  254. package/app/components/01.atoms/text-blocks/eyebrow-text/tests/EyebrowText.spec.ts +11 -0
  255. package/app/components/01.atoms/text-blocks/header-block/CONSUMER-STYLING.md +16 -1
  256. package/app/components/01.atoms/text-blocks/hero-text/CONSUMER-STYLING.md +74 -0
  257. package/app/components/01.atoms/text-blocks/hero-text/HeroText.vue +14 -9
  258. package/app/components/01.atoms/text-blocks/hero-text/tests/HeroText.spec.ts +11 -0
  259. package/app/components/01.atoms/text-blocks/link-text/CONSUMER-STYLING.md +45 -0
  260. package/app/components/01.atoms/text-blocks/link-text/LinkText.vue +15 -8
  261. package/app/components/01.atoms/text-blocks/link-text/tests/LinkText.spec.ts +11 -0
  262. package/app/components/01.atoms/ui-block-decorated/CONSUMER-STYLING.md +13 -0
  263. package/app/components/02.molecules/action-menu/ActionMenu.vue +28 -30
  264. package/app/components/02.molecules/action-menu/{ActionMenuItemCore.vue → ActionMenuItem.vue} +12 -14
  265. package/app/components/02.molecules/action-menu/CONSUMER-STYLING.md +90 -76
  266. package/app/components/02.molecules/action-menu/stories/ActionMenu.stories.ts +48 -41
  267. package/app/components/02.molecules/action-menu/tests/ActionMenu.spec.ts +46 -1
  268. package/app/components/02.molecules/action-menu/tests/{ActionMenuItemCore.spec.ts → ActionMenuItem.spec.ts} +11 -5
  269. package/app/components/02.molecules/action-menu/tests/__snapshots__/ActionMenuItem.spec.ts.snap +27 -0
  270. package/app/components/02.molecules/alert-content/AlertContent.vue +17 -8
  271. package/app/components/02.molecules/alert-content/AlertContentInner.vue +57 -30
  272. package/app/components/02.molecules/alert-content/CONSUMER-STYLING.md +84 -0
  273. package/app/components/02.molecules/alert-content/stories/AlertContent.stories.ts +39 -0
  274. package/app/components/02.molecules/alert-content/tests/AlertContent.spec.ts +32 -0
  275. package/app/components/02.molecules/alert-content/tests/AlertContentInner.spec.ts +32 -0
  276. package/app/components/02.molecules/alert-masked-content/AlertMaskedContent.vue +9 -5
  277. package/app/components/02.molecules/alert-masked-content/CONSUMER-STYLING.md +73 -0
  278. package/app/components/02.molecules/alert-masked-content/stories/AlertMaskedContent.stories.ts +91 -10
  279. package/app/components/02.molecules/alert-masked-content/tests/AlertMaskedContent.spec.ts +52 -0
  280. package/app/components/02.molecules/cookie-consent-banner/CONSUMER-STYLING.md +95 -0
  281. package/app/components/02.molecules/cookie-consent-banner/CookieConsentBanner.vue +149 -0
  282. package/app/components/{01.atoms → 02.molecules}/cookie-consent-banner/stories/CookieConsentBanner.stories.ts +22 -3
  283. package/app/components/{01.atoms → 02.molecules}/cookie-consent-banner/tests/CookieConsentBanner.spec.ts +81 -4
  284. package/app/components/02.molecules/display-avatar/CONSUMER-STYLING.md +63 -0
  285. package/app/components/02.molecules/display-avatar/DisplayAvatar.vue +120 -0
  286. package/app/components/{01.atoms → 02.molecules}/display-avatar/stories/DisplayAvatar.stories.ts +56 -14
  287. package/app/components/{01.atoms → 02.molecules}/display-avatar/tests/DisplayAvatar.spec.ts +43 -11
  288. package/app/components/02.molecules/display-avatar/tests/__snapshots__/DisplayAvatar.spec.ts.snap +11 -0
  289. package/app/components/02.molecules/display-chip/CONSUMER-STYLING.md +57 -0
  290. package/app/components/02.molecules/display-chip/DisplayChip.vue +50 -83
  291. package/app/components/02.molecules/display-chip/tests/DisplayChip.spec.ts +10 -10
  292. package/app/components/02.molecules/display-chip/tests/__snapshots__/DisplayChip.spec.ts.snap +4 -4
  293. package/app/components/02.molecules/display-theme-switch/CONSUMER-STYLING.md +25 -4
  294. package/app/components/02.molecules/display-theme-switch/DisplayThemeSwitch.vue +9 -6
  295. package/app/components/02.molecules/display-theme-switch/stories/DisplayThemeSwitch.stories.ts +6 -1
  296. package/app/components/02.molecules/display-theme-switch/tests/DisplayThemeSwitch.spec.ts +10 -1
  297. package/app/components/02.molecules/display-tooltip-defined/CONSUMER-STYLING.md +11 -0
  298. package/app/components/02.molecules/expandable/accordian/CONSUMER-STYLING.md +11 -4
  299. package/app/components/02.molecules/expandable/expanding-panel/CONSUMER-STYLING.md +12 -5
  300. package/app/components/02.molecules/expandable/expanding-panel-classic/CONSUMER-STYLING.md +12 -5
  301. package/app/components/02.molecules/input-copy/CONSUMER-STYLING.md +12 -5
  302. package/app/components/02.molecules/input-copy/InputCopy.vue +12 -25
  303. package/app/components/02.molecules/input-copy/stories/InputCopy.stories.ts +1 -1
  304. package/app/components/02.molecules/input-copy/tests/InputCopy.spec.ts +1 -1
  305. package/app/components/02.molecules/navigation/deep-expanding-menu/CONSUMER-STYLING.md +13 -0
  306. package/app/components/02.molecules/navigation/deep-expanding-menu-classic/CONSUMER-STYLING.md +11 -0
  307. package/app/components/02.molecules/navigation/site-navigation/CONSUMER-STYLING.md +109 -0
  308. package/app/components/02.molecules/navigation/site-navigation/SiteNavigation.vue +37 -55
  309. package/app/components/02.molecules/navigation/site-navigation/stories/SiteNavigation.stories.ts +22 -1
  310. package/app/components/02.molecules/navigation/site-navigation/tests/SiteNavigation.spec.ts +41 -6
  311. package/app/components/02.molecules/navigation/tab-navigation/CONSUMER-STYLING.md +13 -8
  312. package/app/components/02.molecules/navigation/tab-navigation/TabNavigation.vue +18 -36
  313. package/app/components/02.molecules/navigation/tab-navigation/stories/TabNavigation.stories.ts +1 -1
  314. package/app/components/02.molecules/navigation/tab-navigation/tests/TabNavigation.spec.ts +1 -1
  315. package/app/components/02.molecules/opening-hours/CONSUMER-STYLING.md +134 -0
  316. package/app/components/02.molecules/opening-hours/OpeningHours.vue +352 -0
  317. package/app/components/02.molecules/opening-hours/stories/OpeningHours.stories.ts +127 -0
  318. package/app/components/02.molecules/opening-hours/tests/OpeningHours.spec.ts +228 -0
  319. package/app/components/02.molecules/opening-hours/tests/OpeningHours.structuredData.spec.ts +45 -0
  320. package/app/components/02.molecules/opening-hours/tests/__snapshots__/OpeningHours.spec.ts.snap +23 -0
  321. package/app/components/02.molecules/opening-hours/tests/buildOpeningHoursSpecification.spec.ts +52 -0
  322. package/app/components/02.molecules/price-list/CONSUMER-STYLING.md +106 -0
  323. package/app/components/02.molecules/price-list/PriceList.vue +48 -40
  324. package/app/components/02.molecules/price-list/stories/PriceList.stories.ts +15 -2
  325. package/app/components/02.molecules/price-list/tests/PriceList.spec.ts +39 -2
  326. package/app/components/02.molecules/price-list/tests/__snapshots__/PriceList.spec.ts.snap +4 -16
  327. package/app/components/02.molecules/pricing-card/CONSUMER-STYLING.md +12 -5
  328. package/app/components/02.molecules/pricing-card/PricingCard.vue +28 -60
  329. package/app/components/02.molecules/pricing-card/tests/PricingCard.spec.ts +1 -1
  330. package/app/components/02.molecules/profile-section/CONSUMER-STYLING.md +53 -0
  331. package/app/components/02.molecules/profile-section/ProfileSection.vue +53 -66
  332. package/app/components/02.molecules/profile-section/tests/ProfileSection.spec.ts +4 -4
  333. package/app/components/02.molecules/profile-section/tests/__snapshots__/ProfileSection.spec.ts.snap +6 -12
  334. package/app/components/02.molecules/prompt/CONSUMER-STYLING.md +51 -0
  335. package/app/components/{01.atoms → 02.molecules}/prompt/DisplayPrompt.vue +23 -8
  336. package/app/components/{01.atoms → 02.molecules}/prompt/stories/DisplayPrompt.stories.ts +18 -1
  337. package/app/components/{01.atoms → 02.molecules}/prompt/tests/DisplayPrompt.spec.ts +37 -7
  338. package/app/components/02.molecules/qr-code/CONSUMER-STYLING.md +66 -0
  339. package/app/components/02.molecules/qr-code/CaptureQrCode.vue +31 -12
  340. package/app/components/02.molecules/qr-code/DecodeQrCode.vue +55 -19
  341. package/app/components/02.molecules/qr-code/stories/CaptureQrCode.stories.ts +56 -0
  342. package/app/components/02.molecules/qr-code/stories/DecodeQrCode.stories.ts +53 -0
  343. package/app/components/02.molecules/qr-code/tests/CaptureQrCode.spec.ts +68 -20
  344. package/app/components/02.molecules/qr-code/tests/DecodeQrCode.spec.ts +44 -8
  345. package/app/components/02.molecules/samaritan-prompt/CONSUMER-STYLING.md +118 -0
  346. package/app/components/02.molecules/samaritan-prompt/SamaritanPrompt.vue +108 -51
  347. package/app/components/02.molecules/samaritan-prompt/SamaritanPromptMixed.vue +63 -62
  348. package/app/components/02.molecules/samaritan-prompt/stories/SamaritanPrompt.stories.ts +129 -0
  349. package/app/components/02.molecules/samaritan-prompt/stories/SamaritanPromptMixed.stories.ts +124 -0
  350. package/app/components/02.molecules/samaritan-prompt/tests/SamaritanPrompt.spec.ts +66 -0
  351. package/app/components/02.molecules/samaritan-prompt/tests/SamaritanPromptMixed.spec.ts +95 -17
  352. package/app/components/02.molecules/select-menu/CONSUMER-STYLING.md +11 -2
  353. package/app/components/02.molecules/social-icons-list/CONSUMER-STYLING.md +43 -0
  354. package/app/components/02.molecules/social-icons-list/SocialIconsList.vue +15 -15
  355. package/app/components/02.molecules/social-icons-list/stories/SocialIconsList.stories.ts +6 -1
  356. package/app/components/02.molecules/social-icons-list/tests/SocialIconsList.spec.ts +22 -1
  357. package/app/components/02.molecules/social-icons-list/tests/__snapshots__/SocialIconsList.spec.ts.snap +3 -3
  358. package/app/components/02.molecules/stepper-list/CONSUMER-STYLING.md +44 -5
  359. package/app/components/02.molecules/stepper-list/StepperList.vue +23 -43
  360. package/app/components/02.molecules/stepper-list/tests/StepperList.spec.ts +9 -0
  361. package/app/components/{01.atoms → 02.molecules}/toast/CONSUMER-STYLING.md +14 -0
  362. package/app/components/{01.atoms → 02.molecules}/toast/DisplayToast.vue +1 -2
  363. package/app/components/{01.atoms → 02.molecules}/toast/DisplayToastProvider.vue +1 -2
  364. package/app/components/{01.atoms → 02.molecules}/toast/stories/DisplayToast.stories.ts +1 -1
  365. package/app/components/{01.atoms → 02.molecules}/toast/stories/DisplayToastProvider.stories.ts +1 -1
  366. package/app/components/03.organisms/image-galleries/carousel-flip/CONSUMER-STYLING.md +13 -0
  367. package/app/components/03.organisms/image-galleries/slider-gallery/CONSUMER-STYLING.md +137 -0
  368. package/app/components/03.organisms/image-galleries/slider-gallery/SliderGallery.vue +378 -343
  369. package/app/components/03.organisms/image-galleries/slider-gallery/stories/SliderGallery.stories.ts +26 -1
  370. package/app/components/03.organisms/image-galleries/slider-gallery/tests/SliderGallery.spec.ts +102 -23
  371. package/app/components/03.organisms/image-galleries/slider-gallery/tests/__snapshots__/SliderGallery.spec.ts.snap +44 -44
  372. package/app/components/03.organisms/responsive-header/CONSUMER-STYLING.md +12 -1
  373. package/app/components/03.organisms/responsive-header/ResponsiveHeader.vue +0 -4
  374. package/app/components/03.organisms/services/service-detail/CONSUMER-STYLING.md +24 -3
  375. package/app/components/03.organisms/services/service-detail/ServiceDetail.vue +3 -3
  376. package/app/components/03.organisms/services/service-detail/stories/ServiceDetail.stories.ts +13 -13
  377. package/app/components/03.organisms/services/service-detail/tests/__snapshots__/ServiceDetail.spec.ts.snap +1 -1
  378. package/app/components/03.organisms/services/service-summary/CONSUMER-STYLING.md +24 -7
  379. package/app/components/03.organisms/services/service-summary/ServiceSummary.vue +3 -3
  380. package/app/components/03.organisms/services/service-summary/stories/ServiceSummary.stories.ts +1 -1
  381. package/app/components/03.organisms/services/service-summary/tests/__snapshots__/ServiceSummary.spec.ts.snap +1 -1
  382. package/app/components/03.organisms/services/services-card/CONSUMER-STYLING.md +11 -2
  383. package/app/components/03.organisms/services/services-card/ServicesCard.vue +17 -26
  384. package/app/components/03.organisms/services/services-card/tests/ServicesCard.spec.ts +21 -0
  385. package/app/components/03.organisms/services/services-grids/CONSUMER-STYLING.md +50 -0
  386. package/app/components/03.organisms/services/services-grids/ServicesCardGrid.vue +9 -16
  387. package/app/components/03.organisms/services/services-grids/stories/ServicesCardGrid.stories.ts +6 -0
  388. package/app/components/03.organisms/services/services-grids/tests/ServicesCardGrid.spec.ts +18 -0
  389. package/app/components/03.organisms/services/services-grids/tests/__snapshots__/ServiceSummaryGrid.spec.ts.snap +3 -3
  390. package/app/components/03.organisms/services/services-grids/tests/__snapshots__/ServicesCardGrid.spec.ts.snap +3 -3
  391. package/app/components/03.organisms/site-header/CONSUMER-STYLING.md +12 -1
  392. package/app/components/04.templates/page-hero-highlights/CONSUMER-STYLING.md +103 -0
  393. package/app/components/04.templates/page-hero-highlights/PageHeroHighlights.vue +144 -193
  394. package/app/components/04.templates/page-hero-highlights/PageHeroHighlightsHeader.vue +27 -37
  395. package/app/components/04.templates/page-hero-highlights/stories/PageHeroHighlights.stories.ts +56 -60
  396. package/app/components/04.templates/page-hero-highlights/stories/PageHeroHighlightsHeader.stories.ts +2 -2
  397. package/app/components/04.templates/page-hero-highlights/tests/PageHeroHighlights.spec.ts +10 -10
  398. package/app/components/04.templates/page-hero-highlights/tests/PageHeroHighlightsHeader.spec.ts +7 -7
  399. package/app/components/04.templates/page-hero-highlights/tests/__snapshots__/PageHeroHighlights.spec.ts.snap +6 -6
  400. package/app/components/05.forms/form-errors/CONSUMER-STYLING.md +112 -0
  401. package/app/components/05.forms/form-errors/InputError.vue +101 -122
  402. package/app/components/05.forms/form-errors/stories/InputError.stories.ts +125 -0
  403. package/app/components/05.forms/form-errors/tests/InputError.spec.ts +82 -31
  404. package/app/components/05.forms/form-field/CONSUMER-STYLING.md +91 -0
  405. package/app/components/05.forms/form-field/FormField.vue +26 -35
  406. package/app/components/05.forms/form-field/stories/FormField.stories.ts +104 -0
  407. package/app/components/05.forms/form-field/tests/FormField.spec.ts +75 -0
  408. package/app/components/05.forms/form-fieldset/CONSUMER-STYLING.md +88 -0
  409. package/app/components/05.forms/form-fieldset/FormFieldset.vue +34 -28
  410. package/app/components/05.forms/form-fieldset/stories/FormFieldset.stories.ts +84 -0
  411. package/app/components/05.forms/form-fieldset/tests/FormFieldset.spec.ts +111 -0
  412. package/app/components/05.forms/form-wrapper/CONSUMER-STYLING.md +101 -0
  413. package/app/components/05.forms/form-wrapper/FormWrapper.vue +32 -15
  414. package/app/components/05.forms/form-wrapper/stories/FormWrapper.stories.ts +75 -0
  415. package/app/components/05.forms/form-wrapper/tests/FormWrapper.spec.ts +57 -0
  416. package/app/components/05.forms/input-button/CONSUMER-STYLING.md +52 -7
  417. package/app/components/05.forms/input-button/{InputButtonCore.vue → InputButton.vue} +60 -18
  418. package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts → input-button.playwright.ts} +5 -5
  419. package/app/components/05.forms/input-button/stories/{InputButtonCore.stories.ts → InputButton.stories.ts} +8 -10
  420. package/app/components/05.forms/input-button/tests/{InputButtonCore.spec.ts → InputButton.spec.ts} +75 -19
  421. package/app/components/05.forms/input-button/tests/__snapshots__/{InputButtonCore.spec.ts.snap → InputButton.spec.ts.snap} +18 -18
  422. package/app/components/05.forms/input-checkbox/CONSUMER-STYLING.md +93 -0
  423. package/app/components/05.forms/input-checkbox/MultipleCheckboxes.vue +19 -25
  424. package/app/components/05.forms/input-checkbox/SingleCheckbox.vue +17 -43
  425. package/app/components/05.forms/input-checkbox/stories/MultipleCheckboxes.stories.ts +104 -0
  426. package/app/components/05.forms/input-checkbox/stories/SingleCheckbox.stories.ts +75 -0
  427. package/app/components/05.forms/input-checkbox/tests/MultipleCheckboxes.spec.ts +91 -53
  428. package/app/components/05.forms/input-checkbox/tests/SingleCheckbox.spec.ts +112 -0
  429. package/app/components/05.forms/input-checkbox-radio/CONSUMER-STYLING.md +115 -35
  430. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadio.vue +158 -0
  431. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioButton.vue +102 -101
  432. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioField.vue +100 -0
  433. package/app/components/05.forms/input-checkbox-radio/stories/{InputCheckboxRadioCore.stories.ts → InputCheckboxRadio.stories.ts} +23 -8
  434. package/app/components/05.forms/input-checkbox-radio/stories/InputCheckboxRadioButton.stories.ts +60 -16
  435. package/app/components/05.forms/input-checkbox-radio/stories/InputCheckboxRadioField.stories.ts +93 -0
  436. package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadio.spec.ts +174 -0
  437. package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadioButton.spec.ts +87 -0
  438. package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadioField.spec.ts +87 -0
  439. package/app/components/05.forms/input-description/CONSUMER-STYLING.md +177 -0
  440. package/app/components/05.forms/input-description/InputDescription.vue +45 -24
  441. package/app/components/05.forms/input-description/stories/InputDescription.stories.ts +160 -0
  442. package/app/components/05.forms/input-description/tests/InputDescription.spec.ts +62 -386
  443. package/app/components/05.forms/input-label/CONSUMER-STYLING.md +134 -0
  444. package/app/components/05.forms/input-label/InputLabel.vue +99 -38
  445. package/app/components/05.forms/input-label/stories/InputLabel.stories.ts +236 -0
  446. package/app/components/05.forms/input-label/tests/InputLabel.spec.ts +113 -342
  447. package/app/components/05.forms/input-number/CONSUMER-STYLING.md +16 -7
  448. package/app/components/05.forms/input-number/{InputNumberCore.vue → InputNumber.vue} +6 -6
  449. package/app/components/05.forms/input-number/{variants/InputNumberDefault.vue → InputNumberField.vue} +12 -15
  450. package/app/components/05.forms/input-number/stories/{InputNumberCore.stories.ts → InputNumber.stories.ts} +6 -6
  451. package/app/components/05.forms/input-number/{variants/stories/InputNumberDefault.stories.ts → stories/InputNumberField.stories.ts} +5 -5
  452. package/app/components/05.forms/input-number/tests/{InputNumberCore.spec.ts → InputNumber.spec.ts} +2 -2
  453. package/app/components/05.forms/input-number/{variants/tests/InputNumberDefault.spec.ts → tests/InputNumberField.spec.ts} +8 -8
  454. package/app/components/05.forms/input-radio/CONSUMER-STYLING.md +70 -0
  455. package/app/components/05.forms/input-radio/MultipleRadiobuttons.vue +19 -30
  456. package/app/components/05.forms/input-radio/stories/MultipleRadiobuttons.stories.ts +116 -0
  457. package/app/components/05.forms/input-radio/tests/MultipleRadioButtons.spec.ts +125 -74
  458. package/app/components/05.forms/input-range/CONSUMER-STYLING.md +13 -0
  459. package/app/components/05.forms/input-range/InputRangeCore.vue +1 -1
  460. package/app/components/05.forms/input-range/{variants/InputRangeDefault.vue → InputRangeDefault.vue} +7 -11
  461. package/app/components/05.forms/input-range/{variants/tests → tests}/InputRangeDefault.spec.ts +1 -1
  462. package/app/components/05.forms/input-select/CONSUMER-STYLING.md +11 -2
  463. package/app/components/05.forms/input-select/{variants/InputSelectWithLabel.vue → InputSelectWithLabel.vue} +6 -9
  464. package/app/components/05.forms/input-select/stories/InputSelectWithLabel.stories.ts +1 -1
  465. package/app/components/05.forms/input-text/CONSUMER-STYLING.md +12 -3
  466. package/app/components/05.forms/input-text/{variants/InputPasswordWithLabel.vue → InputPasswordWithLabel.vue} +3 -3
  467. package/app/components/05.forms/input-text/{variants/InputTextAsNumberWithLabel.vue → InputTextAsNumberWithLabel.vue} +12 -15
  468. package/app/components/05.forms/input-text/InputTextCore.vue +8 -11
  469. package/app/components/05.forms/input-text/{variants/InputTextWithLabel.vue → InputTextWithLabel.vue} +9 -10
  470. package/app/components/05.forms/input-text/stories/InputPasswordWithLabel.stories.ts +1 -1
  471. package/app/components/05.forms/input-text/stories/InputTextAsNumberWithLabel.stories.ts +1 -1
  472. package/app/components/05.forms/input-text/stories/InputTextWithLabel.stories.ts +1 -1
  473. package/app/components/05.forms/input-text/tests/InputPasswordWithLabel.spec.ts +2 -1
  474. package/app/components/05.forms/input-text/tests/InputTextAsNumberWithLabel.spec.ts +1 -1
  475. package/app/components/05.forms/input-text/tests/InputTextWithLabel.spec.ts +2 -1
  476. package/app/components/05.forms/input-textarea/CONSUMER-STYLING.md +11 -2
  477. package/app/components/05.forms/input-textarea/{variants/InputTextareaWithLabel.vue → InputTextareaWithLabel.vue} +3 -7
  478. package/app/components/05.forms/input-textarea/stories/InputTextareaWithLabel.stories.ts +1 -1
  479. package/app/components/05.forms/patterns/stories/ContactForm.stories.ts +9 -10
  480. package/app/components/05.forms/patterns/stories/LoginForm.stories.ts +10 -10
  481. package/app/components/05.forms/patterns/stories/MigratedFieldsForm.stories.ts +246 -101
  482. package/app/components/05.forms/pending-effect/CONSUMER-STYLING.md +92 -0
  483. package/app/components/05.forms/pending-effect/PendingEffect.vue +52 -45
  484. package/app/components/05.forms/pending-effect/stories/PendingEffect.stories.ts +132 -0
  485. package/app/components/05.forms/pending-effect/tests/PendingEffect.spec.ts +67 -0
  486. package/app/components/05.forms/toggle-switch/CONSUMER-STYLING.md +26 -2
  487. package/app/components/05.forms/toggle-switch/ToggleSwitchCore.vue +10 -29
  488. package/app/components/05.forms/toggle-switch/{variants/ToggleSwitchWithLabel.vue → ToggleSwitchWithLabel.vue} +25 -12
  489. package/app/components/05.forms/toggle-switch/{variants/ToggleSwitchWithLabelInline.vue → ToggleSwitchWithLabelInline.vue} +2 -4
  490. package/app/components/05.forms/toggle-switch/stories/ToggleSwitchWithLabel.stories.ts +2 -4
  491. package/app/components/05.forms/toggle-switch/stories/ToggleSwitchWithLabelInline.stories.ts +4 -1
  492. package/app/components/05.forms/toggle-switch/tests/ToggleSwitchWithLabel.spec.ts +133 -0
  493. package/app/components/05.forms/triple-toggle-switch/CONSUMER-STYLING.md +75 -62
  494. package/app/components/05.forms/triple-toggle-switch/TripleToggleSwitch.vue +243 -0
  495. package/app/components/05.forms/triple-toggle-switch/stories/TripleToggleSwitch.stories.ts +104 -0
  496. package/app/components/05.forms/triple-toggle-switch/tests/TripleToggleSwitch.spec.ts +138 -0
  497. package/app/composables/tests/useCancellableTimer.spec.ts +48 -0
  498. package/app/composables/tests/useMaxChildWidth.spec.ts +67 -0
  499. package/app/composables/useCancellableTimer.ts +27 -7
  500. package/app/composables/useMaxChildWidth.ts +4 -6
  501. package/app/types/app-config.d.ts +10 -0
  502. package/app/types/components/cookie-consent-banner.d.ts +3 -0
  503. package/app/types/components/index.ts +6 -1
  504. package/app/types/components/opening-hours.d.ts +48 -0
  505. package/app/types/components/price-list.d.ts +11 -0
  506. package/app/types/components/profile-section.d.ts +6 -0
  507. package/app/types/components/samaritan-prompt.d.ts +13 -0
  508. package/app/types/components/services-card.d.ts +9 -0
  509. package/app/types/components/slider-gallery.d.ts +2 -0
  510. package/app/types/components/social-icons-list.d.ts +2 -0
  511. package/app/types/forms/types.forms.d.ts +3 -0
  512. package/app/types/forms/types.zodFormControl.d.ts +0 -3
  513. package/app/utils/opening-hours.ts +44 -0
  514. package/nuxt.config.ts +5 -1
  515. package/package.json +2 -2
  516. package/ramps.config.mjs +1 -1
  517. package/.claude/commands/create-commit-message.md +0 -13
  518. package/.claude/commands/create-release-notes.md +0 -34
  519. package/.claude/commands/migrate-component.md +0 -169
  520. package/.claude/commands/run-commit.md +0 -13
  521. package/.claude/component-ledger/artifact-url.txt +0 -1
  522. package/.claude/component-ledger/audit.json +0 -1
  523. package/.claude/component-ledger/build.mjs +0 -164
  524. package/.claude/component-ledger/output.html +0 -569
  525. package/.claude/component-ledger/template.html +0 -569
  526. package/.claude/hooks/check-component-update.sh +0 -95
  527. package/.claude/hooks/refresh-component-ledger.sh +0 -32
  528. package/.claude/settings.json +0 -134
  529. package/.claude/settings.local.json +0 -38
  530. package/.claude/skills/components/alert-content-inner.md +0 -60
  531. package/.claude/skills/components/navigation-horizontal.md +0 -99
  532. package/.claude/skills/components/samaritan-prompt-mixed.md +0 -139
  533. package/app/components/01.atoms/content-wrappers/content-columns-2/ContentColumns2.vue +0 -51
  534. package/app/components/01.atoms/content-wrappers/content-columns-2/stories/ContentColumns2.stories.ts +0 -110
  535. package/app/components/01.atoms/content-wrappers/content-columns-2/tests/ContentColumns2.spec.ts +0 -105
  536. package/app/components/01.atoms/content-wrappers/content-columns-2/tests/__snapshots__/ContentColumns2.spec.ts.snap +0 -14
  537. package/app/components/01.atoms/content-wrappers/content-width/ContentWidth.vue +0 -88
  538. package/app/components/01.atoms/content-wrappers/content-width/stories/ContentWidth.stories.ts +0 -362
  539. package/app/components/01.atoms/content-wrappers/content-width/tests/ContentWidth.spec.ts +0 -132
  540. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/tests/__snapshots__/LayoutGrid.spec.ts.snap +0 -36
  541. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/LayoutGridByWidth.vue +0 -70
  542. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/stories/LayoutGridByWidth.stories.ts +0 -220
  543. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/LayoutGridByWidth.spec.ts +0 -174
  544. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/__snapshots__/LayoutGrid.spec.ts.snap +0 -36
  545. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/__snapshots__/LayoutGridByCols.spec.ts.snap +0 -36
  546. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/__snapshots__/LayoutGridByWidth.spec.ts.snap +0 -36
  547. package/app/components/01.atoms/cookie-consent-banner/CookieConsentBanner.vue +0 -148
  548. package/app/components/01.atoms/display-avatar/DisplayAvatar.vue +0 -130
  549. package/app/components/01.atoms/display-avatar/tests/__snapshots__/DisplayAvatar.spec.ts.snap +0 -11
  550. package/app/components/02.molecules/action-menu/tests/__snapshots__/ActionMenuItemCore.spec.ts.snap +0 -27
  551. package/app/components/02.molecules/navigation/navigation-horizontal/NavigationHorizontal.vue +0 -162
  552. package/app/components/02.molecules/navigation/navigation-horizontal/stories/NavigationHorizontal.stories.ts +0 -373
  553. package/app/components/02.molecules/navigation/navigation-horizontal/tests/NavigationHorizontal.spec.ts +0 -152
  554. package/app/components/02.molecules/navigation/navigation-horizontal/tests/__snapshots__/NavigationHorizontal.spec.ts.snap +0 -17
  555. package/app/components/02.molecules/qr-code/stories/QrCode.stories.ts +0 -101
  556. package/app/components/03.organisms/colour-finder/ColourFinder.vue +0 -1519
  557. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioCore.vue +0 -202
  558. package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioWithLabel.vue +0 -105
  559. package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadioCore.spec.ts +0 -320
  560. package/app/components/05.forms/toggle-switch/variants/tests/ToggleSwitchWithLabel.spec.ts +0 -77
  561. package/app/components/05.forms/triple-toggle-switch/TripleToggleSwitchCore.vue +0 -314
  562. package/app/components/05.forms/triple-toggle-switch/stories/TripleToggleSwitchCore.stories.ts +0 -63
  563. package/.vscode/{srcdev-component-dialog.code-snippets → srcdev-component-display-dialog.code-snippets} +0 -0
  564. package/app/components/{01.atoms → 02.molecules}/toast/tests/DisplayToast.spec.ts +1 -1
  565. /package/app/components/{01.atoms → 02.molecules}/toast/tests/DisplayToastProvider.spec.ts +0 -0
  566. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-icons-secondary-chromium-darwin.png +0 -0
  567. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-icons-secondary-firefox-darwin.png +0 -0
  568. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-icons-secondary-webkit-darwin.png +0 -0
  569. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-icons-tertiary-chromium-darwin.png +0 -0
  570. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-icons-tertiary-firefox-darwin.png +0 -0
  571. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-icons-tertiary-webkit-darwin.png +0 -0
  572. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-primary-pending-chromium-darwin.png +0 -0
  573. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-primary-pending-firefox-darwin.png +0 -0
  574. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-primary-pending-webkit-darwin.png +0 -0
  575. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-secondary-pill-chromium-darwin.png +0 -0
  576. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-secondary-pill-firefox-darwin.png +0 -0
  577. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-secondary-pill-webkit-darwin.png +0 -0
  578. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-tertiary-readonly-chromium-darwin.png +0 -0
  579. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-tertiary-readonly-firefox-darwin.png +0 -0
  580. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/combo-tertiary-readonly-webkit-darwin.png +0 -0
  581. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-chromium-darwin.png +0 -0
  582. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-firefox-darwin.png +0 -0
  583. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-default-chromium-darwin.png +0 -0
  584. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-default-firefox-darwin.png +0 -0
  585. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-default-webkit-darwin.png +0 -0
  586. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-error-chromium-darwin.png +0 -0
  587. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-error-firefox-darwin.png +0 -0
  588. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-error-webkit-darwin.png +0 -0
  589. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-success-chromium-darwin.png +0 -0
  590. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-success-firefox-darwin.png +0 -0
  591. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-success-webkit-darwin.png +0 -0
  592. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-warning-chromium-darwin.png +0 -0
  593. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-warning-firefox-darwin.png +0 -0
  594. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-theme-warning-webkit-darwin.png +0 -0
  595. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-primary-chromium-darwin.png +0 -0
  596. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-primary-firefox-darwin.png +0 -0
  597. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-primary-webkit-darwin.png +0 -0
  598. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-secondary-chromium-darwin.png +0 -0
  599. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-secondary-firefox-darwin.png +0 -0
  600. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-secondary-webkit-darwin.png +0 -0
  601. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-tertiary-chromium-darwin.png +0 -0
  602. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-tertiary-firefox-darwin.png +0 -0
  603. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-variant-tertiary-webkit-darwin.png +0 -0
  604. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/default-webkit-darwin.png +0 -0
  605. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/nuxt-icon-only-component-chromium-darwin.png +0 -0
  606. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/nuxt-icon-only-component-firefox-darwin.png +0 -0
  607. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/nuxt-icon-only-component-webkit-darwin.png +0 -0
  608. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-pending-chromium-darwin.png +0 -0
  609. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-pending-firefox-darwin.png +0 -0
  610. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-pending-webkit-darwin.png +0 -0
  611. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-pill-chromium-darwin.png +0 -0
  612. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-pill-firefox-darwin.png +0 -0
  613. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-pill-webkit-darwin.png +0 -0
  614. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-readonly-chromium-darwin.png +0 -0
  615. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-readonly-firefox-darwin.png +0 -0
  616. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/state-readonly-webkit-darwin.png +0 -0
  617. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/with-both-nuxt-icon-components-chromium-darwin.png +0 -0
  618. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/with-both-nuxt-icon-components-firefox-darwin.png +0 -0
  619. /package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts-snapshots → input-button.playwright.ts-snapshots}/with-both-nuxt-icon-components-webkit-darwin.png +0 -0
  620. /package/app/components/05.forms/input-range/{variants/stories → stories}/InputRangeDefault.stories.ts +0 -0
  621. /package/app/components/05.forms/input-select/{variants/tests → tests}/InputSelectWithLabel.spec.ts +0 -0
  622. /package/app/components/05.forms/input-textarea/{variants/tests → tests}/InputTextareaWithLabel.spec.ts +0 -0
  623. /package/app/components/05.forms/toggle-switch/{variants/tests → tests}/ToggleSwitchWithLabelInline.spec.ts +0 -0
  624. /package/app/types/components/{navigation-horizontal.d.ts → nav-item.d.ts} +0 -0
@@ -71,6 +71,7 @@ Use when the component has `v-model`, reactive state, or named slots that need t
71
71
 
72
72
  ```ts
73
73
  import type { Meta, StoryFn } from "@nuxtjs/storybook";
74
+ import { computed } from "vue";
74
75
  import StorybookComponent from "../ComponentName.vue";
75
76
 
76
77
  interface ComponentStoryArgs {
@@ -117,13 +118,16 @@ export default {
117
118
  const Template: StoryFn<ComponentStoryArgs> = (args) => ({
118
119
  components: { StorybookComponent },
119
120
  setup() {
120
- const { modelValue, ...otherArgs } = args;
121
- const inputValue = ref(modelValue);
122
- return { inputValue, args: otherArgs, useSlot: args.useSlot, slotContent: args.slotContent };
121
+ // Strip non-prop extra args inside a computed, never at setup time (see below)
122
+ const componentArgs = computed(() => {
123
+ const { modelValue: _modelValue, useSlot: _useSlot, slotContent: _slotContent, ...rest } = args;
124
+ return rest;
125
+ });
126
+ return { args, componentArgs };
123
127
  },
124
128
  template: `
125
- <StorybookComponent v-model="inputValue" v-bind="args">
126
- <template v-if="useSlot" #slotName>{{ slotContent }}</template>
129
+ <StorybookComponent v-model="args.modelValue" v-bind="componentArgs">
130
+ <template v-if="args.useSlot" #slotName>{{ args.slotContent }}</template>
127
131
  </StorybookComponent>
128
132
  `,
129
133
  });
@@ -135,6 +139,39 @@ export const WithSlot = Template.bind({});
135
139
  WithSlot.args = { useSlot: true, slotContent: "Custom content" };
136
140
  ```
137
141
 
142
+ ### Reacting to a Controls change
143
+
144
+ Storybook mounts the story once and mutates `args` in place on every Controls change; `setup()`
145
+ never re-runs. So:
146
+
147
+ - **Don't destructure or copy `args` at setup time** (`const { x, ...rest } = args`, `ref(args.x)`):
148
+ it's a one-time snapshot and the control silently stops working. Read `args.x` in the template,
149
+ or destructure inside a `computed()`. The Component Ledger's `story_args_bug` column flags this.
150
+ - **Don't `watch(() => args.x)` either.** The template does pick up the new value, but the
151
+ watcher never fires (found 2026-09-27 in `InputCheckboxRadioButton`'s Option group story, where
152
+ a `watch` meant to reset local state on a `type` switch did nothing). When a control change
153
+ must reset local state, move that state into a small inline child component and key it on the
154
+ arg, so the change remounts it:
155
+
156
+ ```ts
157
+ const Group = defineComponent({
158
+ props: { type: { type: String, required: true } },
159
+ setup(props) {
160
+ const selected = ref(props.type === "checkbox" ? [] : "");
161
+ return { selected };
162
+ },
163
+ template: `...`,
164
+ });
165
+
166
+ const Template: StoryFn<StoryArgs> = (args) => ({
167
+ components: { Group },
168
+ setup: () => ({ args }),
169
+ template: `<Group :key="args.type" :type="args.type" />`,
170
+ });
171
+ ```
172
+
173
+ Don't name the inline component the same as an exported story (`TS2451: Cannot redeclare`).
174
+
138
175
  ## Title format
139
176
 
140
177
  `"Category/Subcategory/ComponentName"` — this becomes the Storybook sidebar path and the
@@ -236,10 +273,21 @@ Key points:
236
273
 
237
274
  ## Notes
238
275
 
276
+ - **Colour scheme:** `.storybook/preview.ts` pins every story to the light scheme
277
+ (`html[data-color-scheme="light"]`, off-white `--slate-00` stage) by default, whatever the OS
278
+ setting. Use the toolbar "Colour scheme" menu (Light / Dark / Follow OS) to check dark mode.
279
+ Don't hardcode a stage background in a story to get a light canvas; it's already the default.
239
280
  - Use `table: { category: "..." }` in `argTypes` when a component has many props — it groups
240
281
  them in the Storybook controls panel (e.g. `"Model"`, `"Basic"`, `"Validation"`, `"Styling"`, `"Slots"`).
241
282
  - Export multiple named stories (`Default`, `WithError`, `Outlined`, etc.) when you want
242
283
  Playwright to test distinct visual states via separate story URLs.
284
+ - **Every story inherits the meta's `argTypes`**, so its Controls panel shows them even if the
285
+ story ignores `args`. A template written as `StoryFn = () => ({...})` never receives `args`, so
286
+ those controls silently do nothing (found 2026-09-25 on `InputCheckboxRadioButton`'s
287
+ `OptionGroup`: switching `type` to `radio` changed nothing). Either take `(args)` and bind the
288
+ controls that make sense (hide irrelevant ones with `Story.argTypes = { x: { table: { disable: true } } }`),
289
+ or, for a fixed showcase (comparisons, all-themes grids, composition examples), add
290
+ `controls: { disable: true }` to that story's `parameters`.
243
291
 
244
292
  ## Scroll/animation-driven effects need surrounding chrome, not just the bare component
245
293
 
@@ -105,7 +105,7 @@ and replace `/` with `-`:
105
105
  | Story `title` | `STORY_BASE` |
106
106
  | ------------------------------------------------- | ----------------------------------------------- |
107
107
  | `"Atoms/Text Blocks/HeroText"` | `atoms-text-blocks-herotext` |
108
- | `"Components/Forms/Input Button/InputButtonCore"` | `components-forms-input-button-inputbuttoncore` |
108
+ | `"Components/Forms/Input Button/InputButton"` | `components-forms-input-button-inputbuttoncore` |
109
109
 
110
110
  The full story URL pattern is:
111
111
 
@@ -60,8 +60,8 @@ Defined in `ramps.config.mjs`, generated to `_theme-params.css` as `--palette-{n
60
60
  | red | 30 | 0.24 | Error/danger theme |
61
61
  | green | 157 | 0.19 | Success theme |
62
62
  | amber | 75 | 0.19 | |
63
- | orange | 60 | 0.15 | |
64
- | sunset | 50 | 0.22 | Warning theme — drift: -25 |
63
+ | orange | 55 | 0.19 | Warning theme |
64
+ | sunset | 50 | 0.22 | drift: -25 (amber to red-orange) |
65
65
  | slate | 260 | 0.02 | Near-neutral grey |
66
66
 
67
67
  Also generates one named-step file per palette, e.g. `_blue.css` with `--blue-00` … `--blue-10`.
@@ -105,7 +105,7 @@ Additional context tokens (declared in `_default.css`):
105
105
  |--------------------|---------|----------------------------------------------|
106
106
  | `"default"` | blue | Page-level default |
107
107
  | `"success"` | green | |
108
- | `"warning"` | sunset | Overrides surface to step 5 for warm feel |
108
+ | `"warning"` | orange | Surface step 6, hover step 7 (both modes), for AA text contrast |
109
109
  | `"error"` | red | Also applied on `[data-invalid]` elements |
110
110
 
111
111
  ## Generator
@@ -159,6 +159,21 @@ Produces `_gold.css` with `--gold-00` … `--gold-10`, and adds `--palette-gold-
159
159
  }
160
160
  ```
161
161
 
162
+ 1. Add a story export for it in `stories/foundations/colour-ramps/ColourRamps.stories.ts`
163
+ (`export const Gold: Story = rampStory("gold");`). The "All Ramps" story picks new ramps up
164
+ automatically, but Storybook needs a static export per ramp page.
165
+
166
+ ## Storybook reference (Foundations)
167
+
168
+ `Foundations/Colour Ramps` in Storybook is the visual reference for this system: a Setup Guide
169
+ (consumer instructions, `SetupGuide.mdx`), an All Ramps overview, and one page per ramp showing
170
+ each step's oklch and hex value (flagged P3 when the hex is a clipped sRGB fallback), contrast
171
+ against white and black text, the theme roles it plays (parsed from `03.theming/*.css`), and
172
+ which components reference it by name (scanned from `app/` source via `import.meta.glob`).
173
+ Everything is derived from `ramps.config.mjs` and the source, so it never needs manual
174
+ updating beyond the per-ramp story export. It lives in the root `stories/` folder, which is not
175
+ in the package `files` list, so it doesn't ship to consumers.
176
+
162
177
  ## Consumer app: generating a custom palette
163
178
 
164
179
  The recommended approach is to generate named colour files so you can reference clean step
@@ -326,3 +341,10 @@ The `useColourScheme()` composable toggles the `.light` / `.dark` class on `<htm
326
341
  | 310–360| Magenta / rose |
327
342
 
328
343
  Use [oklch.com](https://oklch.com) to preview values before committing.
344
+
345
+ > Changed 2026-09-27: `orange` moved from hue 60 / chroma 0.15 to hue 55 / chroma 0.19 (the old
346
+ > values read as brown, not orange), and the warning theme switched from `sunset` to `orange` so
347
+ > warning inputs, alerts, prompts and buttons read as orange rather than red-orange. `sunset`
348
+ > remains available as a named ramp. Warning's filled surface then moved from step
349
+ > 05 (light) / 04 (dark) to step 06 in both modes, hover step 07: step 06 is the lightest orange
350
+ > where the near-white `--theme-on-surface` text meets AA (4.65:1; step 05 was 3.3:1).
@@ -16,7 +16,7 @@ practice.
16
16
 
17
17
  ## Why this replaced the old pattern
18
18
 
19
- Two things used to go wrong, both found while auditing `luxury-locs-by-natasha`'s theming
19
+ Two things used to go wrong, both found while auditing a consumer app's theming
20
20
  overrides (2026-08-25):
21
21
 
22
22
  1. **Bare `var(--theme-checkbox-symbol-color)` with no fallback anywhere.** The only way for this
@@ -26,7 +26,7 @@ overrides (2026-08-25):
26
26
  `var()` with an undefined custom property and no fallback just resolves to the property's
27
27
  initial value; there is no error, no warning, ever.
28
28
  2. **Tokens that were "shared" only by accident.** `InputTextCore`, `InputSelectCore`,
29
- `InputNumberCore` and the checkbox button all read the exact same `--theme-input-surface`, so a
29
+ `InputNumber` and the checkbox button all read the exact same `--theme-input-surface`, so a
30
30
  consumer wanting to restyle just text inputs had no way to do that without also restyling every
31
31
  other input type. The private `--_input-text-surface: var(--theme-input-surface);` indirection
32
32
  made this look like it had its own override point when it didn't.
@@ -49,7 +49,7 @@ an inline fallback, even if that fallback happens to be a Tier 1 or Tier 2 token
49
49
  - `--input-button-primary-surface` / `-surface-hover` — variant + property + state
50
50
  - `--services-card-border-colour` / `-border-colour-hover` — property + state
51
51
  - Only add a `-hover`/`-focus`/`-active` suffix if that state's value actually differs from the
52
- base token. If hover reuses the exact same value as base (see `InputButtonCore`'s primary text
52
+ base token. If hover reuses the exact same value as base (see `InputButton`'s primary text
53
53
  colour, fixed on purpose across states), reuse the base token — don't manufacture a second name
54
54
  for a value that never diverges.
55
55
 
@@ -59,7 +59,7 @@ A component that wants to *look like* another component's default (rather than d
59
59
  raw value) chains through it:
60
60
 
61
61
  ```css
62
- /* InputCopy's copy button defaults to InputButtonCore's primary look */
62
+ /* InputCopy's copy button defaults to InputButton's primary look */
63
63
  --_button-bg: var(--input-copy-button-bg, var(--input-button-primary-surface, var(--theme-surface)));
64
64
  ```
65
65
 
@@ -76,44 +76,44 @@ consuming app having declared anything.
76
76
 
77
77
  ## Rollout status
78
78
 
79
- - ✅ `InputButtonCore` (primary/secondary/tertiary), `InputCopy`, `PricingCard` — migrated
79
+ - ✅ `InputButton` (primary/secondary/tertiary), `InputCopy`, `PricingCard` — migrated
80
80
  2026-08-25, see their `CONSUMER-STYLING.md` for the full token list. This pass also included a
81
81
  deliberate visual redesign (flat borders, `color-mix()`-darkened hover, transparent resting
82
82
  outline, separated `:focus-visible`), not just the token API change.
83
- - ✅ `InputCheckboxRadioCore`/`Button` — migrated 2026-08-25, see their `CONSUMER-STYLING.md`.
84
- Pure token-rename pass, no visual/default changes (unlike `InputButtonCore`'s redesign above).
85
- Added Storybook stories for both (`InputCheckboxRadioCore`, `InputCheckboxRadioButton`) —
83
+ - ✅ `InputCheckboxRadio`/`Button` — migrated 2026-08-25, see their `CONSUMER-STYLING.md`.
84
+ Pure token-rename pass, no visual/default changes (unlike `InputButton`'s redesign above).
85
+ Added Storybook stories for both (`InputCheckboxRadio`, `InputCheckboxRadioButton`) —
86
86
  neither had one before.
87
- - ✅ `InputTextCore`, `InputSelectCore`, `InputNumberCore` — migrated 2026-08-25, see their
87
+ - ✅ `InputTextCore`, `InputSelectCore`, `InputNumber` — migrated 2026-08-25, see their
88
88
  `CONSUMER-STYLING.md`. `InputTextCore`/`InputSelectCore` also had this exact problem's original
89
89
  form: a private `--_input-text-*`/`--_input-select-*` naming scheme documented as a second
90
90
  "local override path" alongside the global tokens, added 2026-08-22 (three days before this
91
91
  pattern was formalised) as a workaround for a global-override-not-landing report that was never
92
92
  root-caused. That private-var-as-override-point shape is exactly what this pattern replaces —
93
- renamed public with real fallbacks, old two-path docs removed. `InputNumberCore` had no
93
+ renamed public with real fallbacks, old two-path docs removed. `InputNumber` had no
94
94
  component-scoped tokens at all before this (bare `--theme-input-*` throughout). Added a
95
- Storybook story for `InputSelectCore` (didn't have one); `InputNumberCore` still doesn't.
95
+ Storybook story for `InputSelectCore` (didn't have one); `InputNumber` still doesn't.
96
96
  `InputTextCore`/`InputSelectCore`'s `.normal` variant also had hover and `:focus-visible` share
97
97
  one token (literally the same rule content duplicated under two selectors) — split into
98
98
  `--input-text-border-hover`/`--input-select-border-hover` alongside the existing `-border-focus`
99
99
  pair, both still defaulting to `--theme-border-focus` so default rendering is unchanged, but
100
- mouse and assistive-tech interaction can now be themed independently. `InputNumberCore` has no
100
+ mouse and assistive-tech interaction can now be themed independently. `InputNumber` has no
101
101
  hover state on its border at all (only a `:focus-visible` box-shadow toggle), so there was
102
102
  nothing to split there.
103
- - ✅ `ToggleSwitchCore`, `TripleToggleSwitchCore`, `DisplayThemeSwitch` — migrated 2026-08-25, see
103
+ - ✅ `ToggleSwitchCore`, `TripleToggleSwitch`, `DisplayThemeSwitch` — migrated 2026-08-25, see
104
104
  the first two's `CONSUMER-STYLING.md`. Correction to the two lines this replaces: they claimed
105
105
  `ToggleSwitchCore` read a bare `--theme-toggle-symbol-color-*` — that token doesn't exist
106
106
  anywhere in this codebase and never did; false memory from conflating it with the checkbox
107
107
  fix. `ToggleSwitchCore` itself turned out to be a plain Tier 2 case (real, live tokens, just no
108
108
  component-scoped override point) plus five confirmed-dead private locals (declared, never read
109
- anywhere in the file) removed outright. The real dead-token bug was in `TripleToggleSwitchCore`
109
+ anywhere in the file) removed outright. The real dead-token bug was in `TripleToggleSwitch`
110
110
  (and duplicated in `DisplayThemeSwitch`'s own override): `--theme-form-radio-border`,
111
111
  `--theme-form-radio-outline`, `--theme-form-checkbox-bg` — all three declared nowhere in the
112
112
  layer. The first two fed two further-unused private locals (removed); the third fed the
113
113
  selected-option marker's background (real bug, narrow impact — only visible when none of the
114
114
  component's `system`/`light`/`dark` `:has()` overrides match).
115
115
 
116
- Second bug, found while adding the Storybook story `TripleToggleSwitchCore` never had: those
116
+ Second bug, found while adding the Storybook story `TripleToggleSwitch` never had: those
117
117
  `:has()` selectors (and the matching `.option-icon.system/.light/.dark` classes, template-bound
118
118
  to each option's `id`) said `"auto"`, not `"system"` — but the only known consumer,
119
119
  `DisplayThemeSwitch`, has only ever emitted `id`/`value: "system"` (it has to; that literal
@@ -121,6 +121,6 @@ consuming app having declared anything.
121
121
  `"auto"` never matched anything real, so the system option's green gradient marker had never
122
122
  actually fired — confirmed live before and after the fix. Renamed the selectors to `"system"`
123
123
  rather than the data, since the data value is a real external contract this component's
124
- presentational selectors have no business dictating. `TripleToggleSwitchCore` still hardcodes
124
+ presentational selectors have no business dictating. `TripleToggleSwitch` still hardcodes
125
125
  three option values as CSS selectors rather than being genuinely value-agnostic — noted in its
126
126
  `CONSUMER-STYLING.md`, left as a larger separate change.
@@ -140,6 +140,13 @@ palette by name.
140
140
  @import "./03.theming/_default.css";
141
141
  ```
142
142
 
143
+ **Per-component site defaults:** once you start setting a component's own public tokens site-wide
144
+ (e.g. CardCore's background and radius), give each component its own `03.theming/_<component>.css`
145
+ using the same `:where(html) { ... }` shape, and switch to a `03.theming/index.css` that imports
146
+ `_default.css` plus each component file, then `@import "./03.theming/";` here instead. See
147
+ "Site-wide component defaults" in `component-local-style-override.md` for why `:where(html)`,
148
+ and `consumer-styles-structure.md` for the full consumer `setup/` tree.
149
+
143
150
  ### 7. Wire up the CSS entry point
144
151
 
145
152
  `app/assets/styles/main.css`:
@@ -40,7 +40,7 @@ affects buttons, inputs, prompts, and toasts simultaneously:
40
40
  | --------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
41
41
  | `--theme-surface` | `--colour-theme-7` / `9` | Filled button/chip surface |
42
42
  | `--theme-surface-hover` | `--colour-theme-9` / `7` | Hover state of filled surface |
43
- | `--theme-surface-inverted` | `--colour-theme-9` / `2` | Inverted surface (`InputButtonCore`'s `.secondary` background) |
43
+ | `--theme-surface-inverted` | `--colour-theme-9` / `2` | Inverted surface (`InputButton`'s `.secondary` background) |
44
44
  | `--theme-accent` | `--colour-theme-5` / `4` | Decorative accent strip (prompt/toast left edge) |
45
45
  | `--theme-surface-subtle` | `--colour-theme-1` / `9` | Subtle body bg for prompt/toast, outline element hover |
46
46
  | `--theme-border` | `--colour-theme-6` / `5` | Input/card border |
@@ -104,6 +104,6 @@ labels), and so on upward for headings.
104
104
  needs the same `var(--step-N)` treatment, since it inherits the same `62.5%` root reset via the
105
105
  layer's global CSS.
106
106
  - Caught in the wild: a docs-page sidebar/TOC/code-block set of components in a consumer app
107
- (`guidemyhair`) shipped with raw `0.75rem`/`0.85rem`/`0.9rem` font-sizes, assuming a 16px root —
107
+ shipped with raw `0.75rem`/`0.85rem`/`0.9rem` font-sizes, assuming a 16px root —
108
108
  rendered far too small once the layer's `62.5%` reset applied. Fixed by switching every one to the
109
109
  matching `--step-N` token.
@@ -38,7 +38,7 @@ Vercel reads `.nvmrc` and provisions Node 24 (npm 11), which handles the version
38
38
 
39
39
  If `.nvmrc` is ever accidentally deleted, recreate it immediately. This applies to:
40
40
  - `nuxt-components` (the layer)
41
- - Every consumer app (`instepreflexology`, `luxury-locs-by-natasha-nuxt3`, etc.)
41
+ - Every consumer app
42
42
 
43
43
  ## Notes
44
44
 
@@ -0,0 +1,42 @@
1
+ {
2
+ "SRCDEV ActionMenu": {
3
+ "description": "ActionMenu with indexed item-{n} slots, each holding one ActionMenuItem",
4
+ "scope": "vue,html",
5
+ "body": [
6
+ "<ActionMenu label=\"${1:Open actions menu}\">",
7
+ " <template #item-0>",
8
+ " <ActionMenuItem label=\"${2:Edit}\" @click=\"$3\">",
9
+ " <template #icon><Icon name=\"${4:lucide:pencil}\" /></template>",
10
+ " </ActionMenuItem>",
11
+ " </template>",
12
+ " <template #item-1>",
13
+ " <ActionMenuItem label=\"${5:View}\" href=\"${6:/path}\" />",
14
+ " </template>",
15
+ "</ActionMenu>"
16
+ ]
17
+ },
18
+ "SRCDEV ActionMenu Looped": {
19
+ "description": "ActionMenu driven by an array via dynamic item-{n} slot names",
20
+ "scope": "vue,html",
21
+ "body": [
22
+ "<ActionMenu>",
23
+ " <template v-for=\"($1action, $2i) in $3actions\" :key=\"$1action.label\" #[`item-${$2i}`]>",
24
+ " <ActionMenuItem :label=\"$1action.label\" :href=\"$1action.href\" @click=\"$1action.onClick\" />",
25
+ " </template>",
26
+ "</ActionMenu>"
27
+ ]
28
+ },
29
+ "SRCDEV ActionMenu CSS Override": {
30
+ "description": "CSS override scaffold for ActionMenu tokens",
31
+ "scope": "css",
32
+ "body": [
33
+ ".$1my-page {",
34
+ " --action-menu-trigger-icon-color: $2;",
35
+ " --action-menu-popover-background: $3;",
36
+ " --action-menu-popover-border: $4;",
37
+ " --action-menu-item-text-color: $5;",
38
+ " --action-menu-item-surface-hover: $6;",
39
+ "}"
40
+ ]
41
+ }
42
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "SRCDEV AlertContent Basic": {
3
+ "description": "AlertContent: themed alert panel with title and message",
4
+ "scope": "vue,html",
5
+ "body": [
6
+ "<AlertContent theme=\"${1|info,success,warning,error|}\">",
7
+ " <template #title>${2:Title}</template>",
8
+ " <template #content>${3:Message}</template>",
9
+ "</AlertContent>"
10
+ ]
11
+ },
12
+ "SRCDEV AlertContent Dismissible": {
13
+ "description": "AlertContent with a dismiss button",
14
+ "scope": "vue,html",
15
+ "body": [
16
+ "<AlertContent theme=\"${1|info,success,warning,error|}\" dismissible @dismiss=\"${2:onDismiss}\">",
17
+ " <template #content>${3:Message}</template>",
18
+ " <template #dismissLabel>${4:Close}</template>",
19
+ "</AlertContent>"
20
+ ]
21
+ },
22
+ "SRCDEV AlertContent Actions": {
23
+ "description": "AlertContent with a title, custom icon and a right-aligned actions row",
24
+ "scope": "vue,html",
25
+ "body": [
26
+ "<AlertContent theme=\"${1|info,success,warning,error|}\" custom-icon=\"${2:material-symbols:cookie-outline}\">",
27
+ " <template #title>${3:Title}</template>",
28
+ " <template #content>${4:Message}</template>",
29
+ " <template #actions>",
30
+ " <InputButton type=\"button\" variant=\"tertiary\" button-text=\"${5:Cancel}\" @click=\"${6:onCancel}\" />",
31
+ " <InputButton type=\"button\" variant=\"primary\" button-text=\"${7:Confirm}\" @click=\"${8:onConfirm}\" />",
32
+ " </template>",
33
+ "</AlertContent>"
34
+ ]
35
+ }
36
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "SRCDEV AlertMaskedContent Basic": {
3
+ "description": "AlertMaskedContent — alert with SVG accent-border mask and translucent fill",
4
+ "scope": "vue,html",
5
+ "body": [
6
+ "<AlertMaskedContent theme=\"${1|info,success,warning,error|}\">",
7
+ " <template #title>$2</template>",
8
+ " <template #content>$0</template>",
9
+ "</AlertMaskedContent>"
10
+ ]
11
+ },
12
+ "SRCDEV AlertMaskedContent Dismissible": {
13
+ "description": "AlertMaskedContent with dismiss button",
14
+ "scope": "vue,html",
15
+ "body": [
16
+ "<AlertMaskedContent theme=\"${1|info,success,warning,error|}\" dismissible @dismiss=\"$2\">",
17
+ " <template #title>$3</template>",
18
+ " <template #content>$0</template>",
19
+ "</AlertMaskedContent>"
20
+ ]
21
+ },
22
+ "SRCDEV AlertMaskedContent Custom Mask": {
23
+ "description": "AlertMaskedContent with custom mask geometry",
24
+ "scope": "vue,html",
25
+ "body": [
26
+ "<AlertMaskedContent",
27
+ " theme=\"${1|info,success,warning,error|}\"",
28
+ " :mask-config=\"{ radiusLeft: ${2:8}, radiusRight: ${3:4}, borderLeft: ${4:6}, borderTop: ${5:1}, borderRight: ${6:1}, borderBottom: ${7:1} }\"",
29
+ ">",
30
+ " <template #title>$8</template>",
31
+ " <template #content>$0</template>",
32
+ "</AlertMaskedContent>"
33
+ ]
34
+ }
35
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "SRCDEV AutoGrid Basic": {
3
+ "description": "Basic AutoGrid with a few named item slots",
4
+ "scope": "vue,html",
5
+ "body": [
6
+ "<AutoGrid>",
7
+ " <template #item-1>",
8
+ " $1",
9
+ " </template>",
10
+ " <template #item-2>",
11
+ " $2",
12
+ " </template>",
13
+ "</AutoGrid>"
14
+ ]
15
+ },
16
+ "SRCDEV AutoGrid Looped": {
17
+ "description": "AutoGrid rendering a v-for list via dynamic slot names",
18
+ "scope": "vue,html",
19
+ "body": [
20
+ "<AutoGrid${1: is-responsive}>",
21
+ " <template v-for=\"$2item in $3items\" :key=\"$2item.id\" #[$2item.id]>",
22
+ " $4",
23
+ " </template>",
24
+ "</AutoGrid>"
25
+ ]
26
+ },
27
+ "SRCDEV AutoGrid CSS Override": {
28
+ "description": "CSS override scaffold for AutoGrid tokens",
29
+ "scope": "css",
30
+ "body": [
31
+ ".$1my-page {",
32
+ " --auto-grid-gap: $2;",
33
+ " --auto-grid-min-col-size-default: $3;",
34
+ " --auto-grid-min-col-size-small: $4;",
35
+ " --auto-grid-min-col-size-large: $5;",
36
+ "}"
37
+ ]
38
+ }
39
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "SRCDEV CaptureQrCode": {
3
+ "description": "CaptureQrCode live camera scanner with localisable copy",
4
+ "scope": "vue,html",
5
+ "body": [
6
+ "<CaptureQrCode camera-stopped-label=\"${1:Camera stopped}\" reset-camera-label=\"${2:Reset camera}\" />"
7
+ ]
8
+ },
9
+ "SRCDEV CaptureQrCode Custom Error": {
10
+ "description": "CaptureQrCode with a custom, translated error block",
11
+ "scope": "vue,html",
12
+ "body": [
13
+ "<CaptureQrCode>",
14
+ " <template #error=\"{ error, reset }\">",
15
+ " <p>{{ error === 'NotAllowedError' ? '$1' : '$2' }}</p>",
16
+ " <InputButton variant=\"secondary\" button-text=\"$3\" @click=\"reset\" />",
17
+ " </template>",
18
+ "</CaptureQrCode>"
19
+ ]
20
+ },
21
+ "SRCDEV DecodeQrCode": {
22
+ "description": "DecodeQrCode image upload / drop decoder",
23
+ "scope": "vue,html",
24
+ "body": [
25
+ "<DecodeQrCode upload-label=\"${1:Upload a QR code image}\" drop-label=\"${2:Or drop a QR code image here}\" />"
26
+ ]
27
+ }
28
+ }
@@ -89,10 +89,10 @@
89
89
  "body": [
90
90
  ".$1my-content-docs {",
91
91
  " .content-docs {",
92
- " --docs-nav-link-icon-gap: $2;",
93
- " --docs-nav-link-icon-size: $3;",
94
- " --docs-nav-link-icon-order: $4rtl; /* icon at the end */",
95
- " --docs-page-nav-link-icon-order: $5ltr; /* icon at the start (default) */",
92
+ " --content-docs-link-icon-gap: $2;",
93
+ " --content-docs-link-icon-size: $3;",
94
+ " --content-docs-nav-link-icon-order: $4rtl; /* icon at the end */",
95
+ " --content-docs-page-nav-link-icon-order: $5ltr; /* icon at the start (default) */",
96
96
  " }",
97
97
  "}"
98
98
  ]
@@ -0,0 +1,33 @@
1
+ {
2
+ "SRCDEV CookieConsentBanner Basic": {
3
+ "description": "CookieConsentBanner: fixed Accept/Reject banner (built on AlertContent) driven by useCookieConsent, once in the default layout",
4
+ "scope": "vue,html",
5
+ "body": [
6
+ "<CookieConsentBanner />"
7
+ ]
8
+ },
9
+ "SRCDEV CookieConsentBanner Translated": {
10
+ "description": "CookieConsentBanner with translated copy and accessible name",
11
+ "scope": "vue,html",
12
+ "body": [
13
+ "<CookieConsentBanner :aria-label=\"${1:t('global.cookieConsent.ariaLabel')}\">",
14
+ " <template #title>{{ ${2:t('global.cookieConsent.title')} }}</template>",
15
+ " <template #message>{{ ${3:t('global.cookieConsent.message')} }}</template>",
16
+ " <template #acceptLabel>{{ ${4:t('global.cookieConsent.accept')} }}</template>",
17
+ " <template #rejectLabel>{{ ${5:t('global.cookieConsent.reject')} }}</template>",
18
+ "</CookieConsentBanner>"
19
+ ]
20
+ },
21
+ "SRCDEV CookieConsentBanner Tokens": {
22
+ "description": "CookieConsentBanner token overrides, scoped to the (teleported) banner root",
23
+ "scope": "css",
24
+ "body": [
25
+ ".cookie-consent-banner {",
26
+ " --cookie-consent-banner-max-width: ${1:64rem};",
27
+ " --cookie-consent-banner-accent: ${2:var(--theme-accent)};",
28
+ " --alert-content-inner-background: ${3:var(--theme-surface-subtle)};",
29
+ " --alert-content-text-colour: ${4:var(--theme-text)};",
30
+ "}"
31
+ ]
32
+ }
33
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "SRCDEV DisplayAvatar Image": {
3
+ "description": "DisplayAvatar: circular image avatar",
4
+ "scope": "vue,html",
5
+ "body": [
6
+ "<DisplayAvatar src=\"${1:/images/profile.jpg}\" alt=\"${2:Jane Smith}\" size=\"${3|md,xs,s,lg,xl|}\" />"
7
+ ]
8
+ },
9
+ "SRCDEV DisplayAvatar Initials": {
10
+ "description": "DisplayAvatar: initials derived from alt (alt is announced, initials hidden from screen readers)",
11
+ "scope": "vue,html",
12
+ "body": [
13
+ "<DisplayAvatar alt=\"${1:Jane Smith}\" size=\"${2|md,xs,s,lg,xl|}\" />"
14
+ ]
15
+ },
16
+ "SRCDEV DisplayAvatar Chip": {
17
+ "description": "DisplayAvatar with a status chip",
18
+ "scope": "vue,html",
19
+ "body": [
20
+ "<DisplayAvatar",
21
+ " src=\"${1:/images/profile.jpg}\"",
22
+ " alt=\"${2:Jane Smith}\"",
23
+ " :chip=\"{ size: '${3:12px}', maskWidth: '${4:4px}', offset: '${5:0px}', angle: '${6:45deg}' }\"",
24
+ " :style-class-passthrough=\"['${7|online,offline|}']\"",
25
+ "/>"
26
+ ]
27
+ }
28
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "SRCDEV DisplayChip": {
3
+ "description": "DisplayChip status dot cut into the corner of its slotted content",
4
+ "scope": "vue,html",
5
+ "body": [
6
+ "<DisplayChip",
7
+ " shape=\"${1|circle,square|}\"",
8
+ " :config=\"{ size: '${2:12px}', maskWidth: '${3:4px}', offset: '${4:0px}', angle: '${5:135deg}' }\"",
9
+ " :style-class-passthrough=\"['${6|online,idle,dnd|}']\"",
10
+ ">",
11
+ " $7",
12
+ "</DisplayChip>"
13
+ ]
14
+ },
15
+ "SRCDEV DisplayChip CSS Override": {
16
+ "description": "CSS override scaffold for DisplayChip status colours",
17
+ "scope": "css",
18
+ "body": [
19
+ ".$1my-page {",
20
+ " --display-chip-colour-online: $2;",
21
+ " --display-chip-colour-idle: $3;",
22
+ " --display-chip-colour-dnd: $4;",
23
+ " --display-chip-colour-offline: $5;",
24
+ "}"
25
+ ]
26
+ }
27
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "SRCDEV DisplayPill Label": {
3
+ "description": "DisplayPill: pill/badge with a text label",
4
+ "scope": "vue,html",
5
+ "body": [
6
+ "<DisplayPill label=\"${1:Status}\" variant=\"${2|default,primary,success,warning,danger,neutral|}\" size=\"${3|md,sm,lg|}\" />"
7
+ ]
8
+ },
9
+ "SRCDEV DisplayPill Icon": {
10
+ "description": "DisplayPill with an icon",
11
+ "scope": "vue,html",
12
+ "body": [
13
+ "<DisplayPill label=\"${1:Active}\" variant=\"${2|success,default,primary,warning,danger,neutral|}\">",
14
+ " <template #icon>",
15
+ " <Icon name=\"${3:material-symbols:circle}\" />",
16
+ " </template>",
17
+ "</DisplayPill>"
18
+ ]
19
+ },
20
+ "SRCDEV DisplayPill Link": {
21
+ "description": "DisplayPill as a link (focusable, pointer cursor)",
22
+ "scope": "vue,html",
23
+ "body": [
24
+ "<DisplayPill tag=\"a\" href=\"${1:/tags/example}\" label=\"${2:Example}\" variant=\"${3|primary,default,success,warning,danger,neutral|}\" />"
25
+ ]
26
+ },
27
+ "SRCDEV DisplayPill Tokens": {
28
+ "description": "DisplayPill outlined style for every variant via base tokens",
29
+ "scope": "css",
30
+ "body": [
31
+ ".${1:tag-list} {",
32
+ " --display-pill-background: ${2:transparent};",
33
+ " --display-pill-text-colour: ${3:currentColor};",
34
+ " --display-pill-border-colour: ${4:currentColor};",
35
+ "}"
36
+ ]
37
+ }
38
+ }