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
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
|
|
2
|
+
/// <reference path="nitro-layouts.d.ts" />
|
|
3
|
+
/// <reference path="app.config.d.ts" />
|
|
4
|
+
/// <reference path="runtime-config.d.ts" />
|
|
5
|
+
/// <reference path="../../../../../../../node_modules/@nuxt/nitro-server/dist/index.d.mts" />
|
|
6
|
+
/// <reference path="middleware.d.ts" />
|
|
7
|
+
|
|
8
|
+
import type { RuntimeConfig } from 'nuxt/schema'
|
|
9
|
+
import type { H3Event } from 'h3'
|
|
10
|
+
import type { LogObject } from 'consola'
|
|
11
|
+
import type { NuxtIslandContext, NuxtIslandResponse, NuxtRenderHTMLContext } from 'nuxt/app'
|
|
12
|
+
|
|
13
|
+
declare module 'nitropack' {
|
|
14
|
+
interface NitroRuntimeConfigApp {
|
|
15
|
+
buildAssetsDir: string
|
|
16
|
+
cdnURL: string
|
|
17
|
+
}
|
|
18
|
+
interface NitroRuntimeConfig extends RuntimeConfig {}
|
|
19
|
+
interface NitroRouteConfig {
|
|
20
|
+
ssr?: boolean
|
|
21
|
+
noScripts?: boolean
|
|
22
|
+
/** @deprecated Use `noScripts` instead */
|
|
23
|
+
experimentalNoScripts?: boolean
|
|
24
|
+
}
|
|
25
|
+
interface NitroRouteRules {
|
|
26
|
+
ssr?: boolean
|
|
27
|
+
noScripts?: boolean
|
|
28
|
+
/** @deprecated Use `noScripts` instead */
|
|
29
|
+
experimentalNoScripts?: boolean
|
|
30
|
+
appMiddleware?: Record<string, boolean>
|
|
31
|
+
appLayout?: string | false
|
|
32
|
+
}
|
|
33
|
+
interface NitroRuntimeHooks {
|
|
34
|
+
'dev:ssr-logs': (ctx: { logs: LogObject[], path: string }) => void | Promise<void>
|
|
35
|
+
'render:html': (htmlContext: NuxtRenderHTMLContext, context: { event: H3Event }) => void | Promise<void>
|
|
36
|
+
'render:island': (islandResponse: NuxtIslandResponse, context: { event: H3Event, islandContext: NuxtIslandContext }) => void | Promise<void>
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
declare module 'nitropack/types' {
|
|
40
|
+
interface NitroRuntimeConfigApp {
|
|
41
|
+
buildAssetsDir: string
|
|
42
|
+
cdnURL: string
|
|
43
|
+
}
|
|
44
|
+
interface NitroRuntimeConfig extends RuntimeConfig {}
|
|
45
|
+
interface NitroRouteConfig {
|
|
46
|
+
ssr?: boolean
|
|
47
|
+
noScripts?: boolean
|
|
48
|
+
/** @deprecated Use `noScripts` instead */
|
|
49
|
+
experimentalNoScripts?: boolean
|
|
50
|
+
}
|
|
51
|
+
interface NitroRouteRules {
|
|
52
|
+
ssr?: boolean
|
|
53
|
+
noScripts?: boolean
|
|
54
|
+
/** @deprecated Use `noScripts` instead */
|
|
55
|
+
experimentalNoScripts?: boolean
|
|
56
|
+
appMiddleware?: Record<string, boolean>
|
|
57
|
+
appLayout?: string | false
|
|
58
|
+
}
|
|
59
|
+
interface NitroRuntimeHooks {
|
|
60
|
+
'dev:ssr-logs': (ctx: { logs: LogObject[], path: string }) => void | Promise<void>
|
|
61
|
+
'render:html': (htmlContext: NuxtRenderHTMLContext, context: { event: H3Event }) => void | Promise<void>
|
|
62
|
+
'render:island': (islandResponse: NuxtIslandResponse, context: { event: H3Event, islandContext: NuxtIslandContext }) => void | Promise<void>
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Generated by Nuxt'
|
|
2
|
+
import type { Plugin } from '#app'
|
|
3
|
+
|
|
4
|
+
type Decorate<T extends Record<string, any>> = { [K in keyof T as K extends string ? `$${K}` : never]: T[K] }
|
|
5
|
+
|
|
6
|
+
type InjectionType<A extends Plugin> = A extends {default: Plugin<infer T>} ? Decorate<T> : unknown
|
|
7
|
+
|
|
8
|
+
type NuxtAppInjections =
|
|
9
|
+
InjectionType<typeof import("../../../../../../../node_modules/nuxt/dist/app/plugins/revive-payload.client.js")> &
|
|
10
|
+
InjectionType<typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/plugins/unhead.js")> &
|
|
11
|
+
InjectionType<typeof import("../../../../../../../node_modules/nuxt/dist/app/plugins/router.js")> &
|
|
12
|
+
InjectionType<typeof import("../../../../../../../node_modules/nuxt/dist/app/plugins/navigation-repaint.client.js")> &
|
|
13
|
+
InjectionType<typeof import("../../../../../../../node_modules/nuxt/dist/app/plugins/check-outdated-build.client.js")> &
|
|
14
|
+
InjectionType<typeof import("../../../../../../../node_modules/nuxt/dist/app/plugins/revive-payload.server.js")> &
|
|
15
|
+
InjectionType<typeof import("../../../../../../../node_modules/nuxt/dist/app/plugins/chunk-reload.client.js")>
|
|
16
|
+
|
|
17
|
+
declare module '#app' {
|
|
18
|
+
interface NuxtApp extends NuxtAppInjections { }
|
|
19
|
+
|
|
20
|
+
interface NuxtAppLiterals {
|
|
21
|
+
pluginName: 'nuxt:revive-payload:client' | 'nuxt:head' | 'nuxt:router' | 'nuxt:revive-payload:server' | 'nuxt:chunk-reload' | 'nuxt:global-components'
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
declare module 'vue' {
|
|
26
|
+
interface ComponentCustomProperties extends NuxtAppInjections { }
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { }
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { RuntimeConfig as UserRuntimeConfig, PublicRuntimeConfig as UserPublicRuntimeConfig } from 'nuxt/schema'
|
|
2
|
+
interface SharedRuntimeConfig {
|
|
3
|
+
app: {
|
|
4
|
+
buildId: string,
|
|
5
|
+
|
|
6
|
+
baseURL: string,
|
|
7
|
+
|
|
8
|
+
buildAssetsDir: string,
|
|
9
|
+
|
|
10
|
+
cdnURL: string,
|
|
11
|
+
},
|
|
12
|
+
|
|
13
|
+
nitro: {
|
|
14
|
+
envPrefix: string,
|
|
15
|
+
},
|
|
16
|
+
}
|
|
17
|
+
interface SharedPublicRuntimeConfig {
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
declare module '@nuxt/schema' {
|
|
21
|
+
interface RuntimeConfig extends UserRuntimeConfig {}
|
|
22
|
+
interface PublicRuntimeConfig extends UserPublicRuntimeConfig {}
|
|
23
|
+
}
|
|
24
|
+
declare module 'nuxt/schema' {
|
|
25
|
+
interface RuntimeConfig extends SharedRuntimeConfig {}
|
|
26
|
+
interface PublicRuntimeConfig extends SharedPublicRuntimeConfig {}
|
|
27
|
+
}
|
|
28
|
+
declare module 'vue' {
|
|
29
|
+
interface ComponentCustomProperties {
|
|
30
|
+
$config: UserRuntimeConfig
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Generated by auto imports
|
|
2
|
+
export {}
|
|
3
|
+
declare global {
|
|
4
|
+
const useRuntimeConfig: (event?: import('h3').H3Event) => import('nuxt/schema').RuntimeConfig
|
|
5
|
+
const useAppConfig: () => import('nuxt/schema').AppConfig
|
|
6
|
+
const defineAppConfig: <C extends import('nuxt/schema').AppConfigInput>(config: C) => C
|
|
7
|
+
const createError: typeof import('h3')['createError']
|
|
8
|
+
const setResponseStatus: typeof import('h3')['setResponseStatus']
|
|
9
|
+
|
|
10
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
setups.@nuxt/test-utils="4.1.0"
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# EntryAnimation — Consumer Styling Guide
|
|
2
|
+
|
|
3
|
+
## Public token API
|
|
4
|
+
|
|
5
|
+
None. EntryAnimation has no `<style>` block and no `--entry-animation-*` tokens. It only applies
|
|
6
|
+
one of the shared animation utility classes; the keyframes, scroll timeline and
|
|
7
|
+
`prefers-reduced-motion` guard live in
|
|
8
|
+
`app/assets/styles/setup/06.utility-classes/animations/`, which don't expose tokens either.
|
|
9
|
+
|
|
10
|
+
No private `--_` tokens.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## State hooks
|
|
15
|
+
|
|
16
|
+
| Class | When |
|
|
17
|
+
|---|---|
|
|
18
|
+
| `.entry-slide-in` | `animation-type="entry-slide-in"` (default) and `skip-animation` is off |
|
|
19
|
+
| `.entry-zoom-reveal` | `animation-type="entry-zoom-reveal"` and `skip-animation` is off |
|
|
20
|
+
| `.entry-exit-blur` | `animation-type="entry-exit-blur"` and `skip-animation` is off |
|
|
21
|
+
|
|
22
|
+
With `skip-animation`, none of these is applied. The root has no class of its own beyond these and
|
|
23
|
+
any passthrough classes.
|
|
24
|
+
|
|
25
|
+
> Changed 2026-09-27: the animation class used to be added once at setup, so changing
|
|
26
|
+
> `animation-type` or `skip-animation` after mount left the old class in place. It's now bound
|
|
27
|
+
> reactively.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Motion
|
|
32
|
+
|
|
33
|
+
- All three classes only animate inside `@media (prefers-reduced-motion: no-preference)`.
|
|
34
|
+
- They use `animation-timeline: view(...)` (scroll-driven). In a browser without scroll-driven
|
|
35
|
+
animation support the animation completes immediately, so the content just appears in place.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Local overrides
|
|
40
|
+
|
|
41
|
+
Set the tokens above on an element you own (a page or section class, or a class added with
|
|
42
|
+
`:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
|
|
43
|
+
`@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
|
|
44
|
+
`<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
|
|
45
|
+
`:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
|
|
46
|
+
|
|
47
|
+
**Caveat:** there are no tokens to set. To change the motion (distance, timeline range), override
|
|
48
|
+
the utility class's `animation`/`animation-timeline` on your own passthrough class, inside the
|
|
49
|
+
same `prefers-reduced-motion: no-preference` guard:
|
|
50
|
+
|
|
51
|
+
```css
|
|
52
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
53
|
+
.my-card.entry-slide-in {
|
|
54
|
+
animation-timeline: view(60% 10%);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Class passthrough
|
|
62
|
+
|
|
63
|
+
`style-class-passthrough` adds classes to the root element (the element that also carries the
|
|
64
|
+
animation class). It's applied whether or not `skip-animation` is on. A plain `class` attribute
|
|
65
|
+
falls through to the same element.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<component :is="tag" :class="[elementClasses]">
|
|
2
|
+
<component :is="tag" :class="[elementClasses, skipAnimation ? null : animationType]">
|
|
3
3
|
<slot name="default"></slot>
|
|
4
4
|
</component>
|
|
5
5
|
</template>
|
|
@@ -20,9 +20,10 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
20
20
|
styleClassPassthrough: () => [],
|
|
21
21
|
});
|
|
22
22
|
|
|
23
|
-
const { elementClasses,
|
|
23
|
+
const { elementClasses, resetElementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
watch(
|
|
26
|
+
() => props.styleClassPassthrough,
|
|
27
|
+
() => resetElementClasses(props.styleClassPassthrough)
|
|
28
|
+
);
|
|
28
29
|
</script>
|
package/app/components/01.atoms/animations/entry/node_modules/.cache/nuxt/chrome-workspace.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"uuid":"4bddd330-9d58-42dc-984e-629f2c5338a9"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"4.1.11","results":[[":tests/EntryAnimation.spec.ts",{"duration":0,"failed":true}]]}
|
|
@@ -2,7 +2,7 @@ import EntryAnimation from "../EntryAnimation.vue";
|
|
|
2
2
|
import type { Meta, StoryObj } from "@nuxtjs/storybook";
|
|
3
3
|
|
|
4
4
|
const meta: Meta<typeof EntryAnimation> = {
|
|
5
|
-
title: "
|
|
5
|
+
title: "Atoms/Effects/EntryAnimation",
|
|
6
6
|
component: EntryAnimation,
|
|
7
7
|
argTypes: {
|
|
8
8
|
tag: {
|
|
@@ -55,3 +55,28 @@ describe("EntryAnimation", () => {
|
|
|
55
55
|
expect(wrapper.text()).toContain("Content");
|
|
56
56
|
});
|
|
57
57
|
});
|
|
58
|
+
|
|
59
|
+
describe("EntryAnimation reactivity", () => {
|
|
60
|
+
it("swaps the animation class when animationType changes after mount", async () => {
|
|
61
|
+
wrapper = await wrapperFactory({ animationType: "entry-slide-in" });
|
|
62
|
+
await wrapper.setProps({ animationType: "entry-exit-blur" });
|
|
63
|
+
expect(wrapper.classes()).toContain("entry-exit-blur");
|
|
64
|
+
expect(wrapper.classes()).not.toContain("entry-slide-in");
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it("removes and restores the animation class when skipAnimation toggles", async () => {
|
|
68
|
+
wrapper = await wrapperFactory();
|
|
69
|
+
await wrapper.setProps({ skipAnimation: true });
|
|
70
|
+
expect(wrapper.classes()).not.toContain("entry-slide-in");
|
|
71
|
+
await wrapper.setProps({ skipAnimation: false });
|
|
72
|
+
expect(wrapper.classes()).toContain("entry-slide-in");
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it("updates classes when styleClassPassthrough changes", async () => {
|
|
76
|
+
wrapper = await wrapperFactory({ styleClassPassthrough: ["original"] });
|
|
77
|
+
await wrapper.setProps({ styleClassPassthrough: ["updated"] });
|
|
78
|
+
expect(wrapper.classes()).not.toContain("original");
|
|
79
|
+
expect(wrapper.classes()).toContain("updated");
|
|
80
|
+
expect(wrapper.classes()).toContain("entry-slide-in");
|
|
81
|
+
});
|
|
82
|
+
});
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
</GlowingBorder>
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
+
---
|
|
21
|
+
|
|
20
22
|
## Variant colour stops
|
|
21
23
|
|
|
22
24
|
Each `variant` drives a 5-stop conic gradient. Every stop is an individually overridable token,
|
|
@@ -39,11 +41,33 @@ named `--glowing-border-{variant}-color-{1-5}`:
|
|
|
39
41
|
</GlowingBorder>
|
|
40
42
|
```
|
|
41
43
|
|
|
44
|
+
---
|
|
45
|
+
|
|
42
46
|
## Motion
|
|
43
47
|
|
|
44
48
|
The glow rotates continuously via CSS animation and stops automatically when the visitor has
|
|
45
49
|
`prefers-reduced-motion: reduce` set.
|
|
46
50
|
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Internal (non-overridable) custom properties
|
|
54
|
+
|
|
55
|
+
`--_glow-deg`, `--_clr-1` through `--_clr-5`, and `--_gradient-glow` are internal composition
|
|
56
|
+
plumbing (the resolved per-variant colour stops and the animated rotation angle) — use the public
|
|
57
|
+
tokens above instead.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Local overrides
|
|
62
|
+
|
|
63
|
+
Set the tokens above on an element you own (a page or section class, or a class added with
|
|
64
|
+
`:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
|
|
65
|
+
`@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
|
|
66
|
+
`<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
|
|
67
|
+
`:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
47
71
|
## Class passthrough
|
|
48
72
|
|
|
49
73
|
Use `styleClassPassthrough` to add classes to the root element for layout purposes (positioning,
|
|
@@ -54,8 +78,3 @@ above.
|
|
|
54
78
|
<GlowingBorder style-class-passthrough="my-glowing-border">...</GlowingBorder>
|
|
55
79
|
```
|
|
56
80
|
|
|
57
|
-
## Internal (non-overridable) custom properties
|
|
58
|
-
|
|
59
|
-
`--_glow-deg`, `--_clr-1` through `--_clr-5`, and `--_gradient-glow` are internal composition
|
|
60
|
-
plumbing (the resolved per-variant colour stops and the animated rotation angle) — use the public
|
|
61
|
-
tokens above instead.
|
|
@@ -31,6 +31,8 @@
|
|
|
31
31
|
}
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
+
---
|
|
35
|
+
|
|
34
36
|
## High-contrast mode colours are not tokenised
|
|
35
37
|
|
|
36
38
|
Under `prefers-contrast: high`, the control button switches to the system colour keywords
|
|
@@ -40,6 +42,8 @@ theme, which a component-level override would defeat. Only the border *width* in
|
|
|
40
42
|
token (`--marquee-scroller-control-border-width`), since it's a plain dimension with no such
|
|
41
43
|
constraint.
|
|
42
44
|
|
|
45
|
+
---
|
|
46
|
+
|
|
43
47
|
## Item size and spacing are prop-driven, not tokens
|
|
44
48
|
|
|
45
49
|
Item `width`/`height`/`gap` and the animation duration are set via the `itemConfig` and
|
|
@@ -53,6 +57,8 @@ layout math (`aspect-ratio`, track width). Override those through props:
|
|
|
53
57
|
/>
|
|
54
58
|
```
|
|
55
59
|
|
|
60
|
+
---
|
|
61
|
+
|
|
56
62
|
## Item content via slots
|
|
57
63
|
|
|
58
64
|
Each entry in `marqueeData` (`{ id, content }`) renders a slot named after its `id`. Provide the
|
|
@@ -69,6 +75,8 @@ markup for each item via that dynamically-named slot:
|
|
|
69
75
|
</MarqueeScroller>
|
|
70
76
|
```
|
|
71
77
|
|
|
78
|
+
---
|
|
79
|
+
|
|
72
80
|
## Control button icon and copy
|
|
73
81
|
|
|
74
82
|
The pause/play button's icon and its `aria-label` copy are all overridable — see `playIcon`/
|
|
@@ -92,3 +100,15 @@ The pause/play button's icon and its `aria-label` copy are all overridable — s
|
|
|
92
100
|
</template>
|
|
93
101
|
</MarqueeScroller>
|
|
94
102
|
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Local overrides
|
|
107
|
+
|
|
108
|
+
Set the tokens above on an element you own (a page or section class, or a plain `class` on the
|
|
109
|
+
component (it falls through to the root element)): they inherit down into the component. Keep the
|
|
110
|
+
block **unlayered** (no `@layer` wrapper) so it beats the library's `@layer components`. If your own
|
|
111
|
+
file uses `<style scoped>`, tokens set on your element still work, but selectors that reach inside
|
|
112
|
+
the component need `:deep()`. Patterns and examples:
|
|
113
|
+
`.claude/skills/component-local-style-override.md`.
|
|
114
|
+
|
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
}
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
+
---
|
|
34
|
+
|
|
33
35
|
## High-contrast mode colours are not tokenised
|
|
34
36
|
|
|
35
37
|
Under `prefers-contrast: high`, the control button switches to the system colour keywords
|
|
@@ -37,6 +39,8 @@ Under `prefers-contrast: high`, the control button switches to the system colour
|
|
|
37
39
|
user's OS-level high-contrast theme. Only the border *width* in that mode is a token
|
|
38
40
|
(`--rotating-carousel-control-border-width`).
|
|
39
41
|
|
|
42
|
+
---
|
|
43
|
+
|
|
40
44
|
## Rotation geometry is prop-driven, not tokens
|
|
41
45
|
|
|
42
46
|
`rotateX`, `perspective`, and `translateZ` control the 3D tilt and radius of the rotation and are
|
|
@@ -47,8 +51,21 @@ parallax math:
|
|
|
47
51
|
<RotatingCarouselImage :data="images" :perspective="1200" :translate-z="1200" />
|
|
48
52
|
```
|
|
49
53
|
|
|
54
|
+
---
|
|
55
|
+
|
|
50
56
|
## Control button icon and copy
|
|
51
57
|
|
|
52
58
|
The pause/play button's icon and its `aria-label` copy are overridable via `playIcon`/`pauseIcon`/
|
|
53
59
|
`playLabel`/`pauseLabel` props, or the `toggle-icon` slot for a fully custom icon (scoped with
|
|
54
60
|
`isPaused`) — same pattern as `MarqueeScroller`.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Local overrides
|
|
65
|
+
|
|
66
|
+
Set the tokens above on an element you own (a page or section class, or a class added with
|
|
67
|
+
`:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
|
|
68
|
+
`@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
|
|
69
|
+
`<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
|
|
70
|
+
`:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
|
|
71
|
+
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# ScrollRevealFrame — Consumer Styling Guide
|
|
2
|
+
|
|
3
|
+
## Public token API
|
|
4
|
+
|
|
5
|
+
| Token | Default | Set by prop | Controls |
|
|
6
|
+
|---|---|---|---|
|
|
7
|
+
| `--scroll-reveal-frame-height` | `540px` | `frameHeight` | Height of the visible clipping frame |
|
|
8
|
+
| `--scroll-reveal-frame-parallax-offset` | `36rem` | `parallaxOffset` | How much taller the content is than the frame, and so how far it travels |
|
|
9
|
+
| `--scroll-reveal-frame-radius` | `0px` | `radius` | Frame `border-radius` (content is clipped to it) |
|
|
10
|
+
|
|
11
|
+
Each prop, when passed, writes its token as an inline style on the root `<figure>`, which beats any
|
|
12
|
+
CSS you set. Leave the prop off to control the value from CSS instead (e.g. per breakpoint). Props
|
|
13
|
+
have no default of their own; the defaults above live in the CSS.
|
|
14
|
+
|
|
15
|
+
> **Changed 2026-09-27**: these were private `--_frame-height`/`--_parallax-offset`/`--_radius`
|
|
16
|
+
> tokens, always written inline from props that had defaults. Any CSS override (including the
|
|
17
|
+
> responsive example the skill doc used to recommend) could never win against the inline style.
|
|
18
|
+
> They're now public tokens, and the props only write them when passed.
|
|
19
|
+
|
|
20
|
+
Private tokens (not public API): `--_parallax-offset` on `.scroll-reveal-frame-content`, which
|
|
21
|
+
resolves the public offset once for both the content height and the keyframes.
|
|
22
|
+
|
|
23
|
+
## State hooks
|
|
24
|
+
|
|
25
|
+
No `data-*` attributes. Inner elements:
|
|
26
|
+
|
|
27
|
+
- `.scroll-reveal-frame`: the root `<figure>` (clipping window, `overflow: hidden`, `margin: 0`).
|
|
28
|
+
- `.scroll-reveal-frame-content`: the taller wrapper that pans; slot content fills it.
|
|
29
|
+
|
|
30
|
+
> **Changed 2026-09-27**: renamed from the generic `.reveal-frame`/`.reveal-content`. The keyframes
|
|
31
|
+
> (`scroll-reveal-frame-pan`) and view timeline (`--scroll-reveal-frame-timeline`) were renamed to
|
|
32
|
+
> match.
|
|
33
|
+
|
|
34
|
+
## Motion
|
|
35
|
+
|
|
36
|
+
Driven by a CSS scroll-driven animation (`view-timeline` on the frame, `animation-timeline` on the
|
|
37
|
+
content), running from the frame entering the viewport to it leaving. The content moves up by the
|
|
38
|
+
parallax offset over that range. No JavaScript.
|
|
39
|
+
|
|
40
|
+
Under `prefers-reduced-motion: reduce`, and in browsers without `animation-timeline` support, the
|
|
41
|
+
animation is removed and the content is sized to the frame (a static crop).
|
|
42
|
+
|
|
43
|
+
## Local overrides
|
|
44
|
+
|
|
45
|
+
Set the tokens above on an element you own (a page or section class, or a class added with
|
|
46
|
+
`:style-class-passthrough`): they inherit down into the component. Keep the block **unlayered** (no
|
|
47
|
+
`@layer` wrapper) so it beats the library's `@layer components`. If your own file uses
|
|
48
|
+
`<style scoped>`, tokens set on your element still work, but selectors that reach inside the
|
|
49
|
+
component need `:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
|
|
50
|
+
|
|
51
|
+
**Caveat:** a prop you pass is written inline on the root and overrides these tokens, whether set on
|
|
52
|
+
an ancestor or on the frame itself. To drive a value from CSS, don't pass its prop.
|
|
53
|
+
|
|
54
|
+
## Recipe: responsive frame
|
|
55
|
+
|
|
56
|
+
```css
|
|
57
|
+
.welcome {
|
|
58
|
+
--scroll-reveal-frame-height: 320px;
|
|
59
|
+
--scroll-reveal-frame-parallax-offset: 20rem;
|
|
60
|
+
|
|
61
|
+
@media (width >= 768px) {
|
|
62
|
+
--scroll-reveal-frame-height: 540px;
|
|
63
|
+
--scroll-reveal-frame-parallax-offset: 36rem;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```vue
|
|
69
|
+
<section class="welcome">
|
|
70
|
+
<ScrollRevealFrame radius="1.6rem">...</ScrollRevealFrame>
|
|
71
|
+
</section>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Class passthrough
|
|
75
|
+
|
|
76
|
+
`style-class-passthrough` adds classes to the root `<figure class="scroll-reveal-frame">`. It's
|
|
77
|
+
reachable in normal use and is the simplest place to set the tokens for one instance.
|
|
@@ -1,59 +1,31 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<figure
|
|
3
|
-
class="reveal-frame"
|
|
3
|
+
class="scroll-reveal-frame"
|
|
4
4
|
:class="[elementClasses]"
|
|
5
5
|
:style="{
|
|
6
|
-
'--
|
|
7
|
-
'--
|
|
8
|
-
'--
|
|
6
|
+
'--scroll-reveal-frame-height': frameHeight,
|
|
7
|
+
'--scroll-reveal-frame-parallax-offset': parallaxOffset,
|
|
8
|
+
'--scroll-reveal-frame-radius': radius,
|
|
9
9
|
}"
|
|
10
10
|
>
|
|
11
|
-
<div class="reveal-content">
|
|
11
|
+
<div class="scroll-reveal-frame-content">
|
|
12
12
|
<slot></slot>
|
|
13
13
|
</div>
|
|
14
14
|
</figure>
|
|
15
15
|
</template>
|
|
16
16
|
|
|
17
17
|
<script setup lang="ts">
|
|
18
|
-
/**
|
|
19
|
-
* ScrollRevealFrame
|
|
20
|
-
*
|
|
21
|
-
* Generic clipping frame that pans its slot content vertically as it scrolls
|
|
22
|
-
* through the viewport — driven entirely by CSS Scroll-driven Animations.
|
|
23
|
-
* No scroll listeners, no JS animation.
|
|
24
|
-
*
|
|
25
|
-
* How it works:
|
|
26
|
-
* - The <figure> is a fixed-height clipping window (overflow: hidden).
|
|
27
|
-
* - It registers a named view-timeline scoped to itself.
|
|
28
|
-
* - The inner .reveal-content wrapper is taller than the frame by
|
|
29
|
-
* `parallaxOffset`, and animates translateY as the frame scrolls.
|
|
30
|
-
* - Any slot content (single image, grid, video, etc.) fills that wrapper.
|
|
31
|
-
*
|
|
32
|
-
* Browser support (as of 2026):
|
|
33
|
-
* Chrome 115+, Edge 115+, Firefox 114+, Safari 17.2+
|
|
34
|
-
* Falls back gracefully to a static cropped view in older browsers.
|
|
35
|
-
*
|
|
36
|
-
* For single-image use with NuxtImg optimisation and focal-point control,
|
|
37
|
-
* use ScrollRevealImage instead — it wraps this component.
|
|
38
|
-
*/
|
|
39
|
-
|
|
40
18
|
interface Props {
|
|
41
|
-
/** Height of the visible clipping frame. */
|
|
42
19
|
frameHeight?: string;
|
|
43
|
-
/**
|
|
44
|
-
* How far the content travels vertically as the frame scrolls through the
|
|
45
|
-
* viewport. Larger = more content revealed = stronger parallax feel.
|
|
46
|
-
*/
|
|
47
20
|
parallaxOffset?: string;
|
|
48
|
-
/** Optional rounded corners on the frame. */
|
|
49
21
|
radius?: string;
|
|
50
22
|
styleClassPassthrough?: string | string[];
|
|
51
23
|
}
|
|
52
24
|
|
|
53
25
|
const props = withDefaults(defineProps<Props>(), {
|
|
54
|
-
frameHeight:
|
|
55
|
-
parallaxOffset:
|
|
56
|
-
radius:
|
|
26
|
+
frameHeight: undefined,
|
|
27
|
+
parallaxOffset: undefined,
|
|
28
|
+
radius: undefined,
|
|
57
29
|
styleClassPassthrough: () => [],
|
|
58
30
|
});
|
|
59
31
|
|
|
@@ -67,59 +39,46 @@ watch(
|
|
|
67
39
|
|
|
68
40
|
<style lang="css">
|
|
69
41
|
@layer components {
|
|
70
|
-
.reveal-frame {
|
|
71
|
-
|
|
72
|
-
--_frame-height: 540px;
|
|
73
|
-
--_parallax-offset: 36rem;
|
|
74
|
-
--_radius: 0px;
|
|
75
|
-
|
|
76
|
-
margin: 0; /* reset browser <figure> default margin */
|
|
42
|
+
.scroll-reveal-frame {
|
|
43
|
+
margin: 0;
|
|
77
44
|
position: relative;
|
|
78
|
-
height: var(--
|
|
45
|
+
height: var(--scroll-reveal-frame-height, 540px);
|
|
79
46
|
width: 100%;
|
|
80
47
|
overflow: hidden;
|
|
81
|
-
border-radius: var(--
|
|
48
|
+
border-radius: var(--scroll-reveal-frame-radius, 0px);
|
|
82
49
|
|
|
83
|
-
/*
|
|
84
|
-
|
|
85
|
-
* scroll progress rather than its own (which would be distorted by the
|
|
86
|
-
* artificially inflated height).
|
|
87
|
-
*/
|
|
88
|
-
view-timeline: --reveal-frame-timeline block;
|
|
89
|
-
}
|
|
50
|
+
/* Named so the taller child animates on this element's progress, not its own. */
|
|
51
|
+
view-timeline: --scroll-reveal-frame-timeline block;
|
|
90
52
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
width: 100%;
|
|
94
|
-
/*
|
|
95
|
-
* Content is taller than the frame by parallaxOffset so there is always
|
|
96
|
-
* content to travel into as the animation progresses.
|
|
97
|
-
*/
|
|
98
|
-
height: calc(100% + var(--_parallax-offset));
|
|
53
|
+
.scroll-reveal-frame-content {
|
|
54
|
+
--_parallax-offset: var(--scroll-reveal-frame-parallax-offset, 36rem);
|
|
99
55
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
56
|
+
display: block;
|
|
57
|
+
width: 100%;
|
|
58
|
+
height: calc(100% + var(--_parallax-offset));
|
|
104
59
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
60
|
+
animation: scroll-reveal-frame-pan linear both;
|
|
61
|
+
animation-timeline: --scroll-reveal-frame-timeline;
|
|
62
|
+
animation-range: entry 0% exit 100%;
|
|
109
63
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
64
|
+
@supports not (animation-timeline: scroll()) {
|
|
65
|
+
animation: none;
|
|
66
|
+
height: 100%;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@media (prefers-reduced-motion: reduce) {
|
|
70
|
+
animation: none;
|
|
71
|
+
height: 100%;
|
|
72
|
+
}
|
|
115
73
|
}
|
|
116
74
|
}
|
|
117
75
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
76
|
+
@keyframes scroll-reveal-frame-pan {
|
|
77
|
+
from {
|
|
78
|
+
transform: translateY(0);
|
|
79
|
+
}
|
|
80
|
+
to {
|
|
81
|
+
transform: translateY(calc(-1 * var(--_parallax-offset)));
|
|
123
82
|
}
|
|
124
83
|
}
|
|
125
84
|
}
|