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
|
@@ -4,6 +4,8 @@ QR code decoder for static images. Accepts images via file picker or drag-and-dr
|
|
|
4
4
|
|
|
5
5
|
**File**: `app/components/02.molecules/qr-code/DecodeQrCode.vue`
|
|
6
6
|
|
|
7
|
+
> **Changed 2026-09-28:** `.qr-code-capture`, `.qr-code-dropzone`, `.scanned-results` → `.decode-qr-code-capture`, `-dropzone`, `-results`. The file input now has a visible label and the drop zone instruction text (both props); the root is no longer forced to `aspect-ratio: 1 / 1`.
|
|
8
|
+
|
|
7
9
|
## Prerequisites
|
|
8
10
|
|
|
9
11
|
The `nuxt-qrcode` Nuxt module must be registered in the consuming app's `nuxt.config.ts`:
|
|
@@ -21,6 +23,8 @@ No camera permission is required — this component works entirely with uploaded
|
|
|
21
23
|
|
|
22
24
|
| Prop | Type | Default | Description |
|
|
23
25
|
|------|------|---------|-------------|
|
|
26
|
+
| `upload-label` | `string` | `"Upload a QR code image"` | Visible label wrapping the file input (its accessible name) |
|
|
27
|
+
| `drop-label` | `string` | `"Or drop a QR code image here"` | Instruction text inside the drop zone |
|
|
24
28
|
| `style-class-passthrough` | `string \| string[]` | `[]` | Extra classes on the root element |
|
|
25
29
|
|
|
26
30
|
## CSS classes
|
|
@@ -28,17 +32,19 @@ No camera permission is required — this component works entirely with uploaded
|
|
|
28
32
|
| Class | Where | Description |
|
|
29
33
|
|-------|-------|-------------|
|
|
30
34
|
| `.decode-qr-code` | root | always present |
|
|
31
|
-
| `.qr-code-capture` | file input | the `QrcodeCapture` file-picker element |
|
|
32
|
-
| `.qr-code-dropzone` | drop zone | the `QrcodeDropZone` drag-and-drop area |
|
|
33
|
-
| `.
|
|
35
|
+
| `.decode-qr-code-capture` | file input | the `QrcodeCapture` file-picker element |
|
|
36
|
+
| `.decode-qr-code-dropzone` | drop zone | the `QrcodeDropZone` drag-and-drop area |
|
|
37
|
+
| `.decode-qr-code-upload` | label | wraps `.decode-qr-code-upload-label` and the file input |
|
|
38
|
+
| `.decode-qr-code-dropzone.is-dropping` | drop zone | an image is being dragged over it |
|
|
39
|
+
| `.decode-qr-code-results` | inner | polite live region, always rendered; its `<ul>` appears once a code is decoded |
|
|
34
40
|
|
|
35
41
|
## Behaviour
|
|
36
42
|
|
|
37
|
-
- Two input methods are rendered side by side: a file picker (`.qr-code-capture`) and a drag-and-drop zone (`.qr-code-dropzone`)
|
|
38
|
-
- Both share the same `onDetect` handler — results are displayed in the same `.
|
|
43
|
+
- Two input methods are rendered side by side: a file picker (`.decode-qr-code-capture`) and a drag-and-drop zone (`.decode-qr-code-dropzone`)
|
|
44
|
+
- Both share the same `onDetect` handler — results are displayed in the same `.decode-qr-code-results` list regardless of input method
|
|
39
45
|
- Detected QR codes replace the previous results — each decode is a fresh result set
|
|
40
|
-
- If the decoded array is empty,
|
|
41
|
-
- The drop zone has a dashed border and minimum height by default — style with `.qr-code-dropzone` to customise
|
|
46
|
+
- If the decoded array is empty, the results `<ul>` isn't rendered (the live-region wrapper stays)
|
|
47
|
+
- The drop zone has a dashed border and minimum height by default — style with `.decode-qr-code-dropzone` to customise
|
|
42
48
|
|
|
43
49
|
## Usage
|
|
44
50
|
|
|
@@ -63,7 +69,7 @@ With styling:
|
|
|
63
69
|
gap: 1.6rem;
|
|
64
70
|
}
|
|
65
71
|
|
|
66
|
-
.my-decoder .qr-code-dropzone {
|
|
72
|
+
.my-decoder .decode-qr-code-dropzone {
|
|
67
73
|
min-height: 12rem;
|
|
68
74
|
border-radius: 1rem;
|
|
69
75
|
border-color: var(--theme-input-border);
|
|
@@ -72,7 +78,7 @@ With styling:
|
|
|
72
78
|
justify-content: center;
|
|
73
79
|
}
|
|
74
80
|
|
|
75
|
-
.my-decoder .
|
|
81
|
+
.my-decoder .decode-qr-code-results {
|
|
76
82
|
margin-block-start: 1.6rem;
|
|
77
83
|
font-size: 1.4rem;
|
|
78
84
|
}
|
|
@@ -24,11 +24,13 @@
|
|
|
24
24
|
|
|
25
25
|
| Size | Diameter | Font size |
|
|
26
26
|
| ---- | -------- | --------- |
|
|
27
|
-
| `xs` | 24px
|
|
28
|
-
| `s` | 32px
|
|
29
|
-
| `md` | 40px
|
|
30
|
-
| `lg` | 48px
|
|
31
|
-
| `xl` | 56px
|
|
27
|
+
| `xs` | 2.4rem (24px) | 1.2rem (12px) |
|
|
28
|
+
| `s` | 3.2rem (32px) | 1.4rem (14px) |
|
|
29
|
+
| `md` | 4rem (40px) | 1.6rem (16px) |
|
|
30
|
+
| `lg` | 4.8rem (48px) | 1.8rem (18px) |
|
|
31
|
+
| `xl` | 5.6rem (56px) | 2rem (20px) |
|
|
32
|
+
|
|
33
|
+
Each step is a token (`--display-avatar-size-md`, `--display-avatar-font-size-md`, ...), and `--display-avatar-size`/`--display-avatar-font-size` override the scale for one avatar or an area. A custom `size` string renders at `md` unless you set `--display-avatar-size`. Full list in `CONSUMER-STYLING.md`.
|
|
32
34
|
|
|
33
35
|
---
|
|
34
36
|
|
|
@@ -49,6 +51,10 @@ When `src` is not set, a `<span>` renders the fallback value:
|
|
|
49
51
|
2. `alt` initials — first character of each word, capped at two characters.
|
|
50
52
|
3. Empty string — if neither is set.
|
|
51
53
|
|
|
54
|
+
When `alt` is set, the initials are `aria-hidden` and the full `alt` is rendered as `sr-only` text, so a screen reader announces "Jane Smith" rather than "J S". With only `text`, the text is read as-is.
|
|
55
|
+
|
|
56
|
+
With `src`, the image uses `alt`, or an empty (decorative) `alt` when none is given. Pass `alt` unless the name is already visible next to the avatar.
|
|
57
|
+
|
|
52
58
|
```
|
|
53
59
|
alt="John Doe" → "JD"
|
|
54
60
|
alt="Alice" → "A"
|
|
@@ -134,7 +140,7 @@ interface DisplayChipConfig {
|
|
|
134
140
|
```vue
|
|
135
141
|
<DisplayAvatar size="xl">
|
|
136
142
|
<template #default>
|
|
137
|
-
<img src="/images/profile.jpg" alt="Jane Smith" class="avatar-image" />
|
|
143
|
+
<img src="/images/profile.jpg" alt="Jane Smith" class="display-avatar-image" />
|
|
138
144
|
</template>
|
|
139
145
|
</DisplayAvatar>
|
|
140
146
|
```
|
|
@@ -144,38 +150,16 @@ interface DisplayChipConfig {
|
|
|
144
150
|
```vue
|
|
145
151
|
<DisplayAvatar alt="Jane Smith">
|
|
146
152
|
<template #icon>
|
|
147
|
-
<Icon name="bi:check-circle-fill" class="avatar-icon" />
|
|
153
|
+
<Icon name="bi:check-circle-fill" class="display-avatar-icon" />
|
|
148
154
|
</template>
|
|
149
155
|
</DisplayAvatar>
|
|
150
156
|
```
|
|
151
157
|
|
|
152
158
|
---
|
|
153
159
|
|
|
154
|
-
##
|
|
155
|
-
|
|
156
|
-
```vue
|
|
157
|
-
<DisplayAvatar
|
|
158
|
-
alt="Jane Smith"
|
|
159
|
-
:style-class-passthrough="['profile-avatar']"
|
|
160
|
-
/>
|
|
161
|
-
|
|
162
|
-
<style>
|
|
163
|
-
/* ─── DisplayAvatar local overrides ────────────────────────────────
|
|
164
|
-
Scope by your wrapper class, then nest .display-avatar directly.
|
|
165
|
-
No :deep() needed (component styles are unscoped).
|
|
166
|
-
Delete this block if no overrides are needed.
|
|
167
|
-
─────────────────────────────────────────────────────────────────── */
|
|
168
|
-
.my-page-section {
|
|
169
|
-
.display-avatar {
|
|
170
|
-
&.profile-avatar {
|
|
171
|
-
/* custom overrides */
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
</style>
|
|
176
|
-
```
|
|
160
|
+
## Styling
|
|
177
161
|
|
|
178
|
-
|
|
162
|
+
Tokens for size, background, text colour, radius and icon size are in `CONSUMER-STYLING.md` next to the component; overrides follow [component-local-style-override.md](../component-local-style-override.md). Give an icon in the `#icon` slot the `display-avatar-icon` class to size it with `--display-avatar-icon-size`.
|
|
179
163
|
|
|
180
164
|
---
|
|
181
165
|
|
|
@@ -185,3 +169,4 @@ See [component-local-style-override.md](../component-local-style-override.md) fo
|
|
|
185
169
|
- When `chip` is set, the root element becomes `DisplayChip` and the `as` prop is ignored.
|
|
186
170
|
- `class` and `style` are **not** declared as explicit props — they fall through to the root element automatically via Vue's attribute inheritance (`inheritAttrs: true`). Do not re-add them as props; doing so pulls them out of `$attrs` and breaks automatic inheritance.
|
|
187
171
|
- `NuxtImg` is used for the image, so `@nuxt/image` must be installed in the consuming app.
|
|
172
|
+
- 2026-09-27 migration: moved from `01.atoms` to `02.molecules` (it composes `DisplayChip`). Font sizes fixed (they were 16px-root rem values, rendering at 7.5–12.5px here); sizes and colours are now public tokens, with a `--theme-*` background and text colour instead of no background and faint `--slate-03` text. The hardcoded English `"Avatar"` alt fallback became an empty (decorative) alt, and initials now announce the full `alt`. Classes `.avatar-image`/`.avatar-icon` became `.display-avatar-image`/`.display-avatar-icon`. A stray `style-class-passthrough` attribute is no longer rendered on a native root, and the chip config now reacts to prop changes.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# DisplayChip Component
|
|
2
2
|
|
|
3
|
+
> **Renamed 2026-09-27:** root class `.display-chip-core` → `.display-chip`. Status colours are now public tokens (`--display-chip-colour-*`, were unprefixed `--color-*`); the geometry vars fed from `config` are private (`--_chip-*`).
|
|
4
|
+
|
|
3
5
|
## Overview
|
|
4
6
|
|
|
5
7
|
`DisplayChip` renders a small status indicator dot (or icon/label badge) that is absolutely positioned on a parent element using CSS trigonometric functions. It works by applying a radial-gradient mask to the parent's content, creating a clean cutout behind the chip. Supports circle and square parent shapes.
|
|
@@ -53,12 +55,15 @@ Default config: `{ size: "12px", maskWidth: "4px", offset: "0px", angle: "90deg"
|
|
|
53
55
|
|
|
54
56
|
Apply status via `styleClassPassthrough` — the component has built-in colour variants:
|
|
55
57
|
|
|
56
|
-
| Class
|
|
57
|
-
|
|
|
58
|
-
| (none)
|
|
59
|
-
| `online`
|
|
60
|
-
| `idle`
|
|
61
|
-
| `dnd`
|
|
58
|
+
| Class | Token | Default |
|
|
59
|
+
| --- | --- | --- |
|
|
60
|
+
| (none) | `--display-chip-colour-offline` | `slategrey` |
|
|
61
|
+
| `online` | `--display-chip-colour-online` | `rgb(0, 255, 135)` |
|
|
62
|
+
| `idle` | `--display-chip-colour-idle` | `rgb(255, 185, 51)` |
|
|
63
|
+
| `dnd` | `--display-chip-colour-dnd` | `rgb(255, 40, 80)` |
|
|
64
|
+
|
|
65
|
+
Icon and label colour: `--display-chip-text-colour` (default `black`). Full reference:
|
|
66
|
+
`app/components/02.molecules/display-chip/CONSUMER-STYLING.md`.
|
|
62
67
|
|
|
63
68
|
```vue
|
|
64
69
|
<DisplayChip :style-class-passthrough="['online']">...</DisplayChip>
|
|
@@ -186,15 +191,15 @@ See [display-avatar.md](./display-avatar.md) for the full API.
|
|
|
186
191
|
|
|
187
192
|
<style>
|
|
188
193
|
/* ─── DisplayChip local overrides ──────────────────────────────────
|
|
189
|
-
Scope by your wrapper class, then nest .display-chip
|
|
194
|
+
Scope by your wrapper class, then nest .display-chip directly.
|
|
190
195
|
No :deep() needed (component styles are unscoped).
|
|
191
196
|
Delete this block if no overrides are needed.
|
|
192
197
|
─────────────────────────────────────────────────────────────────── */
|
|
193
198
|
.my-page-section {
|
|
194
|
-
.display-chip
|
|
199
|
+
.display-chip {
|
|
195
200
|
&.my-chip {
|
|
196
201
|
/* override colour vars, e.g. */
|
|
197
|
-
--
|
|
202
|
+
--display-chip-colour-online: hotpink;
|
|
198
203
|
}
|
|
199
204
|
}
|
|
200
205
|
}
|
|
@@ -209,5 +214,5 @@ See [display-avatar.md](./display-avatar.md) for the full API.
|
|
|
209
214
|
- `shape` must match the actual shape of the slot content — the position maths differs between `circle` (radius-based) and `square` (clamped corner-aware).
|
|
210
215
|
- `config` values are geometric inputs to CSS `calc(cos())` / `calc(sin())` expressions. Pass them as strings with units (`"12px"`, `"45deg"`), not plain numbers.
|
|
211
216
|
- The chip dot is rendered via `::after` pseudo-element; icon and label sit above it at `z-index: 2`.
|
|
212
|
-
- The mask cutout is applied to all direct children of `.display-chip
|
|
217
|
+
- The mask cutout is applied to all direct children of `.display-chip` except `.chip-icon` and `.chip-label` — ensure the host element is a direct child.
|
|
213
218
|
- `DisplayChipConfig` and `DisplayChipProps` are both exported from the layer types. Use `DisplayChipConfig` when passing geometry values (the `config` prop). Use `DisplayChipProps` only if you need to pass the full component prop set (e.g. when building a wrapper component).
|
|
@@ -21,6 +21,7 @@ open/close state management.
|
|
|
21
21
|
| `justifyDialog` | `'start' \| 'center' \| 'end'` | `'center'` | Horizontal position of panel within overlay. |
|
|
22
22
|
| `alignDialog` | `'start' \| 'center' \| 'end'` | `'center'` | Vertical position of panel within overlay. |
|
|
23
23
|
| `closeIcon` | `string` | app.config | Icon name for the header close button. Override per-instance or set globally via `app.config`. |
|
|
24
|
+
| `closeLabel` | `string` | app.config (`"Close"`) | Screen-reader text on the icon-only close button. Pass a translated string, or set it site-wide via `app.config`. |
|
|
24
25
|
| `styleClassPassthrough` | `string \| string[]` | `[]` | Extra classes applied to the root `<dialog>` element. |
|
|
25
26
|
|
|
26
27
|
## Slots
|
|
@@ -120,6 +121,7 @@ export default defineAppConfig({
|
|
|
120
121
|
alignDialog: "end",
|
|
121
122
|
lockViewport: true,
|
|
122
123
|
closeIcon: "heroicons:x-mark",
|
|
124
|
+
closeLabel: "Fermer",
|
|
123
125
|
theme: "info",
|
|
124
126
|
},
|
|
125
127
|
},
|
|
@@ -130,7 +132,7 @@ Per-instance props always win — app.config only fills in when a prop is absent
|
|
|
130
132
|
|
|
131
133
|
## CSS token API
|
|
132
134
|
|
|
133
|
-
See `CONSUMER-STYLING.md` in the component folder for the full token reference. Prefer global
|
|
135
|
+
See `CONSUMER-STYLING.md` in the component folder for the full token reference. The four `--display-dialog-inner-*` panel tokens resolve on `.display-dialog-inner` (since 2026-09-27), so they can be set per variant (`.display-dialog-inner.alert { ... }`); `fullscreen` ignores radius/border/outline. Colour defaults use `--colour-text-default` / `--page-bg`, not `light-dark()`. Prefer global
|
|
134
136
|
CSS over per-instance overrides — dialogs are site-wide UI:
|
|
135
137
|
|
|
136
138
|
```css
|
|
@@ -8,8 +8,8 @@ A classic pill/badge component for displaying status labels, tags, or metadata.
|
|
|
8
8
|
|
|
9
9
|
| Prop | Type | Default | Description |
|
|
10
10
|
|------|------|---------|-------------|
|
|
11
|
-
| `tag` | `"span" \| "div" \| "button" \| "a"` | `"span"` | Root element. Use `"button"` or `"a"` for interactive pills
|
|
12
|
-
| `label` | `string` | `undefined` | Pill text. When set, renders inside `.pill-label` and suppresses the default slot |
|
|
11
|
+
| `tag` | `"span" \| "div" \| "button" \| "a"` | `"span"` | Root element. Use `"button"` or `"a"` for interactive pills: cursor switches to pointer and a `:focus-visible` outline is shown. A `button` gets `type="button"`; pass `href` (falls through) for an `a`. |
|
|
12
|
+
| `label` | `string` | `undefined` | Pill text. When set, renders inside `.display-pill-label` and suppresses the default slot |
|
|
13
13
|
| `size` | `"sm" \| "md" \| "lg"` | `"md"` | Size variant |
|
|
14
14
|
| `variant` | `"default" \| "primary" \| "success" \| "warning" \| "danger" \| "neutral"` | `"default"` | Colour variant |
|
|
15
15
|
| `reversed` | `boolean` | `false` | Reverses icon/label order (`flex-direction: row-reverse`) |
|
|
@@ -19,7 +19,7 @@ A classic pill/badge component for displaying status labels, tags, or metadata.
|
|
|
19
19
|
|
|
20
20
|
| Slot | Description |
|
|
21
21
|
|------|-------------|
|
|
22
|
-
| `icon` | Icon content — rendered before the label by default, after when `reversed=true` |
|
|
22
|
+
| `icon` | Icon content, wrapped in `.display-pill-icon` (sized by `--display-pill-icon-size`) — rendered before the label by default, after when `reversed=true` |
|
|
23
23
|
| `default` | Custom label content — only used when the `label` prop is not set |
|
|
24
24
|
|
|
25
25
|
## Basic usage
|
|
@@ -67,57 +67,9 @@ When `label` is not set, the default slot is rendered instead:
|
|
|
67
67
|
|
|
68
68
|
## CSS token API
|
|
69
69
|
|
|
70
|
-
All tokens
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
| Token | Default |
|
|
75
|
-
|-------|---------|
|
|
76
|
-
| `--theme-pill-bg` | `var(--slate-01)` |
|
|
77
|
-
| `--theme-pill-color` | `var(--slate-09)` |
|
|
78
|
-
| `--theme-pill-primary-bg` | `var(--blue-01)` |
|
|
79
|
-
| `--theme-pill-primary-color` | `var(--blue-09)` |
|
|
80
|
-
| `--theme-pill-success-bg` | `var(--green-01)` |
|
|
81
|
-
| `--theme-pill-success-color` | `var(--green-10)` |
|
|
82
|
-
| `--theme-pill-warning-bg` | `var(--yellow-08, #fef9c3)` |
|
|
83
|
-
| `--theme-pill-warning-color` | `var(--yellow-03, #a16207)` |
|
|
84
|
-
| `--theme-pill-danger-bg` | `var(--red-01)` |
|
|
85
|
-
| `--theme-pill-danger-color` | `var(--red-10)` |
|
|
86
|
-
| `--theme-pill-neutral-bg` | `var(--slate-08)` |
|
|
87
|
-
| `--theme-pill-neutral-color` | `var(--slate-03)` |
|
|
88
|
-
|
|
89
|
-
### Border
|
|
90
|
-
|
|
91
|
-
| Token | Default |
|
|
92
|
-
|-------|---------|
|
|
93
|
-
| `--theme-pill-border-color` | `transparent` |
|
|
94
|
-
| `--theme-pill-border-width` | `1px` |
|
|
95
|
-
| `--theme-pill-border-style` | `solid` |
|
|
96
|
-
| `--theme-pill-border-radius` | `100vw` |
|
|
97
|
-
|
|
98
|
-
### Outline
|
|
99
|
-
|
|
100
|
-
| Token | Default |
|
|
101
|
-
|-------|---------|
|
|
102
|
-
| `--theme-pill-outline` | `none` |
|
|
103
|
-
| `--theme-pill-outline-offset` | `0px` |
|
|
104
|
-
|
|
105
|
-
### Typography & spacing
|
|
106
|
-
|
|
107
|
-
| Token | Default |
|
|
108
|
-
|-------|---------|
|
|
109
|
-
| `--theme-pill-font-size` | `1.2rem` |
|
|
110
|
-
| `--theme-pill-font-size-sm` | `1rem` |
|
|
111
|
-
| `--theme-pill-font-size-lg` | `1.4rem` |
|
|
112
|
-
| `--theme-pill-font-weight` | `500` |
|
|
113
|
-
| `--theme-pill-padding-x` | `1rem` |
|
|
114
|
-
| `--theme-pill-padding-y` | `0.4rem` |
|
|
115
|
-
| `--theme-pill-gap` | `0.5rem` |
|
|
116
|
-
| `--theme-pill-icon-size` | `1.4rem` |
|
|
117
|
-
|
|
118
|
-
## Theming via styleClassPassthrough
|
|
119
|
-
|
|
120
|
-
Override tokens by targeting `.your-class.display-pill` — no `:deep()` needed:
|
|
70
|
+
Full token list in `CONSUMER-STYLING.md` next to the component. All tokens are `--display-pill-*` (renamed from `--theme-pill-*` on 2026-09-27; `bg`/`color` became `background`/`text-colour`).
|
|
71
|
+
|
|
72
|
+
Colour resolves as **variant token → base token → variant default**: `--display-pill-background`/`-text-colour` restyle every variant; `--display-pill-success-background` etc. win for that variant only. Sizes have `-sm`/`-lg` suffixed tokens for font size and icon size only; padding and gap are the icon size times a ratio (`--display-pill-padding-inline-ratio` 0.7, `-padding-inline-icon-ratio` 0.4, `-padding-block-ratio` 0.3, `-gap-ratio` 0.35), so spacing scales with the pill. Absolute `--display-pill-padding-inline`/`-padding-block`/`-gap` tokens still override. The icon side of a pill gets `--display-pill-padding-inline-icon` (tighter than `--display-pill-padding-inline`), placed by `data-icon-position` (`start`, `end` when `reversed`, `only` for icon-only, absent with no icon), so label-only pills stay evenly padded.
|
|
121
73
|
|
|
122
74
|
```vue
|
|
123
75
|
<DisplayPill label="New" variant="primary" style-class-passthrough="pill-new" />
|
|
@@ -125,33 +77,22 @@ Override tokens by targeting `.your-class.display-pill` — no `:deep()` needed:
|
|
|
125
77
|
|
|
126
78
|
```css
|
|
127
79
|
.pill-new.display-pill {
|
|
128
|
-
--
|
|
129
|
-
--
|
|
130
|
-
--
|
|
131
|
-
--
|
|
132
|
-
}
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
## Border and outline examples
|
|
136
|
-
|
|
137
|
-
```css
|
|
138
|
-
/* Solid border */
|
|
139
|
-
.bordered.display-pill {
|
|
140
|
-
--theme-pill-border-color: currentColor;
|
|
141
|
-
--theme-pill-border-width: 1.5px;
|
|
80
|
+
--display-pill-primary-background: var(--green-01);
|
|
81
|
+
--display-pill-primary-text-colour: var(--green-10);
|
|
82
|
+
--display-pill-border-colour: currentColor;
|
|
83
|
+
--display-pill-border-width: 0.15rem;
|
|
142
84
|
}
|
|
143
85
|
|
|
144
86
|
/* Dashed border */
|
|
145
87
|
.dashed.display-pill {
|
|
146
|
-
--
|
|
147
|
-
--
|
|
148
|
-
--theme-pill-border-style: dashed;
|
|
88
|
+
--display-pill-border-colour: currentColor;
|
|
89
|
+
--display-pill-border-style: dashed;
|
|
149
90
|
}
|
|
150
91
|
|
|
151
|
-
/*
|
|
152
|
-
.
|
|
153
|
-
--
|
|
154
|
-
--
|
|
92
|
+
/* Decorative outline ring */
|
|
93
|
+
.ringed.display-pill {
|
|
94
|
+
--display-pill-outline: 0.2rem solid currentColor;
|
|
95
|
+
--display-pill-outline-offset: 0.3rem;
|
|
155
96
|
}
|
|
156
97
|
```
|
|
157
98
|
|
|
@@ -160,3 +101,4 @@ Override tokens by targeting `.your-class.display-pill` — no `:deep()` needed:
|
|
|
160
101
|
- `border-radius` defaults to `100vw` — this always collapses to the tightest possible radius on the shorter axis, making it geometry-independent (no magic number needed).
|
|
161
102
|
- `cursor: default` and `user-select: none` are applied unconditionally. `cursor: pointer` is applied automatically via `:is(button, a)` when `tag` is interactive.
|
|
162
103
|
- All variant colour pairs use a light-tint background (`--color-01`) with a dark text colour (`--color-09`/`--color-10`) to ensure WCAG AA contrast. The project colour scale runs `00` (lightest) → `10` (darkest) — the opposite of Tailwind.
|
|
104
|
+
- 2026-09-27 migration: tokens renamed `--theme-pill-*` → `--display-pill-*`; variants now fall back to the base colour tokens (so `ServiceSummary`/`ServiceDetail`'s pill overrides finally apply); `warning` moved from a non-existent `--yellow-*` ramp (hex fallbacks) to `--orange-01`/`--orange-10`; icon slot wrapped and sized (the icon-size tokens were unused); `.pill-label` → `.display-pill-label`; `button` pills get `type="button"` and a visible focus outline (the base `outline: none` suppressed it); single-use private pass-throughs inlined.
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# DisplayPrompt
|
|
2
2
|
|
|
3
|
+
> **Changed 2026-09-28:** root class `.display-prompt-core` → `.display-prompt` (and `data-test-id` `display-prompt-core-{theme}` → `display-prompt-{theme}`). The documented `outlined` passthrough modifier never had any CSS behind it and was removed from this doc.
|
|
4
|
+
|
|
3
5
|
## Overview
|
|
4
6
|
|
|
5
7
|
`DisplayPrompt` is an inline notification banner with a themed icon, title, optional content, and
|
|
6
8
|
an optional dismiss button. It collapses in-place via CSS grid animation rather than removing from
|
|
7
9
|
the DOM. Dismiss can be controlled locally (closes itself) or by a parent via `v-model`.
|
|
8
10
|
|
|
9
|
-
**Location**: `app/components/
|
|
11
|
+
**Location**: `app/components/02.molecules/prompt/DisplayPrompt.vue`
|
|
10
12
|
**Types**: `~/types/components` — `DisplayPromptTheme`, `SemanticTheme`
|
|
11
13
|
|
|
12
14
|
## Props
|
|
@@ -17,7 +19,8 @@ the DOM. Dismiss can be controlled locally (closes itself) or by a parent via `v
|
|
|
17
19
|
| `dismissible` | `boolean` | `false` | Shows a close button. |
|
|
18
20
|
| `useAutoFocus` | `boolean` | `false` | Focuses the prompt root element on mount. |
|
|
19
21
|
| `masked` | `boolean` | `false` | SVG glass border — swaps `AlertContent` for `AlertMaskedContent`. |
|
|
20
|
-
| `
|
|
22
|
+
| `closeLabel` | `string` | `"Close this prompt"` | Screen-reader label for the dismiss button. Also settable via `app.config`; the `#customTitle` slot still overrides it. |
|
|
23
|
+
| `styleClassPassthrough` | `string \| string[]` | `[]` | Extra classes on the inner `.display-prompt-wrapper` (not the root). Reactive after mount. |
|
|
21
24
|
| `v-model` | `boolean` | `false` | Optional parent control — see dismiss behaviour below. |
|
|
22
25
|
|
|
23
26
|
## Slots
|
|
@@ -28,7 +31,7 @@ the DOM. Dismiss can be controlled locally (closes itself) or by a parent via `v
|
|
|
28
31
|
| `#content` | Body text below the title. The `<p>` element is omitted when this slot is empty. |
|
|
29
32
|
| `#customDecoratorIcon` | Replaces the default theme icon. |
|
|
30
33
|
| `#customCloseIcon` | Replaces the default × close icon inside the dismiss button. |
|
|
31
|
-
| `#customTitle` | Screen-reader label for the dismiss button (
|
|
34
|
+
| `#customTitle` | Screen-reader label for the dismiss button (defaults to the `closeLabel` prop). |
|
|
32
35
|
|
|
33
36
|
## Themes
|
|
34
37
|
|
|
@@ -53,7 +56,9 @@ Two modes depending on whether `v-model` is bound:
|
|
|
53
56
|
| `v-model="true"` | Emits `update:modelValue = false`; internal state unchanged — parent controls visibility |
|
|
54
57
|
|
|
55
58
|
The `.closed` class triggers a CSS grid row animation (`grid-template-rows: 1fr → 0fr`) with
|
|
56
|
-
`opacity: 0` and `pointer-events: none
|
|
59
|
+
`opacity: 0` and `pointer-events: none`, and the root becomes `inert` so the dismiss button leaves the
|
|
60
|
+
tab order and the accessibility tree. The transition is off under `prefers-reduced-motion: reduce`;
|
|
61
|
+
its duration is `--display-prompt-transition-duration` (`200ms`).
|
|
57
62
|
|
|
58
63
|
## app.config defaults
|
|
59
64
|
|
|
@@ -69,6 +74,7 @@ export default defineAppConfig({
|
|
|
69
74
|
dismissible: true,
|
|
70
75
|
masked: false,
|
|
71
76
|
useAutoFocus: false,
|
|
77
|
+
closeLabel: "Fermer",
|
|
72
78
|
},
|
|
73
79
|
},
|
|
74
80
|
})
|
|
@@ -114,20 +120,6 @@ const showPrompt = ref(true)
|
|
|
114
120
|
</template>
|
|
115
121
|
```
|
|
116
122
|
|
|
117
|
-
## `styleClassPassthrough` modifiers
|
|
118
|
-
|
|
119
|
-
| Class | Effect |
|
|
120
|
-
|---|---|
|
|
121
|
-
| `"outlined"` | Adds `1px solid var(--theme-border)` border to the wrapper |
|
|
122
|
-
|
|
123
|
-
Apply via prop:
|
|
124
|
-
|
|
125
|
-
```vue
|
|
126
|
-
<DisplayPrompt :style-class-passthrough="['outlined']" theme="error">
|
|
127
|
-
<template #title>Something went wrong.</template>
|
|
128
|
-
</DisplayPrompt>
|
|
129
|
-
```
|
|
130
|
-
|
|
131
123
|
## CSS token override
|
|
132
124
|
|
|
133
125
|
Scope overrides using your page or section wrapper class — no `:deep()` needed:
|
|
@@ -156,7 +148,7 @@ glass effect to be visible.
|
|
|
156
148
|
## Notes
|
|
157
149
|
|
|
158
150
|
- `DisplayPromptTheme` is an alias for `SemanticTheme` (`"info" | "success" | "warning" | "error"`).
|
|
159
|
-
- The root
|
|
151
|
+
- The root gets `tabindex="-1"` only when `useAutoFocus` is on, so it can take programmatic focus without joining the tab order (it used to be `tabindex="0"` always).
|
|
160
152
|
- `useAutoFocus` focuses the root element on mount (useful when injecting a prompt in response to a
|
|
161
153
|
user action that has already moved focus elsewhere).
|
|
162
154
|
- The `#title` slot renders unconditionally — an empty title `<p>` will still appear. Always
|
|
@@ -14,6 +14,7 @@ Renders a styled QR code SVG from a string value. Supports colour, size, corner
|
|
|
14
14
|
| `black-color` | `string` | `"currentColor"` | Colour for the dark modules |
|
|
15
15
|
| `white-color` | `string` | `"transparent"` | Colour for the light modules |
|
|
16
16
|
| `size` | `string` | `"256px"` | Width of the QR code (height matches via `aspect-ratio: 1 / 1`) |
|
|
17
|
+
| `aria-label` | `string` | `"QR code"` | Accessible name for the QR image (root has `role="img"`). Pass something specific and translated, e.g. "Scan to book an appointment". |
|
|
17
18
|
| `style-class-passthrough` | `string \| string[]` | `[]` | Extra classes on the root element |
|
|
18
19
|
|
|
19
20
|
### QrCodeVariant type
|
|
@@ -29,6 +30,10 @@ const variant: QrCodeVariant = {
|
|
|
29
30
|
};
|
|
30
31
|
```
|
|
31
32
|
|
|
33
|
+
## CSS token
|
|
34
|
+
|
|
35
|
+
`--display-qr-code-size` overrides the `size` prop when set (e.g. on a page wrapper). Full reference: `app/components/01.atoms/qr-code/CONSUMER-STYLING.md`.
|
|
36
|
+
|
|
32
37
|
## CSS classes
|
|
33
38
|
|
|
34
39
|
| Class | Where | Description |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: DisplayThemeSwitch
|
|
3
|
-
description: DisplayThemeSwitch system/light/dark theme picker wired to useSettingsStore, wraps
|
|
3
|
+
description: DisplayThemeSwitch system/light/dark theme picker wired to useSettingsStore, wraps TripleToggleSwitch
|
|
4
4
|
type: reference
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ type: reference
|
|
|
9
9
|
## Overview
|
|
10
10
|
|
|
11
11
|
`DisplayThemeSwitch` is a system/light/dark colour-scheme picker. It's a thin wrapper around
|
|
12
|
-
`
|
|
12
|
+
`TripleToggleSwitch` (`app/components/05.forms/triple-toggle-switch/`), wired to
|
|
13
13
|
`useSettingsStore` (`app/stores/useSettingsStore.ts`) so selecting an option updates the app's
|
|
14
14
|
`colourScheme` state and applies the matching class (`system`/`light`/`dark`) to
|
|
15
15
|
`<html>`. Renders inside `<ClientOnly>` since the store's persisted value isn't known until
|
|
@@ -20,6 +20,7 @@ hydration.
|
|
|
20
20
|
| Prop | Type | Default | Description |
|
|
21
21
|
|------|------|---------|-------------|
|
|
22
22
|
| `styleClassPassthrough` | `string \| string[]` | `[]` | Extra classes on the root. Pass `"small"` for compact sizing. |
|
|
23
|
+
| `ariaLabel` | `string` | `"Colour scheme"` | Accessible name for the radiogroup. |
|
|
23
24
|
| `systemLabel` | `string` | `"System"` | Accessible label for the system option. |
|
|
24
25
|
| `lightLabel` | `string` | `"Light"` | Accessible label for the light option. |
|
|
25
26
|
| `darkLabel` | `string` | `"Dark"` | Accessible label for the dark option. |
|
|
@@ -42,8 +43,8 @@ hydration.
|
|
|
42
43
|
## Styling
|
|
43
44
|
|
|
44
45
|
No `--display-theme-switch-*` tokens of its own — every visual aspect (colour, marker gradient,
|
|
45
|
-
sizing) is delegated to `
|
|
46
|
-
CONSUMER-STYLING.md here and `
|
|
46
|
+
sizing) is delegated to `TripleToggleSwitch`'s public `--triple-toggle-switch-*` tokens. See
|
|
47
|
+
CONSUMER-STYLING.md here and `TripleToggleSwitch`'s own CONSUMER-STYLING.md.
|
|
47
48
|
|
|
48
49
|
## Notes
|
|
49
50
|
|
|
@@ -51,10 +52,10 @@ CONSUMER-STYLING.md here and `TripleToggleSwitchCore`'s own CONSUMER-STYLING.md.
|
|
|
51
52
|
`02.molecules/`. Added `systemLabel`/`lightLabel`/`darkLabel`/`systemIcon`/`lightIcon`/`darkIcon`
|
|
52
53
|
props — the three option labels/icons were previously hardcoded English strings with no override
|
|
53
54
|
hook. Removed a large block of dead/duplicate CSS in this component's own `<style>` that either
|
|
54
|
-
no-op-duplicated `
|
|
55
|
+
no-op-duplicated `TripleToggleSwitch`'s own default styling (same selectors, same values) or
|
|
55
56
|
actively bypassed its public `--triple-toggle-switch-*` tokens with hardcoded literals (a
|
|
56
57
|
consumer setting e.g. `--triple-toggle-switch-surface` globally would have been silently
|
|
57
58
|
overridden back). Only the genuine `small`-variant sizing override remains, now driving
|
|
58
|
-
`
|
|
59
|
+
`TripleToggleSwitch`'s own public sizing tokens (`--triple-toggle-switch-gap`/`-padding`/
|
|
59
60
|
`-option-padding`/`-icon-size`, added in the same migration) instead of reaching into its
|
|
60
61
|
private `--_form-*`/`--_scheme-icon-font-size` locals directly.
|
|
@@ -11,10 +11,9 @@ Two patterns are available depending on the use case:
|
|
|
11
11
|
|
|
12
12
|
**Locations**:
|
|
13
13
|
|
|
14
|
-
- `app/components/
|
|
15
|
-
- `app/components/
|
|
14
|
+
- `app/components/02.molecules/toast/DisplayToast.vue`
|
|
15
|
+
- `app/components/02.molecules/toast/DisplayToastProvider.vue`
|
|
16
16
|
- `app/composables/useToastQueue.ts`
|
|
17
|
-
- `app/components/01.atoms/toast/molecules/DefaultToastContent.vue`
|
|
18
17
|
|
|
19
18
|
**Types**: `~/types/components` — `DisplayToastConfig`, `DisplayToastTheme`, `ToastQueueEntry`, `ToastQueueStatus`
|
|
20
19
|
|
|
@@ -81,7 +80,7 @@ Resolution chain: **`config` prop → app.config → hardcoded fallback**.
|
|
|
81
80
|
|
|
82
81
|
| Slot | Description |
|
|
83
82
|
|---|---|
|
|
84
|
-
| `default` | Replaces `
|
|
83
|
+
| `default` | Replaces the built-in `AlertContent`/`AlertMaskedContent` entirely. `has-theme`, `tabindex`, and `aria-describedby` are omitted — accessibility is the caller's responsibility. |
|
|
85
84
|
| `#customToastIcon` | Replaces the default theme icon. |
|
|
86
85
|
| `#title` | Replaces `config.content.title`. Do not provide both slot and config value. |
|
|
87
86
|
| `#description` | Replaces `config.content.description`. Do not provide both slot and config value. |
|
|
@@ -224,11 +223,11 @@ appearing behind a consumer's own sticky header.
|
|
|
224
223
|
|
|
225
224
|
### Masked variant
|
|
226
225
|
|
|
227
|
-
Setting `appearance.masked: true` swaps `AlertContent` for `AlertMaskedContent`, which uses an SVG-based border and a semi-transparent background (`
|
|
226
|
+
Setting `appearance.masked: true` swaps `AlertContent` for `AlertMaskedContent`, which uses an SVG-based border and a semi-transparent background (the theme's `--theme-surface-subtle` at 80%) so page content is faintly visible beneath the toast.
|
|
228
227
|
|
|
229
228
|
The SVG border shape matches the standard toast exactly (8px left radius, 4px right, 6px accent-colour left bar via `--theme-accent`). Override any dimension or colour via a `maskConfig` prop if using `AlertMaskedContent` standalone.
|
|
230
229
|
|
|
231
|
-
The inner content layout is handled by the shared `AlertContentInner` molecule — both variants reuse it. `AlertMaskedContent`
|
|
230
|
+
The inner content layout is handled by the shared `AlertContentInner` molecule — both variants reuse it. `AlertMaskedContent` sets `--alert-content-inner-background: transparent` so the glass effect shows through.
|
|
232
231
|
|
|
233
232
|
### Provider notes
|
|
234
233
|
|
|
@@ -67,7 +67,7 @@ every item, it just omits the animation class for the ones that don't need it:
|
|
|
67
67
|
|
|
68
68
|
None — this component has no `--entry-animation-*` tokens or CSS of its own. The animation
|
|
69
69
|
keyframes, timing, and `prefers-reduced-motion` guard live in the shared utility class
|
|
70
|
-
(`entry-slide-in`/`entry-zoom-reveal`/`entry-exit-blur`), not in this component.
|
|
70
|
+
(`entry-slide-in`/`entry-zoom-reveal`/`entry-exit-blur`), not in this component. Full reference: `app/components/01.atoms/animations/entry/CONSUMER-STYLING.md`.
|
|
71
71
|
|
|
72
72
|
---
|
|
73
73
|
|
|
@@ -82,7 +82,4 @@ keyframes, timing, and `prefers-reduced-motion` guard live in the shared utility
|
|
|
82
82
|
|
|
83
83
|
## Notes
|
|
84
84
|
|
|
85
|
-
- **
|
|
86
|
-
utility class — changing either prop after mount does not currently re-toggle the class. This
|
|
87
|
-
matches the component's existing usage pattern (animation type is always set once per instance,
|
|
88
|
-
never swapped at runtime); flag it if a future consumer needs runtime toggling.
|
|
85
|
+
- **Reactive**: `animationType`, `skipAnimation` and `styleClassPassthrough` can all change after mount; the animation class is bound in the template (it used to be set once at setup, fixed 2026-09-27). Note that switching the class on an element already in view restarts its scroll-driven timeline from wherever the scroll position currently is.
|
|
@@ -61,11 +61,13 @@ EyebrowText is commonly placed directly above a `HeroText` heading:
|
|
|
61
61
|
|
|
62
62
|
| Value | CSS variable |
|
|
63
63
|
|-------|-------------|
|
|
64
|
-
| `large` | `--eyebrow-text-large` |
|
|
65
|
-
| `medium` | `--eyebrow-text-medium` |
|
|
66
|
-
| `small` | `--eyebrow-text-small` |
|
|
64
|
+
| `large` | `--eyebrow-text-large` (default `1.4rem`) |
|
|
65
|
+
| `medium` | `--eyebrow-text-medium` (default `1.2rem`) |
|
|
66
|
+
| `small` | `--eyebrow-text-small` (default `1rem`) |
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
The library theme sets these on `:root`; the component has matching fallbacks. The text is filled
|
|
69
|
+
with `--eyebrow-text-bg-img` (gold/rose gradient by default) via `background-clip: text`. Full
|
|
70
|
+
reference: `app/components/01.atoms/text-blocks/eyebrow-text/CONSUMER-STYLING.md`.
|
|
69
71
|
|
|
70
72
|
## Styling
|
|
71
73
|
|