kmcom-nuxt-layers 2.2.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/layers/animations/app/components/Motion/CountUp.vue +30 -30
- package/layers/animations/app/components/Motion/Magnetic.vue +14 -14
- package/layers/animations/app/components/Motion/Marquee.vue +59 -62
- package/layers/animations/app/components/Motion/MarqueeText.vue +2 -2
- package/layers/animations/app/components/Motion/Staggered.vue +45 -49
- package/layers/animations/app/components/Motion/TextReveal.vue +21 -19
- package/layers/animations/app/components/Motion/Tilt.vue +13 -13
- package/layers/animations/app/components/Motion/VelocityEffect.vue +80 -80
- package/layers/animations/app/composables/useCountUp.ts +1 -1
- package/layers/animations/app/composables/useMarqueeVelocity.ts +2 -2
- package/layers/canvas/app/components/ShaderCanvas.vue +42 -49
- package/layers/canvas/app/composables/useRendererCapabilities.ts +29 -21
- package/layers/canvas/app/composables/useShaderTime.ts +4 -5
- package/layers/canvas/app/types/renderer.ts +5 -0
- package/layers/content/app/components/Blog/Article.vue +10 -7
- package/layers/content/app/components/Blog/Card.vue +0 -1
- package/layers/content/app/components/Blog/List.vue +2 -4
- package/layers/content/app/components/Gallery/AmbientImage.vue +0 -1
- package/layers/content/app/components/Gallery/Card.vue +0 -1
- package/layers/content/app/components/Gallery/Detail.vue +0 -2
- package/layers/content/app/components/Gallery/Grid.vue +0 -2
- package/layers/content/app/components/Gallery/ImageDetail.vue +0 -2
- package/layers/content/app/components/Gallery/Lightbox.vue +1 -6
- package/layers/content/app/components/NuxtContent/Detail.vue +3 -4
- package/layers/content/app/components/NuxtContent/List.vue +0 -1
- package/layers/content/app/components/NuxtContent/Surround.vue +0 -1
- package/layers/content/app/components/NuxtContent/Toc.vue +0 -1
- package/layers/content/app/components/Portfolio/Card.vue +0 -1
- package/layers/content/app/components/Portfolio/ColorPalette.vue +0 -1
- package/layers/content/app/components/Portfolio/Detail.vue +2 -4
- package/layers/content/app/components/Portfolio/ItemPage.vue +3 -1
- package/layers/content/app/components/Portfolio/List.vue +20 -5
- package/layers/content/app/components/Portfolio/Typography.vue +0 -1
- package/layers/content/app/components/content/Figure.vue +0 -1
- package/layers/content/app/composables/createPortfolioComposables.ts +21 -7
- package/layers/content/app/composables/useCollectionItem.ts +2 -3
- package/layers/content/app/composables/useCollectionSurround.ts +2 -3
- package/layers/content/app/composables/useContentPage.ts +0 -2
- package/layers/content/app/composables/useGalleryItems.ts +0 -2
- package/layers/content/app/composables/usePortfolioItems.ts +0 -2
- package/layers/content/app/types/app-config.d.ts +3 -1
- package/layers/content/app/types/collections.d.ts +46 -0
- package/layers/content/nuxt.config.ts +0 -1
- package/layers/core/app/components/ErrorBoundary.vue +0 -3
- package/layers/core/app/composables/useBrowser.ts +0 -1
- package/layers/core/app/composables/useCache.ts +0 -3
- package/layers/core/app/composables/useErrorLog.ts +0 -2
- package/layers/core/app/composables/useFeatures.ts +0 -3
- package/layers/core/app/composables/useLoading.ts +16 -15
- package/layers/core/app/composables/useNetworkInfo.ts +0 -2
- package/layers/core/app/composables/usePWAInfo.ts +0 -1
- package/layers/core/app/composables/useRendering.ts +0 -2
- package/layers/core/app/composables/useScreen.ts +0 -2
- package/layers/core/app/composables/useScrollGuard.ts +44 -44
- package/layers/core/app/layouts/default.vue +0 -1
- package/layers/core/app/plugins/error-handler.ts +4 -2
- package/layers/core/app/plugins/feature-detection.client.ts +4 -4
- package/layers/core/app/plugins/init.ts +4 -6
- package/layers/core/app/plugins/loading.client.ts +4 -3
- package/layers/core/app/plugins/scroll-guard.client.ts +4 -4
- package/layers/core/app/types/app-config.d.ts +1 -1
- package/layers/core/app/types/runtime-config.ts +13 -1
- package/layers/core/app/utils/helpers.ts +0 -4
- package/layers/feeds/app/app.config.ts +1 -1
- package/layers/feeds/app/plugins/feed-head.ts +4 -3
- package/layers/feeds/package.json +1 -1
- package/layers/forms/app/components/Form/Contact.vue +0 -2
- package/layers/forms/app/components/Form/Field.vue +0 -1
- package/layers/forms/app/composables/useFormSchema.ts +0 -1
- package/layers/forms/app/types/app-config.d.ts +1 -1
- package/layers/layout/app/components/Layout/Grid/Item.vue +0 -3
- package/layers/layout/app/components/Layout/Page/Container.vue +0 -4
- package/layers/layout/app/components/Layout/Page/Header.vue +0 -1
- package/layers/layout/app/components/Layout/Page/index.vue +0 -1
- package/layers/layout/app/components/Layout/Section/Gallery.vue +0 -1
- package/layers/layout/app/components/Layout/Section/Hero.vue +0 -3
- package/layers/layout/app/components/Layout/Section/Stack.vue +0 -3
- package/layers/layout/app/components/Layout/Section/Title.vue +0 -1
- package/layers/layout/app/composables/useGridConfig.ts +0 -1
- package/layers/layout/app/types/app-config.d.ts +6 -3
- package/layers/navigation/app/app.config.ts +1 -2
- package/layers/navigation/app/components/Links/Group.vue +0 -4
- package/layers/navigation/app/components/Links/Named.vue +0 -4
- package/layers/navigation/app/composables/mastNav.ts +0 -1
- package/layers/navigation/app/composables/toast.ts +0 -1
- package/layers/navigation/app/composables/useSite.ts +0 -1
- package/layers/navigation/app/utils/createModal.ts +0 -1
- package/layers/page-transitions/app/app.config.ts +1 -1
- package/layers/page-transitions/app/plugins/page-transitions.client.ts +4 -2
- package/layers/routing/app/composables/useRoutingConfig.ts +0 -1
- package/layers/routing/app/plugins/feature-flags.client.ts +4 -2
- package/layers/routing/app/plugins/scroll-routing.client.ts +4 -2
- package/layers/routing/app/types/app-config.d.ts +1 -2
- package/layers/routing/nuxt.config.ts +0 -1
- package/layers/scripts/app/app.config.ts +1 -2
- package/layers/scripts/app/composables/useAnalytics.ts +6 -6
- package/layers/scripts/app/composables/useGtm.ts +4 -4
- package/layers/scripts/app/composables/useScriptLoader.ts +12 -1
- package/layers/scroll/app/components/Motion/HorizontalScroll.vue +4 -1
- package/layers/scroll/app/components/Motion/Parallax.vue +38 -42
- package/layers/scroll/app/components/Motion/PinnedSection.vue +4 -1
- package/layers/scroll/app/components/Motion/ScrollLink.vue +26 -29
- package/layers/scroll/app/components/Motion/ScrollProgress.vue +38 -44
- package/layers/scroll/app/components/Motion/ScrollScene.vue +0 -1
- package/layers/scroll/app/components/Motion/ScrollStats.vue +19 -23
- package/layers/scroll/app/composables/useSmoothScroll.ts +21 -24
- package/layers/scroll/app/plugins/locomotive-scroll.client.ts +5 -2
- package/layers/seo/app/app.config.ts +0 -1
- package/layers/seo/app/composables/useSeoConfig.ts +0 -1
- package/layers/shader/app/components/Effect/PostProcessing.vue +3 -13
- package/layers/shader/app/components/Material/AmbientAurora.client.vue +41 -47
- package/layers/shader/app/components/Material/AmbientFlow.client.vue +47 -56
- package/layers/shader/app/components/Material/AmbientGradientMesh.client.vue +45 -51
- package/layers/shader/app/components/Material/AmbientNebula.client.vue +47 -53
- package/layers/shader/app/components/Material/AmbientOcean.client.vue +40 -46
- package/layers/shader/app/components/Material/Fresnel.client.vue +24 -29
- package/layers/shader/app/components/Material/Gradient.client.vue +61 -67
- package/layers/shader/app/components/Material/Image.client.vue +65 -71
- package/layers/shader/app/components/Material/Node.client.vue +46 -46
- package/layers/shader/app/components/Material/Noise.client.vue +48 -54
- package/layers/shader/app/components/Mesh/Plane.vue +15 -20
- package/layers/shader/app/components/Node/Color.client.vue +3 -4
- package/layers/shader/app/components/Node/Fresnel.client.vue +17 -26
- package/layers/shader/app/components/Node/Gradient.client.vue +36 -42
- package/layers/shader/app/components/Node/Mix.client.vue +13 -19
- package/layers/shader/app/components/Node/Noise.client.vue +0 -3
- package/layers/shader/app/components/Pipeline/ACESTonemap.client.vue +0 -2
- package/layers/shader/app/components/Pipeline/AddBlend.client.vue +15 -16
- package/layers/shader/app/components/Pipeline/AgedFilm.client.vue +27 -28
- package/layers/shader/app/components/Pipeline/Aurora.client.vue +37 -44
- package/layers/shader/app/components/Pipeline/BilinearGradient.client.vue +26 -33
- package/layers/shader/app/components/Pipeline/BillowNoise.client.vue +22 -23
- package/layers/shader/app/components/Pipeline/BrightnessContrast.client.vue +16 -20
- package/layers/shader/app/components/Pipeline/CellularNoise.client.vue +22 -23
- package/layers/shader/app/components/Pipeline/ChannelMixer.client.vue +28 -35
- package/layers/shader/app/components/Pipeline/ChebyshevNoiseField.client.vue +31 -31
- package/layers/shader/app/components/Pipeline/Checkerboard.client.vue +21 -23
- package/layers/shader/app/components/Pipeline/ChromaticAberration.client.vue +21 -23
- package/layers/shader/app/components/Pipeline/ChromaticScreenWaves.client.vue +31 -30
- package/layers/shader/app/components/Pipeline/Circle.client.vue +22 -23
- package/layers/shader/app/components/Pipeline/Clouds.client.vue +36 -43
- package/layers/shader/app/components/Pipeline/ColorBurnBlend.client.vue +15 -17
- package/layers/shader/app/components/Pipeline/ColorDodgeBlend.client.vue +15 -17
- package/layers/shader/app/components/Pipeline/ColourRamp.client.vue +28 -35
- package/layers/shader/app/components/Pipeline/ComplexPlaneField.client.vue +31 -38
- package/layers/shader/app/components/Pipeline/ConicGradient.client.vue +19 -21
- package/layers/shader/app/components/Pipeline/CosinePalette.client.vue +42 -49
- package/layers/shader/app/components/Pipeline/CoverageAlpha.client.vue +0 -4
- package/layers/shader/app/components/Pipeline/Cross.client.vue +28 -28
- package/layers/shader/app/components/Pipeline/CurlNoise.client.vue +26 -27
- package/layers/shader/app/components/Pipeline/DarkenBlend.client.vue +15 -17
- package/layers/shader/app/components/Pipeline/DayNightCycle.client.vue +26 -27
- package/layers/shader/app/components/Pipeline/Desaturate.client.vue +8 -15
- package/layers/shader/app/components/Pipeline/DiagonalGradient.client.vue +19 -21
- package/layers/shader/app/components/Pipeline/DiamondGradient.client.vue +19 -21
- package/layers/shader/app/components/Pipeline/DifferenceBlend.client.vue +15 -17
- package/layers/shader/app/components/Pipeline/DivideBlend.client.vue +14 -17
- package/layers/shader/app/components/Pipeline/DomainWarpedNoise.client.vue +30 -37
- package/layers/shader/app/components/Pipeline/Dots.client.vue +26 -33
- package/layers/shader/app/components/Pipeline/DuoTone.client.vue +16 -19
- package/layers/shader/app/components/Pipeline/ExclusionBlend.client.vue +14 -17
- package/layers/shader/app/components/Pipeline/ExponentialFog.client.vue +21 -23
- package/layers/shader/app/components/Pipeline/Exposure.client.vue +8 -15
- package/layers/shader/app/components/Pipeline/FBMNoise.client.vue +28 -36
- package/layers/shader/app/components/Pipeline/FilmBurn.client.vue +27 -28
- package/layers/shader/app/components/Pipeline/FilmGrain.client.vue +29 -29
- package/layers/shader/app/components/Pipeline/FisheyeRay.client.vue +11 -18
- package/layers/shader/app/components/Pipeline/Flame.client.vue +26 -27
- package/layers/shader/app/components/Pipeline/FocalGradient.client.vue +24 -25
- package/layers/shader/app/components/Pipeline/Gamma.client.vue +8 -14
- package/layers/shader/app/components/Pipeline/GodRays.client.vue +32 -39
- package/layers/shader/app/components/Pipeline/GradientNoise.client.vue +22 -22
- package/layers/shader/app/components/Pipeline/Grain.client.vue +34 -41
- package/layers/shader/app/components/Pipeline/Grid.client.vue +24 -24
- package/layers/shader/app/components/Pipeline/Halation.client.vue +22 -24
- package/layers/shader/app/components/Pipeline/Halftone.client.vue +16 -18
- package/layers/shader/app/components/Pipeline/HardLightBlend.client.vue +15 -16
- package/layers/shader/app/components/Pipeline/Haze.client.vue +22 -24
- package/layers/shader/app/components/Pipeline/Hexagon.client.vue +22 -22
- package/layers/shader/app/components/Pipeline/Hue.client.vue +8 -12
- package/layers/shader/app/components/Pipeline/Invert.client.vue +0 -1
- package/layers/shader/app/components/Pipeline/LensFlare.client.vue +27 -25
- package/layers/shader/app/components/Pipeline/LightenBlend.client.vue +15 -14
- package/layers/shader/app/components/Pipeline/LinearGradient.client.vue +17 -21
- package/layers/shader/app/components/Pipeline/LinearGradient4.client.vue +29 -33
- package/layers/shader/app/components/Pipeline/LinearToSRGB.client.vue +8 -12
- package/layers/shader/app/components/Pipeline/Marble.client.vue +41 -47
- package/layers/shader/app/components/Pipeline/MixBlend.client.vue +21 -27
- package/layers/shader/app/components/Pipeline/MonochromeTint.client.vue +16 -21
- package/layers/shader/app/components/Pipeline/MultiplyBlend.client.vue +15 -16
- package/layers/shader/app/components/Pipeline/NoisyGradient.client.vue +34 -40
- package/layers/shader/app/components/Pipeline/NoisyGradientBlend.client.vue +54 -60
- package/layers/shader/app/components/Pipeline/OverlayBlend.client.vue +15 -16
- package/layers/shader/app/components/Pipeline/PaperTexture.client.vue +22 -24
- package/layers/shader/app/components/Pipeline/Polygon.client.vue +32 -39
- package/layers/shader/app/components/Pipeline/Posterise.client.vue +8 -14
- package/layers/shader/app/components/Pipeline/RadialGradient.client.vue +18 -24
- package/layers/shader/app/components/Pipeline/RayAutoOrbit.client.vue +16 -18
- package/layers/shader/app/components/Pipeline/RayMouseOrbit.client.vue +16 -18
- package/layers/shader/app/components/Pipeline/RayRotateX.client.vue +8 -14
- package/layers/shader/app/components/Pipeline/RayRotateY.client.vue +8 -14
- package/layers/shader/app/components/Pipeline/RayRotateZ.client.vue +8 -14
- package/layers/shader/app/components/Pipeline/RayTiltBasis.client.vue +21 -22
- package/layers/shader/app/components/Pipeline/RaymarchTunnel.client.vue +34 -40
- package/layers/shader/app/components/Pipeline/Rectangle.client.vue +30 -36
- package/layers/shader/app/components/Pipeline/ReinhardTonemap.client.vue +0 -3
- package/layers/shader/app/components/Pipeline/RidgedNoise.client.vue +22 -22
- package/layers/shader/app/components/Pipeline/Ring.client.vue +26 -32
- package/layers/shader/app/components/Pipeline/RingField.client.vue +36 -33
- package/layers/shader/app/components/Pipeline/RisographGrain.client.vue +29 -35
- package/layers/shader/app/components/Pipeline/RotatedGradientBlend.client.vue +29 -35
- package/layers/shader/app/components/Pipeline/SDFColourMask.client.vue +15 -18
- package/layers/shader/app/components/Pipeline/SDFRadialMask.client.vue +16 -18
- package/layers/shader/app/components/Pipeline/SRGBToLinear.client.vue +8 -14
- package/layers/shader/app/components/Pipeline/Saturation.client.vue +8 -14
- package/layers/shader/app/components/Pipeline/Scanlines.client.vue +21 -22
- package/layers/shader/app/components/Pipeline/ScreenBlend.client.vue +15 -16
- package/layers/shader/app/components/Pipeline/ShaderDebugger.client.vue +28 -29
- package/layers/shader/app/components/Pipeline/SimplexNoise.client.vue +25 -32
- package/layers/shader/app/components/Pipeline/SkyAtmosphere.client.vue +37 -44
- package/layers/shader/app/components/Pipeline/SoftLightBlend.client.vue +15 -16
- package/layers/shader/app/components/Pipeline/SolidColour.client.vue +7 -16
- package/layers/shader/app/components/Pipeline/SplitTone.client.vue +27 -28
- package/layers/shader/app/components/Pipeline/Star.client.vue +31 -37
- package/layers/shader/app/components/Pipeline/Starfield.client.vue +29 -27
- package/layers/shader/app/components/Pipeline/Stripes.client.vue +28 -27
- package/layers/shader/app/components/Pipeline/SubtractBlend.client.vue +15 -16
- package/layers/shader/app/components/Pipeline/TanhTonemap.client.vue +8 -17
- package/layers/shader/app/components/Pipeline/Threshold.client.vue +8 -14
- package/layers/shader/app/components/Pipeline/Tint.client.vue +16 -18
- package/layers/shader/app/components/Pipeline/Triangle.client.vue +22 -22
- package/layers/shader/app/components/Pipeline/UVAspectCorrect.client.vue +0 -2
- package/layers/shader/app/components/Pipeline/UVBreath.client.vue +16 -18
- package/layers/shader/app/components/Pipeline/UVBulge.client.vue +16 -18
- package/layers/shader/app/components/Pipeline/UVClamp.client.vue +0 -3
- package/layers/shader/app/components/Pipeline/UVColumnOffset.client.vue +16 -18
- package/layers/shader/app/components/Pipeline/UVFlipX.client.vue +0 -3
- package/layers/shader/app/components/Pipeline/UVFlipXY.client.vue +0 -3
- package/layers/shader/app/components/Pipeline/UVFlipY.client.vue +0 -3
- package/layers/shader/app/components/Pipeline/UVFractBand.client.vue +16 -18
- package/layers/shader/app/components/Pipeline/UVMousePull.client.vue +8 -14
- package/layers/shader/app/components/Pipeline/UVNoiseRotate.client.vue +21 -27
- package/layers/shader/app/components/Pipeline/UVNoiseWarp.client.vue +21 -22
- package/layers/shader/app/components/Pipeline/UVOrbit.client.vue +8 -14
- package/layers/shader/app/components/Pipeline/UVParallax.client.vue +8 -18
- package/layers/shader/app/components/Pipeline/UVPixelate.client.vue +7 -14
- package/layers/shader/app/components/Pipeline/UVPulse.client.vue +16 -18
- package/layers/shader/app/components/Pipeline/UVRipple.client.vue +26 -26
- package/layers/shader/app/components/Pipeline/UVRotate.client.vue +16 -22
- package/layers/shader/app/components/Pipeline/UVScale.client.vue +16 -22
- package/layers/shader/app/components/Pipeline/UVScroll.client.vue +12 -18
- package/layers/shader/app/components/Pipeline/UVScrollX.client.vue +8 -14
- package/layers/shader/app/components/Pipeline/UVScrollY.client.vue +8 -14
- package/layers/shader/app/components/Pipeline/UVShear.client.vue +16 -18
- package/layers/shader/app/components/Pipeline/UVSineWarpXY.client.vue +18 -24
- package/layers/shader/app/components/Pipeline/UVSwapAxes.client.vue +0 -3
- package/layers/shader/app/components/Pipeline/UVTile.client.vue +12 -18
- package/layers/shader/app/components/Pipeline/UVTwirl.client.vue +16 -18
- package/layers/shader/app/components/Pipeline/UVWarp.client.vue +21 -22
- package/layers/shader/app/components/Pipeline/VHSBleed.client.vue +27 -28
- package/layers/shader/app/components/Pipeline/ValueNoise.client.vue +22 -22
- package/layers/shader/app/components/Pipeline/Vibrance.client.vue +11 -17
- package/layers/shader/app/components/Pipeline/Vignette.client.vue +14 -20
- package/layers/shader/app/components/Pipeline/VoronoiEdges.client.vue +29 -28
- package/layers/shader/app/components/Pipeline/Water.client.vue +31 -37
- package/layers/shader/app/components/Pipeline/WaveBendLayer.client.vue +26 -32
- package/layers/shader/app/components/Pipeline/WaveColourLayer.client.vue +37 -36
- package/layers/shader/app/components/Pipeline/WhiteBalance.client.vue +23 -26
- package/layers/shader/app/components/Pipeline/Wood.client.vue +34 -40
- package/layers/shader/app/components/Preset/Aurora.client.vue +0 -7
- package/layers/shader/app/components/Preset/Flow.client.vue +15 -23
- package/layers/shader/app/components/Preset/GradientMesh.client.vue +15 -23
- package/layers/shader/app/components/Preset/Nebula.client.vue +15 -25
- package/layers/shader/app/components/Preset/Ocean.client.vue +15 -24
- package/layers/shader/app/components/Preset/ThemeAurora.client.vue +38 -47
- package/layers/shader/app/components/Preset/ThemeBubble.client.vue +38 -47
- package/layers/shader/app/components/Preset/ThemeFlow.client.vue +38 -47
- package/layers/shader/app/components/Preset/ThemeGradient.client.vue +38 -47
- package/layers/shader/app/components/Preset/ThemeLavaLamp.client.vue +38 -47
- package/layers/shader/app/components/Preset/ThemePlasma.client.vue +38 -47
- package/layers/shader/app/components/Preset/ThemeWave.client.vue +38 -47
- package/layers/shader/app/components/Shader/Background.client.vue +109 -75
- package/layers/shader/app/components/Shader/Debug.vue +4 -14
- package/layers/shader/app/components/Shader/Host.client.vue +7 -9
- package/layers/shader/app/components/Shader/Material.client.vue +8 -20
- package/layers/shader/app/components/Shader/Pipeline.client.vue +0 -6
- package/layers/shader/app/components/Shader/Runtime.client.vue +0 -5
- package/layers/shader/app/composables/useAmbientMaterials.ts +4 -9
- package/layers/shader/app/composables/useCSSColourUniform.ts +0 -4
- package/layers/shader/app/composables/useCSSFloatUniform.ts +0 -3
- package/layers/shader/app/composables/useShader.ts +1 -4
- package/layers/shader/app/composables/useShaderColor.ts +4 -6
- package/layers/shader/app/composables/useShaderFloat.ts +1 -3
- package/layers/shader/app/composables/useShaderGraph.ts +4 -5
- package/layers/shader/app/composables/useShaderRuntime.ts +0 -5
- package/layers/shader/app/composables/useShaderVec2.ts +4 -8
- package/layers/shader/app/composables/useSunDirectionUniform.ts +0 -6
- package/layers/shader/app/composables/useThemeColors.ts +0 -1
- package/layers/shader/app/composables/useUniforms.ts +25 -9
- package/layers/shader/app/plugins/shader.client.ts +4 -3
- package/layers/shader/app/shaders/common/blend.ts +2 -4
- package/layers/shader/app/shaders/common/complex.ts +0 -2
- package/layers/shader/app/shaders/common/effects.ts +5 -13
- package/layers/shader/app/shaders/common/grain.ts +2 -7
- package/layers/shader/app/shaders/common/lighting.ts +0 -3
- package/layers/shader/app/shaders/common/math.ts +12 -8
- package/layers/shader/app/shaders/common/noise.ts +48 -48
- package/layers/shader/app/shaders/common/noiseHelpers.ts +6 -6
- package/layers/shader/app/shaders/common/palette.ts +10 -11
- package/layers/shader/app/shaders/common/patterns.ts +1 -4
- package/layers/shader/app/shaders/common/sdf.ts +11 -7
- package/layers/shader/app/shaders/common/shapes.ts +25 -15
- package/layers/shader/app/shaders/common/tonemapping.ts +0 -2
- package/layers/shader/app/shaders/common/uv.ts +20 -29
- package/layers/shader/app/shaders/createMaterial.ts +2 -5
- package/layers/shader/app/shaders/layers/aurora.ts +14 -17
- package/layers/shader/app/shaders/layers/meshGradient.ts +13 -16
- package/layers/shader/app/shaders/layers/paperShading.ts +15 -19
- package/layers/shader/app/shaders/layers/shaderGradient.ts +18 -23
- package/layers/shader/app/shaders/layers/stripe.ts +14 -17
- package/layers/shader/app/shaders/types.ts +9 -1
- package/layers/shader/app/types/app-config.d.ts +1 -1
- package/layers/shader/app/types/tsl.ts +0 -1
- package/layers/shader/app/types/uniforms.ts +0 -1
- package/layers/shader/app/utils/tsl/animation.ts +50 -52
- package/layers/shader/app/utils/tsl/color.ts +20 -19
- package/layers/shader/app/utils/tsl/noise.ts +10 -12
- package/layers/shader/app/utils/tsl/oklch.ts +6 -7
- package/layers/shader/app/utils/tsl/patterns.ts +4 -6
- package/layers/shader/app/utils/tsl/tween.ts +2 -4
- package/layers/shader/app/utils/tsl/uv.ts +6 -6
- package/layers/theme/app/components/ThemePicker/AccentButton.vue +1 -3
- package/layers/theme/app/components/ThemePicker/Colors.vue +0 -1
- package/layers/theme/app/composables/useAccentColor.ts +0 -1
- package/layers/theme/app/plugins/theme.client.ts +4 -3
- package/layers/theme/app/types/app-config.d.ts +1 -2
- package/layers/transitions/app/components/Motion/Transition.vue +15 -22
- package/layers/typography/app/components/Typography/CodeBlock.vue +16 -19
- package/layers/typography/app/components/Typography/Headline.vue +46 -49
- package/layers/typography/app/components/Typography/HeadlineScreen.vue +36 -40
- package/layers/typography/app/components/Typography/QuoteBlock.vue +3 -4
- package/layers/typography/app/components/Typography/TextStroke.vue +15 -20
- package/layers/typography/app/components/Typography/index.vue +0 -4
- package/layers/typography/app/composables/typography.ts +9 -11
- package/layers/visual/app/app.config.ts +1 -2
- package/layers/visual/app/components/Accent/Blob.vue +0 -3
- package/layers/visual/app/components/Accent/Scene.vue +12 -17
- package/layers/visual/app/components/Base/Modal.vue +0 -1
- package/layers/visual/app/components/Gradient/Background.vue +10 -13
- package/layers/visual/app/components/Gradient/Text.vue +10 -13
- package/layers/visual/app/components/Media/Picture.vue +0 -1
- package/layers/visual/app/components/Progress/Bar.vue +0 -1
- package/layers/visual/app/components/Progress/Circular.vue +0 -1
- package/layers/visual/app/components/Tint/Overlay.vue +0 -2
- package/layers/visual/app/composables/gradient.ts +6 -11
- package/layers/visual/app/composables/picture.ts +0 -1
- package/layers/visual/app/composables/tint.ts +0 -1
- package/layers/visual/app/types/media.ts +0 -1
- package/package.json +2 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frontmatter type augmentation for the content collections.
|
|
3
|
+
*
|
|
4
|
+
* The runtime schemas live in `content.config.ts` but are intentionally NOT
|
|
5
|
+
* passed to `defineCollection` (c12 initializes configs with jiti's
|
|
6
|
+
* `moduleCache: false`, so zod validators never initialize — see the layer
|
|
7
|
+
* docs). Nuxt Content therefore generates bare collection interfaces; this
|
|
8
|
+
* file adds the frontmatter fields so they stay typed. Keep in sync with the
|
|
9
|
+
* schemas in `content.config.ts`.
|
|
10
|
+
*/
|
|
11
|
+
import type { ContentAuthor, GalleryImage, PortfolioColor, PortfolioFont } from './content'
|
|
12
|
+
|
|
13
|
+
declare module '@nuxt/content' {
|
|
14
|
+
interface ContentCollectionItem {
|
|
15
|
+
image?: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface BlogCollectionItem {
|
|
19
|
+
date?: string
|
|
20
|
+
image?: string
|
|
21
|
+
authors?: ContentAuthor[]
|
|
22
|
+
tags?: string[]
|
|
23
|
+
badge?: string
|
|
24
|
+
draft?: boolean
|
|
25
|
+
readingTime?: number
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface PortfolioCollectionItem {
|
|
29
|
+
image?: string
|
|
30
|
+
tags?: string[]
|
|
31
|
+
client?: string
|
|
32
|
+
year?: number
|
|
33
|
+
url?: string
|
|
34
|
+
featured?: boolean
|
|
35
|
+
colors?: PortfolioColor[]
|
|
36
|
+
typography?: PortfolioFont[]
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
interface GalleryCollectionItem {
|
|
40
|
+
images?: GalleryImage[]
|
|
41
|
+
tags?: string[]
|
|
42
|
+
date?: string
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export {}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
/* eslint-disable no-restricted-syntax */
|
|
2
1
|
// composables/useLoading.ts
|
|
3
2
|
|
|
4
3
|
// Timer IDs are non-reactive and intentionally module-scope (singleton)
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
const _timers = {
|
|
5
|
+
progressInterval: null as ReturnType<typeof setInterval> | null,
|
|
6
|
+
progressTimeout: null as ReturnType<typeof setTimeout> | null,
|
|
7
|
+
}
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Loading state composable for app initialization and async operations
|
|
@@ -26,31 +27,31 @@ export function useLoading() {
|
|
|
26
27
|
isLoading.value = true
|
|
27
28
|
progress.value = 0
|
|
28
29
|
|
|
29
|
-
if (progressInterval) clearInterval(progressInterval)
|
|
30
|
-
if (progressTimeout) clearTimeout(progressTimeout)
|
|
30
|
+
if (_timers.progressInterval) clearInterval(_timers.progressInterval)
|
|
31
|
+
if (_timers.progressTimeout) clearTimeout(_timers.progressTimeout)
|
|
31
32
|
|
|
32
|
-
progressInterval = setInterval(() => {
|
|
33
|
+
_timers.progressInterval = setInterval(() => {
|
|
33
34
|
if (progress.value < 90) {
|
|
34
35
|
const increment = Math.random() * 5 + 3
|
|
35
36
|
progress.value = Math.min(progress.value + increment, 90)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
if (_timers.progressInterval) {
|
|
40
|
+
clearInterval(_timers.progressInterval)
|
|
41
|
+
_timers.progressInterval = null
|
|
41
42
|
}
|
|
42
43
|
}, 150)
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
function stopLoading(): void {
|
|
46
|
-
if (progressInterval) {
|
|
47
|
-
clearInterval(progressInterval)
|
|
48
|
-
progressInterval = null
|
|
47
|
+
if (_timers.progressInterval) {
|
|
48
|
+
clearInterval(_timers.progressInterval)
|
|
49
|
+
_timers.progressInterval = null
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
progress.value = 100
|
|
52
53
|
|
|
53
|
-
progressTimeout = setTimeout(() => {
|
|
54
|
+
_timers.progressTimeout = setTimeout(() => {
|
|
54
55
|
isLoading.value = false
|
|
55
56
|
}, 100)
|
|
56
57
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/* eslint-disable no-restricted-syntax */
|
|
2
1
|
// composables/useScrollGuard.ts
|
|
3
2
|
|
|
4
3
|
import type { ScrollGuardConfig } from '#layers/core/app/types/scroll-guard'
|
|
@@ -22,16 +21,17 @@ const clampedElements = new WeakMap<HTMLElement, SavedStyles>()
|
|
|
22
21
|
/** Live set so we can iterate and restore on disable */
|
|
23
22
|
const clampedSet = new Set<HTMLElement>()
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
24
|
+
// Singleton DOM tracking (non-reactive, client-only)
|
|
25
|
+
const _s = {
|
|
26
|
+
observer: null as MutationObserver | null,
|
|
27
|
+
debouncedGuard: null as (() => void) | null,
|
|
28
|
+
resizeHandler: null as (() => void) | null,
|
|
29
|
+
savedHtmlOverflowX: '',
|
|
30
|
+
savedBodyOverflowX: '',
|
|
31
|
+
savedBodyMaxWidth: '',
|
|
32
|
+
savedBodyTransition: '',
|
|
33
|
+
opts: null as ScrollGuardConfig | null,
|
|
34
|
+
}
|
|
35
35
|
|
|
36
36
|
// ---------------------------------------------------------------------------
|
|
37
37
|
// Composable
|
|
@@ -58,8 +58,8 @@ export function useScrollGuard() {
|
|
|
58
58
|
const clampedCount = useState('core:scroll-guard:clamped', () => 0)
|
|
59
59
|
|
|
60
60
|
function shouldExclude(el: HTMLElement): boolean {
|
|
61
|
-
if (!opts) return true
|
|
62
|
-
return opts.excludeSelectors.some((sel) => {
|
|
61
|
+
if (!_s.opts) return true
|
|
62
|
+
return _s.opts.excludeSelectors.some((sel) => {
|
|
63
63
|
try {
|
|
64
64
|
return el.matches(sel)
|
|
65
65
|
} catch {
|
|
@@ -69,7 +69,7 @@ export function useScrollGuard() {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
function clampElement(el: HTMLElement) {
|
|
72
|
-
if (!opts || clampedElements.has(el) || shouldExclude(el)) return
|
|
72
|
+
if (!_s.opts || clampedElements.has(el) || shouldExclude(el)) return
|
|
73
73
|
if (el.scrollWidth <= window.innerWidth) return
|
|
74
74
|
|
|
75
75
|
clampedElements.set(el, {
|
|
@@ -80,11 +80,11 @@ export function useScrollGuard() {
|
|
|
80
80
|
})
|
|
81
81
|
clampedSet.add(el)
|
|
82
82
|
|
|
83
|
-
el.style.transition = `max-width ${opts.transitionDuration}ms ease`
|
|
83
|
+
el.style.transition = `max-width ${_s.opts.transitionDuration}ms ease`
|
|
84
84
|
el.style.maxWidth = '100%'
|
|
85
85
|
el.style.boxSizing = 'border-box'
|
|
86
86
|
|
|
87
|
-
if (opts.debug) {
|
|
87
|
+
if (_s.opts.debug) {
|
|
88
88
|
el.style.outline = '2px dashed red'
|
|
89
89
|
setTimeout(() => {
|
|
90
90
|
el.style.outline = ''
|
|
@@ -95,7 +95,7 @@ export function useScrollGuard() {
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
function guard() {
|
|
98
|
-
if (!isEnabled.value || !opts) return
|
|
98
|
+
if (!isEnabled.value || !_s.opts) return
|
|
99
99
|
|
|
100
100
|
const html = document.documentElement
|
|
101
101
|
const body = document.body
|
|
@@ -104,7 +104,7 @@ export function useScrollGuard() {
|
|
|
104
104
|
body.style.overflowX = 'clip'
|
|
105
105
|
body.style.maxWidth = '100vw'
|
|
106
106
|
|
|
107
|
-
if (!opts.strict) return
|
|
107
|
+
if (!_s.opts.strict) return
|
|
108
108
|
|
|
109
109
|
const elements = document.body.querySelectorAll<HTMLElement>('*')
|
|
110
110
|
for (const el of elements) {
|
|
@@ -115,10 +115,10 @@ export function useScrollGuard() {
|
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
function startObservers() {
|
|
118
|
-
if (!opts) return
|
|
118
|
+
if (!_s.opts) return
|
|
119
119
|
|
|
120
|
-
observer = new MutationObserver((mutations) => {
|
|
121
|
-
if (!isEnabled.value || !opts?.strict) return
|
|
120
|
+
_s.observer = new MutationObserver((mutations) => {
|
|
121
|
+
if (!isEnabled.value || !_s.opts?.strict) return
|
|
122
122
|
for (const m of mutations) {
|
|
123
123
|
for (const node of m.addedNodes) {
|
|
124
124
|
if (node instanceof HTMLElement) {
|
|
@@ -130,22 +130,22 @@ export function useScrollGuard() {
|
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
})
|
|
133
|
-
observer.observe(document.body, { childList: true, subtree: true })
|
|
133
|
+
_s.observer.observe(document.body, { childList: true, subtree: true })
|
|
134
134
|
|
|
135
|
-
debouncedGuard = debounce(guard, opts.resizeDebounce)
|
|
136
|
-
resizeHandler = debouncedGuard
|
|
137
|
-
window.addEventListener('resize', resizeHandler)
|
|
135
|
+
_s.debouncedGuard = debounce(guard, _s.opts.resizeDebounce)
|
|
136
|
+
_s.resizeHandler = _s.debouncedGuard
|
|
137
|
+
window.addEventListener('resize', _s.resizeHandler)
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
function stopObservers() {
|
|
141
|
-
if (observer) {
|
|
142
|
-
observer.disconnect()
|
|
143
|
-
observer = null
|
|
141
|
+
if (_s.observer) {
|
|
142
|
+
_s.observer.disconnect()
|
|
143
|
+
_s.observer = null
|
|
144
144
|
}
|
|
145
|
-
if (resizeHandler) {
|
|
146
|
-
window.removeEventListener('resize', resizeHandler)
|
|
147
|
-
resizeHandler = null
|
|
148
|
-
debouncedGuard = null
|
|
145
|
+
if (_s.resizeHandler) {
|
|
146
|
+
window.removeEventListener('resize', _s.resizeHandler)
|
|
147
|
+
_s.resizeHandler = null
|
|
148
|
+
_s.debouncedGuard = null
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
|
|
@@ -165,10 +165,10 @@ export function useScrollGuard() {
|
|
|
165
165
|
|
|
166
166
|
const html = document.documentElement
|
|
167
167
|
const body = document.body
|
|
168
|
-
html.style.overflowX = savedHtmlOverflowX
|
|
169
|
-
body.style.overflowX = savedBodyOverflowX
|
|
170
|
-
body.style.maxWidth = savedBodyMaxWidth
|
|
171
|
-
body.style.transition = savedBodyTransition
|
|
168
|
+
html.style.overflowX = _s.savedHtmlOverflowX
|
|
169
|
+
body.style.overflowX = _s.savedBodyOverflowX
|
|
170
|
+
body.style.maxWidth = _s.savedBodyMaxWidth
|
|
171
|
+
body.style.transition = _s.savedBodyTransition
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
function enable(config?: Partial<ScrollGuardConfig>) {
|
|
@@ -180,7 +180,7 @@ export function useScrollGuard() {
|
|
|
180
180
|
appConfig.coreLayer as { scrollGuard?: Partial<ScrollGuardConfig> } | undefined
|
|
181
181
|
)?.scrollGuard
|
|
182
182
|
|
|
183
|
-
opts = {
|
|
183
|
+
_s.opts = {
|
|
184
184
|
enabled: true,
|
|
185
185
|
excludeSelectors: ['.carousel', '.overflow-intent'],
|
|
186
186
|
strict: true,
|
|
@@ -193,10 +193,10 @@ export function useScrollGuard() {
|
|
|
193
193
|
|
|
194
194
|
const html = document.documentElement
|
|
195
195
|
const body = document.body
|
|
196
|
-
savedHtmlOverflowX = html.style.overflowX
|
|
197
|
-
savedBodyOverflowX = body.style.overflowX
|
|
198
|
-
savedBodyMaxWidth = body.style.maxWidth
|
|
199
|
-
savedBodyTransition = body.style.transition
|
|
196
|
+
_s.savedHtmlOverflowX = html.style.overflowX
|
|
197
|
+
_s.savedBodyOverflowX = body.style.overflowX
|
|
198
|
+
_s.savedBodyMaxWidth = body.style.maxWidth
|
|
199
|
+
_s.savedBodyTransition = body.style.transition
|
|
200
200
|
|
|
201
201
|
isEnabled.value = true
|
|
202
202
|
guard()
|
|
@@ -210,15 +210,15 @@ export function useScrollGuard() {
|
|
|
210
210
|
isEnabled.value = false
|
|
211
211
|
stopObservers()
|
|
212
212
|
restoreAll()
|
|
213
|
-
opts = null
|
|
213
|
+
_s.opts = null
|
|
214
214
|
}
|
|
215
215
|
|
|
216
216
|
function toggle() {
|
|
217
217
|
if (isEnabled.value) {
|
|
218
218
|
disable()
|
|
219
|
-
|
|
220
|
-
enable()
|
|
219
|
+
return
|
|
221
220
|
}
|
|
221
|
+
enable()
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
function scan() {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export default defineNuxtPlugin({
|
|
2
|
+
name: 'core:error-handler',
|
|
3
|
+
setup(nuxtApp) {
|
|
3
4
|
const { logError } = useErrorLog()
|
|
4
5
|
|
|
5
6
|
// Global Vue error handler
|
|
@@ -44,4 +45,5 @@ export default defineNuxtPlugin((nuxtApp) => {
|
|
|
44
45
|
console.log('✅ Error cleared')
|
|
45
46
|
}
|
|
46
47
|
})
|
|
48
|
+
},
|
|
47
49
|
})
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/* eslint-disable no-restricted-syntax */
|
|
2
|
-
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
3
|
-
// @ts-nocheck
|
|
4
1
|
// plugins/feature-detection.client.ts
|
|
5
2
|
|
|
6
3
|
/**
|
|
@@ -14,7 +11,9 @@
|
|
|
14
11
|
* This ensures feature detection happens automatically on every page load,
|
|
15
12
|
* making feature flags available immediately to all components.
|
|
16
13
|
*/
|
|
17
|
-
export default defineNuxtPlugin(
|
|
14
|
+
export default defineNuxtPlugin({
|
|
15
|
+
name: 'core:feature-detection',
|
|
16
|
+
setup() {
|
|
18
17
|
// Initialize feature detection
|
|
19
18
|
const features = useFeatures()
|
|
20
19
|
|
|
@@ -31,4 +30,5 @@ export default defineNuxtPlugin(() => {
|
|
|
31
30
|
avif: features.avif.value,
|
|
32
31
|
})
|
|
33
32
|
}
|
|
33
|
+
},
|
|
34
34
|
})
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/* eslint-disable complexity */
|
|
2
|
-
/* eslint-disable @typescript-eslint/consistent-type-assertions */
|
|
3
|
-
/* eslint-disable no-restricted-syntax */
|
|
4
|
-
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
5
|
-
// @ts-nocheck
|
|
6
1
|
/**
|
|
7
2
|
* Core Layer Initialization Plugin
|
|
8
3
|
*
|
|
@@ -14,7 +9,9 @@
|
|
|
14
9
|
*
|
|
15
10
|
* This runs before other plugins and ensures the app is ready.
|
|
16
11
|
*/
|
|
17
|
-
export default defineNuxtPlugin(
|
|
12
|
+
export default defineNuxtPlugin({
|
|
13
|
+
name: 'core:init',
|
|
14
|
+
setup(nuxtApp) {
|
|
18
15
|
const config = useAppConfig()
|
|
19
16
|
// const isDev = import.meta.dev
|
|
20
17
|
const isDev = process.env.NODE_ENV === 'development'
|
|
@@ -177,4 +174,5 @@ export default defineNuxtPlugin((nuxtApp) => {
|
|
|
177
174
|
},
|
|
178
175
|
},
|
|
179
176
|
}
|
|
177
|
+
},
|
|
180
178
|
})
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/consistent-type-assertions */
|
|
2
|
-
/* eslint-disable no-restricted-syntax */
|
|
3
1
|
// plugins/loading.client.ts
|
|
4
2
|
|
|
5
3
|
type LoadingConfig = {
|
|
@@ -25,7 +23,9 @@ type CoreLayerConfig = {
|
|
|
25
23
|
* Configuration via app.config.ts:
|
|
26
24
|
* - Set `coreLayer.loading.enabled: false` to disable
|
|
27
25
|
*/
|
|
28
|
-
export default defineNuxtPlugin(
|
|
26
|
+
export default defineNuxtPlugin({
|
|
27
|
+
name: 'core:loading',
|
|
28
|
+
setup(nuxtApp) {
|
|
29
29
|
const config = useAppConfig()
|
|
30
30
|
const coreLayer = config.coreLayer as CoreLayerConfig | undefined
|
|
31
31
|
|
|
@@ -53,4 +53,5 @@ export default defineNuxtPlugin((nuxtApp) => {
|
|
|
53
53
|
stopLoading()
|
|
54
54
|
}, 500) // 500ms delay to ensure component is visible
|
|
55
55
|
})
|
|
56
|
+
},
|
|
56
57
|
})
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/* eslint-disable complexity */
|
|
2
|
-
/* eslint-disable @typescript-eslint/consistent-type-assertions */
|
|
3
|
-
/* eslint-disable no-restricted-syntax */
|
|
4
1
|
// plugins/scroll-guard.client.ts
|
|
5
2
|
|
|
6
3
|
import type { ScrollGuardConfig } from '#layers/core/app/types/scroll-guard'
|
|
@@ -23,7 +20,9 @@ type CoreLayerConfig = {
|
|
|
23
20
|
* - `useScrollGuard().disable()` to turn off
|
|
24
21
|
* - `useScrollGuard().enable()` to turn back on
|
|
25
22
|
*/
|
|
26
|
-
export default defineNuxtPlugin(
|
|
23
|
+
export default defineNuxtPlugin({
|
|
24
|
+
name: 'core:scroll-guard',
|
|
25
|
+
setup() {
|
|
27
26
|
const config = useAppConfig()
|
|
28
27
|
const coreLayer = config.coreLayer as CoreLayerConfig | undefined
|
|
29
28
|
|
|
@@ -53,4 +52,5 @@ export default defineNuxtPlugin(() => {
|
|
|
53
52
|
console.log(`[Scroll Guard] Clamped ${clampedCount.value} element(s)`)
|
|
54
53
|
})
|
|
55
54
|
}
|
|
55
|
+
},
|
|
56
56
|
})
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { SiteConfig } from './site'
|
|
2
2
|
|
|
3
3
|
declare module '@nuxt/schema' {
|
|
4
|
-
|
|
4
|
+
interface AppConfigInput {
|
|
5
5
|
/** Shared site metadata — consumed by feeds, SEO, and any layer needing canonical site info. */
|
|
6
6
|
site?: SiteConfig
|
|
7
7
|
coreLayer?: {
|
|
@@ -25,7 +25,19 @@ export type CoreLayerRuntimeConfig = {
|
|
|
25
25
|
* Augment Nuxt's RuntimeConfig
|
|
26
26
|
*/
|
|
27
27
|
declare module 'nuxt/schema' {
|
|
28
|
-
|
|
28
|
+
interface RuntimeConfig {
|
|
29
|
+
secretKey?: string
|
|
30
|
+
apiSecretKey?: string
|
|
31
|
+
databaseUrl?: string
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
interface PublicRuntimeConfig {
|
|
35
|
+
apiUrl?: string
|
|
36
|
+
appName?: string
|
|
37
|
+
appVersion?: string
|
|
38
|
+
environment?: 'development' | 'staging' | 'production'
|
|
39
|
+
siteUrl?: string
|
|
40
|
+
}
|
|
29
41
|
}
|
|
30
42
|
|
|
31
43
|
export {}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export default defineNuxtPlugin({
|
|
2
|
+
name: 'feeds:feed-head',
|
|
3
|
+
setup() {
|
|
4
4
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5
5
|
const appConfig = useAppConfig() as any
|
|
6
6
|
const site = appConfig.site ?? {}
|
|
@@ -70,4 +70,5 @@ export default defineNuxtPlugin(() => {
|
|
|
70
70
|
|
|
71
71
|
return { link: [...mainLinks, ...collectionLinks] }
|
|
72
72
|
})
|
|
73
|
+
},
|
|
73
74
|
})
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
<!-- eslint-disable vue/no-boolean-default vue/no-duplicate-attr-inheritance -->
|
|
2
|
-
<!-- eslint-disable vue/no-duplicate-attr-inheritance -->
|
|
3
|
-
<!-- eslint-disable vue/require-default-prop -->
|
|
4
1
|
<script setup lang="ts">
|
|
5
2
|
/**
|
|
6
3
|
* PageContainer - Unified page wrapper component
|
|
@@ -98,7 +95,6 @@
|
|
|
98
95
|
<!-- UPage Layout Mode - needs wrapper with MastMain -->
|
|
99
96
|
<div v-else>
|
|
100
97
|
<MastMain>
|
|
101
|
-
<!-- eslint-disable-next-line vue/no-duplicate-attr-inheritance -->
|
|
102
98
|
<UPage v-bind="$attrs">
|
|
103
99
|
<slot />
|
|
104
100
|
</UPage>
|