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.
- package/.claude/skills/component-aria-landmark.md +1 -1
- package/.claude/skills/component-dynamic-slots.md +0 -1
- package/.claude/skills/component-export-types.md +3 -3
- package/.claude/skills/component-inline-action-button.md +7 -7
- package/.claude/skills/component-local-style-override.md +134 -50
- package/.claude/skills/component-naming.md +107 -0
- package/.claude/skills/components/action-menu.md +18 -14
- package/.claude/skills/components/alert-content.md +110 -0
- package/.claude/skills/components/alert-mask-core.md +15 -1
- package/.claude/skills/components/alert-masked-content.md +95 -0
- package/.claude/skills/components/auto-grid.md +21 -13
- package/.claude/skills/components/canvas-switcher.md +3 -3
- package/.claude/skills/components/capture-qr-code.md +19 -9
- package/.claude/skills/components/carousel-flip.md +3 -3
- package/.claude/skills/components/container-glow.md +2 -2
- package/.claude/skills/components/content-docs.md +9 -5
- package/.claude/skills/components/cookie-consent-banner.md +16 -17
- package/.claude/skills/components/dashboard-quad-grid.md +4 -4
- package/.claude/skills/components/decode-qr-code.md +15 -9
- package/.claude/skills/components/display-avatar.md +16 -31
- package/.claude/skills/components/display-chip.md +15 -10
- package/.claude/skills/components/display-dialog.md +3 -1
- package/.claude/skills/components/display-pill.md +17 -75
- package/.claude/skills/components/display-prompt.md +11 -19
- package/.claude/skills/components/display-qr-code.md +5 -0
- package/.claude/skills/components/display-theme-switch.md +7 -6
- package/.claude/skills/components/display-toast.md +5 -6
- package/.claude/skills/components/entry-animation.md +2 -5
- package/.claude/skills/components/eyebrow-text.md +6 -4
- package/.claude/skills/components/form-field.md +79 -0
- package/.claude/skills/components/form-fieldset.md +75 -0
- package/.claude/skills/components/form-wrapper.md +71 -0
- package/.claude/skills/components/glass-panel.md +60 -51
- package/.claude/skills/components/grid-stack.md +8 -2
- package/.claude/skills/components/header-block.md +1 -1
- package/.claude/skills/components/hero-text.md +8 -6
- package/.claude/skills/components/input-button.md +72 -0
- package/.claude/skills/components/input-checkbox-radio.md +149 -0
- package/.claude/skills/components/input-checkbox.md +148 -0
- package/.claude/skills/components/input-description.md +102 -0
- package/.claude/skills/components/input-error.md +105 -0
- package/.claude/skills/components/input-label.md +119 -0
- package/.claude/skills/components/{input-number-core.md → input-number.md} +41 -36
- package/.claude/skills/components/input-radio.md +95 -0
- package/.claude/skills/components/input-range-core.md +4 -4
- package/.claude/skills/components/input-select-core.md +1 -1
- package/.claude/skills/components/input-text-core.md +8 -6
- package/.claude/skills/components/input-textarea-core.md +4 -4
- package/.claude/skills/components/layout-grid-by-cols.md +31 -43
- package/.claude/skills/components/link-text.md +2 -2
- package/.claude/skills/components/opening-hours.md +116 -0
- package/.claude/skills/components/page-hero-highlights.md +35 -35
- package/.claude/skills/components/page-row.md +1 -1
- package/.claude/skills/components/pending-effect.md +63 -0
- package/.claude/skills/components/price-list.md +72 -0
- package/.claude/skills/components/pricing-card.md +3 -3
- package/.claude/skills/components/profile-section.md +6 -4
- package/.claude/skills/components/samaritan-prompt.md +140 -0
- package/.claude/skills/components/scroll-reveal-frame.md +21 -20
- package/.claude/skills/components/scroll-reveal-image.md +31 -21
- package/.claude/skills/components/service-detail.md +2 -2
- package/.claude/skills/components/services-card-grid.md +5 -4
- package/.claude/skills/components/services-card.md +12 -10
- package/.claude/skills/components/site-navigation.md +20 -6
- package/.claude/skills/components/slider-gallery.md +88 -0
- package/.claude/skills/components/social-icons-list.md +12 -6
- package/.claude/skills/components/tab-navigation.md +1 -1
- package/.claude/skills/components/text-block.md +68 -0
- package/.claude/skills/components/toggle-switch-core.md +25 -6
- package/.claude/skills/components/triple-toggle-switch.md +85 -0
- package/.claude/skills/composable-zod-validation.md +1 -1
- package/.claude/skills/consumer-styles-structure.md +153 -0
- package/.claude/skills/icon-sets.md +3 -3
- package/.claude/skills/icon-sizing.md +66 -0
- package/.claude/skills/index.md +36 -17
- package/.claude/skills/new-app-scaffold.md +45 -7
- package/.claude/skills/pull-request-description.md +1 -0
- package/.claude/skills/storybook-add-story.md +53 -5
- package/.claude/skills/testing-add-playwright.md +1 -1
- package/.claude/skills/theming-colour-ramps.md +25 -3
- package/.claude/skills/theming-component-token-pattern.md +16 -16
- package/.claude/skills/theming-override-default.md +7 -0
- package/.claude/skills/theming-partial-override.md +1 -1
- package/.claude/skills/theming-typography-tokens.md +1 -1
- package/.claude/skills/vercel-node-version.md +1 -1
- package/.vscode/srcdev-component-action-menu.code-snippets +42 -0
- package/.vscode/srcdev-component-alert-content.code-snippets +36 -0
- package/.vscode/srcdev-component-alert-masked-content.code-snippets +35 -0
- package/.vscode/srcdev-component-auto-grid.code-snippets +39 -0
- package/.vscode/srcdev-component-capture-decode-qr-code.code-snippets +28 -0
- package/.vscode/srcdev-component-content-docs.code-snippets +4 -4
- package/.vscode/srcdev-component-cookie-consent-banner.code-snippets +33 -0
- package/.vscode/srcdev-component-display-avatar.code-snippets +28 -0
- package/.vscode/srcdev-component-display-chip.code-snippets +27 -0
- package/.vscode/srcdev-component-display-pill.code-snippets +38 -0
- package/.vscode/srcdev-component-display-prompt.code-snippets +10 -54
- package/.vscode/srcdev-component-display-qr-code.code-snippets +22 -0
- package/.vscode/srcdev-component-eyebrow-text.code-snippets +19 -0
- package/.vscode/srcdev-component-form-field.code-snippets +25 -0
- package/.vscode/srcdev-component-form-fieldset.code-snippets +36 -0
- package/.vscode/srcdev-component-form-wrapper.code-snippets +30 -0
- package/.vscode/srcdev-component-glass-panel.code-snippets +38 -0
- package/.vscode/srcdev-component-grid-stack.code-snippets +49 -0
- package/.vscode/srcdev-component-input-button.code-snippets +27 -0
- package/.vscode/srcdev-component-input-checkbox-radio.code-snippets +60 -0
- package/.vscode/srcdev-component-input-checkbox.code-snippets +48 -0
- package/.vscode/srcdev-component-input-description.code-snippets +44 -0
- package/.vscode/srcdev-component-input-error.code-snippets +30 -0
- package/.vscode/srcdev-component-input-label.code-snippets +39 -0
- package/.vscode/srcdev-component-input-number.code-snippets +11 -11
- package/.vscode/srcdev-component-input-radio.code-snippets +58 -0
- package/.vscode/srcdev-component-layout-grid-by-cols.code-snippets +46 -0
- package/.vscode/srcdev-component-link-text.code-snippets +30 -0
- package/.vscode/srcdev-component-opening-hours.code-snippets +40 -0
- package/.vscode/srcdev-component-page-hero-highlights.code-snippets +37 -0
- package/.vscode/srcdev-component-page-row.code-snippets +47 -0
- package/.vscode/srcdev-component-pending-effect.code-snippets +26 -0
- package/.vscode/srcdev-component-price-list.code-snippets +37 -0
- package/.vscode/srcdev-component-pricing-card.code-snippets +2 -2
- package/.vscode/srcdev-component-profile-section.code-snippets +36 -0
- package/.vscode/srcdev-component-samaritan-prompt.code-snippets +60 -0
- package/.vscode/srcdev-component-scroll-reveal-frame.code-snippets +36 -0
- package/.vscode/srcdev-component-scroll-reveal-image.code-snippets +46 -0
- package/.vscode/srcdev-component-services-card.code-snippets +4 -4
- package/.vscode/srcdev-component-services-grids.code-snippets +36 -0
- package/.vscode/srcdev-component-site-navigation.code-snippets +26 -18
- package/.vscode/srcdev-component-slider-gallery.code-snippets +9 -0
- package/.vscode/srcdev-component-social-icons-list.code-snippets +24 -0
- package/.vscode/srcdev-component-stepper-list.code-snippets +39 -0
- package/.vscode/srcdev-component-text-block.code-snippets +31 -0
- package/.vscode/srcdev-component-toggle-switch.code-snippets +3 -1
- package/.vscode/srcdev-component-triple-toggle-switch.code-snippets +30 -0
- package/README.md +2 -2
- package/app/app.config.ts +10 -0
- package/app/assets/styles/setup/02.colours/_orange.css +11 -11
- package/app/assets/styles/setup/02.colours/_theme-params.css +2 -2
- package/app/assets/styles/setup/03.theming/_default.css +1 -22
- package/app/assets/styles/setup/03.theming/_theme-slots.css +1 -1
- package/app/assets/styles/setup/03.theming/_warning.css +8 -10
- package/app/assets/styles/setup/04.elements/forms/02.typography.css +0 -14
- package/app/assets/styles/setup/04.elements/forms/06.button-geometry.css +1 -1
- package/app/assets/styles/setup/index.css +1 -1
- package/app/components/01.atoms/alert-mask/AlertMaskCore.vue +23 -5
- package/app/components/01.atoms/alert-mask/CONSUMER-STYLING.md +23 -5
- package/app/components/01.atoms/alert-mask/stories/AlertMaskCore.stories.ts +45 -19
- package/app/components/01.atoms/alert-mask/tests/AlertMaskCore.spec.ts +35 -1
- package/app/components/01.atoms/animations/animated-svg-text/CONSUMER-STYLING.md +13 -0
- package/app/components/01.atoms/animations/clip-element/CONSUMER-STYLING.md +13 -0
- package/app/components/01.atoms/animations/clip-element/ClipElement.vue +2 -2
- package/app/components/01.atoms/animations/container-glow/CONSUMER-STYLING.md +26 -5
- package/app/components/01.atoms/animations/entry/.nuxt/app.config.mjs +21 -0
- package/app/components/01.atoms/animations/entry/.nuxt/components.d.ts +66 -0
- package/app/components/01.atoms/animations/entry/.nuxt/imports.d.ts +30 -0
- package/app/components/01.atoms/animations/entry/.nuxt/manifest/meta/test.json +1 -0
- package/app/components/01.atoms/animations/entry/.nuxt/types/app.config.d.ts +35 -0
- package/app/components/01.atoms/animations/entry/.nuxt/types/build.d.ts +23 -0
- package/app/components/01.atoms/animations/entry/.nuxt/types/builder-env.d.ts +1 -0
- package/app/components/01.atoms/animations/entry/.nuxt/types/components.d.ts +71 -0
- package/app/components/01.atoms/animations/entry/.nuxt/types/imports.d.ts +386 -0
- package/app/components/01.atoms/animations/entry/.nuxt/types/middleware.d.ts +11 -0
- package/app/components/01.atoms/animations/entry/.nuxt/types/modules.d.ts +79 -0
- package/app/components/01.atoms/animations/entry/.nuxt/types/nitro-layouts.d.ts +17 -0
- package/app/components/01.atoms/animations/entry/.nuxt/types/nitro-nuxt.d.ts +64 -0
- package/app/components/01.atoms/animations/entry/.nuxt/types/plugins.d.ts +29 -0
- package/app/components/01.atoms/animations/entry/.nuxt/types/runtime-config.d.ts +32 -0
- package/app/components/01.atoms/animations/entry/.nuxt/types/shared-imports.d.ts +10 -0
- package/app/components/01.atoms/animations/entry/.nuxt/types/vue-shim.d.ts +0 -0
- package/app/components/01.atoms/animations/entry/.nuxtrc +1 -0
- package/app/components/01.atoms/animations/entry/CONSUMER-STYLING.md +65 -0
- package/app/components/01.atoms/animations/entry/EntryAnimation.vue +6 -5
- package/app/components/01.atoms/animations/entry/node_modules/.cache/nuxt/chrome-workspace.json +1 -0
- package/app/components/01.atoms/animations/entry/node_modules/.cache/vite/client/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/app/components/01.atoms/animations/entry/stories/EntryAnimation.stories.ts +1 -1
- package/app/components/01.atoms/animations/entry/tests/EntryAnimation.spec.ts +25 -0
- package/app/components/01.atoms/animations/glowing-border/CONSUMER-STYLING.md +24 -5
- package/app/components/01.atoms/animations/marquee-scroller/CONSUMER-STYLING.md +20 -0
- package/app/components/01.atoms/animations/rotating-carousel-image/CONSUMER-STYLING.md +17 -0
- package/app/components/01.atoms/animations/scroll-reveal-frame/CONSUMER-STYLING.md +77 -0
- package/app/components/01.atoms/animations/scroll-reveal-frame/ScrollRevealFrame.vue +37 -78
- package/app/components/01.atoms/animations/scroll-reveal-frame/stories/ScrollRevealFrame.stories.ts +48 -0
- package/app/components/01.atoms/animations/scroll-reveal-frame/tests/ScrollRevealFrame.spec.ts +40 -33
- package/app/components/01.atoms/animations/scroll-reveal-frame/tests/__snapshots__/ScrollRevealFrame.spec.ts.snap +4 -4
- package/app/components/01.atoms/animations/scroll-reveal-image/CONSUMER-STYLING.md +74 -0
- package/app/components/01.atoms/animations/scroll-reveal-image/ScrollRevealImage.vue +14 -44
- package/app/components/01.atoms/animations/scroll-reveal-image/stories/ScrollRevealImage.stories.ts +50 -1
- package/app/components/01.atoms/animations/scroll-reveal-image/tests/ScrollRevealImage.spec.ts +27 -20
- package/app/components/01.atoms/animations/scroll-reveal-image/tests/__snapshots__/ScrollRevealImage.spec.ts.snap +4 -4
- package/app/components/01.atoms/animations/section-parallax/CONSUMER-STYLING.md +21 -4
- package/app/components/01.atoms/animations/view-timeline/CONSUMER-STYLING.md +25 -0
- package/app/components/01.atoms/banner-video/CONSUMER-STYLING.md +12 -5
- package/app/components/01.atoms/canvas-switcher/CONSUMER-STYLING.md +20 -7
- package/app/components/01.atoms/canvas-switcher/CanvasSwitcher.vue +12 -7
- package/app/components/01.atoms/card/CONSUMER-STYLING.md +47 -42
- package/app/components/01.atoms/card/CardCore.vue +7 -17
- package/app/components/01.atoms/clipped-panel/CONSUMER-STYLING.md +13 -0
- package/app/components/01.atoms/content-wrappers/docs-pages/CONSUMER-STYLING.md +127 -0
- package/app/components/01.atoms/content-wrappers/docs-pages/ContentDocs.vue +44 -77
- package/app/components/01.atoms/content-wrappers/docs-pages/stories/ContentDocs.stories.ts +3 -3
- package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/CONSUMER-STYLING.md +14 -1
- package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/stories/DashboardQuadGrid.stories.ts +2 -0
- package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/CONSUMER-STYLING.md +13 -0
- package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/stories/DashboardStatsGrid.stories.ts +2 -0
- package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/CONSUMER-STYLING.md +72 -0
- package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/LayoutGridByCols.vue +26 -25
- package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/stories/LayoutGridByCols.stories.ts +91 -107
- package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/tests/LayoutGridByCols.spec.ts +50 -15
- package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/tests/__snapshots__/LayoutGridByCols.spec.ts.snap +5 -5
- package/app/components/01.atoms/display-banner/CONSUMER-STYLING.md +13 -0
- package/app/components/01.atoms/display-dialog/CONSUMER-STYLING.md +82 -54
- package/app/components/01.atoms/display-dialog/DisplayDialog.vue +38 -45
- package/app/components/01.atoms/display-dialog/stories/DisplayDialog.stories.ts +25 -0
- package/app/components/01.atoms/display-dialog/tests/DisplayDialog.spec.ts +21 -0
- package/app/components/01.atoms/display-pill/CONSUMER-STYLING.md +112 -0
- package/app/components/01.atoms/display-pill/DisplayPill.vue +88 -50
- package/app/components/01.atoms/display-pill/stories/DisplayPill.stories.ts +56 -3
- package/app/components/01.atoms/display-pill/tests/DisplayPill.spec.ts +104 -4
- package/app/components/01.atoms/display-pill/tests/__snapshots__/DisplayPill.spec.ts.snap +3 -3
- package/app/components/01.atoms/display-tooltip/CONSUMER-STYLING.md +22 -2
- package/app/components/01.atoms/display-tooltip/DisplayTooltip.vue +18 -26
- package/app/components/01.atoms/glass-panel/CONSUMER-STYLING.md +91 -0
- package/app/components/01.atoms/glass-panel/GlassPanel.vue +34 -30
- package/app/components/01.atoms/glass-panel/stories/GlassPanel.stories.ts +121 -0
- package/app/components/01.atoms/glass-panel/tests/GlassPanel.spec.ts +61 -0
- package/app/components/01.atoms/grids/auto-grid/AutoGrid.vue +5 -10
- package/app/components/01.atoms/grids/auto-grid/CONSUMER-STYLING.md +76 -0
- package/app/components/01.atoms/grids/auto-grid/stories/AutoGrid.stories.ts +5 -4
- package/app/components/01.atoms/grids/auto-grid/tests/AutoGrid.spec.ts +8 -0
- package/app/components/01.atoms/grids/column-flow-grid/CONSUMER-STYLING.md +11 -2
- package/app/components/01.atoms/grids/grid-stack/CONSUMER-STYLING.md +76 -0
- package/app/components/01.atoms/grids/grid-stack/GridStack.vue +6 -1
- package/app/components/01.atoms/grids/grid-stack/stories/GridStack.stories.ts +1 -1
- package/app/components/01.atoms/grids/grid-stack/tests/GridStack.spec.ts +35 -0
- package/app/components/01.atoms/grids/masonry-grid/CONSUMER-STYLING.md +11 -2
- package/app/components/01.atoms/navigation/breadcrumb/Breadcrumb.vue +5 -10
- package/app/components/01.atoms/navigation/breadcrumb/CONSUMER-STYLING.md +15 -0
- package/app/components/01.atoms/navigation/skip-links/CONSUMER-STYLING.md +13 -0
- package/app/components/01.atoms/navigation/tabs/CONSUMER-STYLING.md +21 -0
- package/app/components/01.atoms/page-row/CONSUMER-STYLING.md +46 -8
- package/app/components/01.atoms/page-row/PageRow.vue +17 -13
- package/app/components/01.atoms/page-row/stories/PageRow.stories.ts +8 -0
- package/app/components/01.atoms/page-row/tests/PageRow.spec.ts +7 -11
- package/app/components/01.atoms/pop-over/CONSUMER-STYLING.md +13 -0
- package/app/components/01.atoms/qr-code/CONSUMER-STYLING.md +48 -0
- package/app/components/01.atoms/qr-code/DisplayQrCode.vue +5 -1
- package/app/components/01.atoms/qr-code/stories/DisplayQrCode.stories.ts +11 -3
- package/app/components/01.atoms/qr-code/tests/DisplayQrCode.spec.ts +15 -0
- package/app/components/01.atoms/text-block/CONSUMER-STYLING.md +49 -0
- package/app/components/01.atoms/text-block/TextBlock.vue +13 -5
- package/app/components/01.atoms/text-block/stories/TextBlock.stories.ts +84 -0
- package/app/components/01.atoms/text-block/tests/TextBlock.spec.ts +78 -0
- package/app/components/01.atoms/text-block/tests/__snapshots__/TextBlock.spec.ts.snap +7 -0
- package/app/components/01.atoms/text-blocks/eyebrow-text/CONSUMER-STYLING.md +56 -0
- package/app/components/01.atoms/text-blocks/eyebrow-text/EyebrowText.vue +10 -5
- package/app/components/01.atoms/text-blocks/eyebrow-text/tests/EyebrowText.spec.ts +11 -0
- package/app/components/01.atoms/text-blocks/header-block/CONSUMER-STYLING.md +16 -1
- package/app/components/01.atoms/text-blocks/hero-text/CONSUMER-STYLING.md +74 -0
- package/app/components/01.atoms/text-blocks/hero-text/HeroText.vue +14 -9
- package/app/components/01.atoms/text-blocks/hero-text/tests/HeroText.spec.ts +11 -0
- package/app/components/01.atoms/text-blocks/link-text/CONSUMER-STYLING.md +45 -0
- package/app/components/01.atoms/text-blocks/link-text/LinkText.vue +15 -8
- package/app/components/01.atoms/text-blocks/link-text/tests/LinkText.spec.ts +11 -0
- package/app/components/01.atoms/ui-block-decorated/CONSUMER-STYLING.md +13 -0
- package/app/components/02.molecules/action-menu/ActionMenu.vue +28 -30
- package/app/components/02.molecules/action-menu/{ActionMenuItemCore.vue → ActionMenuItem.vue} +12 -14
- package/app/components/02.molecules/action-menu/CONSUMER-STYLING.md +90 -76
- package/app/components/02.molecules/action-menu/stories/ActionMenu.stories.ts +48 -41
- package/app/components/02.molecules/action-menu/tests/ActionMenu.spec.ts +46 -1
- package/app/components/02.molecules/action-menu/tests/{ActionMenuItemCore.spec.ts → ActionMenuItem.spec.ts} +11 -5
- package/app/components/02.molecules/action-menu/tests/__snapshots__/ActionMenuItem.spec.ts.snap +27 -0
- package/app/components/02.molecules/alert-content/AlertContent.vue +17 -8
- package/app/components/02.molecules/alert-content/AlertContentInner.vue +57 -30
- package/app/components/02.molecules/alert-content/CONSUMER-STYLING.md +84 -0
- package/app/components/02.molecules/alert-content/stories/AlertContent.stories.ts +39 -0
- package/app/components/02.molecules/alert-content/tests/AlertContent.spec.ts +32 -0
- package/app/components/02.molecules/alert-content/tests/AlertContentInner.spec.ts +32 -0
- package/app/components/02.molecules/alert-masked-content/AlertMaskedContent.vue +9 -5
- package/app/components/02.molecules/alert-masked-content/CONSUMER-STYLING.md +73 -0
- package/app/components/02.molecules/alert-masked-content/stories/AlertMaskedContent.stories.ts +91 -10
- package/app/components/02.molecules/alert-masked-content/tests/AlertMaskedContent.spec.ts +52 -0
- package/app/components/02.molecules/cookie-consent-banner/CONSUMER-STYLING.md +95 -0
- package/app/components/02.molecules/cookie-consent-banner/CookieConsentBanner.vue +149 -0
- package/app/components/{01.atoms → 02.molecules}/cookie-consent-banner/stories/CookieConsentBanner.stories.ts +22 -3
- package/app/components/{01.atoms → 02.molecules}/cookie-consent-banner/tests/CookieConsentBanner.spec.ts +81 -4
- package/app/components/02.molecules/display-avatar/CONSUMER-STYLING.md +63 -0
- package/app/components/02.molecules/display-avatar/DisplayAvatar.vue +120 -0
- package/app/components/{01.atoms → 02.molecules}/display-avatar/stories/DisplayAvatar.stories.ts +56 -14
- package/app/components/{01.atoms → 02.molecules}/display-avatar/tests/DisplayAvatar.spec.ts +43 -11
- package/app/components/02.molecules/display-avatar/tests/__snapshots__/DisplayAvatar.spec.ts.snap +11 -0
- package/app/components/02.molecules/display-chip/CONSUMER-STYLING.md +57 -0
- package/app/components/02.molecules/display-chip/DisplayChip.vue +50 -83
- package/app/components/02.molecules/display-chip/tests/DisplayChip.spec.ts +10 -10
- package/app/components/02.molecules/display-chip/tests/__snapshots__/DisplayChip.spec.ts.snap +4 -4
- package/app/components/02.molecules/display-theme-switch/CONSUMER-STYLING.md +25 -4
- package/app/components/02.molecules/display-theme-switch/DisplayThemeSwitch.vue +9 -6
- package/app/components/02.molecules/display-theme-switch/stories/DisplayThemeSwitch.stories.ts +6 -1
- package/app/components/02.molecules/display-theme-switch/tests/DisplayThemeSwitch.spec.ts +10 -1
- package/app/components/02.molecules/display-tooltip-defined/CONSUMER-STYLING.md +11 -0
- package/app/components/02.molecules/expandable/accordian/CONSUMER-STYLING.md +11 -4
- package/app/components/02.molecules/expandable/expanding-panel/CONSUMER-STYLING.md +12 -5
- package/app/components/02.molecules/expandable/expanding-panel-classic/CONSUMER-STYLING.md +12 -5
- package/app/components/02.molecules/input-copy/CONSUMER-STYLING.md +12 -5
- package/app/components/02.molecules/input-copy/InputCopy.vue +12 -25
- package/app/components/02.molecules/input-copy/stories/InputCopy.stories.ts +1 -1
- package/app/components/02.molecules/input-copy/tests/InputCopy.spec.ts +1 -1
- package/app/components/02.molecules/navigation/deep-expanding-menu/CONSUMER-STYLING.md +13 -0
- package/app/components/02.molecules/navigation/deep-expanding-menu-classic/CONSUMER-STYLING.md +11 -0
- package/app/components/02.molecules/navigation/site-navigation/CONSUMER-STYLING.md +109 -0
- package/app/components/02.molecules/navigation/site-navigation/SiteNavigation.vue +37 -55
- package/app/components/02.molecules/navigation/site-navigation/stories/SiteNavigation.stories.ts +22 -1
- package/app/components/02.molecules/navigation/site-navigation/tests/SiteNavigation.spec.ts +41 -6
- package/app/components/02.molecules/navigation/tab-navigation/CONSUMER-STYLING.md +13 -8
- package/app/components/02.molecules/navigation/tab-navigation/TabNavigation.vue +18 -36
- package/app/components/02.molecules/navigation/tab-navigation/stories/TabNavigation.stories.ts +1 -1
- package/app/components/02.molecules/navigation/tab-navigation/tests/TabNavigation.spec.ts +1 -1
- package/app/components/02.molecules/opening-hours/CONSUMER-STYLING.md +134 -0
- package/app/components/02.molecules/opening-hours/OpeningHours.vue +352 -0
- package/app/components/02.molecules/opening-hours/stories/OpeningHours.stories.ts +127 -0
- package/app/components/02.molecules/opening-hours/tests/OpeningHours.spec.ts +228 -0
- package/app/components/02.molecules/opening-hours/tests/OpeningHours.structuredData.spec.ts +45 -0
- package/app/components/02.molecules/opening-hours/tests/__snapshots__/OpeningHours.spec.ts.snap +23 -0
- package/app/components/02.molecules/opening-hours/tests/buildOpeningHoursSpecification.spec.ts +52 -0
- package/app/components/02.molecules/price-list/CONSUMER-STYLING.md +106 -0
- package/app/components/02.molecules/price-list/PriceList.vue +48 -40
- package/app/components/02.molecules/price-list/stories/PriceList.stories.ts +15 -2
- package/app/components/02.molecules/price-list/tests/PriceList.spec.ts +39 -2
- package/app/components/02.molecules/price-list/tests/__snapshots__/PriceList.spec.ts.snap +4 -16
- package/app/components/02.molecules/pricing-card/CONSUMER-STYLING.md +12 -5
- package/app/components/02.molecules/pricing-card/PricingCard.vue +28 -60
- package/app/components/02.molecules/pricing-card/tests/PricingCard.spec.ts +1 -1
- package/app/components/02.molecules/profile-section/CONSUMER-STYLING.md +53 -0
- package/app/components/02.molecules/profile-section/ProfileSection.vue +53 -66
- package/app/components/02.molecules/profile-section/tests/ProfileSection.spec.ts +4 -4
- package/app/components/02.molecules/profile-section/tests/__snapshots__/ProfileSection.spec.ts.snap +6 -12
- package/app/components/02.molecules/prompt/CONSUMER-STYLING.md +51 -0
- package/app/components/{01.atoms → 02.molecules}/prompt/DisplayPrompt.vue +23 -8
- package/app/components/{01.atoms → 02.molecules}/prompt/stories/DisplayPrompt.stories.ts +18 -1
- package/app/components/{01.atoms → 02.molecules}/prompt/tests/DisplayPrompt.spec.ts +37 -7
- package/app/components/02.molecules/qr-code/CONSUMER-STYLING.md +66 -0
- package/app/components/02.molecules/qr-code/CaptureQrCode.vue +31 -12
- package/app/components/02.molecules/qr-code/DecodeQrCode.vue +55 -19
- package/app/components/02.molecules/qr-code/stories/CaptureQrCode.stories.ts +56 -0
- package/app/components/02.molecules/qr-code/stories/DecodeQrCode.stories.ts +53 -0
- package/app/components/02.molecules/qr-code/tests/CaptureQrCode.spec.ts +68 -20
- package/app/components/02.molecules/qr-code/tests/DecodeQrCode.spec.ts +44 -8
- package/app/components/02.molecules/samaritan-prompt/CONSUMER-STYLING.md +118 -0
- package/app/components/02.molecules/samaritan-prompt/SamaritanPrompt.vue +108 -51
- package/app/components/02.molecules/samaritan-prompt/SamaritanPromptMixed.vue +63 -62
- package/app/components/02.molecules/samaritan-prompt/stories/SamaritanPrompt.stories.ts +129 -0
- package/app/components/02.molecules/samaritan-prompt/stories/SamaritanPromptMixed.stories.ts +124 -0
- package/app/components/02.molecules/samaritan-prompt/tests/SamaritanPrompt.spec.ts +66 -0
- package/app/components/02.molecules/samaritan-prompt/tests/SamaritanPromptMixed.spec.ts +95 -17
- package/app/components/02.molecules/select-menu/CONSUMER-STYLING.md +11 -2
- package/app/components/02.molecules/social-icons-list/CONSUMER-STYLING.md +43 -0
- package/app/components/02.molecules/social-icons-list/SocialIconsList.vue +15 -15
- package/app/components/02.molecules/social-icons-list/stories/SocialIconsList.stories.ts +6 -1
- package/app/components/02.molecules/social-icons-list/tests/SocialIconsList.spec.ts +22 -1
- package/app/components/02.molecules/social-icons-list/tests/__snapshots__/SocialIconsList.spec.ts.snap +3 -3
- package/app/components/02.molecules/stepper-list/CONSUMER-STYLING.md +44 -5
- package/app/components/02.molecules/stepper-list/StepperList.vue +23 -43
- package/app/components/02.molecules/stepper-list/tests/StepperList.spec.ts +9 -0
- package/app/components/{01.atoms → 02.molecules}/toast/CONSUMER-STYLING.md +14 -0
- package/app/components/{01.atoms → 02.molecules}/toast/DisplayToast.vue +1 -2
- package/app/components/{01.atoms → 02.molecules}/toast/DisplayToastProvider.vue +1 -2
- package/app/components/{01.atoms → 02.molecules}/toast/stories/DisplayToast.stories.ts +1 -1
- package/app/components/{01.atoms → 02.molecules}/toast/stories/DisplayToastProvider.stories.ts +1 -1
- package/app/components/03.organisms/image-galleries/carousel-flip/CONSUMER-STYLING.md +13 -0
- package/app/components/03.organisms/image-galleries/slider-gallery/CONSUMER-STYLING.md +137 -0
- package/app/components/03.organisms/image-galleries/slider-gallery/SliderGallery.vue +378 -343
- package/app/components/03.organisms/image-galleries/slider-gallery/stories/SliderGallery.stories.ts +26 -1
- package/app/components/03.organisms/image-galleries/slider-gallery/tests/SliderGallery.spec.ts +102 -23
- package/app/components/03.organisms/image-galleries/slider-gallery/tests/__snapshots__/SliderGallery.spec.ts.snap +44 -44
- package/app/components/03.organisms/responsive-header/CONSUMER-STYLING.md +12 -1
- package/app/components/03.organisms/responsive-header/ResponsiveHeader.vue +0 -4
- package/app/components/03.organisms/services/service-detail/CONSUMER-STYLING.md +24 -3
- package/app/components/03.organisms/services/service-detail/ServiceDetail.vue +3 -3
- package/app/components/03.organisms/services/service-detail/stories/ServiceDetail.stories.ts +13 -13
- package/app/components/03.organisms/services/service-detail/tests/__snapshots__/ServiceDetail.spec.ts.snap +1 -1
- package/app/components/03.organisms/services/service-summary/CONSUMER-STYLING.md +24 -7
- package/app/components/03.organisms/services/service-summary/ServiceSummary.vue +3 -3
- package/app/components/03.organisms/services/service-summary/stories/ServiceSummary.stories.ts +1 -1
- package/app/components/03.organisms/services/service-summary/tests/__snapshots__/ServiceSummary.spec.ts.snap +1 -1
- package/app/components/03.organisms/services/services-card/CONSUMER-STYLING.md +11 -2
- package/app/components/03.organisms/services/services-card/ServicesCard.vue +17 -26
- package/app/components/03.organisms/services/services-card/tests/ServicesCard.spec.ts +21 -0
- package/app/components/03.organisms/services/services-grids/CONSUMER-STYLING.md +50 -0
- package/app/components/03.organisms/services/services-grids/ServicesCardGrid.vue +9 -16
- package/app/components/03.organisms/services/services-grids/stories/ServicesCardGrid.stories.ts +6 -0
- package/app/components/03.organisms/services/services-grids/tests/ServicesCardGrid.spec.ts +18 -0
- package/app/components/03.organisms/services/services-grids/tests/__snapshots__/ServiceSummaryGrid.spec.ts.snap +3 -3
- package/app/components/03.organisms/services/services-grids/tests/__snapshots__/ServicesCardGrid.spec.ts.snap +3 -3
- package/app/components/03.organisms/site-header/CONSUMER-STYLING.md +12 -1
- package/app/components/04.templates/page-hero-highlights/CONSUMER-STYLING.md +103 -0
- package/app/components/04.templates/page-hero-highlights/PageHeroHighlights.vue +144 -193
- package/app/components/04.templates/page-hero-highlights/PageHeroHighlightsHeader.vue +27 -37
- package/app/components/04.templates/page-hero-highlights/stories/PageHeroHighlights.stories.ts +56 -60
- package/app/components/04.templates/page-hero-highlights/stories/PageHeroHighlightsHeader.stories.ts +2 -2
- package/app/components/04.templates/page-hero-highlights/tests/PageHeroHighlights.spec.ts +10 -10
- package/app/components/04.templates/page-hero-highlights/tests/PageHeroHighlightsHeader.spec.ts +7 -7
- package/app/components/04.templates/page-hero-highlights/tests/__snapshots__/PageHeroHighlights.spec.ts.snap +6 -6
- package/app/components/05.forms/form-errors/CONSUMER-STYLING.md +112 -0
- package/app/components/05.forms/form-errors/InputError.vue +101 -122
- package/app/components/05.forms/form-errors/stories/InputError.stories.ts +125 -0
- package/app/components/05.forms/form-errors/tests/InputError.spec.ts +82 -31
- package/app/components/05.forms/form-field/CONSUMER-STYLING.md +91 -0
- package/app/components/05.forms/form-field/FormField.vue +26 -35
- package/app/components/05.forms/form-field/stories/FormField.stories.ts +104 -0
- package/app/components/05.forms/form-field/tests/FormField.spec.ts +75 -0
- package/app/components/05.forms/form-fieldset/CONSUMER-STYLING.md +88 -0
- package/app/components/05.forms/form-fieldset/FormFieldset.vue +34 -28
- package/app/components/05.forms/form-fieldset/stories/FormFieldset.stories.ts +84 -0
- package/app/components/05.forms/form-fieldset/tests/FormFieldset.spec.ts +111 -0
- package/app/components/05.forms/form-wrapper/CONSUMER-STYLING.md +101 -0
- package/app/components/05.forms/form-wrapper/FormWrapper.vue +32 -15
- package/app/components/05.forms/form-wrapper/stories/FormWrapper.stories.ts +75 -0
- package/app/components/05.forms/form-wrapper/tests/FormWrapper.spec.ts +57 -0
- package/app/components/05.forms/input-button/CONSUMER-STYLING.md +52 -7
- package/app/components/05.forms/input-button/{InputButtonCore.vue → InputButton.vue} +60 -18
- package/app/components/05.forms/input-button/playwright/{input-button-core.playwright.ts → input-button.playwright.ts} +5 -5
- package/app/components/05.forms/input-button/stories/{InputButtonCore.stories.ts → InputButton.stories.ts} +8 -10
- package/app/components/05.forms/input-button/tests/{InputButtonCore.spec.ts → InputButton.spec.ts} +75 -19
- package/app/components/05.forms/input-button/tests/__snapshots__/{InputButtonCore.spec.ts.snap → InputButton.spec.ts.snap} +18 -18
- package/app/components/05.forms/input-checkbox/CONSUMER-STYLING.md +93 -0
- package/app/components/05.forms/input-checkbox/MultipleCheckboxes.vue +19 -25
- package/app/components/05.forms/input-checkbox/SingleCheckbox.vue +17 -43
- package/app/components/05.forms/input-checkbox/stories/MultipleCheckboxes.stories.ts +104 -0
- package/app/components/05.forms/input-checkbox/stories/SingleCheckbox.stories.ts +75 -0
- package/app/components/05.forms/input-checkbox/tests/MultipleCheckboxes.spec.ts +91 -53
- package/app/components/05.forms/input-checkbox/tests/SingleCheckbox.spec.ts +112 -0
- package/app/components/05.forms/input-checkbox-radio/CONSUMER-STYLING.md +115 -35
- package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadio.vue +158 -0
- package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioButton.vue +102 -101
- package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioField.vue +100 -0
- package/app/components/05.forms/input-checkbox-radio/stories/{InputCheckboxRadioCore.stories.ts → InputCheckboxRadio.stories.ts} +23 -8
- package/app/components/05.forms/input-checkbox-radio/stories/InputCheckboxRadioButton.stories.ts +60 -16
- package/app/components/05.forms/input-checkbox-radio/stories/InputCheckboxRadioField.stories.ts +93 -0
- package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadio.spec.ts +174 -0
- package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadioButton.spec.ts +87 -0
- package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadioField.spec.ts +87 -0
- package/app/components/05.forms/input-description/CONSUMER-STYLING.md +177 -0
- package/app/components/05.forms/input-description/InputDescription.vue +45 -24
- package/app/components/05.forms/input-description/stories/InputDescription.stories.ts +160 -0
- package/app/components/05.forms/input-description/tests/InputDescription.spec.ts +62 -386
- package/app/components/05.forms/input-label/CONSUMER-STYLING.md +134 -0
- package/app/components/05.forms/input-label/InputLabel.vue +99 -38
- package/app/components/05.forms/input-label/stories/InputLabel.stories.ts +236 -0
- package/app/components/05.forms/input-label/tests/InputLabel.spec.ts +113 -342
- package/app/components/05.forms/input-number/CONSUMER-STYLING.md +16 -7
- package/app/components/05.forms/input-number/{InputNumberCore.vue → InputNumber.vue} +6 -6
- package/app/components/05.forms/input-number/{variants/InputNumberDefault.vue → InputNumberField.vue} +12 -15
- package/app/components/05.forms/input-number/stories/{InputNumberCore.stories.ts → InputNumber.stories.ts} +6 -6
- package/app/components/05.forms/input-number/{variants/stories/InputNumberDefault.stories.ts → stories/InputNumberField.stories.ts} +5 -5
- package/app/components/05.forms/input-number/tests/{InputNumberCore.spec.ts → InputNumber.spec.ts} +2 -2
- package/app/components/05.forms/input-number/{variants/tests/InputNumberDefault.spec.ts → tests/InputNumberField.spec.ts} +8 -8
- package/app/components/05.forms/input-radio/CONSUMER-STYLING.md +70 -0
- package/app/components/05.forms/input-radio/MultipleRadiobuttons.vue +19 -30
- package/app/components/05.forms/input-radio/stories/MultipleRadiobuttons.stories.ts +116 -0
- package/app/components/05.forms/input-radio/tests/MultipleRadioButtons.spec.ts +125 -74
- package/app/components/05.forms/input-range/CONSUMER-STYLING.md +13 -0
- package/app/components/05.forms/input-range/InputRangeCore.vue +1 -1
- package/app/components/05.forms/input-range/{variants/InputRangeDefault.vue → InputRangeDefault.vue} +7 -11
- package/app/components/05.forms/input-range/{variants/tests → tests}/InputRangeDefault.spec.ts +1 -1
- package/app/components/05.forms/input-select/CONSUMER-STYLING.md +11 -2
- package/app/components/05.forms/input-select/{variants/InputSelectWithLabel.vue → InputSelectWithLabel.vue} +6 -9
- package/app/components/05.forms/input-select/stories/InputSelectWithLabel.stories.ts +1 -1
- package/app/components/05.forms/input-text/CONSUMER-STYLING.md +12 -3
- package/app/components/05.forms/input-text/{variants/InputPasswordWithLabel.vue → InputPasswordWithLabel.vue} +3 -3
- package/app/components/05.forms/input-text/{variants/InputTextAsNumberWithLabel.vue → InputTextAsNumberWithLabel.vue} +12 -15
- package/app/components/05.forms/input-text/InputTextCore.vue +8 -11
- package/app/components/05.forms/input-text/{variants/InputTextWithLabel.vue → InputTextWithLabel.vue} +9 -10
- package/app/components/05.forms/input-text/stories/InputPasswordWithLabel.stories.ts +1 -1
- package/app/components/05.forms/input-text/stories/InputTextAsNumberWithLabel.stories.ts +1 -1
- package/app/components/05.forms/input-text/stories/InputTextWithLabel.stories.ts +1 -1
- package/app/components/05.forms/input-text/tests/InputPasswordWithLabel.spec.ts +2 -1
- package/app/components/05.forms/input-text/tests/InputTextAsNumberWithLabel.spec.ts +1 -1
- package/app/components/05.forms/input-text/tests/InputTextWithLabel.spec.ts +2 -1
- package/app/components/05.forms/input-textarea/CONSUMER-STYLING.md +11 -2
- package/app/components/05.forms/input-textarea/{variants/InputTextareaWithLabel.vue → InputTextareaWithLabel.vue} +3 -7
- package/app/components/05.forms/input-textarea/stories/InputTextareaWithLabel.stories.ts +1 -1
- package/app/components/05.forms/patterns/stories/ContactForm.stories.ts +9 -10
- package/app/components/05.forms/patterns/stories/LoginForm.stories.ts +10 -10
- package/app/components/05.forms/patterns/stories/MigratedFieldsForm.stories.ts +246 -101
- package/app/components/05.forms/pending-effect/CONSUMER-STYLING.md +92 -0
- package/app/components/05.forms/pending-effect/PendingEffect.vue +52 -45
- package/app/components/05.forms/pending-effect/stories/PendingEffect.stories.ts +132 -0
- package/app/components/05.forms/pending-effect/tests/PendingEffect.spec.ts +67 -0
- package/app/components/05.forms/toggle-switch/CONSUMER-STYLING.md +26 -2
- package/app/components/05.forms/toggle-switch/ToggleSwitchCore.vue +10 -29
- package/app/components/05.forms/toggle-switch/{variants/ToggleSwitchWithLabel.vue → ToggleSwitchWithLabel.vue} +25 -12
- package/app/components/05.forms/toggle-switch/{variants/ToggleSwitchWithLabelInline.vue → ToggleSwitchWithLabelInline.vue} +2 -4
- package/app/components/05.forms/toggle-switch/stories/ToggleSwitchWithLabel.stories.ts +2 -4
- package/app/components/05.forms/toggle-switch/stories/ToggleSwitchWithLabelInline.stories.ts +4 -1
- package/app/components/05.forms/toggle-switch/tests/ToggleSwitchWithLabel.spec.ts +133 -0
- package/app/components/05.forms/triple-toggle-switch/CONSUMER-STYLING.md +75 -62
- package/app/components/05.forms/triple-toggle-switch/TripleToggleSwitch.vue +243 -0
- package/app/components/05.forms/triple-toggle-switch/stories/TripleToggleSwitch.stories.ts +104 -0
- package/app/components/05.forms/triple-toggle-switch/tests/TripleToggleSwitch.spec.ts +138 -0
- package/app/composables/tests/useCancellableTimer.spec.ts +48 -0
- package/app/composables/tests/useMaxChildWidth.spec.ts +67 -0
- package/app/composables/useCancellableTimer.ts +27 -7
- package/app/composables/useMaxChildWidth.ts +4 -6
- package/app/types/app-config.d.ts +10 -0
- package/app/types/components/cookie-consent-banner.d.ts +3 -0
- package/app/types/components/index.ts +6 -1
- package/app/types/components/opening-hours.d.ts +48 -0
- package/app/types/components/price-list.d.ts +11 -0
- package/app/types/components/profile-section.d.ts +6 -0
- package/app/types/components/samaritan-prompt.d.ts +13 -0
- package/app/types/components/services-card.d.ts +9 -0
- package/app/types/components/slider-gallery.d.ts +2 -0
- package/app/types/components/social-icons-list.d.ts +2 -0
- package/app/types/forms/types.forms.d.ts +3 -0
- package/app/types/forms/types.zodFormControl.d.ts +0 -3
- package/app/utils/opening-hours.ts +44 -0
- package/nuxt.config.ts +5 -1
- package/package.json +2 -2
- package/ramps.config.mjs +1 -1
- package/.claude/commands/create-commit-message.md +0 -13
- package/.claude/commands/create-release-notes.md +0 -34
- package/.claude/commands/migrate-component.md +0 -169
- package/.claude/commands/run-commit.md +0 -13
- package/.claude/component-ledger/artifact-url.txt +0 -1
- package/.claude/component-ledger/audit.json +0 -1
- package/.claude/component-ledger/build.mjs +0 -164
- package/.claude/component-ledger/output.html +0 -569
- package/.claude/component-ledger/template.html +0 -569
- package/.claude/hooks/check-component-update.sh +0 -95
- package/.claude/hooks/refresh-component-ledger.sh +0 -32
- package/.claude/settings.json +0 -134
- package/.claude/settings.local.json +0 -38
- package/.claude/skills/components/alert-content-inner.md +0 -60
- package/.claude/skills/components/navigation-horizontal.md +0 -99
- package/.claude/skills/components/samaritan-prompt-mixed.md +0 -139
- package/app/components/01.atoms/content-wrappers/content-columns-2/ContentColumns2.vue +0 -51
- package/app/components/01.atoms/content-wrappers/content-columns-2/stories/ContentColumns2.stories.ts +0 -110
- package/app/components/01.atoms/content-wrappers/content-columns-2/tests/ContentColumns2.spec.ts +0 -105
- package/app/components/01.atoms/content-wrappers/content-columns-2/tests/__snapshots__/ContentColumns2.spec.ts.snap +0 -14
- package/app/components/01.atoms/content-wrappers/content-width/ContentWidth.vue +0 -88
- package/app/components/01.atoms/content-wrappers/content-width/stories/ContentWidth.stories.ts +0 -362
- package/app/components/01.atoms/content-wrappers/content-width/tests/ContentWidth.spec.ts +0 -132
- package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/tests/__snapshots__/LayoutGrid.spec.ts.snap +0 -36
- package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/LayoutGridByWidth.vue +0 -70
- package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/stories/LayoutGridByWidth.stories.ts +0 -220
- package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/LayoutGridByWidth.spec.ts +0 -174
- package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/__snapshots__/LayoutGrid.spec.ts.snap +0 -36
- package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/__snapshots__/LayoutGridByCols.spec.ts.snap +0 -36
- package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-width/tests/__snapshots__/LayoutGridByWidth.spec.ts.snap +0 -36
- package/app/components/01.atoms/cookie-consent-banner/CookieConsentBanner.vue +0 -148
- package/app/components/01.atoms/display-avatar/DisplayAvatar.vue +0 -130
- package/app/components/01.atoms/display-avatar/tests/__snapshots__/DisplayAvatar.spec.ts.snap +0 -11
- package/app/components/02.molecules/action-menu/tests/__snapshots__/ActionMenuItemCore.spec.ts.snap +0 -27
- package/app/components/02.molecules/navigation/navigation-horizontal/NavigationHorizontal.vue +0 -162
- package/app/components/02.molecules/navigation/navigation-horizontal/stories/NavigationHorizontal.stories.ts +0 -373
- package/app/components/02.molecules/navigation/navigation-horizontal/tests/NavigationHorizontal.spec.ts +0 -152
- package/app/components/02.molecules/navigation/navigation-horizontal/tests/__snapshots__/NavigationHorizontal.spec.ts.snap +0 -17
- package/app/components/02.molecules/qr-code/stories/QrCode.stories.ts +0 -101
- package/app/components/03.organisms/colour-finder/ColourFinder.vue +0 -1519
- package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioCore.vue +0 -202
- package/app/components/05.forms/input-checkbox-radio/InputCheckboxRadioWithLabel.vue +0 -105
- package/app/components/05.forms/input-checkbox-radio/tests/InputCheckboxRadioCore.spec.ts +0 -320
- package/app/components/05.forms/toggle-switch/variants/tests/ToggleSwitchWithLabel.spec.ts +0 -77
- package/app/components/05.forms/triple-toggle-switch/TripleToggleSwitchCore.vue +0 -314
- package/app/components/05.forms/triple-toggle-switch/stories/TripleToggleSwitchCore.stories.ts +0 -63
- package/.vscode/{srcdev-component-dialog.code-snippets → srcdev-component-display-dialog.code-snippets} +0 -0
- package/app/components/{01.atoms → 02.molecules}/toast/tests/DisplayToast.spec.ts +1 -1
- /package/app/components/{01.atoms → 02.molecules}/toast/tests/DisplayToastProvider.spec.ts +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /package/app/components/05.forms/input-range/{variants/stories → stories}/InputRangeDefault.stories.ts +0 -0
- /package/app/components/05.forms/input-select/{variants/tests → tests}/InputSelectWithLabel.spec.ts +0 -0
- /package/app/components/05.forms/input-textarea/{variants/tests → tests}/InputTextareaWithLabel.spec.ts +0 -0
- /package/app/components/05.forms/toggle-switch/{variants/tests → tests}/ToggleSwitchWithLabelInline.spec.ts +0 -0
- /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
|
-
|
|
121
|
-
const
|
|
122
|
-
|
|
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="
|
|
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/
|
|
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 |
|
|
64
|
-
| sunset | 50 | 0.22 |
|
|
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"` |
|
|
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
|
|
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
|
-
`
|
|
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 `
|
|
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
|
|
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
|
-
- ✅ `
|
|
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
|
-
- ✅ `
|
|
84
|
-
Pure token-rename pass, no visual/default changes (unlike `
|
|
85
|
-
Added Storybook stories for both (`
|
|
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`, `
|
|
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. `
|
|
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); `
|
|
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. `
|
|
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`, `
|
|
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 `
|
|
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 `
|
|
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. `
|
|
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 (`
|
|
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
|
-
|
|
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
|
|
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-
|
|
93
|
-
" --docs-
|
|
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
|
+
}
|