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
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
| `--wipe-away-vertical-animation-duration` | `1s` | `wipe-out` scroll-linked animation, browsers supporting `animation-timeline: view()` |
|
|
10
10
|
| `--wipe-away-vertical-trailing-buffer` | `20vh` | `.trailing-buffer` height — release room after the last panel |
|
|
11
11
|
|
|
12
|
+
---
|
|
13
|
+
|
|
12
14
|
## Only itemCount - 1 scrollingItem slots
|
|
13
15
|
|
|
14
16
|
The last panel has nothing left to reveal, so it has no wipe animation and no `.scrolling-section`
|
|
@@ -20,6 +22,8 @@ as deep on screen as the others, since it got the same reveal lead-in as every o
|
|
|
20
22
|
a whole dedicated section with no wipe to cut it short. `.trailing-buffer` (see token above)
|
|
21
23
|
replaces that with a much smaller, purpose-built release cushion instead.
|
|
22
24
|
|
|
25
|
+
---
|
|
26
|
+
|
|
23
27
|
## Pure CSS, no JS measurement
|
|
24
28
|
|
|
25
29
|
The whole pin/reveal effect is CSS-only (grid overlay + `animation-timeline: view()`); there's
|
|
@@ -29,6 +33,8 @@ see below), and `.sticky-items-container` spans `grid-row: 1 / -1` to overlay al
|
|
|
29
33
|
adding its own row — so the root's height is simply the sum of the scrolling sections' own content
|
|
30
34
|
height plus the leading buffer, nothing extra to size manually.
|
|
31
35
|
|
|
36
|
+
---
|
|
37
|
+
|
|
32
38
|
## Leading buffer
|
|
33
39
|
|
|
34
40
|
`.leading-buffer` is a fixed `100vh` spacer rendered before the first scrolling section. Without
|
|
@@ -37,6 +43,8 @@ timeline range at initial page load (before any scrolling happens), so the first
|
|
|
37
43
|
appear partially wiped on load. The buffer guarantees a full viewport of scroll run-up regardless
|
|
38
44
|
of how much real content precedes the component.
|
|
39
45
|
|
|
46
|
+
---
|
|
47
|
+
|
|
40
48
|
## No `animation-timeline: view()` support
|
|
41
49
|
|
|
42
50
|
Browsers without support (checked via `@supports not (animation-timeline: view())`) get the
|
|
@@ -44,6 +52,8 @@ sticky/grid-overlay/animation rules dropped entirely — `.sticky-item`s just re
|
|
|
44
52
|
stacked panels in document flow, and `.scrolling-section`s are hidden. No JS fallback, no
|
|
45
53
|
opacity crossfade.
|
|
46
54
|
|
|
55
|
+
---
|
|
56
|
+
|
|
47
57
|
## Sticky vertical centering — no transform
|
|
48
58
|
|
|
49
59
|
`.sticky-items-container` centers itself with `top: calc((100vh - var(--wipe-away-vertical-height, 100vh)) / 2)` — a plain calc(), not a `transform: translateY()`. Do not
|
|
@@ -59,12 +69,27 @@ the last panel and whatever content follows the component.
|
|
|
59
69
|
}
|
|
60
70
|
```
|
|
61
71
|
|
|
72
|
+
---
|
|
73
|
+
|
|
62
74
|
## Reduced motion
|
|
63
75
|
|
|
64
76
|
The wipe animation is disabled under `prefers-reduced-motion: reduce` (`animation: none;
|
|
65
77
|
clip-path: none;`) — panels render fully visible with no clip.
|
|
66
78
|
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Local overrides
|
|
82
|
+
|
|
83
|
+
Set the tokens above on an element you own (a page or section class, or a class added with
|
|
84
|
+
`:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
|
|
85
|
+
`@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
|
|
86
|
+
`<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
|
|
87
|
+
`:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
67
91
|
## Class passthrough
|
|
68
92
|
|
|
69
93
|
`styleClassPassthrough` (string or string array) is applied to the root element via
|
|
70
94
|
`useStyleClassPassthrough`.
|
|
95
|
+
|
|
@@ -55,7 +55,7 @@ component doesn't cover), replace it with the `toggle-icon` scoped slot, which r
|
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
58
|
-
## Global theming
|
|
58
|
+
## Global theming
|
|
59
59
|
|
|
60
60
|
Create `assets/styles/setup/07.components/banner-video.css` in the consuming app and set
|
|
61
61
|
tokens on `:root`. This applies to every `BannerVideo` across the site.
|
|
@@ -72,7 +72,15 @@ tokens on `:root`. This applies to every `BannerVideo` across the site.
|
|
|
72
72
|
|
|
73
73
|
---
|
|
74
74
|
|
|
75
|
-
##
|
|
75
|
+
## Local overrides
|
|
76
|
+
|
|
77
|
+
Set the tokens above on an element you own (a page or section class, or a class added with
|
|
78
|
+
`:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
|
|
79
|
+
`@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
|
|
80
|
+
`<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
|
|
81
|
+
`:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
|
|
82
|
+
|
|
83
|
+
### Page or section
|
|
76
84
|
|
|
77
85
|
Override tokens for a specific banner by scoping them under the page or layout wrapper.
|
|
78
86
|
No `:deep()` is required (component styles are unscoped).
|
|
@@ -88,9 +96,7 @@ No `:deep()` is required (component styles are unscoped).
|
|
|
88
96
|
}
|
|
89
97
|
```
|
|
90
98
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
## Per-instance overrides via styleClassPassthrough
|
|
99
|
+
### One instance
|
|
94
100
|
|
|
95
101
|
Use sparingly — prefer global or page-scoped CSS. When a single instance needs a distinct
|
|
96
102
|
visual style, pass a modifier class:
|
|
@@ -118,3 +124,4 @@ visual style, pass a modifier class:
|
|
|
118
124
|
consuming apps are expected to reskin per-brand.
|
|
119
125
|
- `aspectRatio`, `objectFit`, `verticalPosition`, and `horizontalPosition` are props, not
|
|
120
126
|
tokens — set them directly on the component.
|
|
127
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CanvasSwitcher — Consumer Styling
|
|
2
2
|
|
|
3
|
-
CanvasSwitcher renders its buttons via `
|
|
3
|
+
CanvasSwitcher renders its buttons via `InputButton` (`variant="tertiary"`, icon-only) — see
|
|
4
4
|
that component's own `CONSUMER-STYLING.md` for the button surface/hover/focus tokens it inherits.
|
|
5
5
|
CanvasSwitcher itself exposes the following public tokens:
|
|
6
6
|
|
|
@@ -8,15 +8,10 @@ CanvasSwitcher itself exposes the following public tokens:
|
|
|
8
8
|
|---|---|---|
|
|
9
9
|
| `--canvas-switcher-gap` | `2rem` | Gap between the switcher's own children (currently just the list) |
|
|
10
10
|
| `--canvas-switcher-item-gap` | `1rem` | Gap between each button in the list |
|
|
11
|
-
| `--canvas-switcher-icon-size` | `2.
|
|
11
|
+
| `--canvas-switcher-icon-size` | `1.6rem`, `2.2rem` from 768px | Width/height of each icon (setting it replaces both defaults) |
|
|
12
12
|
| `--canvas-switcher-icon-colour` | `var(--slate-10)` | Icon colour, resting state |
|
|
13
13
|
| `--canvas-switcher-icon-colour-current` | `var(--green-10)` | Icon colour when that button's canvas is selected (`aria-pressed="true"`) |
|
|
14
14
|
|
|
15
|
-
## Class passthrough
|
|
16
|
-
|
|
17
|
-
`styleClassPassthrough` (string or string[]) is applied to the root `.canvas-switcher` element via
|
|
18
|
-
`useStyleClassPassthrough()`.
|
|
19
|
-
|
|
20
15
|
## Canvas-size utility classes
|
|
21
16
|
|
|
22
17
|
`.mobileCanvas`, `.tabletCanvas`, `.laptopCanvas`, `.desktopCanvas`, `.fullWidthCanvas` are also
|
|
@@ -25,3 +20,21 @@ the same `MediaCanvas` value returned by `v-model:canvas-name` directly as a cla
|
|
|
25
20
|
wrapper to constrain its width — see `DashboardQuadGrid`/`DashboardStatsGrid` stories for the pattern. These are
|
|
26
21
|
plain global utility classes, not overridable via a CSS custom property; import `CanvasSwitcher`
|
|
27
22
|
(or otherwise ensure its styles are bundled) wherever you rely on them.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Local overrides
|
|
27
|
+
|
|
28
|
+
Set the tokens above on an element you own (a page or section class, or a class added with
|
|
29
|
+
`:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
|
|
30
|
+
`@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
|
|
31
|
+
`<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
|
|
32
|
+
`:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Class passthrough
|
|
37
|
+
|
|
38
|
+
`styleClassPassthrough` (string or string[]) is applied to the root `.canvas-switcher` element via
|
|
39
|
+
`useStyleClassPassthrough()`.
|
|
40
|
+
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<div class="canvas-switcher" :class="[elementClasses]">
|
|
3
3
|
<ul class="canvas-switcher-list">
|
|
4
4
|
<li v-for="option in canvasOptions" :key="option.value">
|
|
5
|
-
<
|
|
5
|
+
<InputButton
|
|
6
6
|
type="button"
|
|
7
7
|
variant="tertiary"
|
|
8
8
|
class="canvas-switcher-button"
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
@click="updateCanvas(option.value)"
|
|
12
12
|
>
|
|
13
13
|
<template #iconOnly>
|
|
14
|
-
<Icon :name="option.icon" class="icon"
|
|
14
|
+
<Icon :name="option.icon" class="icon" />
|
|
15
15
|
</template>
|
|
16
|
-
</
|
|
16
|
+
</InputButton>
|
|
17
17
|
</li>
|
|
18
18
|
</ul>
|
|
19
19
|
</div>
|
|
@@ -36,7 +36,7 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
36
36
|
styleClassPassthrough: () => [],
|
|
37
37
|
});
|
|
38
38
|
|
|
39
|
-
const canvasName = defineModel<MediaCanvas>("canvasName");
|
|
39
|
+
const canvasName = defineModel<MediaCanvas | undefined>("canvasName", { default: undefined });
|
|
40
40
|
|
|
41
41
|
const canvasOptions: CanvasOption[] = [
|
|
42
42
|
{ value: "mobileCanvas", label: "Mobile", icon: "ic:baseline-phone-iphone" },
|
|
@@ -77,7 +77,7 @@ watch(
|
|
|
77
77
|
padding: 0;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
.canvas-switcher-button.input-button
|
|
80
|
+
.canvas-switcher-button.input-button {
|
|
81
81
|
color: var(--canvas-switcher-icon-colour, var(--slate-10));
|
|
82
82
|
|
|
83
83
|
&[aria-pressed="true"] {
|
|
@@ -85,8 +85,13 @@ watch(
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
.icon {
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
--_icon-size-default: 1.6rem;
|
|
89
|
+
width: var(--canvas-switcher-icon-size, var(--_icon-size-default));
|
|
90
|
+
height: var(--canvas-switcher-icon-size, var(--_icon-size-default));
|
|
91
|
+
|
|
92
|
+
@media (min-width: 768px) {
|
|
93
|
+
--_icon-size-default: 2.2rem;
|
|
94
|
+
}
|
|
90
95
|
}
|
|
91
96
|
}
|
|
92
97
|
|
|
@@ -27,7 +27,7 @@ or instance) without touching the component itself.
|
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
## Global theming
|
|
30
|
+
## Global theming
|
|
31
31
|
|
|
32
32
|
Create `assets/styles/setup/07.components/card-core.css` in the consuming app and set tokens on
|
|
33
33
|
`:root`. These values apply to every `CardCore` instance across the site.
|
|
@@ -44,7 +44,15 @@ Create `assets/styles/setup/07.components/card-core.css` in the consuming app an
|
|
|
44
44
|
|
|
45
45
|
---
|
|
46
46
|
|
|
47
|
-
##
|
|
47
|
+
## Local overrides
|
|
48
|
+
|
|
49
|
+
Set the tokens above on an element you own (a page or section class, or a class added with
|
|
50
|
+
`:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
|
|
51
|
+
`@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
|
|
52
|
+
`<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
|
|
53
|
+
`:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
|
|
54
|
+
|
|
55
|
+
### Per variant
|
|
48
56
|
|
|
49
57
|
Variants override internal tokens directly, so target the variant class to change their colours:
|
|
50
58
|
|
|
@@ -73,43 +81,7 @@ Variants override internal tokens directly, so target the variant class to chang
|
|
|
73
81
|
}
|
|
74
82
|
```
|
|
75
83
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
## Blurred backdrop pattern
|
|
79
|
-
|
|
80
|
-
Set `--card-core-lower-background-image` and `--card-core-lower-background-color` to create a
|
|
81
|
-
blurred translucent layer behind the card content. The `::before` pseudo-element handles the blur
|
|
82
|
-
and the scale hides the blur-edge artefact.
|
|
83
|
-
|
|
84
|
-
```css
|
|
85
|
-
.card-core {
|
|
86
|
-
&.hero-card {
|
|
87
|
-
--card-core-lower-background-image: url("/images/hero.jpg");
|
|
88
|
-
--card-core-lower-background-blur: 24px;
|
|
89
|
-
--card-core-lower-scale: 1.15;
|
|
90
|
-
--card-core-lower-background-color: rgb(0 0 0 / 30%); /* tint over image */
|
|
91
|
-
--card-core-background-color: transparent;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Or inline for a single instance:
|
|
97
|
-
|
|
98
|
-
```vue
|
|
99
|
-
<CardCore
|
|
100
|
-
variant="solid"
|
|
101
|
-
style="
|
|
102
|
-
--card-core-lower-background-image: url('/images/hero.jpg');
|
|
103
|
-
--card-core-lower-background-blur: 20px;
|
|
104
|
-
"
|
|
105
|
-
>
|
|
106
|
-
...
|
|
107
|
-
</CardCore>
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
## Page-scoped overrides
|
|
84
|
+
### Page or section
|
|
113
85
|
|
|
114
86
|
When a card appears in a specific page context, scope overrides under the page wrapper. No
|
|
115
87
|
`:deep()` is required (component styles are unscoped).
|
|
@@ -128,9 +100,7 @@ When a card appears in a specific page context, scope overrides under the page w
|
|
|
128
100
|
}
|
|
129
101
|
```
|
|
130
102
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
## Per-instance overrides via styleClassPassthrough
|
|
103
|
+
### One instance
|
|
134
104
|
|
|
135
105
|
```vue
|
|
136
106
|
<CardCore :style-class-passthrough="['featured']">
|
|
@@ -150,6 +120,40 @@ When a card appears in a specific page context, scope overrides under the page w
|
|
|
150
120
|
|
|
151
121
|
---
|
|
152
122
|
|
|
123
|
+
## Blurred backdrop pattern
|
|
124
|
+
|
|
125
|
+
Set `--card-core-lower-background-image` and `--card-core-lower-background-color` to create a
|
|
126
|
+
blurred translucent layer behind the card content. The `::before` pseudo-element handles the blur
|
|
127
|
+
and the scale hides the blur-edge artefact.
|
|
128
|
+
|
|
129
|
+
```css
|
|
130
|
+
.card-core {
|
|
131
|
+
&.hero-card {
|
|
132
|
+
--card-core-lower-background-image: url("/images/hero.jpg");
|
|
133
|
+
--card-core-lower-background-blur: 24px;
|
|
134
|
+
--card-core-lower-scale: 1.15;
|
|
135
|
+
--card-core-lower-background-color: rgb(0 0 0 / 30%); /* tint over image */
|
|
136
|
+
--card-core-background-color: transparent;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Or inline for a single instance:
|
|
142
|
+
|
|
143
|
+
```vue
|
|
144
|
+
<CardCore
|
|
145
|
+
variant="solid"
|
|
146
|
+
style="
|
|
147
|
+
--card-core-lower-background-image: url('/images/hero.jpg');
|
|
148
|
+
--card-core-lower-background-blur: 20px;
|
|
149
|
+
"
|
|
150
|
+
>
|
|
151
|
+
...
|
|
152
|
+
</CardCore>
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
153
157
|
## Card row targeting
|
|
154
158
|
|
|
155
159
|
Slot content is wrapped in `.card-row.card-row-{name}`. Target rows for padding, borders, or
|
|
@@ -173,3 +177,4 @@ backgrounds without modifying the component:
|
|
|
173
177
|
}
|
|
174
178
|
}
|
|
175
179
|
```
|
|
180
|
+
|
|
@@ -41,23 +41,14 @@ watch(
|
|
|
41
41
|
<style lang="css">
|
|
42
42
|
@layer components {
|
|
43
43
|
.card-core {
|
|
44
|
-
--_card-row-gap: var(--card-core-row-gap, 1rem);
|
|
45
|
-
--_card-padding: var(--card-core-inner-padding, 1rem);
|
|
46
|
-
--_card-lower-background-image: var(--card-core-lower-background-image, none);
|
|
47
|
-
--_card-lower-background-position: var(--card-core-lower-background-position, center);
|
|
48
|
-
--_card-lower-background-color: var(--card-core-lower-background-color, transparent);
|
|
49
|
-
--_card-lower-background-blur: var(--card-core-lower-background-blur, 16px);
|
|
50
|
-
--_card-lower-scale: var(--card-core-lower-scale, 1.1);
|
|
51
|
-
--_card-background-image: var(--card-core-background-image, none);
|
|
52
44
|
--_card-background-color: var(--card-core-background-color, transparent);
|
|
53
45
|
--_card-border: var(--card-core-border, 0.2rem solid var(--slate-08));
|
|
54
|
-
--_card-border-radius: var(--card-core-border-radius, 0.5rem);
|
|
55
46
|
--_card-box-shadow: var(--card-core-box-shadow, 0.1rem 0.1rem 0.4rem oklch(from var(--slate-08) l c h / 0.45));
|
|
56
47
|
|
|
57
48
|
display: grid;
|
|
58
49
|
grid-auto-flow: row;
|
|
59
|
-
gap: var(--
|
|
60
|
-
border-radius: var(--
|
|
50
|
+
gap: var(--card-core-row-gap, 1rem);
|
|
51
|
+
border-radius: var(--card-core-border-radius, 0.5rem);
|
|
61
52
|
overflow: hidden;
|
|
62
53
|
position: relative;
|
|
63
54
|
|
|
@@ -69,13 +60,13 @@ watch(
|
|
|
69
60
|
content: "";
|
|
70
61
|
position: absolute;
|
|
71
62
|
inset: 0;
|
|
72
|
-
background-color: var(--
|
|
73
|
-
background-image: var(--
|
|
74
|
-
background-position: var(--
|
|
63
|
+
background-color: var(--card-core-lower-background-color, transparent);
|
|
64
|
+
background-image: var(--card-core-lower-background-image, none);
|
|
65
|
+
background-position: var(--card-core-lower-background-position, center);
|
|
75
66
|
background-size: cover;
|
|
76
67
|
background-repeat: no-repeat;
|
|
77
|
-
filter: blur(var(--
|
|
78
|
-
scale: var(--
|
|
68
|
+
filter: blur(var(--card-core-lower-background-blur, 16px));
|
|
69
|
+
scale: var(--card-core-lower-scale, 1.1);
|
|
79
70
|
z-index: 0;
|
|
80
71
|
}
|
|
81
72
|
|
|
@@ -101,7 +92,6 @@ watch(
|
|
|
101
92
|
|
|
102
93
|
&.soft {
|
|
103
94
|
--_card-background-color: color-mix(in oklab, var(--slate-01) 20%, transparent);
|
|
104
|
-
--_card-box-shadow-color: color-mix(in oklab, var(--slate-02) 80%, transparent);
|
|
105
95
|
}
|
|
106
96
|
|
|
107
97
|
&.outline {
|
|
@@ -28,6 +28,8 @@ Or scope to a single instance via `styleClassPassthrough`:
|
|
|
28
28
|
}
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
+
---
|
|
32
|
+
|
|
31
33
|
## Shapes are fixed-size, not tokenised
|
|
32
34
|
|
|
33
35
|
Each `variant`'s notched/cutout shape is drawn with `clip-path: path("...")` using literal pixel
|
|
@@ -37,3 +39,14 @@ radii, notch size, overall dimensions — is **not** overridable via tokens or `
|
|
|
37
39
|
overrides. Changing `width` on the element stretches the box without moving the clip-path
|
|
38
40
|
coordinates, which will misalign the shape. If a different size or geometry is needed, that
|
|
39
41
|
requires a new variant with its own `path()` string, not a CSS override.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Local overrides
|
|
46
|
+
|
|
47
|
+
Set the tokens above on an element you own (a page or section class, or a class added with
|
|
48
|
+
`:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
|
|
49
|
+
`@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
|
|
50
|
+
`<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
|
|
51
|
+
`:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
|
|
52
|
+
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# ContentDocs — Consumer Styling Guide
|
|
2
|
+
|
|
3
|
+
## Public token API
|
|
4
|
+
|
|
5
|
+
Most tokens come in a **shared** form (`--content-docs-heading-*`, `-panel-*`, `-link-*`) that
|
|
6
|
+
styles both the docs nav and the page nav, plus **per-side** forms (`--content-docs-nav-*`,
|
|
7
|
+
`--content-docs-page-nav-*`) that fall back to the shared one when unset.
|
|
8
|
+
|
|
9
|
+
> Changed 2026-09-27: defaults no longer call `light-dark()` themselves (unsupported on older iPad
|
|
10
|
+
> Safari). Colours now come from the global scheme-aware tokens (`--colour-text-default`,
|
|
11
|
+
> `--page-bg`, `--theme-surface-subtle`), so they still follow light/dark mode. The active-link
|
|
12
|
+
> pill is a fixed green pair that reads the same in both.
|
|
13
|
+
|
|
14
|
+
### Headings
|
|
15
|
+
|
|
16
|
+
| Shared token | Default | Per-side overrides |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| `--content-docs-heading-font-size` | `1.4rem` | `--content-docs-nav-heading-font-size`, `--content-docs-page-nav-heading-font-size` |
|
|
19
|
+
| `--content-docs-heading-font-weight` | `700` | `-nav-heading-font-weight`, `-page-nav-heading-font-weight` |
|
|
20
|
+
| `--content-docs-heading-color` | `var(--colour-text-default)` | `-nav-heading-color`, `-page-nav-heading-color` |
|
|
21
|
+
| `--content-docs-heading-bg` | `transparent` | `-nav-heading-bg`, `-page-nav-heading-bg` |
|
|
22
|
+
| `--content-docs-heading-margin` | `0` | `-nav-heading-margin`, `-page-nav-heading-margin` |
|
|
23
|
+
| `--content-docs-heading-padding-block` | `0.4rem 0.8rem` | `-nav-heading-padding-block`, `-page-nav-heading-padding-block` |
|
|
24
|
+
| `--content-docs-heading-padding-inline` | `0` | `-nav-heading-padding-inline`, `-page-nav-heading-padding-inline` |
|
|
25
|
+
|
|
26
|
+
### Panels (the `<nav>` list containers)
|
|
27
|
+
|
|
28
|
+
| Token | Default | Notes |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| `--content-docs-panel-bg` | `var(--page-bg)` | Per-side: `--content-docs-nav-panel-bg`, `--content-docs-page-nav-panel-bg` |
|
|
31
|
+
| `--content-docs-panel-padding-block` | `0.8rem` | Shared only |
|
|
32
|
+
| `--content-docs-panel-padding-inline` | `0.8rem` | Shared only |
|
|
33
|
+
| `--content-docs-panel-border-radius` | `0.5rem` | Shared only |
|
|
34
|
+
|
|
35
|
+
### Links
|
|
36
|
+
|
|
37
|
+
| Shared token | Default | Per-side overrides |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| `--content-docs-link-color` | `var(--colour-text-default)` | `-nav-link-color`, `-page-nav-link-color` |
|
|
40
|
+
| `--content-docs-link-hover-bg` | `var(--theme-surface-subtle)` | `-nav-link-hover-bg`, `-page-nav-link-hover-bg` |
|
|
41
|
+
| `--content-docs-link-hover-color` | the link colour | `-nav-link-hover-color`, `-page-nav-link-hover-color` |
|
|
42
|
+
| `--content-docs-link-active-bg` | `var(--green-01)` | `-nav-link-active-bg`, `-page-nav-link-active-bg` |
|
|
43
|
+
| `--content-docs-link-active-color` | `var(--green-10)` | `-nav-link-active-color`, `-page-nav-link-active-color` |
|
|
44
|
+
| `--content-docs-link-bg` | `transparent` | Shared only |
|
|
45
|
+
| `--content-docs-link-font-size` | `1.4rem` | Shared only |
|
|
46
|
+
| `--content-docs-link-padding-block` | `0.6rem` | Shared only |
|
|
47
|
+
| `--content-docs-link-padding-inline` | `0.8rem` | Shared only |
|
|
48
|
+
| `--content-docs-link-margin-block` | `0` | Shared only |
|
|
49
|
+
| `--content-docs-link-border-radius` | `0.4rem` | Shared only |
|
|
50
|
+
|
|
51
|
+
### Link icons
|
|
52
|
+
|
|
53
|
+
| Token | Default | Notes |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| `--content-docs-link-icon-size` | `1.6rem` | Icon column width and icon `font-size` (both lists) |
|
|
56
|
+
| `--content-docs-link-icon-gap` | `0.6rem` | Gap between icon and label (both lists) |
|
|
57
|
+
| `--content-docs-nav-link-icon-order` | `ltr` | `rtl` puts the icon after the label in the docs nav |
|
|
58
|
+
| `--content-docs-page-nav-link-icon-order` | `ltr` | Same, for the page nav |
|
|
59
|
+
|
|
60
|
+
> Changed 2026-09-27: renamed from `--docs-nav-link-icon-size`, `--docs-nav-link-icon-gap`,
|
|
61
|
+
> `--docs-nav-link-icon-order` and `--docs-page-nav-link-icon-order`. The size is now applied as
|
|
62
|
+
> `font-size`; as `width`/`height` it was silently overridden by `@nuxt/icon`'s own rule.
|
|
63
|
+
|
|
64
|
+
### Layout
|
|
65
|
+
|
|
66
|
+
| Token | Default | Notes |
|
|
67
|
+
|---|---|---|
|
|
68
|
+
| `--content-docs-nav-column-width` | `23rem` | Docs nav track at 1024px+ container width |
|
|
69
|
+
| `--content-docs-page-nav-column-width` | `22rem` | Page nav track at 1024px+ |
|
|
70
|
+
| `--content-docs-page-nav-column-width-tablet` | `20rem` | Page nav track at 768px–1023px |
|
|
71
|
+
|
|
72
|
+
Link transitions also read the library-wide `--control-transition-duration` (`200ms`) and
|
|
73
|
+
`--control-transition-ease` (`ease`); focus rings use `--theme-ring`.
|
|
74
|
+
|
|
75
|
+
The `--_*` variables declared on `.content-docs` (e.g. `--_link-color`, `--_panel-bg`)
|
|
76
|
+
are the resolved shared/per-side fallback chain: not public API. Set the `--content-docs-*`
|
|
77
|
+
tokens instead.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## State hooks
|
|
82
|
+
|
|
83
|
+
| Selector | When |
|
|
84
|
+
|---|---|
|
|
85
|
+
| `.docs-nav-link.is-active`, `.docs-page-nav-link.is-active` | The link matching `v-model:active-nav-item` / `v-model:active-page-nav-item` (also gets `aria-current="page"`) |
|
|
86
|
+
|
|
87
|
+
Inner classes: `.content-docs-inner` (grid), `.docs-nav`, `.docs-content`, `.docs-page-nav` (grid
|
|
88
|
+
areas), `.docs-nav-heading`, `.docs-page-nav-heading`, `.docs-nav-list`, `.docs-page-nav-list`
|
|
89
|
+
(the `<nav>`s), `.docs-nav-link`, `.docs-page-nav-link`, `-link-icon`, `-link-label`.
|
|
90
|
+
|
|
91
|
+
The collapsible wrappers are `ExpandingPanelClassic` by default (`.expanding-panel-classic-*`
|
|
92
|
+
classes) or `ExpandingPanel` with `panel-variant="modern"` (`.expanding-panel-*`). Style both if
|
|
93
|
+
you target them.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Breakpoints
|
|
98
|
+
|
|
99
|
+
Container queries on `.content-docs` (`container-name: contentDocs`), matched in script by
|
|
100
|
+
`useContainerBreakpoints`:
|
|
101
|
+
|
|
102
|
+
| Container width | Layout |
|
|
103
|
+
|---|---|
|
|
104
|
+
| < 768px | Single column; both navs are collapsible panels that overlay content |
|
|
105
|
+
| 768px–1023px | Page nav pinned open in a right-hand column; docs nav collapsible above content |
|
|
106
|
+
| ≥ 1024px | Three columns, both navs pinned open |
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Local overrides
|
|
111
|
+
|
|
112
|
+
Set the tokens above on an element you own (a page or section class, or a class added with
|
|
113
|
+
`:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
|
|
114
|
+
`@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
|
|
115
|
+
`<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
|
|
116
|
+
`:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
|
|
117
|
+
|
|
118
|
+
**Caveat:** set the public `--content-docs-*` tokens, not the `--_*` names. The `--_*` chain is
|
|
119
|
+
re-declared on `.content-docs` itself, so an ancestor value for a `--_*` name never lands.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Class passthrough
|
|
124
|
+
|
|
125
|
+
`style-class-passthrough` adds classes to the root `.content-docs` element, which is where the
|
|
126
|
+
token fallback chain is resolved, so tokens set on a passthrough class land for the whole
|
|
127
|
+
component.
|