kmcom-nuxt-layers 2.7.5 → 3.0.0
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/docs/FALLOW-COMPLEXITY-DUPLICATION-AUDIT.md +0 -1
- package/docs/LAYOUT.md +34 -61
- package/docs/MIGRATION.md +1 -1
- package/docs/UPAGE-GRID-INTEGRATION.md +6 -6
- package/docs/layout-shift-causes.md +1 -1
- package/docs/superpowers/plans/2026-09-03-layout-layer-fluid-rebuild.md +1850 -0
- package/docs/superpowers/plans/2026-09-03-vue-element-system.md +1019 -0
- package/docs/superpowers/plans/2026-09-04-grid-layer.md +977 -0
- package/docs/superpowers/specs/2026-08-30-layer-taxonomy-tier-0-1-design.md +533 -0
- package/docs/superpowers/specs/2026-08-30-layer-taxonomy-tier-2-design.md +154 -0
- package/docs/superpowers/specs/2026-08-30-layer-taxonomy-tier-3-design.md +109 -0
- package/docs/superpowers/specs/2026-08-30-layer-taxonomy-tier-4-design.md +124 -0
- package/docs/superpowers/specs/2026-08-30-layer-taxonomy-tier-5-design.md +121 -0
- package/docs/superpowers/specs/2026-08-30-layer-taxonomy-tier-6-design.md +77 -0
- package/docs/superpowers/specs/2026-08-30-layer-taxonomy-tier-7-design.md +73 -0
- package/docs/superpowers/specs/2026-08-31-swiss-grid-layer-design.md +190 -0
- package/docs/superpowers/specs/2026-09-03-layout-layer-fluid-rebuild-design.md +312 -0
- package/docs/superpowers/specs/2026-09-03-vue-element-system-design.md +342 -0
- package/docs/superpowers/specs/2026-09-04-grid-layer-design.md +236 -0
- package/layers/content/app/app.config.ts +10 -2
- package/layers/content/app/components/Blog/ItemPage.vue +21 -0
- package/layers/content/app/components/Blog/Page.vue +25 -0
- package/layers/content/app/components/Gallery/ImagePage.vue +5 -1
- package/layers/content/app/components/Gallery/Page.vue +4 -1
- package/layers/content/app/components/Gallery/SlugPage.vue +5 -1
- package/layers/content/app/components/Portfolio/ItemPage.vue +4 -1
- package/layers/content/app/components/Portfolio/List.vue +14 -2
- package/layers/content/app/components/Portfolio/Page.vue +4 -1
- package/layers/content/app/composables/useBlogPosts.ts +6 -19
- package/layers/content/app/composables/useCollectionItems.ts +63 -0
- package/layers/content/app/composables/useGalleryItems.ts +1 -16
- package/layers/content/app/types/content.ts +9 -0
- package/layers/content/package.json +3 -0
- package/layers/core/app/app.config.ts +34 -17
- package/layers/core/app/app.vue +1 -0
- package/layers/core/app/assets/css/core.css +4 -1
- package/layers/core/app/assets/css/tokens/breakpoints.css +13 -0
- package/layers/core/app/assets/css/tokens/container.css +36 -0
- package/layers/core/app/assets/css/tokens/spacing-fluid.css +25 -0
- package/layers/core/app/components/AppContainer.vue +32 -0
- package/layers/core/app/components/Element.test.ts +90 -0
- package/layers/core/app/components/Element.vue +78 -0
- package/layers/core/app/components/ElementTw.test.ts +64 -0
- package/layers/core/app/components/ElementTw.vue +86 -0
- package/layers/core/app/components/LoadingScreen.vue +0 -15
- package/layers/core/app/composables/useElementGrid.test.ts +33 -0
- package/layers/core/app/composables/useElementGrid.ts +29 -0
- package/layers/core/app/composables/useElementInteraction.test.ts +27 -0
- package/layers/core/app/composables/useElementInteraction.ts +17 -0
- package/layers/core/app/composables/useElementLayout.test.ts +41 -0
- package/layers/core/app/composables/useElementLayout.ts +26 -0
- package/layers/core/app/composables/useElementSizing.test.ts +39 -0
- package/layers/core/app/composables/useElementSizing.ts +25 -0
- package/layers/core/app/composables/useElementStyle.ts +65 -0
- package/layers/core/app/composables/useElementSurface.test.ts +33 -0
- package/layers/core/app/composables/useElementSurface.ts +21 -0
- package/layers/core/app/composables/useErrorLog.ts +6 -4
- package/layers/core/app/composables/useLayoutAttrs.test.ts +47 -0
- package/layers/core/app/composables/useLayoutAttrs.ts +94 -0
- package/layers/core/app/composables/useLoading.ts +3 -1
- package/layers/core/app/error.vue +27 -57
- package/layers/core/app/pages/[...slug].vue +1 -29
- package/layers/core/app/plugins/loading.client.ts +0 -6
- package/layers/core/app/types/element.ts +25 -0
- package/layers/core/app/types/index.ts +0 -1
- package/layers/core/app/types/notFound.ts +24 -0
- package/layers/core/app/types/responsive.ts +15 -0
- package/layers/core/app/types/responsive.type-test.ts +22 -0
- package/layers/core/app/types/runtime-config.ts +1 -17
- package/layers/core/app/types/tokens.ts +29 -0
- package/layers/core/app/utils/index.ts +4 -2
- package/layers/core/app/utils/scrollGuardClamp.test.ts +36 -0
- package/layers/core/app/utils/scrollGuardClamp.ts +22 -0
- package/layers/core/app/utils/styleToTailwindClasses.test.ts +31 -0
- package/layers/core/app/utils/styleToTailwindClasses.ts +16 -0
- package/layers/core/nuxt.config.ts +15 -11
- package/layers/core/package.json +2 -1
- package/layers/{auth → data/auth}/nuxt.config.ts +1 -1
- package/layers/{auth → data/auth}/package.json +1 -1
- package/layers/{baseline → data/auth}/tsconfig.json +1 -1
- package/layers/{database → data/database}/nuxt.config.ts +1 -1
- package/layers/{database → data/database}/package.json +1 -1
- package/layers/{database → data/database}/tsconfig.json +1 -1
- package/layers/{forms/app/types/app-config.d.ts → data/forms/app/app.config.ts} +4 -0
- package/layers/{forms → data/forms}/package.json +1 -1
- package/layers/{forms → data/forms}/server/api/forms/status.get.ts +3 -1
- package/layers/{animations → data/forms}/tsconfig.json +1 -1
- package/layers/{mailer → data/mailer}/nuxt.config.ts +11 -1
- package/layers/{mailer → data/mailer}/package.json +1 -1
- package/layers/{auth → data/mailer}/tsconfig.json +1 -1
- package/layers/data/metadata/app/composables/useMetadataItem.ts +18 -0
- package/layers/data/metadata/app/composables/useMetadataSearch.ts +37 -0
- package/layers/{metadata → data/metadata}/nuxt.config.ts +1 -1
- package/layers/{metadata → data/metadata}/package.json +1 -1
- package/layers/{metadata → data/metadata}/providers/comicvine/nuxt.config.ts +1 -1
- package/layers/{metadata → data/metadata}/providers/comicvine/package.json +1 -1
- package/layers/data/metadata/providers/comicvine/tsconfig.json +7 -0
- package/layers/{metadata → data/metadata}/providers/google-books/nuxt.config.ts +1 -1
- package/layers/{metadata → data/metadata}/providers/google-books/package.json +1 -1
- package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/client.ts +10 -2
- package/layers/data/metadata/providers/google-books/tsconfig.json +7 -0
- package/layers/{metadata → data/metadata}/providers/openlibrary/package.json +1 -1
- package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/client.ts +23 -11
- package/layers/data/metadata/providers/openlibrary/tsconfig.json +7 -0
- package/layers/{metadata → data/metadata}/providers/themoviedb/nuxt.config.ts +1 -1
- package/layers/{metadata → data/metadata}/providers/themoviedb/package.json +1 -1
- package/layers/{metadata → data/metadata}/providers/themoviedb/tsconfig.json +1 -1
- package/layers/{metadata → data/metadata}/server/utils/metadata/search.ts +11 -4
- package/layers/data/metadata/tsconfig.json +7 -0
- package/layers/{feeds → delivery/feeds}/app/components/Feeds/Index.vue +6 -2
- package/layers/{feeds → delivery/feeds}/app/components/Feeds/RouteCard.vue +2 -0
- package/layers/{feeds → delivery/feeds}/app/plugins/feed-head.ts +6 -2
- package/layers/{feeds → delivery/feeds}/app/utils/feed-catalog.ts +8 -6
- package/layers/{feeds → delivery/feeds}/nuxt.config.ts +1 -1
- package/layers/{feeds → delivery/feeds}/package.json +1 -1
- package/layers/{feeds → delivery/feeds}/server/utils/feed-config.ts +1 -1
- package/layers/{feeds → delivery/feeds}/server/utils/feed-service.ts +2 -1
- package/layers/delivery/feeds/tsconfig.json +7 -0
- package/layers/{scripts → delivery/scripts}/app/composables/useAnalytics.ts +3 -1
- package/layers/{scripts → delivery/scripts}/app/composables/useGtm.ts +8 -2
- package/layers/{scripts → delivery/scripts}/app/composables/useScriptsConsent.ts +4 -1
- package/layers/{scripts → delivery/scripts}/app/utils/scriptClients.ts +19 -0
- package/layers/{scripts → delivery/scripts}/nuxt.config.ts +7 -2
- package/layers/{scripts → delivery/scripts}/package.json +3 -2
- package/layers/delivery/scripts/tsconfig.json +7 -0
- package/layers/delivery/seo/app/composables/useSeoConfig.ts +8 -0
- package/layers/{seo → delivery/seo}/app/utils/seoConfig.test.ts +2 -2
- package/layers/{seo → delivery/seo}/app/utils/seoConfig.ts +2 -2
- package/layers/{seo → delivery/seo}/nuxt.config.ts +1 -1
- package/layers/{seo → delivery/seo}/package.json +1 -1
- package/layers/delivery/seo/tsconfig.json +7 -0
- package/layers/design-system/theming/app/app.config.ts +35 -0
- package/layers/design-system/theming/app/assets/css/tokens.css +26 -0
- package/layers/{theme → design-system/theming}/app/components/ThemePicker/AccentButton.vue +3 -22
- package/layers/{theme → design-system/theming}/app/components/ThemePicker/Colors.vue +3 -4
- package/layers/{theme → design-system/theming}/app/composables/useAccentColor.ts +5 -2
- package/layers/{theme → design-system/theming}/app/composables/useThemeContrast.ts +1 -1
- package/layers/{theme → design-system/theming}/app/composables/useThemeMotion.ts +1 -1
- package/layers/{theme → design-system/theming}/app/composables/useThemeTransparency.ts +1 -1
- package/layers/{theme → design-system/theming}/app/plugins/theme.client.ts +2 -1
- package/layers/design-system/theming/app/types/designSystem.ts +102 -0
- package/layers/design-system/theming/app/types/semanticColor.ts +20 -0
- package/layers/design-system/theming/app/types/theme.ts +12 -0
- package/layers/design-system/theming/app/utils/accentPalette.ts +28 -0
- package/layers/design-system/theming/app/utils/themeAdapter.ts +20 -0
- package/layers/design-system/theming/nuxt.config.ts +49 -0
- package/layers/{ui → design-system/theming}/package.json +5 -6
- package/layers/{theme → design-system/theming}/server/plugins/theme-fouc.ts +2 -0
- package/layers/{theme → design-system/theming}/server/utils/accent-css.ts +2 -2
- package/layers/{theme → design-system/theming}/tsconfig.json +1 -1
- package/layers/{typography → design-system/typography}/app/assets/css/typography.css +9 -0
- package/layers/design-system/typography/app/components/Typography/CodeBlock.vue +65 -0
- package/layers/{typography → design-system/typography}/app/components/Typography/Headline.vue +16 -31
- package/layers/{typography/app/components/Typography/HeadlineScreen.vue → design-system/typography/app/components/Typography/QuoteBlock.vue} +27 -29
- package/layers/design-system/typography/app/components/Typography/RepeatText.vue +147 -0
- package/layers/{typography → design-system/typography}/app/components/Typography/index.vue +6 -4
- package/layers/design-system/typography/app/composables/repeatFill.ts +51 -0
- package/layers/{typography → design-system/typography}/app/composables/typography.ts +4 -0
- package/layers/{typography → design-system/typography}/app/types/typography.ts +8 -0
- package/layers/{typography → design-system/typography}/nuxt.config.ts +1 -1
- package/layers/design-system/typography/tsconfig.json +7 -0
- package/layers/{visual → design-system/visual}/app/app.config.ts +2 -2
- package/layers/{visual → design-system/visual}/app/components/Accent/Blob.vue +1 -1
- package/layers/{visual → design-system/visual}/app/components/Accent/Scene.vue +2 -3
- package/layers/{visual → design-system/visual}/app/components/Gradient/Background.vue +2 -2
- package/layers/{visual → design-system/visual}/app/components/Gradient/Text.vue +2 -2
- package/layers/{visual → design-system/visual}/app/composables/gradient.ts +1 -1
- package/layers/design-system/visual/app/types/breakpoints.ts +67 -0
- package/layers/{visual → design-system/visual}/app/types/media.ts +0 -11
- package/layers/{visual → design-system/visual}/nuxt.config.ts +1 -1
- package/layers/design-system/visual/tsconfig.json +7 -0
- package/layers/{animations → motion/animations}/app/components/Motion/Marquee.vue +0 -7
- package/layers/{animations → motion/animations}/app/components/Motion/Staggered.vue +4 -1
- package/layers/{animations → motion/animations}/nuxt.config.ts +1 -2
- package/layers/motion/animations/tsconfig.json +7 -0
- package/layers/motion/{package.json → motion/package.json} +1 -1
- package/layers/motion/{tsconfig.json → motion/tsconfig.json} +1 -1
- package/layers/motion/page-transitions/app/assets/css/page-transitions.css +30 -0
- package/layers/{page-transitions → motion/page-transitions}/app/composables/usePageTransition.ts +14 -2
- package/layers/{page-transitions → motion/page-transitions}/app/plugins/page-transitions.client.ts +5 -2
- package/layers/{page-transitions → motion/page-transitions}/nuxt.config.ts +3 -1
- package/layers/motion/page-transitions/tsconfig.json +7 -0
- package/layers/motion/scroll/app/app.config.ts +13 -0
- package/layers/{scroll → motion/scroll}/app/composables/useSmoothScroll.ts +2 -1
- package/layers/{scroll → motion/scroll}/app/plugins/locomotive-scroll.client.ts +2 -1
- package/layers/{scroll → motion/scroll}/nuxt.config.ts +1 -1
- package/layers/motion/scroll/tsconfig.json +7 -0
- package/layers/{transitions → motion/transitions}/nuxt.config.ts +1 -1
- package/layers/motion/transitions/tsconfig.json +7 -0
- package/layers/{canvas → render/canvas}/app/composables/useRendererCapabilities.ts +0 -8
- package/layers/{canvas → render/canvas}/app/composables/useShaderTime.ts +0 -12
- package/layers/{canvas → render/canvas}/nuxt.config.ts +1 -4
- package/layers/{canvas → render/canvas}/package.json +3 -2
- package/layers/{canvas → render/canvas}/tsconfig.json +1 -1
- package/layers/render/shader/app/app.config.ts +21 -0
- package/layers/{shader → render/shader}/app/shaders/layers/paperShading.ts +1 -1
- package/layers/{shader → render/shader}/package.json +1 -1
- package/layers/render/shader/tsconfig.json +7 -0
- package/layers/structure/grid/app/app.config.ts +92 -0
- package/layers/structure/grid/app/assets/css/grid.css +38 -0
- package/layers/structure/grid/app/composables/useGridTracks.test.ts +94 -0
- package/layers/structure/grid/app/composables/useGridTracks.ts +74 -0
- package/layers/structure/grid/app/types/tracks.test.ts +32 -0
- package/layers/structure/grid/app/types/tracks.ts +18 -0
- package/layers/structure/grid/app/utils/placement.test.ts +19 -0
- package/layers/structure/grid/app/utils/placement.ts +15 -0
- package/layers/structure/grid/nuxt.config.ts +22 -0
- package/layers/{theme → structure/grid}/package.json +3 -3
- package/layers/structure/layout/app/app.config.ts +116 -0
- package/layers/{layout → structure/layout}/app/assets/css/layout/grids.css +11 -6
- package/layers/structure/layout/app/assets/css/layout.css +1 -0
- package/layers/structure/layout/app/components/HStack.vue +41 -0
- package/layers/{layout → structure/layout}/app/components/Layout/Grid/Debug.vue +5 -3
- package/layers/{layout → structure/layout}/app/components/Layout/Grid/Item.vue +4 -10
- package/layers/{layout → structure/layout}/app/components/Layout/Main.vue +3 -3
- package/layers/{layout → structure/layout}/app/components/Layout/Page/Header.vue +1 -1
- package/layers/{layout → structure/layout}/app/components/Layout/Page/index.vue +3 -3
- package/layers/{layout → structure/layout}/app/components/Layout/Section/index.vue +1 -1
- package/layers/structure/layout/app/components/Spacer.vue +21 -0
- package/layers/structure/layout/app/components/VStack.vue +37 -0
- package/layers/structure/layout/app/components/ZStack.vue +28 -0
- package/layers/structure/layout/app/layouts/default.vue +5 -0
- package/layers/{layout → structure/layout}/app/types/layouts.ts +2 -3
- package/layers/{layout → structure/layout}/app/utils/gridPlacementStyle.test.ts +7 -42
- package/layers/{layout → structure/layout}/app/utils/gridPlacementStyle.ts +4 -18
- package/layers/{layout → structure/layout}/nuxt.config.ts +1 -1
- package/layers/{layout → structure/layout}/package.json +1 -1
- package/layers/structure/layout/tsconfig.json +7 -0
- package/layers/{navigation → structure/navigation}/app/app.config.ts +4 -6
- package/layers/structure/navigation/app/components/Mast/Header.vue +11 -0
- package/layers/{navigation → structure/navigation}/app/components/Mast/Nav.vue +1 -1
- package/layers/structure/navigation/app/composables/mastNav.ts +15 -0
- package/layers/{navigation → structure/navigation}/app/utils/createModal.ts +22 -3
- package/layers/{navigation → structure/navigation}/nuxt.config.ts +1 -1
- package/layers/structure/navigation/tsconfig.json +7 -0
- package/layers/{routing → structure/routing}/app/app.config.ts +11 -2
- package/layers/{routing → structure/routing}/nuxt.config.ts +1 -1
- package/layers/{routing → structure/routing}/package.json +1 -1
- package/layers/structure/routing/tsconfig.json +7 -0
- package/package.json +56 -56
- package/docs/fallow-refactor/layers-ui.md +0 -27
- package/layers/animations/app/types/animations.ts +0 -8
- package/layers/animations/app/types/index.ts +0 -1
- package/layers/baseline/nuxt.config.ts +0 -24
- package/layers/baseline/package.json +0 -14
- package/layers/content/app/components/Blog/Card.vue +0 -43
- package/layers/content/app/components/Gallery/AmbientImage.vue +0 -44
- package/layers/content/app/components/Gallery/Card.vue +0 -43
- package/layers/content/app/components/NuxtContent/Renderer.vue +0 -14
- package/layers/content/app/components/Portfolio/Card.vue +0 -43
- package/layers/content/app/composables/createPortfolioComposables.ts +0 -50
- package/layers/content/app/composables/useBlogPost.ts +0 -3
- package/layers/content/app/composables/useGalleryItem.ts +0 -3
- package/layers/content/app/composables/usePortfolioItem.ts +0 -3
- package/layers/content/app/composables/usePortfolioItems.ts +0 -26
- package/layers/content/app/types/app-config.d.ts +0 -14
- package/layers/core/app/assets/css-backup.zip +0 -0
- package/layers/core/app/composables/useEnv.ts +0 -23
- package/layers/core/app/composables/useScrollGuard.ts +0 -243
- package/layers/core/app/plugins/feature-detection.client.ts +0 -34
- package/layers/core/app/plugins/init.ts +0 -192
- package/layers/core/app/plugins/scroll-guard.client.ts +0 -56
- package/layers/core/app/types/app-config.d.ts +0 -63
- package/layers/core/app/types/scroll-guard.ts +0 -25
- package/layers/core/app/utils/helpers.test.ts +0 -55
- package/layers/core/app/utils/helpers.ts +0 -248
- package/layers/core/app/utils/regex.test.ts +0 -31
- package/layers/feeds/tsconfig.json +0 -7
- package/layers/forms/app/app.config.ts +0 -3
- package/layers/forms/tsconfig.json +0 -7
- package/layers/layout/app/app.config.ts +0 -180
- package/layers/layout/app/assets/css/layout/modes/fluid.css +0 -109
- package/layers/layout/app/assets/css/layout.css +0 -2
- package/layers/layout/app/components/Layout/Container.vue +0 -46
- package/layers/layout/app/components/Layout/Page/Container.vue +0 -103
- package/layers/layout/app/components/Layout/Section/Grid.vue +0 -46
- package/layers/layout/app/components/Layout/Section/Sidebar.vue +0 -84
- package/layers/layout/app/components/Layout/Section/Stack.vue +0 -63
- package/layers/layout/app/components/Layout/Section/Title.vue +0 -33
- package/layers/layout/app/composables/GridPlacement.ts +0 -31
- package/layers/layout/app/types/app-config.d.ts +0 -14
- package/layers/layout/tsconfig.json +0 -7
- package/layers/mailer/server/types.d.ts +0 -11
- package/layers/mailer/tsconfig.json +0 -7
- package/layers/metadata/app/composables/useMetadataItem.ts +0 -15
- package/layers/metadata/app/composables/useMetadataSearch.ts +0 -29
- package/layers/metadata/providers/comicvine/tsconfig.json +0 -7
- package/layers/metadata/providers/google-books/tsconfig.json +0 -7
- package/layers/metadata/providers/openlibrary/tsconfig.json +0 -7
- package/layers/metadata/tsconfig.json +0 -7
- package/layers/motion/app/components/Motion/index.vue +0 -16
- package/layers/navigation/app/components/Mast/Header.vue +0 -18
- package/layers/navigation/app/components/Mast/Main.vue +0 -7
- package/layers/navigation/app/composables/mastNav.ts +0 -26
- package/layers/navigation/app/utils/regex.ts +0 -6
- package/layers/navigation/tsconfig.json +0 -7
- package/layers/page-transitions/tsconfig.json +0 -7
- package/layers/routing/app/types/app-config.d.ts +0 -7
- package/layers/routing/tsconfig.json +0 -7
- package/layers/scripts/app/types/index.ts +0 -1
- package/layers/scripts/app/types/scripts.ts +0 -14
- package/layers/scripts/tsconfig.json +0 -7
- package/layers/scroll/app/app.config.ts +0 -31
- package/layers/scroll/tsconfig.json +0 -7
- package/layers/seo/app/composables/useSeoConfig.ts +0 -7
- package/layers/seo/tsconfig.json +0 -7
- package/layers/shader/app/app.config.ts +0 -9
- package/layers/shader/app/types/app-config.d.ts +0 -7
- package/layers/shader/tsconfig.json +0 -7
- package/layers/starter/app/app.config.ts +0 -10
- package/layers/starter/app/components/StarterDesignSystem.vue +0 -1913
- package/layers/starter/app/components/StarterHome.vue +0 -441
- package/layers/starter/nuxt.config.ts +0 -15
- package/layers/starter/package.json +0 -10
- package/layers/theme/app/app.config.ts +0 -3
- package/layers/theme/app/types/app-config.d.ts +0 -10
- package/layers/theme/app/types/theme.ts +0 -23
- package/layers/theme/nuxt.config.ts +0 -74
- package/layers/transitions/tsconfig.json +0 -7
- package/layers/typography/app/components/Typography/CodeBlock.vue +0 -41
- package/layers/typography/app/components/Typography/QuoteBlock.vue +0 -23
- package/layers/typography/tsconfig.json +0 -7
- package/layers/ui/app/assets/css/ui.css +0 -4
- package/layers/ui/app/layouts/default.vue +0 -8
- package/layers/ui/nuxt.config.ts +0 -22
- package/layers/ui/tsconfig.json +0 -7
- package/layers/visual/app/types/breakpoints.ts +0 -179
- package/layers/visual/tsconfig.json +0 -7
- /package/layers/{auth → data/auth}/app/middleware/auth.ts +0 -0
- /package/layers/{auth → data/auth}/server/routes/auth/github.get.ts +0 -0
- /package/layers/{database → data/database}/server/utils/drizzle.ts +0 -0
- /package/layers/{database → data/database}/server/utils/sql.ts +0 -0
- /package/layers/{forms → data/forms}/app/components/Form/Contact.vue +0 -0
- /package/layers/{forms → data/forms}/app/components/Form/Field.vue +0 -0
- /package/layers/{forms → data/forms}/app/composables/useFormSchema.ts +0 -0
- /package/layers/{forms → data/forms}/app/composables/useFormsFetch.ts +0 -0
- /package/layers/{forms → data/forms}/app/config/fields.ts +0 -0
- /package/layers/{forms → data/forms}/app/types/fields.ts +0 -0
- /package/layers/{forms → data/forms}/app/types/index.ts +0 -0
- /package/layers/{forms → data/forms}/app/utils/contact-schema.test.ts +0 -0
- /package/layers/{forms → data/forms}/app/utils/contact-schema.ts +0 -0
- /package/layers/{forms → data/forms}/app/utils/fieldProps.test.ts +0 -0
- /package/layers/{forms → data/forms}/app/utils/fieldProps.ts +0 -0
- /package/layers/{forms → data/forms}/nuxt.config.ts +0 -0
- /package/layers/{forms → data/forms}/server/api/contact.post.ts +0 -0
- /package/layers/{mailer → data/mailer}/app/types/index.ts +0 -0
- /package/layers/{mailer → data/mailer}/app/types/mailer.ts +0 -0
- /package/layers/{mailer → data/mailer}/server/utils/config.ts +0 -0
- /package/layers/{mailer → data/mailer}/server/utils/email.ts +0 -0
- /package/layers/{mailer → data/mailer}/server/utils/hooks.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/comicvine/server/plugins/comicvine-register.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/client.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/normalise.test.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/normalise.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/provider.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/comicvine/server/utils/metadata-comicvine/types.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/google-books/server/plugins/google-books-register.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/client.test.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/normalise.test.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/normalise.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/provider.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/google-books/server/utils/metadata-google-books/types.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/openlibrary/nuxt.config.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/openlibrary/server/plugins/openlibrary-register.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/client.test.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/normalise.test.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/normalise.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/provider.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/openlibrary/server/utils/metadata-openlibrary/types.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/themoviedb/server/plugins/tmdb-register.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/client.test.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/client.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/normalise.test.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/normalise.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/provider.ts +0 -0
- /package/layers/{metadata → data/metadata}/providers/themoviedb/server/utils/metadata-tmdb/types.ts +0 -0
- /package/layers/{metadata → data/metadata}/server/api/metadata/lookup.get.ts +0 -0
- /package/layers/{metadata → data/metadata}/server/api/metadata/providers.get.ts +0 -0
- /package/layers/{metadata → data/metadata}/server/api/metadata/search.get.ts +0 -0
- /package/layers/{metadata → data/metadata}/server/api/metadata/status.get.ts +0 -0
- /package/layers/{metadata → data/metadata}/server/api/metadata/sync.post.ts +0 -0
- /package/layers/{metadata → data/metadata}/server/utils/metadata/cache.test.ts +0 -0
- /package/layers/{metadata → data/metadata}/server/utils/metadata/cache.ts +0 -0
- /package/layers/{metadata → data/metadata}/server/utils/metadata/errors.ts +0 -0
- /package/layers/{metadata → data/metadata}/server/utils/metadata/provider-registry.test.ts +0 -0
- /package/layers/{metadata → data/metadata}/server/utils/metadata/provider-registry.ts +0 -0
- /package/layers/{metadata → data/metadata}/server/utils/metadata/search.test.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/app/app.config.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/app/assets/css/feeds.css +0 -0
- /package/layers/{feeds → delivery/feeds}/public/feed/style.css +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/atom/all.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/atom.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/json/all.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/json.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/rss/all.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/[collection]/rss.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/atom/all.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/atom.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/demo.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/index.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/json/all.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/json.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/rss/all.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/rss.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/routes/feed/style.xsl.get.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/utils/cache.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/utils/content-adapter.test.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/utils/content-adapter.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/utils/feed-author.test.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/utils/feed-author.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/utils/feed-config.test.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/utils/feed-xml.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/utils/formats/atom.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/utils/formats/json.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/utils/formats/rss.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/utils/formats.test.ts +0 -0
- /package/layers/{feeds → delivery/feeds}/server/utils/types.ts +0 -0
- /package/layers/{scripts → delivery/scripts}/app/app.config.ts +0 -0
- /package/layers/{baseline → delivery/scripts}/app/components/BaselineStatus.vue +0 -0
- /package/layers/{scripts → delivery/scripts}/app/composables/useScriptLoader.ts +0 -0
- /package/layers/{scripts → delivery/scripts}/app/composables/useYoutubeEmbed.ts +0 -0
- /package/layers/{baseline → delivery/scripts}/app/plugins/baseline-status.client.ts +0 -0
- /package/layers/{seo → delivery/seo}/app/app.config.ts +0 -0
- /package/layers/{theme → design-system/theming}/app/assets/css/theme.css +0 -0
- /package/layers/{theme → design-system/theming}/app/components/ThemePicker/Menu.vue +0 -0
- /package/layers/{theme → design-system/theming}/app/components/ThemePicker/MenuButton.vue +0 -0
- /package/layers/{theme → design-system/theming}/app/composables/useTheme.ts +0 -0
- /package/layers/{theme → design-system/theming}/app/composables/useThemePreferenceModels.ts +0 -0
- /package/layers/{theme → design-system/theming}/app/composables/useThemePreferences.ts +0 -0
- /package/layers/{theme → design-system/theming}/app/types/index.ts +0 -0
- /package/layers/{theme → design-system/theming}/server/utils/accent-css.test.ts +0 -0
- /package/layers/{theme → design-system/theming}/server/utils/fouc-config.test.ts +0 -0
- /package/layers/{theme → design-system/theming}/server/utils/fouc-config.ts +0 -0
- /package/layers/{typography → design-system/typography}/app/components/Typography/TextStroke.vue +0 -0
- /package/layers/{typography → design-system/typography}/app/composables/color.ts +0 -0
- /package/layers/{typography → design-system/typography}/app/types/colors.ts +0 -0
- /package/layers/{typography → design-system/typography}/app/types/index.ts +0 -0
- /package/layers/{typography → design-system/typography}/package.json +0 -0
- /package/layers/{visual → design-system/visual}/app/assets/css/visual.css +0 -0
- /package/layers/{visual → design-system/visual}/app/components/Base/Modal.vue +0 -0
- /package/layers/{visual → design-system/visual}/app/components/Media/Picture.vue +0 -0
- /package/layers/{visual → design-system/visual}/app/components/Progress/Bar.vue +0 -0
- /package/layers/{visual → design-system/visual}/app/components/Progress/Circular.vue +0 -0
- /package/layers/{visual → design-system/visual}/app/components/Tint/Overlay.vue +0 -0
- /package/layers/{visual → design-system/visual}/app/composables/accent.ts +0 -0
- /package/layers/{visual → design-system/visual}/app/composables/picture.ts +0 -0
- /package/layers/{visual → design-system/visual}/app/composables/tint.ts +0 -0
- /package/layers/{visual → design-system/visual}/app/types/accent.ts +0 -0
- /package/layers/{visual → design-system/visual}/app/types/gradient.ts +0 -0
- /package/layers/{visual → design-system/visual}/app/types/index.ts +0 -0
- /package/layers/{visual → design-system/visual}/app/types/tint.ts +0 -0
- /package/layers/{visual → design-system/visual}/app/utils/colorTokens.test.ts +0 -0
- /package/layers/{visual → design-system/visual}/app/utils/colorTokens.ts +0 -0
- /package/layers/{visual → design-system/visual}/app/utils/gradientStyle.test.ts +0 -0
- /package/layers/{visual → design-system/visual}/app/utils/gradientStyle.ts +0 -0
- /package/layers/{visual → design-system/visual}/app/utils/responsiveSizes.test.ts +0 -0
- /package/layers/{visual → design-system/visual}/app/utils/responsiveSizes.ts +0 -0
- /package/layers/{visual → design-system/visual}/package.json +0 -0
- /package/layers/{animations → motion/animations}/app/components/Motion/CountUp.vue +0 -0
- /package/layers/{animations → motion/animations}/app/components/Motion/Cursor.vue +0 -0
- /package/layers/{animations → motion/animations}/app/components/Motion/Magnetic.vue +0 -0
- /package/layers/{animations → motion/animations}/app/components/Motion/MarqueeText.vue +0 -0
- /package/layers/{animations → motion/animations}/app/components/Motion/TextReveal.vue +0 -0
- /package/layers/{animations → motion/animations}/app/components/Motion/Tilt.vue +0 -0
- /package/layers/{animations → motion/animations}/app/components/Motion/VelocityEffect.vue +0 -0
- /package/layers/{animations → motion/animations}/app/composables/useCountUp.ts +0 -0
- /package/layers/{animations → motion/animations}/app/composables/useCursorFollower.ts +0 -0
- /package/layers/{animations → motion/animations}/app/composables/useMagneticElement.ts +0 -0
- /package/layers/{animations → motion/animations}/app/composables/useMarqueeCopies.ts +0 -0
- /package/layers/{animations → motion/animations}/app/composables/useMarqueeVelocity.ts +0 -0
- /package/layers/{animations → motion/animations}/app/composables/useTiltEffect.ts +0 -0
- /package/layers/{animations → motion/animations}/app/utils/pointerMotion.ts +0 -0
- /package/layers/{animations → motion/animations}/package.json +0 -0
- /package/layers/motion/{nuxt.config.ts → motion/nuxt.config.ts} +0 -0
- /package/layers/{page-transitions → motion/page-transitions}/app/app.config.ts +0 -0
- /package/layers/{page-transitions → motion/page-transitions}/package.json +0 -0
- /package/layers/{scroll → motion/scroll}/app/components/Motion/HorizontalScroll.vue +0 -0
- /package/layers/{scroll → motion/scroll}/app/components/Motion/Parallax.vue +0 -0
- /package/layers/{scroll → motion/scroll}/app/components/Motion/PinnedSection.vue +0 -0
- /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollLink.vue +0 -0
- /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollProgress.vue +0 -0
- /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollScene.vue +0 -0
- /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollStats.vue +0 -0
- /package/layers/{scroll → motion/scroll}/app/components/Motion/ScrollStep.vue +0 -0
- /package/layers/{scroll → motion/scroll}/app/composables/useGsap.ts +0 -0
- /package/layers/{scroll → motion/scroll}/app/composables/useScrollSteps.ts +0 -0
- /package/layers/{scroll → motion/scroll}/app/composables/useSectionProgress.ts +0 -0
- /package/layers/{scroll → motion/scroll}/app/types/index.ts +0 -0
- /package/layers/{scroll → motion/scroll}/app/types/scroll.ts +0 -0
- /package/layers/{scroll → motion/scroll}/app/utils/scroll.ts +0 -0
- /package/layers/{scroll → motion/scroll}/package.json +0 -0
- /package/layers/{transitions → motion/transitions}/app/assets/css/transitions.css +0 -0
- /package/layers/{transitions → motion/transitions}/app/components/Motion/Transition.vue +0 -0
- /package/layers/{transitions → motion/transitions}/package.json +0 -0
- /package/layers/{canvas → render/canvas}/app/components/ShaderCanvas.vue +0 -0
- /package/layers/{canvas → render/canvas}/app/types/index.ts +0 -0
- /package/layers/{canvas → render/canvas}/app/types/renderer.ts +0 -0
- /package/layers/{shader → render/shader}/app/assets/css/shader.css +0 -0
- /package/layers/{shader → render/shader}/app/components/Effect/Bloom.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Effect/ChromaticAberration.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Effect/PostProcessing.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Material/AmbientAurora.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Material/AmbientFlow.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Material/AmbientGradientMesh.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Material/AmbientNebula.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Material/AmbientOcean.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Material/Fresnel.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Material/Gradient.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Material/Image.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Material/Node.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Material/Noise.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Mesh/Plane.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Node/Color.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Node/Fresnel.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Node/Gradient.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Node/Mix.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Node/Noise.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ACESTonemap.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/AddBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/AgedFilm.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Aurora.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/BilinearGradient.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/BillowNoise.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/BrightnessContrast.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/CellularNoise.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ChannelMixer.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ChebyshevNoiseField.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Checkerboard.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ChromaticAberration.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ChromaticScreenWaves.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Circle.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Clouds.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ColorBurnBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ColorDodgeBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ColourRamp.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ComplexPlaneField.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ConicGradient.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/CosinePalette.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/CoverageAlpha.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Cross.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/CurlNoise.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/DarkenBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/DayNightCycle.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Desaturate.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/DiagonalGradient.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/DiamondGradient.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/DifferenceBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/DivideBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/DomainWarpedNoise.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Dots.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/DuoTone.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ExclusionBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ExponentialFog.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Exposure.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/FBMNoise.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/FilmBurn.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/FilmGrain.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/FisheyeRay.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Flame.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/FocalGradient.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Gamma.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/GodRays.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/GradientNoise.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Grain.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Grid.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Halation.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Halftone.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/HardLightBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Haze.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Hexagon.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Hue.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Invert.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/LensFlare.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/LightenBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/LinearGradient.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/LinearGradient4.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/LinearToSRGB.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Marble.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/MixBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/MonochromeTint.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/MultiplyBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/NoisyGradient.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/NoisyGradientBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/OverlayBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/PaperTexture.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Polygon.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Posterise.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/RadialGradient.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/RayAutoOrbit.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/RayMouseOrbit.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/RayRotateX.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/RayRotateY.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/RayRotateZ.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/RayTiltBasis.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/RaymarchTunnel.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Rectangle.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ReinhardTonemap.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/RidgedNoise.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Ring.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/RingField.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/RisographGrain.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/RotatedGradientBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/SDFColourMask.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/SDFRadialMask.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/SRGBToLinear.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Saturation.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Scanlines.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ScreenBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ShaderDebugger.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/SimplexNoise.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/SkyAtmosphere.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/SoftLightBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/SolidColour.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/SplitTone.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Star.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Starfield.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Stripes.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/SubtractBlend.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/TanhTonemap.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Threshold.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Tint.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Triangle.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVAspectCorrect.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVBreath.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVBulge.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVClamp.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVColumnOffset.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVFlipX.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVFlipXY.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVFlipY.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVFractBand.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVMousePull.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVNoiseRotate.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVNoiseWarp.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVOrbit.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVParallax.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVPixelate.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVPulse.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVRipple.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVRotate.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVScale.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVScroll.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVScrollX.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVScrollY.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVShear.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVSineWarpXY.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVSwapAxes.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVTile.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVTwirl.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/UVWarp.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/VHSBleed.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/ValueNoise.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Vibrance.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Vignette.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/VoronoiEdges.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Water.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/WaveBendLayer.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/WaveColourLayer.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/WhiteBalance.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Pipeline/Wood.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Preset/Aurora.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Preset/Flow.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Preset/GradientMesh.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Preset/Nebula.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Preset/Ocean.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Preset/ThemeAurora.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Preset/ThemeBubble.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Preset/ThemeFlow.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Preset/ThemeGradient.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Preset/ThemeLavaLamp.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Preset/ThemePlasma.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Preset/ThemeWave.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Shader/Background.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Shader/Debug.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Shader/Host.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Shader/Material.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Shader/Pipeline.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Shader/PipelineContext.vue +0 -0
- /package/layers/{shader → render/shader}/app/components/Shader/Runtime.client.vue +0 -0
- /package/layers/{shader → render/shader}/app/composables/useAmbientMaterials.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useCSSColourUniform.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useCSSFloatUniform.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useMousePosition.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useShader.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useShaderColor.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useShaderFloat.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useShaderGraph.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useShaderMixBlend.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useShaderPerf.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useShaderPipeline.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useShaderRuntime.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useShaderVec2.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useSunDirectionUniform.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useTSLNodes.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useThemeColors.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useThemePreset.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useUniformWatchers.ts +0 -0
- /package/layers/{shader → render/shader}/app/composables/useUniforms.ts +0 -0
- /package/layers/{shader → render/shader}/app/plugins/shader.client.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/blend.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/complex.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/effects.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/grain.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/index.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/lighting.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/math.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/nodes.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/noise.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/noiseHelpers.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/palette.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/patterns.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/sdf.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/shapes.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/tonemapping.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/common/uv.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/createMaterial.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/index.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/layers/aurora.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/layers/index.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/layers/meshGradient.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/layers/shaderGradient.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/layers/stripe.ts +0 -0
- /package/layers/{shader → render/shader}/app/shaders/types.ts +0 -0
- /package/layers/{shader → render/shader}/app/types/index.ts +0 -0
- /package/layers/{shader → render/shader}/app/types/materials.ts +0 -0
- /package/layers/{shader → render/shader}/app/types/renderer.ts +0 -0
- /package/layers/{shader → render/shader}/app/types/tsl.ts +0 -0
- /package/layers/{shader → render/shader}/app/types/uniforms.ts +0 -0
- /package/layers/{shader → render/shader}/app/utils/tsl/animation.ts +0 -0
- /package/layers/{shader → render/shader}/app/utils/tsl/color.ts +0 -0
- /package/layers/{shader → render/shader}/app/utils/tsl/index.ts +0 -0
- /package/layers/{shader → render/shader}/app/utils/tsl/math.ts +0 -0
- /package/layers/{shader → render/shader}/app/utils/tsl/noise.ts +0 -0
- /package/layers/{shader → render/shader}/app/utils/tsl/oklch.ts +0 -0
- /package/layers/{shader → render/shader}/app/utils/tsl/patterns.ts +0 -0
- /package/layers/{shader → render/shader}/app/utils/tsl/tween.ts +0 -0
- /package/layers/{shader → render/shader}/app/utils/tsl/uv.ts +0 -0
- /package/layers/{shader → render/shader}/nuxt.config.ts +0 -0
- /package/layers/{layout → structure/layout}/app/components/Layout/Section/Gallery.vue +0 -0
- /package/layers/{layout → structure/layout}/app/components/Layout/Section/Hero.vue +0 -0
- /package/layers/{layout → structure/layout}/app/components/Layout/Section/Split.vue +0 -0
- /package/layers/{layout → structure/layout}/app/composables/useGridConfig.ts +0 -0
- /package/layers/{layout → structure/layout}/app/types/index.ts +0 -0
- /package/layers/{layout → structure/layout}/tailwind.config.js +0 -0
- /package/layers/{navigation → structure/navigation}/app/assets/css/navigation.css +0 -0
- /package/layers/{navigation → structure/navigation}/app/components/Links/Group.vue +0 -0
- /package/layers/{navigation → structure/navigation}/app/components/Links/Named.vue +0 -0
- /package/layers/{navigation → structure/navigation}/app/components/Mast/Footer.vue +0 -0
- /package/layers/{navigation → structure/navigation}/app/components/Mast/NavModal.vue +0 -0
- /package/layers/{navigation → structure/navigation}/app/components/Site/Subtitle.vue +0 -0
- /package/layers/{navigation → structure/navigation}/app/components/Site/Title.vue +0 -0
- /package/layers/{navigation → structure/navigation}/app/composables/toast.ts +0 -0
- /package/layers/{navigation → structure/navigation}/app/composables/useSite.ts +0 -0
- /package/layers/{navigation → structure/navigation}/app/types/index.ts +0 -0
- /package/layers/{navigation → structure/navigation}/app/types/nav.ts +0 -0
- /package/layers/{core → structure/navigation}/app/utils/regex.ts +0 -0
- /package/layers/{navigation → structure/navigation}/app/utils/site.test.ts +0 -0
- /package/layers/{navigation → structure/navigation}/app/utils/site.ts +0 -0
- /package/layers/{navigation → structure/navigation}/package.json +0 -0
- /package/layers/{routing → structure/routing}/app/composables/useFeatureFlags.ts +0 -0
- /package/layers/{routing → structure/routing}/app/composables/useMaintenance.ts +0 -0
- /package/layers/{routing → structure/routing}/app/composables/useRoutingConfig.ts +0 -0
- /package/layers/{routing → structure/routing}/app/middleware/01.maintenance.global.ts +0 -0
- /package/layers/{routing → structure/routing}/app/middleware/02.governance.global.ts +0 -0
- /package/layers/{routing → structure/routing}/app/plugins/feature-flags.client.ts +0 -0
- /package/layers/{routing → structure/routing}/app/plugins/scroll-routing.client.ts +0 -0
- /package/layers/{routing → structure/routing}/app/types/index.ts +0 -0
- /package/layers/{routing → structure/routing}/app/types/route-meta.d.ts +0 -0
- /package/layers/{routing → structure/routing}/app/types/routing.ts +0 -0
- /package/layers/{routing → structure/routing}/app/utils/resolveRoute.test.ts +0 -0
- /package/layers/{routing → structure/routing}/app/utils/resolveRoute.ts +0 -0
- /package/layers/{routing → structure/routing}/server/api/feature-flags.get.ts +0 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Layer Taxonomy Redesign — Part 2: Tier 2 (Structure)
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
|
|
5
|
+
Forensic audit of `layout`, `navigation`, `routing` — every real file read, every component/
|
|
6
|
+
composable/util traced to actual consumers via grep, decisions recorded below. Continues the
|
|
7
|
+
process established in `2026-08-30-layer-taxonomy-tier-0-1-design.md` (Tier 0/1). No
|
|
8
|
+
implementation yet — design-doc recording only, per the brainstorming skill's hard gate.
|
|
9
|
+
|
|
10
|
+
## Tier 0 loose end — resolved
|
|
11
|
+
|
|
12
|
+
`core/app/assets/css/base.css` and `layout.css` (misleadingly named — lives in `core`, not
|
|
13
|
+
`layout`) were never actually read during the Tier 0 pass despite the doc claiming Tier 0 fully
|
|
14
|
+
closed. Read now: both are plain, correct CSS resets (`base.css` = typography/element defaults
|
|
15
|
+
under `@layer base`; `layout.css` = table/hr/media defaults under `@layer components`). Nothing
|
|
16
|
+
layout-specific, nothing that belongs in the `layout` tier. Correctly homed in `core`. No action.
|
|
17
|
+
Tier 0 is now genuinely fully closed.
|
|
18
|
+
|
|
19
|
+
## Decisions
|
|
20
|
+
|
|
21
|
+
### `layout`: delete `GridPlacement.ts` (dead code)
|
|
22
|
+
|
|
23
|
+
`app/composables/GridPlacement.ts` (`useGridPlacement`) — its own docstring admits it: "Currently
|
|
24
|
+
not used - BaseGridItem inlines this logic for better reactivity. Kept for reference or future
|
|
25
|
+
use." Confirmed via grep: zero consumers anywhere in the repo. `Grid/Item.vue` has its own
|
|
26
|
+
equivalent, more complete implementation in `utils/gridPlacementStyle.ts` (which **is** the real,
|
|
27
|
+
consumed implementation). Delete `GridPlacement.ts`.
|
|
28
|
+
|
|
29
|
+
### `layout`: delete `Section/Title.vue` (`LayoutSectionTitle`) — exact duplicate of `LayoutPageHeader`
|
|
30
|
+
|
|
31
|
+
`Layout/Section/Title.vue`'s JSDoc header literally still reads "PageHeader - Standard page header
|
|
32
|
+
component... Used by PageContainer for visible page headers" — a copy-paste leftover from
|
|
33
|
+
`Layout/Page/Header.vue`. Confirmed via grep: `LayoutSectionTitle` has **zero** real consumers
|
|
34
|
+
anywhere in the repo; `LayoutPageHeader` is the real, consumed one (used by `LayoutPage`, two
|
|
35
|
+
playground pages, `StarterDesignSystem.vue`). Title.vue is also a strictly weaker variant — no
|
|
36
|
+
`back`-button variant, no `text-highlighted`/`text-muted` semantic color classes, wraps in
|
|
37
|
+
`LayoutGridItem` instead of being a plain block. Delete `Section/Title.vue`.
|
|
38
|
+
|
|
39
|
+
### `layout`: `app.config.ts` — same defect pattern as `theme`/`routing`, fix identically
|
|
40
|
+
|
|
41
|
+
`layout/app/app.config.ts` uses a bare `export default {...}` (no `defineAppConfig()` wrapper),
|
|
42
|
+
and its `declare module '@nuxt/schema'` augmentation lives in a separate file
|
|
43
|
+
(`app/types/app-config.d.ts`) instead of the same file — both violate
|
|
44
|
+
`.claude/rules/nuxt-layers.md`'s documented rule (file must live in `app/`, use
|
|
45
|
+
`defineAppConfig()`, one `declare module` block, same file). This is the **same defect** already
|
|
46
|
+
found and fixed for `theme` in Tier 1, and independently found in `routing` here (see below).
|
|
47
|
+
Fix all three consistently: wrap in `defineAppConfig()`, merge the `declare module` block into
|
|
48
|
+
`app.config.ts` itself, delete the now-redundant `types/app-config.d.ts` files.
|
|
49
|
+
|
|
50
|
+
### `routing`: `app.config.ts` — third instance of the same defect
|
|
51
|
+
|
|
52
|
+
`routing/app/app.config.ts` — bare `export default {...}` (no `defineAppConfig()`), augmentation
|
|
53
|
+
split into `app/types/app-config.d.ts`. Functionally fine defaults (`preset: 'simple'`, everything
|
|
54
|
+
off by default — sane), but same structural violation as `layout`/`theme`. Fold into the
|
|
55
|
+
consolidated fix above.
|
|
56
|
+
|
|
57
|
+
### New finding while fixing the above: `core`'s own `app.config.ts` had the same defect
|
|
58
|
+
|
|
59
|
+
Not previously flagged — `core/app/app.config.ts` was also a bare `export default {...}` with its
|
|
60
|
+
`declare module` augmentation split into `core/app/types/app-config.d.ts`. Fixed identically
|
|
61
|
+
(`defineAppConfig()`, merged augmentation, deleted the `.d.ts`) while doing this batch. Also
|
|
62
|
+
dropped the `scrollGuard` config block and its type, now dead after `useScrollGuard`'s deletion.
|
|
63
|
+
|
|
64
|
+
### `navigation`: `app.config.ts` — correct, no action
|
|
65
|
+
|
|
66
|
+
Uses `defineAppConfig()` + same-file `declare module` block correctly. This is the pattern the
|
|
67
|
+
other three layers should match. No changes needed.
|
|
68
|
+
|
|
69
|
+
### `navigation`: `useMastNav` didn't use the `createModal` factory it sits next to — fixed
|
|
70
|
+
|
|
71
|
+
`app/utils/createModal.ts` is a well-designed generic factory (`createModal(Component)` →
|
|
72
|
+
`{ open, close, patch }`, wraps `createSharedComposable` + `useOverlay`) — real and consumed by
|
|
73
|
+
the playground's demo modals (`useConfirmModal`, `useInfoModal`, `useFormModal`) and documented in
|
|
74
|
+
`visual/Base/Modal.vue`'s own JSDoc as _the_ pattern to use. `useMastNav` (`mastNav.ts`) hand-rolled
|
|
75
|
+
the identical `overlay.create()` pattern manually instead of calling `createModal()`, plus wrapped
|
|
76
|
+
`open`/`close` with `useSmoothScroll().lockScrolling()`/`unlockScrolling()`.
|
|
77
|
+
|
|
78
|
+
**Resolved**: extended `createModal(component, options)` with optional `onOpen`/`onClose` hooks
|
|
79
|
+
(run before open / after close), and refactored `useMastNav` to `createModal(MastNavModal, {
|
|
80
|
+
onOpen, onClose })` — same 4 lines of scroll-lock logic, zero duplicated overlay wiring. Already
|
|
81
|
+
implemented in this pass (`createModal.ts`, `mastNav.ts`).
|
|
82
|
+
|
|
83
|
+
### `navigation`/`routing`: `ResponsiveValue<T>` triplication — already-deliberate, no new action
|
|
84
|
+
|
|
85
|
+
Confirmed three separate `ResponsiveValue<T>` shapes exist: `core`'s canonical 5-key
|
|
86
|
+
(`default/sm/md/lg/xl`, documented as canonical for `core`+`ui`), `layout/types/layouts.ts`'s own
|
|
87
|
+
5-key copy (explicitly documented in `core`'s own type file as intentionally _not_ migrated —
|
|
88
|
+
"stays as-is, used by GridConfig/GridPresetsItem"), and `gridPlacementStyle.ts`'s private
|
|
89
|
+
3-key (`default/md/lg`, module-local, unexported, matches the Swiss Grid's own 3-tier column
|
|
90
|
+
system). All three are already-considered, deliberate divergences from prior sessions, not new
|
|
91
|
+
findings. No action — confirms Tier 0's summary was correct on this point.
|
|
92
|
+
|
|
93
|
+
### `starter` layer — not in `.claude/rules/nuxt-layers.md`'s layer table, extends the dissolved `ui`
|
|
94
|
+
|
|
95
|
+
Found while grepping component usage: `layers/starter` (`extends: ['../core', '../ui', '../layout',
|
|
96
|
+
'../motion']`) exists on disk but is undocumented in the layer table, and depends on `ui`, which
|
|
97
|
+
Tier 1 decided to dissolve entirely. Out of scope for this Tier 2 pass (not `layout`/`navigation`/
|
|
98
|
+
`routing`), but flagging now since the `ui` dissolution will break its `extends` — needs its own
|
|
99
|
+
audit pass (either fold into a later tier or handle alongside the `ui` dissolution work item).
|
|
100
|
+
|
|
101
|
+
## Confirmed correct, no action
|
|
102
|
+
|
|
103
|
+
- `layout`'s `Section/*` components (`Gallery`, `Grid`, `Hero`, `Sidebar`, `Split`, `Stack`) — all
|
|
104
|
+
real, distinct, pre-configured grid patterns with no overlap. `layout/CLAUDE.md`'s component
|
|
105
|
+
table is stale (missing `Grid.vue`, `Sidebar.vue`, `Stack.vue`, `Title.vue` from its listing) —
|
|
106
|
+
minor doc-drift, worth a pass when this tier's action items are implemented, not blocking.
|
|
107
|
+
- `Grid/Item.vue` (`LayoutGridItem`) — real, well-built, single canonical grid-placement
|
|
108
|
+
implementation (via `gridPlacementStyle.ts`), presets resolve correctly against
|
|
109
|
+
`app.config.ts`'s `layoutLayer.ui.grid.presets`.
|
|
110
|
+
- `Grid/Debug.vue` — real, Cmd/Ctrl+G toggle, correctly reads `core`'s `BREAKPOINT_PX` tokens.
|
|
111
|
+
- `Page/Header.vue`, `Page/index.vue` (`LayoutPage`) — real, canonical, correctly documented
|
|
112
|
+
(`LayoutPage` is a fragment, doesn't double up the grid root).
|
|
113
|
+
- `useGridConfig.ts` — real, clean, backwards-compat `enabled`→`mode` shim is intentional and
|
|
114
|
+
documented.
|
|
115
|
+
- `navigation`'s `Mast/Header.vue`, `Footer.vue`, `Nav.vue`, `NavModal.vue` — all real, all
|
|
116
|
+
consumed (verified via grep across playground + `starter`). `Header.vue` has a dead commented-out
|
|
117
|
+
`<template #toggle><MastNav /></template>` block — harmless doc cruft, can be deleted opportunistically.
|
|
118
|
+
- `Links/Group.vue`, `Links/Named.vue` — real, consumed.
|
|
119
|
+
- `Site/Title.vue`, `Site/Subtitle.vue`, `useSite.ts`, `utils/site.ts`, `utils/regex.ts`
|
|
120
|
+
(`splitSpaces`) — real, consumed chain (`useSite` → `resolveSiteConfig` → `splitSpaces`). Note:
|
|
121
|
+
`navigation` has its own `regex.ts` distinct from `core`'s now-deleted one — this one has a real
|
|
122
|
+
consumer, correctly kept.
|
|
123
|
+
- `useAppToast` (`toast.ts`) — real, thin wrapper over `useToast()`.
|
|
124
|
+
- `routing`'s entire composable/middleware/plugin/server chain (`useRoutingConfig`,
|
|
125
|
+
`useFeatureFlags`, `useMaintenance`, `resolveRoute`, both global middleware, both plugins, the
|
|
126
|
+
`feature-flags` API route) — genuinely well-built, self-consistent governance system. Presets
|
|
127
|
+
(`simple`/`marketing`/`product`/`enterprise`) are real and sane. No dead code found.
|
|
128
|
+
- `routing/app/middleware/02.governance.global.ts`'s `console.log` debug lines are gated behind
|
|
129
|
+
`config.debug` (default `false`) — not a leftover, intentional.
|
|
130
|
+
- `scroll-routing.client.ts`'s `fallow-ignore-next-line code-duplication` suppression — flags a
|
|
131
|
+
real near-duplicate of an `IntersectionObserver` pattern elsewhere (likely `scroll`/`motion`
|
|
132
|
+
tier). Out of scope for Tier 2; carry forward to the Tier 5 (Motion) pass.
|
|
133
|
+
|
|
134
|
+
## Consolidated action list (Tier 2)
|
|
135
|
+
|
|
136
|
+
- [x] Delete `layout/app/composables/GridPlacement.ts` (dead, self-admitted unused)
|
|
137
|
+
- [x] Delete `layout/app/components/Layout/Section/Title.vue` (`LayoutSectionTitle`) — zero
|
|
138
|
+
consumers, exact-duplicate copy-paste of `LayoutPageHeader`
|
|
139
|
+
- [x] Fix `app.config.ts` structural defect in `layout` and `routing` (join `theme`/`core` from
|
|
140
|
+
Tier 0/1 — same 4th and 5th instance): wrapped in `defineAppConfig()`, merged
|
|
141
|
+
`declare module '@nuxt/schema'` into the same file, deleted the redundant
|
|
142
|
+
`app/types/app-config.d.ts` in each. `theme`'s own fix is still pending (Tier 1 item).
|
|
143
|
+
- [x] `useMastNav` refactored onto `createModal` with new `onOpen`/`onClose` hooks (implemented)
|
|
144
|
+
- [x] Delete dead commented-out `<template #toggle><MastNav /></template>` block in
|
|
145
|
+
`navigation/Mast/Header.vue`
|
|
146
|
+
- [x] Update `layout/CLAUDE.md`'s component table to list `Grid.vue`, `Sidebar.vue`, `Stack.vue`
|
|
147
|
+
(post `Title.vue` deletion, dropped from the listing)
|
|
148
|
+
- [ ] Separately audit `layers/starter` — extends the dissolved `ui` layer, needs its own decision
|
|
149
|
+
once `ui`'s dissolution is implemented
|
|
150
|
+
|
|
151
|
+
## Not yet covered
|
|
152
|
+
|
|
153
|
+
Tiers 3 (Content), 4 (Data), 5 (Motion), 6 (Render), 7 (Delivery), and the Tier sub-layer/toggle
|
|
154
|
+
mechanism design are separate passes.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Layer Taxonomy Redesign — Part 3: Tier 3 (Content)
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
|
|
5
|
+
Forensic audit of `content` (only member of Tier 3) — every real file read, every component/
|
|
6
|
+
composable traced to actual consumers via grep. Continues the process established in the Tier 0/1
|
|
7
|
+
and Tier 2 docs. Findings below were investigated, decided, and implemented in the same pass (user
|
|
8
|
+
explicitly asked to close the gaps rather than just record them).
|
|
9
|
+
|
|
10
|
+
## Findings and resolution
|
|
11
|
+
|
|
12
|
+
### Dead code — deleted
|
|
13
|
+
|
|
14
|
+
- `_jiti_test.ts` (layer root) — scratch diagnostic testing zod's `.def`/`._def` shape, leftover
|
|
15
|
+
from investigating the documented jiti/`moduleCache:false` bug. Zero consumers.
|
|
16
|
+
- `useBlogPost.ts`, `useGalleryItem.ts`, `usePortfolioItem.ts` (all singular) — zero consumers;
|
|
17
|
+
`NuxtContent/Detail.vue` calls the generic `useCollectionItem(collection, slug)` directly.
|
|
18
|
+
- `usePortfolioItems.ts` (plural) — zero consumers; superseded by the generic path below.
|
|
19
|
+
- `createPortfolioComposables.ts` — absorbed into the new generic composable (see below).
|
|
20
|
+
- `Gallery/Card.vue`, `Blog/Card.vue`, `Portfolio/Card.vue`, `Gallery/AmbientImage.vue` — all zero
|
|
21
|
+
consumers. Each was a complete, working component that got bypassed by an inline reimplementation
|
|
22
|
+
of the same markup in its real consumer (`Gallery/Grid.vue`, `Blog/List.vue` via `<UBlogPost>`,
|
|
23
|
+
`Portfolio/List.vue` via `<UPageCard>`, `Gallery/ImageDetail.vue`).
|
|
24
|
+
- `NuxtContent/Renderer.vue` — zero consumers; `NuxtContent/Detail.vue` uses `@nuxt/content`'s raw
|
|
25
|
+
`<ContentRenderer>` directly instead.
|
|
26
|
+
|
|
27
|
+
### List-composable duplication — resolved with one generic composable
|
|
28
|
+
|
|
29
|
+
`docs/fallow-refactor/layers-content.md` (pre-existing repo doc) had already flagged
|
|
30
|
+
`useGalleryItems`/`usePortfolioItems` as near-duplicates. Confirmed broader than that doc knew:
|
|
31
|
+
`useBlogPosts`, `useGalleryItems`, and `createPortfolioComposables`'s `useItems` all reimplemented
|
|
32
|
+
the same sort → filter-by-tags → filter-by-boolean-field → limit pipeline, differing only in the
|
|
33
|
+
sort key (`date` vs `year`) and the boolean field (`draft` vs `featured`).
|
|
34
|
+
|
|
35
|
+
**Implemented**: one generic `useCollectionItems(collectionName, { tags, limit, sortKey,
|
|
36
|
+
sortDirection, filter })` (`composables/useCollectionItems.ts`) — `sortKey` and the boolean
|
|
37
|
+
`filter` predicate are duck-typed, so the same function serves both compile-time-known collections
|
|
38
|
+
and `Portfolio/List.vue`'s runtime `collection` prop. `useBlogPosts.ts`/`useGalleryItems.ts` are
|
|
39
|
+
now thin wrappers over it (per fallow's own recommendation); `Portfolio/List.vue` calls it directly
|
|
40
|
+
since it has no fixed domain to wrap. `createPortfolioComposables.ts` deleted, fully absorbed.
|
|
41
|
+
|
|
42
|
+
### Missing `/blog` and `/portfolio` routes — resolved (design was misread, corrected by user)
|
|
43
|
+
|
|
44
|
+
Initial read: `content.vue`'s own demo page claimed _"the content layer provides default pages at
|
|
45
|
+
`/blog`, `/portfolio`, and `/gallery`... out of the box"_, but `layers/content` has no `app/pages/`
|
|
46
|
+
directory and the playground had no `/blog` or `/portfolio` routes — only `/gallery`.
|
|
47
|
+
|
|
48
|
+
**User correction**: the layer has never auto-registered routes — that was tried once and produced
|
|
49
|
+
stray unused pages, so it was deliberately rebuilt as components-only. "Out of the box with very
|
|
50
|
+
little coding" means each domain ships a `Page.vue` + `ItemPage.vue`/`SlugPage.vue` pair that the
|
|
51
|
+
consuming app copies into `app/pages/` as a 1–3 line wrapper — exactly what `gallery/index.vue` →
|
|
52
|
+
`<GalleryPage />` already does. The actual gap: `Portfolio` already had this `Page.vue`/
|
|
53
|
+
`ItemPage.vue` pair but the playground never copied the wrapper pages in; `Blog` didn't have the
|
|
54
|
+
pair built at all.
|
|
55
|
+
|
|
56
|
+
**Implemented**:
|
|
57
|
+
|
|
58
|
+
- Added `Blog/Page.vue` and `Blog/ItemPage.vue`, mirroring `Portfolio/Page.vue`/`ItemPage.vue`
|
|
59
|
+
exactly (`contentLayer.sections.blog` guard, `LayoutSection`/`LayoutGridItem` wrapper).
|
|
60
|
+
- Added the four thin playground route wrappers: `apps/playground/app/pages/blog/index.vue`,
|
|
61
|
+
`blog/[slug].vue`, `portfolio/index.vue`, `portfolio/[slug].vue` — same 1–3 line shape as the
|
|
62
|
+
existing `gallery/*` routes.
|
|
63
|
+
- Rewrote `content.vue`'s Architecture Note to describe the real, components-only/copy-in pattern
|
|
64
|
+
instead of the false "layer provides pages" claim.
|
|
65
|
+
|
|
66
|
+
### `content`: `app.config.ts` structural defect — fixed (6th instance of the repo-wide pattern)
|
|
67
|
+
|
|
68
|
+
Same defect as `core`/`layout`/`routing` (Tiers 0-2): bare `export default {...}`, augmentation
|
|
69
|
+
split into a separate `app/types/app-config.d.ts`. Fixed identically: `defineAppConfig()`, merged
|
|
70
|
+
`declare module` into the same file, deleted the `.d.ts`. `theme`'s own instance of this (Tier 1)
|
|
71
|
+
is still pending — not touched here.
|
|
72
|
+
|
|
73
|
+
## Confirmed correct, no action
|
|
74
|
+
|
|
75
|
+
- `content.config.ts` — all four collection schemas correctly mirrored into
|
|
76
|
+
`types/collections.d.ts`'s frontmatter augmentation, per the documented jiti constraint.
|
|
77
|
+
- `useContentData`, `useContentPage`, `useCollectionItem`, `useCollectionSurround` — real,
|
|
78
|
+
consumed, correctly layered.
|
|
79
|
+
- `NuxtContent/Detail.vue`, `NuxtContent/List.vue`, `NuxtContent/Surround.vue`, `NuxtContent/Toc.vue`
|
|
80
|
+
— real, well-built generic wrappers, correctly consumed by all three domains.
|
|
81
|
+
- `Gallery/Grid.vue`, `Gallery/Detail.vue`, `Gallery/ImageDetail.vue`, `Gallery/Lightbox.vue`,
|
|
82
|
+
`Gallery/Page.vue`, `Gallery/SlugPage.vue`, `Gallery/ImagePage.vue` — real, fully wired.
|
|
83
|
+
- `Portfolio/Detail.vue`, `Portfolio/ColorPalette.vue`, `Portfolio/Typography.vue`, `Blog/Article.vue`
|
|
84
|
+
— real, complete; now reachable via the routes added above.
|
|
85
|
+
- `content/Figure.vue` — MDC component invoked from markdown (`::figure`), not from Vue templates;
|
|
86
|
+
zero grep hits is expected and correct for this component category.
|
|
87
|
+
- `types/content.ts`, `types/collections.d.ts` — clean, kept in sync with `content.config.ts`.
|
|
88
|
+
- `nuxt-studio` conditional dev-only module load — real, deliberate optional peer dependency
|
|
89
|
+
pattern, correctly guarded.
|
|
90
|
+
|
|
91
|
+
## Consolidated action list (Tier 3)
|
|
92
|
+
|
|
93
|
+
- [x] Delete `layers/content/_jiti_test.ts`
|
|
94
|
+
- [x] Fix `content/app/app.config.ts` structural defect
|
|
95
|
+
- [x] Delete `useBlogPost.ts`, `useGalleryItem.ts`, `usePortfolioItem.ts`, `usePortfolioItems.ts`,
|
|
96
|
+
`createPortfolioComposables.ts`
|
|
97
|
+
- [x] Delete `Gallery/Card.vue`, `Gallery/AmbientImage.vue`, `Blog/Card.vue`, `Portfolio/Card.vue`,
|
|
98
|
+
`NuxtContent/Renderer.vue`
|
|
99
|
+
- [x] Build generic `useCollectionItems`; migrate `useBlogPosts`/`useGalleryItems`/
|
|
100
|
+
`Portfolio/List.vue` onto it
|
|
101
|
+
- [x] Add `Blog/Page.vue` + `Blog/ItemPage.vue`; wire `/blog` + `/portfolio` playground routes
|
|
102
|
+
- [x] Fix `content.vue`'s stale "provides default pages... out of the box" claim
|
|
103
|
+
|
|
104
|
+
Tier 3 is fully closed — nothing left open.
|
|
105
|
+
|
|
106
|
+
## Not yet covered
|
|
107
|
+
|
|
108
|
+
Tiers 4 (Data), 5 (Motion), 6 (Render), 7 (Delivery), and the Tier sub-layer/toggle mechanism
|
|
109
|
+
design are separate passes.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Layer Taxonomy Redesign — Part 4: Tier 4 (Data)
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
|
|
5
|
+
Forensic audit of `database`, `auth`, `metadata` (+ 4 providers: `comicvine`, `openlibrary`,
|
|
6
|
+
`google-books`, `themoviedb`), `forms`, `mailer`. Every real file read, every composable/route
|
|
7
|
+
traced to actual consumers via grep.
|
|
8
|
+
|
|
9
|
+
## Findings and resolution
|
|
10
|
+
|
|
11
|
+
### `mailer`: runtime-config augmentation split + wrong module — fixed
|
|
12
|
+
|
|
13
|
+
`mailer/nuxt.config.ts` declared `runtimeConfig.mailerLayer` but had no `declare module
|
|
14
|
+
'@nuxt/schema'` block at all. Instead `server/types.d.ts` augmented `declare module 'nitropack' {
|
|
15
|
+
interface NitroRuntimeConfig }` — a different ambient module than every other layer uses, and
|
|
16
|
+
still split into a separate file. `database` (same tier) shows the correct pattern: augmentation
|
|
17
|
+
inline in `nuxt.config.ts` targeting `@nuxt/schema`.
|
|
18
|
+
|
|
19
|
+
**Fixed**: moved the augmentation into `mailer/nuxt.config.ts` as `declare module '@nuxt/schema' {
|
|
20
|
+
interface RuntimeConfig }`, deleted `server/types.d.ts`.
|
|
21
|
+
|
|
22
|
+
### `forms`: app.config.ts structural defect — fixed (8th instance)
|
|
23
|
+
|
|
24
|
+
Same repeat defect as `core`/`layout`/`routing`/`content` (Tiers 0-3): bare `export default
|
|
25
|
+
{...}`, augmentation split into `app/types/app-config.d.ts`. Fixed identically:
|
|
26
|
+
`defineAppConfig()`, merged `declare module` into the same file, deleted the `.d.ts`.
|
|
27
|
+
`theme` and `shader`'s own instances of this are still pending — not this tier's layers.
|
|
28
|
+
|
|
29
|
+
### `metadata` providers: `type RuntimeConfig` instead of `interface RuntimeConfig` — fixed (real bug)
|
|
30
|
+
|
|
31
|
+
`comicvine`, `google-books`, `themoviedb`'s `nuxt.config.ts` each declared:
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
declare module '@nuxt/schema' {
|
|
35
|
+
type RuntimeConfig = { ... }
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
A `type` alias inside a `declare module` block does not merge with the ambient `RuntimeConfig`
|
|
40
|
+
interface the way `interface RuntimeConfig { ... }` does — every other augmented `RuntimeConfig` in
|
|
41
|
+
the repo (`database`, `mailer`) uses `interface`. With `typeCheck: false` this was silently
|
|
42
|
+
masked, but it's wrong and would break under a real typecheck (duplicate/non-merging declaration
|
|
43
|
+
of the same global name three times). `openlibrary` has no runtime config (public API, no key) so
|
|
44
|
+
it was unaffected.
|
|
45
|
+
|
|
46
|
+
**Fixed**: `type RuntimeConfig` → `interface RuntimeConfig` in all three.
|
|
47
|
+
|
|
48
|
+
## Confirmed correct, no action
|
|
49
|
+
|
|
50
|
+
- `database`: `useSql()`/`useDrizzle()` — minimal, correct, real. `nuxt.config.ts` augmentation
|
|
51
|
+
pattern is the reference example other layers should match.
|
|
52
|
+
- `auth`: `nuxt-auth-utils` + GitHub OAuth handler + opt-in `auth` middleware — real, correct,
|
|
53
|
+
appropriately thin (session/oauth runtimeConfig keys belong to the module, not custom, so no
|
|
54
|
+
augmentation needed).
|
|
55
|
+
- `metadata` core: `provider-registry.ts`, `cache.ts` (memory-storage `useStorage('metadata')`,
|
|
56
|
+
documented as non-persistent across restarts — acceptable for a demo/dev cache), `search.ts`
|
|
57
|
+
(parallel provider fan-out via `Promise.all` + per-provider try/catch + dedup + cache), all four
|
|
58
|
+
`server/api/metadata/*.get.ts`/`sync.post.ts` routes — real, correct, well-built.
|
|
59
|
+
- All four providers' `provider.ts`/`normalise.ts`/`types.ts` — real, correctly registered via
|
|
60
|
+
`server/plugins/*-register.ts`, correctly composed in the playground's `metadata.vue` (search,
|
|
61
|
+
provider registry list, live status check).
|
|
62
|
+
- `forms`: `useFormSchema`, `fieldConfigs` registry (`FieldType` derived from `keyof typeof`),
|
|
63
|
+
`Form/Contact.vue` + `Form/Field.vue`, `contact.post.ts` (rate-limited, hook-driven), all real
|
|
64
|
+
and correctly wired end to end (verified via the playground `/forms` and `/mailer` pages).
|
|
65
|
+
- `mailer`: `sendContactEmail`, `mailerLayerHooks` (hookable-based `contact:submitted/sent/failed`
|
|
66
|
+
hooks, consumed by `forms/server/api/contact.post.ts`) — real, correctly layered.
|
|
67
|
+
|
|
68
|
+
## Resolved this pass (user decision)
|
|
69
|
+
|
|
70
|
+
### `useMetadataSearch` — wired up, duplicate logic in the page deleted
|
|
71
|
+
|
|
72
|
+
User chose: wire the composable up rather than delete it. `useMetadataSearch` now takes
|
|
73
|
+
`mediaType`/`providers`/`limit` as `MaybeRef` and an optional `debounceMs` (default 300, via
|
|
74
|
+
`refDebounced` internally — closes the previously-flagged missing-debounce gap instead of leaving
|
|
75
|
+
it patched only at the call site). `metadata.vue` was migrated onto it: the manual
|
|
76
|
+
`refDebounced`/`$fetch`/loading/error state block is gone, replaced by
|
|
77
|
+
`useMetadataSearch(rawQuery, { mediaType, limit: 20 })` and `status`-derived `isLoading`/
|
|
78
|
+
`hasSearched`. Verified template usages (`results?.length`, `error.message`, `v-for="item in
|
|
79
|
+
results"`) still resolve correctly against the new `data`/`status`/`error` shape.
|
|
80
|
+
|
|
81
|
+
`useMetadataItem` remains unwired (no lookup/detail page exists) — user explicitly deferred that
|
|
82
|
+
decision (build a detail page vs. delete) rather than resolving it now. Still open.
|
|
83
|
+
|
|
84
|
+
## Open — needs a decision, not implemented this pass
|
|
85
|
+
|
|
86
|
+
### `useMetadataItem` — still no consumer
|
|
87
|
+
|
|
88
|
+
Deferred per above. Left in place, not deleted, pending a decision on whether a lookup/detail page
|
|
89
|
+
gets built for it.
|
|
90
|
+
|
|
91
|
+
### Provider error-handling divergence (confirmed, pre-existing finding; deferred, low severity)
|
|
92
|
+
|
|
93
|
+
`comicvine` (`status_code !== 1` check) and `tmdb` (try/catch wrapper) throw `MetadataProviderError`
|
|
94
|
+
from their client layer. `openlibrary` and `google-books` let raw `$fetch` errors propagate
|
|
95
|
+
unwrapped (except `openlibrary`'s `lookupByIsbn`, which swallows to `null`). Harmless on the
|
|
96
|
+
`/search` path — `searchMetadata()` already catches per-provider and degrades gracefully — but
|
|
97
|
+
`/lookup` and `/sync` have no top-level try/catch, so an openlibrary/google-books failure surfaces
|
|
98
|
+
as an opaque Nitro fetch error instead of a clean `MetadataProviderError`-shaped one. Low severity,
|
|
99
|
+
cosmetic-on-error-message only. Left open — fixing means adding the same try/catch wrapper to two
|
|
100
|
+
more clients, a bounded fix but not done here pending direction on the composable question above
|
|
101
|
+
(same investigation pass, similar size).
|
|
102
|
+
|
|
103
|
+
## Consolidated action list (Tier 4)
|
|
104
|
+
|
|
105
|
+
- [x] Fix `mailer/nuxt.config.ts` runtime-config augmentation (wrong module + split file)
|
|
106
|
+
- [x] Fix `forms/app/app.config.ts` structural defect (8th instance of the repeat pattern)
|
|
107
|
+
- [x] Fix `type RuntimeConfig` → `interface RuntimeConfig` in comicvine/google-books/tmdb
|
|
108
|
+
- [x] Wire `useMetadataSearch` into `metadata.vue` (with debounce fixed), delete duplicate logic
|
|
109
|
+
- [x] `useMetadataItem` — user decision: keep as-is, unwired. Intended as a standalone composable
|
|
110
|
+
for future projects to consume directly, not necessarily via a playground page. Not dead
|
|
111
|
+
code, not building a page for it.
|
|
112
|
+
- [x] Normalised openlibrary/google-books client error handling — wrapped `searchOpenLibrary`,
|
|
113
|
+
`lookupOpenLibraryWork`, `lookupOpenLibraryEdition`, `searchGoogleBooks`,
|
|
114
|
+
`fetchGoogleBooksVolume` in try/catch throwing `MetadataProviderError`, matching
|
|
115
|
+
comicvine/tmdb. Left `lookupByIsbn`'s swallow-to-null alone (deliberate not-found handling,
|
|
116
|
+
zero real callers either way).
|
|
117
|
+
|
|
118
|
+
## Not yet covered
|
|
119
|
+
|
|
120
|
+
Tiers 5 (Motion), 6 (Render), 7 (Delivery). Also still pending from earlier tiers: `theme`'s and
|
|
121
|
+
`shader`'s app.config.ts structural defects, and the larger deferred Tier 0-2 structural items
|
|
122
|
+
(ui-layer dissolution, `.mastmain` rename, `theme`→`theming` rename, typography font-prop system,
|
|
123
|
+
breakpoint token consolidation, `AppContainer` clamp() conversion, `compatibilityVersion: 5` flip,
|
|
124
|
+
`error.vue` real implementation, `starter` layer audit).
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Layer Taxonomy Redesign — Part 5: Tier 5 (Motion)
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
|
|
5
|
+
Forensic audit of `scroll`, `animations`, `transitions`, `page-transitions`, `motion`. Every
|
|
6
|
+
real file read, every composable/component traced to actual consumers via grep.
|
|
7
|
+
|
|
8
|
+
## Findings and resolution
|
|
9
|
+
|
|
10
|
+
### `scroll` app.config: dead `lenis`/`gsapScrollTrigger` keys — fixed (user decision)
|
|
11
|
+
|
|
12
|
+
`app/app.config.ts` declared a `lenis` options block (duration, orientation, smoothWheel, etc.)
|
|
13
|
+
and a `gsapScrollTrigger` flag. `locomotive-scroll.client.ts` never read either — it hardcodes
|
|
14
|
+
its own `lenisOptions` (`lerp`, `smoothWheel`, `wheelMultiplier`) directly in the
|
|
15
|
+
`new LocomotiveScroll(...)` call and always calls `ScrollTrigger.update()` unconditionally.
|
|
16
|
+
|
|
17
|
+
User's call: Locomotive Scroll v5 already wraps Lenis internally, so a separate top-level
|
|
18
|
+
`lenis` config key is redundant. **Fixed**: stripped `lenis` and `gsapScrollTrigger` from
|
|
19
|
+
`app.config.ts`, keeping only `smoothScroll` (the one key actually read, by
|
|
20
|
+
`useSmoothScroll.ts` and the plugin).
|
|
21
|
+
|
|
22
|
+
### `page-transitions`: reactive state never drove a real transition — fixed (user decision)
|
|
23
|
+
|
|
24
|
+
`usePageTransition()` / `page-transitions.client.ts` maintained a `page-transition:current`
|
|
25
|
+
`useState`, but nothing bound it to Nuxt's actual route-transition mechanism — no `:transition`
|
|
26
|
+
on `NuxtPage`, no `page-enter`/`page-leave` CSS. Real navigations never visually transitioned;
|
|
27
|
+
only the playground's `/page-transitions` demo page visualized the state via `MotionTransition`.
|
|
28
|
+
|
|
29
|
+
**Fixed**: added `layers/page-transitions/app/assets/css/page-transitions.css` (fade/slide/default
|
|
30
|
+
enter-leave classes, duration driven by a `--page-transition-duration` CSS custom property),
|
|
31
|
+
registered via `css:` in `nuxt.config.ts`. `usePageTransition()` now sets that CSS var reactively
|
|
32
|
+
via `watchEffect` (client-only). `apps/playground/app/app.vue` binds
|
|
33
|
+
`<NuxtPage :transition="{ name: transitionName, mode: 'out-in' }" />`, sourced from
|
|
34
|
+
`usePageTransition()`.
|
|
35
|
+
|
|
36
|
+
### `animations` missing `transitions` layer dependency — fixed (real bug)
|
|
37
|
+
|
|
38
|
+
`Motion/Staggered.vue` applies `animate-${animation}` classes that are only defined in the
|
|
39
|
+
`transitions` layer's CSS (`animate-fade-in`, `animate-slide-in-up`, etc.), but
|
|
40
|
+
`animations/nuxt.config.ts` only declared `extends: ['../scroll']` — not `transitions`. Relying
|
|
41
|
+
on the playground's load order to happen to also load `transitions` is exactly the anti-pattern
|
|
42
|
+
the repo's own `nuxt-layers.md` rule warns against. **Fixed**: `extends: ['../scroll',
|
|
43
|
+
'../transitions']`.
|
|
44
|
+
|
|
45
|
+
### `Motion/Staggered.vue`: `animation` prop default didn't match any real CSS class — fixed (real bug)
|
|
46
|
+
|
|
47
|
+
Default `animation = 'fadeIn'` produced class `animate-fadeIn`; the actual CSS (now confirmed
|
|
48
|
+
reachable per the fix above) only defines kebab-case classes (`animate-fade-in`,
|
|
49
|
+
`animate-slide-in-up`, ...). The mismatch was cosmetic in practice (the component's own
|
|
50
|
+
`.animated` rule unconditionally sets `opacity: 1` regardless of which named class matched), but
|
|
51
|
+
the specific keyframe animation silently never played. **Fixed**: default changed to `'fade-in'`,
|
|
52
|
+
prop doc comment clarifies it's a `transitions` layer `animate-*` suffix.
|
|
53
|
+
|
|
54
|
+
### `Motion/Marquee.vue`: dead commented-out `<style>` block — fixed
|
|
55
|
+
|
|
56
|
+
Trailing HTML comment held a fully-commented-out, stale `<style scoped>` block (superseded by
|
|
57
|
+
Tailwind utility classes already on the template). **Fixed**: deleted.
|
|
58
|
+
|
|
59
|
+
### `animations/app/types/` — dead duplicate type, unused alias — fixed
|
|
60
|
+
|
|
61
|
+
`types/animations.ts` exported `UseCountUpOptions`, but `useCountUp.ts` declares its own local
|
|
62
|
+
`UseCountUpOptions` and never imports the "shared" one — the exported type had zero consumers
|
|
63
|
+
anywhere in the repo (verified via grep), and the `#layers/animations/types` alias was also
|
|
64
|
+
unconsumed externally. **Fixed**: deleted `types/animations.ts` and `types/index.ts`, removed the
|
|
65
|
+
now-pointless alias entry from `nuxt.config.ts`. `useCountUp.ts`'s local type is untouched — one
|
|
66
|
+
producer, one consumer, no need for a shared export.
|
|
67
|
+
|
|
68
|
+
### `motion` layer: fictional README + dead stub component — fixed (user decision)
|
|
69
|
+
|
|
70
|
+
`motion/README.md` documented an API that has never existed in this layer: `useMotion`,
|
|
71
|
+
`useTransition`, `useAnimation` composables, a `$motion` plugin, `<MotionTransition>` and
|
|
72
|
+
`<MotionStaggered>` described as if built here (they're real, but live in `transitions` and
|
|
73
|
+
`animations` respectively). `motion/app/components/Motion/index.vue` was a dead stub (just
|
|
74
|
+
wraps `<slot />`) with zero consumers anywhere. `TASKS.MD` was an unrelated stray to-do note.
|
|
75
|
+
|
|
76
|
+
**Fixed**: rewrote `README.md` to describe `motion` accurately — a pure orchestrator with no
|
|
77
|
+
components/composables of its own, just an `extends` list, plus a table pointing at which real
|
|
78
|
+
layer provides what. Deleted the dead stub component and `TASKS.MD`. Left
|
|
79
|
+
`docs/MarqueeText.md` as-is — it's accurate, and `motion` is a reasonable place for
|
|
80
|
+
orchestrator-level consumer docs even though the component itself lives in `animations`.
|
|
81
|
+
|
|
82
|
+
## Confirmed correct, no action
|
|
83
|
+
|
|
84
|
+
- `scroll`: `useGsap`, `useSmoothScroll`, `useSectionProgress`, `useScrollSteps`,
|
|
85
|
+
`locomotive-scroll.client.ts`, `utils/scroll.ts` — all real, correctly cleaned up (GSAP
|
|
86
|
+
tweens/ScrollTriggers killed in `onUnmounted`, confirmed against prior-session fixes for the
|
|
87
|
+
HorizontalScroll/PinnedSection cleanup and FOUC bugs). All 8 `Motion/*` scroll components
|
|
88
|
+
(`HorizontalScroll`, `Parallax`, `PinnedSection`, `ScrollLink`, `ScrollProgress`,
|
|
89
|
+
`ScrollScene`, `ScrollStats`, `ScrollStep`) traced to real consumers in the playground
|
|
90
|
+
(`/scroll`, `/scrollytelling`, `/locomotive-scroll`, `/layout-blind-reveal`,
|
|
91
|
+
`/layout-stacking`, `/motion`).
|
|
92
|
+
- `animations`: `useMarqueeVelocity`, `useMarqueeCopies`, `useCountUp`, `useCursorFollower`,
|
|
93
|
+
`useMagneticElement`, `useTiltEffect`, `pointerMotion.ts` (shared spring-physics helper) — real,
|
|
94
|
+
correctly ticker-based (GSAP `gsap.ticker.add`/`remove` pairs, no leaks). All 9 `Motion/*`
|
|
95
|
+
components traced to consumers (`/animations`, `/motion`, `/motion-interactions`,
|
|
96
|
+
`/marquee-text`, `/locomotive-scroll`).
|
|
97
|
+
- `transitions`: `transitions.css` (transition/animation utility classes), `Motion/Transition.vue`
|
|
98
|
+
— real, consumed by `/transitions` and `/page-transitions`.
|
|
99
|
+
- `page-transitions`: `app.config.ts` structure already correct (colocated `declare module`,
|
|
100
|
+
8th-tier-audit pattern holds here without needing a fix).
|
|
101
|
+
- `motion`: `nuxt.config.ts` — correct orchestrator `extends` list, no runtime code of its own
|
|
102
|
+
beyond what was fixed above.
|
|
103
|
+
|
|
104
|
+
## Consolidated action list (Tier 5)
|
|
105
|
+
|
|
106
|
+
- [x] Strip dead `lenis`/`gsapScrollTrigger` keys from `scroll/app/app.config.ts`
|
|
107
|
+
- [x] Wire `usePageTransition` state to a real Nuxt page transition (CSS + `NuxtPage :transition`)
|
|
108
|
+
- [x] Add missing `transitions` dependency to `animations/nuxt.config.ts`
|
|
109
|
+
- [x] Fix `Motion/Staggered.vue`'s default `animation` prop to match real CSS class names
|
|
110
|
+
- [x] Delete dead commented-out `<style>` block in `Motion/Marquee.vue`
|
|
111
|
+
- [x] Delete unused `animations/app/types/` (dead duplicate type + unused alias)
|
|
112
|
+
- [x] Rewrite `motion/README.md`, delete dead `Motion/index.vue` stub and stray `TASKS.MD`
|
|
113
|
+
|
|
114
|
+
## Not yet covered
|
|
115
|
+
|
|
116
|
+
Tiers 6 (Render: `canvas`, `shader`), 7 (Delivery). Also still pending from earlier tiers:
|
|
117
|
+
`theme`'s and `shader`'s `app.config.ts` structural defects, `useMetadataItem`'s fate, the
|
|
118
|
+
openlibrary/google-books provider error-handling divergence, and the larger deferred Tier 0-2
|
|
119
|
+
structural items (ui-layer dissolution, `.mastmain` rename, `theme`→`theming` rename, typography
|
|
120
|
+
font-prop system, breakpoint token consolidation, `AppContainer` clamp() conversion,
|
|
121
|
+
`compatibilityVersion: 5` flip, `error.vue` real implementation, `starter` layer audit).
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Layer Taxonomy Redesign — Part 6: Tier 6 (Render)
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
|
|
5
|
+
Forensic audit of `canvas`, `shader`. Cleanup-only pass (per user direction after Tier 5): fix
|
|
6
|
+
dead code, structural defects, and stale docs — no new feature wiring. `shader` is large (150+
|
|
7
|
+
`Pipeline/*.client.vue` effect components) — sampled several rather than reading all, since they
|
|
8
|
+
follow one consistent, correct pattern (`useShaderStage`/`useShaderPipelineContext`, TSL node
|
|
9
|
+
composition, reactive `watch` → `uniform.value` sync).
|
|
10
|
+
|
|
11
|
+
## Findings and resolution
|
|
12
|
+
|
|
13
|
+
### `shader` app.config.ts structural defect — fixed (9th instance, worst yet)
|
|
14
|
+
|
|
15
|
+
`app/app.config.ts` was a bare object export (no `defineAppConfig()`), and the split
|
|
16
|
+
`app/types/app-config.d.ts` augmented a phantom `shaderLayer?: { name?: string }` shape that
|
|
17
|
+
doesn't even match the real config key (`shader: { preferWebGPU, maxPixelRatio, defaultQuality,
|
|
18
|
+
debugPanel, toneMapping }`) — worse than prior instances of this repeat pattern, since the type
|
|
19
|
+
augmentation was augmenting the wrong shape entirely. **Fixed**: `defineAppConfig()` wrapper,
|
|
20
|
+
correct inline `declare module` matching the real `shader` key, deleted `app-config.d.ts`.
|
|
21
|
+
|
|
22
|
+
### Two dead one-liner exports in `canvas` — deleted
|
|
23
|
+
|
|
24
|
+
`getQualitySettings()` and `useGlobalShaderTime()` (a global singleton wrapper around
|
|
25
|
+
`useShaderTime`) had zero consumers anywhere in the repo. **Fixed**: deleted both, removed the
|
|
26
|
+
now-unused `QualitySettings` type import from `useRendererCapabilities.ts`.
|
|
27
|
+
|
|
28
|
+
### `shader/AGENTS.MD` — stale, describes a structure that doesn't exist — fixed
|
|
29
|
+
|
|
30
|
+
Documented a `.tsl`/GLSL file-based shader structure (`vertexPlane.tsl`, `noise3D.tsl`, etc.)
|
|
31
|
+
that was never built — the real system is TSL-function-based `.ts` modules
|
|
32
|
+
(`shaders/common/*.ts`, `shaders/layers/*.ts`, `three/tsl` node functions). **Fixed**: rewrote to
|
|
33
|
+
a short, accurate structure map of the real `app/` tree.
|
|
34
|
+
|
|
35
|
+
## Left open (user decision — not implemented this pass)
|
|
36
|
+
|
|
37
|
+
### 8 shader composables with zero consumers
|
|
38
|
+
|
|
39
|
+
`useShaderFloat`, `useShaderVec2`, `useCSSColourUniform`, `useCSSFloatUniform`,
|
|
40
|
+
`useSunDirectionUniform`, `useShaderPerf`, `useTSLNodes`, and the whole `useUniforms.ts` file
|
|
41
|
+
(`useUniforms`/`useUniform`/`useColorUniform`/`useVector2Uniform`/`useVector3Uniform`) — all
|
|
42
|
+
well-built, none wired into any component. Real, actively-used equivalents exist alongside some
|
|
43
|
+
of them (`useShaderColor`, `useAmbientMaterials`, `useShaderMixBlend`, `useThemeColors`), which
|
|
44
|
+
suggested some of these are superseded scaffolding — but given the size of the shader library
|
|
45
|
+
(150+ components still growing) this could equally be toolkit-ahead-of-use rather than dead code.
|
|
46
|
+
**User's call: leave them, don't delete.** Not touched.
|
|
47
|
+
|
|
48
|
+
## Confirmed correct, no action
|
|
49
|
+
|
|
50
|
+
- `canvas`: `nuxt.config.ts` (Three.js WebGPU SSR stub via custom Vite plugin, TresJS module
|
|
51
|
+
config), `ShaderCanvas.vue`, `useRendererCapabilities` (renderer detection, `useAutoQuality`),
|
|
52
|
+
`useShaderTime`, `types/renderer.ts` — real, correctly consumed by `apps/playground/app/pages/canvas.vue`
|
|
53
|
+
and `shader.client.ts`.
|
|
54
|
+
- `shader`: `nuxt.config.ts`, `useShader`/`useBasicShader`/`useStandardShader` (node material
|
|
55
|
+
factory, cleanup-on-unmount), `useShaderRuntime`/`useShaderRuntimeContext` (provide/inject
|
|
56
|
+
global runtime), `useShaderPipeline`/`useShaderStage`/`useShaderPipelineContext` (provide/inject
|
|
57
|
+
stage registry, versioned for recompilation), `useUniformWatchers`'s `watchUniformProp`
|
|
58
|
+
(confirmed consumed by 7 `Material/*.client.vue` components), `useAmbientMaterials`,
|
|
59
|
+
`useShaderColor`/`useShaderMixBlend`/`useThemeColors`/`useThemePreset`/`useMousePosition` (all
|
|
60
|
+
confirmed real consumers), `shader.client.ts` plugin, `shader.css`, sampled `Pipeline/*`
|
|
61
|
+
components (`LinearGradient`, `UVRotate`) — consistent, correct pattern across the sample.
|
|
62
|
+
|
|
63
|
+
## Consolidated action list (Tier 6)
|
|
64
|
+
|
|
65
|
+
- [x] Fix `shader/app/app.config.ts` structural defect (9th instance, was augmenting the wrong shape)
|
|
66
|
+
- [x] Delete dead `getQualitySettings()`/`useGlobalShaderTime()` from `canvas`
|
|
67
|
+
- [x] Rewrite stale `shader/AGENTS.MD`
|
|
68
|
+
- [ ] 8 zero-consumer shader composables — left open, user chose not to delete
|
|
69
|
+
|
|
70
|
+
## Not yet covered
|
|
71
|
+
|
|
72
|
+
Tier 7 (Delivery). Also still pending from earlier tiers: `theme`'s `app.config.ts` structural
|
|
73
|
+
defect, `useMetadataItem`'s fate, openlibrary/google-books provider error-handling divergence,
|
|
74
|
+
and the larger deferred Tier 0-2 structural items (ui-layer dissolution, `.mastmain` rename,
|
|
75
|
+
`theme`→`theming` rename, typography font-prop system, breakpoint token consolidation,
|
|
76
|
+
`AppContainer` clamp() conversion, `compatibilityVersion: 5` flip, `error.vue` real
|
|
77
|
+
implementation, `starter` layer audit).
|