kmcom-nuxt-layers 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/rules/nuxt-layers.md +23 -0
- package/.claude/rules/typescript.md +16 -0
- package/.claude/rules/vue-components.md +34 -0
- package/.claude/settings.local.json +81 -0
- package/.editorconfig +27 -0
- package/.github/workflows/npm-publish.yml +33 -0
- package/.oxlintrc.json +10 -0
- package/.prettierignore +87 -0
- package/CLAUDE.md +71 -0
- package/apps/playground/README.md +75 -0
- package/apps/playground/app/app.config.ts +10 -0
- package/apps/playground/app/app.vue +12 -0
- package/apps/playground/app/components/AmbientBackground.client.vue +795 -0
- package/apps/playground/app/components/ShaderDemoCanvas.client.vue +636 -0
- package/apps/playground/app/components/ShaderImageDemo.client.vue +211 -0
- package/apps/playground/app/pages/ambient.vue +387 -0
- package/apps/playground/app/pages/content.vue +200 -0
- package/apps/playground/app/pages/core.vue +560 -0
- package/apps/playground/app/pages/forms.vue +645 -0
- package/apps/playground/app/pages/index.vue +257 -0
- package/apps/playground/app/pages/layout.vue +591 -0
- package/apps/playground/app/pages/locomotive-scroll.vue +738 -0
- package/apps/playground/app/pages/motion.vue +848 -0
- package/apps/playground/app/pages/shader.vue +1701 -0
- package/apps/playground/app/pages/theme.vue +115 -0
- package/apps/playground/app/pages/ui.vue +656 -0
- package/apps/playground/content/blog/hello-world.md +127 -0
- package/apps/playground/content/blog/second-post.md +99 -0
- package/apps/playground/content/blog/third-post.md +33 -0
- package/apps/playground/content/gallery/autumn-collection.md +57 -0
- package/apps/playground/content/gallery/summer-collection.md +52 -0
- package/apps/playground/content/pages/index.md +132 -0
- package/apps/playground/content/portfolio/project-one.md +90 -0
- package/apps/playground/content/portfolio/project-two.md +96 -0
- package/apps/playground/content.config.ts +93 -0
- package/apps/playground/nuxt.config.ts +99 -0
- package/apps/playground/package.json +17 -0
- package/apps/playground/public/favicon.ico +0 -0
- package/apps/playground/public/robots.txt +2 -0
- package/apps/playground/tsconfig.json +25 -0
- package/eslint.config.mjs +223 -0
- package/eslint.configCOPY.mjs +216 -0
- package/eslintconfigCURRENT.mjs +244 -0
- package/eslintconfigOLD.mjs +178 -0
- package/files for claude/Scroller.vue +31 -0
- package/files for claude/TextMarquee.vue +255 -0
- package/files for claude/gsap.client.ts +18 -0
- package/files for claude/gsap.ts +10 -0
- package/files for claude/scroll.ts +28 -0
- package/layers/content/app/assets/css/main.css +1 -0
- package/layers/content/app/components/Blog/Article.vue +29 -0
- package/layers/content/app/components/Blog/Card.vue +40 -0
- package/layers/content/app/components/Blog/List.vue +35 -0
- package/layers/content/app/components/Gallery/AmbientImage.vue +52 -0
- package/layers/content/app/components/Gallery/Card.vue +39 -0
- package/layers/content/app/components/Gallery/Detail.vue +76 -0
- package/layers/content/app/components/Gallery/Grid.vue +48 -0
- package/layers/content/app/components/Gallery/ImageDetail.vue +92 -0
- package/layers/content/app/components/Gallery/Lightbox.vue +102 -0
- package/layers/content/app/components/NuxtContent/Detail.vue +53 -0
- package/layers/content/app/components/NuxtContent/List.vue +21 -0
- package/layers/content/app/components/NuxtContent/Renderer.vue +14 -0
- package/layers/content/app/components/NuxtContent/Surround.vue +15 -0
- package/layers/content/app/components/NuxtContent/Toc.vue +18 -0
- package/layers/content/app/components/Portfolio/Card.vue +39 -0
- package/layers/content/app/components/Portfolio/ColorPalette.vue +39 -0
- package/layers/content/app/components/Portfolio/Detail.vue +49 -0
- package/layers/content/app/components/Portfolio/List.vue +44 -0
- package/layers/content/app/components/Portfolio/Typography.vue +37 -0
- package/layers/content/app/components/content/Figure.vue +31 -0
- package/layers/content/app/composables/useBlogPost.ts +3 -0
- package/layers/content/app/composables/useBlogPosts.ts +23 -0
- package/layers/content/app/composables/useCollectionItem.ts +5 -0
- package/layers/content/app/composables/useCollectionSurround.ts +9 -0
- package/layers/content/app/composables/useContentPage.ts +3 -0
- package/layers/content/app/composables/useGalleryItem.ts +3 -0
- package/layers/content/app/composables/useGalleryItems.ts +19 -0
- package/layers/content/app/composables/usePortfolioItem.ts +3 -0
- package/layers/content/app/composables/usePortfolioItems.ts +23 -0
- package/layers/content/app/pages/blog/[slug].vue +10 -0
- package/layers/content/app/pages/blog/index.vue +15 -0
- package/layers/content/app/pages/gallery/[slug]/[imageId].vue +11 -0
- package/layers/content/app/pages/gallery/[slug]/index.vue +10 -0
- package/layers/content/app/pages/gallery/index.vue +15 -0
- package/layers/content/app/pages/portfolio/[slug].vue +10 -0
- package/layers/content/app/pages/portfolio/index.vue +15 -0
- package/layers/content/app/types/content.ts +84 -0
- package/layers/content/app.config.ts +12 -0
- package/layers/content/content.config.ts +93 -0
- package/layers/content/nuxt.config.ts +31 -0
- package/layers/content/package.json +31 -0
- package/layers/content/tsconfig.json +6 -0
- package/layers/core/app/assets/css/base.css +88 -0
- package/layers/core/app/assets/css/layout.css +36 -0
- package/layers/core/app/assets/css/main.css +7 -0
- package/layers/core/app/assets/css-backup.zip +0 -0
- package/layers/core/app/components/ErrorBoundary.vue +102 -0
- package/layers/core/app/components/LoadingScreen.vue +137 -0
- package/layers/core/app/composables/useBrowser.ts +161 -0
- package/layers/core/app/composables/useCache.ts +138 -0
- package/layers/core/app/composables/useDevice.ts +36 -0
- package/layers/core/app/composables/useEnv.ts +23 -0
- package/layers/core/app/composables/useErrorLog.ts +158 -0
- package/layers/core/app/composables/useFeatures.ts +269 -0
- package/layers/core/app/composables/useLoading.ts +109 -0
- package/layers/core/app/composables/useNetworkInfo.ts +83 -0
- package/layers/core/app/composables/usePWAInfo.ts +104 -0
- package/layers/core/app/composables/useRendering.ts +97 -0
- package/layers/core/app/composables/useScreen.ts +95 -0
- package/layers/core/app/composables/useScrollGuard.ts +266 -0
- package/layers/core/app/error.vue +103 -0
- package/layers/core/app/layouts/default.vue +4 -0
- package/layers/core/app/pages/[...slug].vue +168 -0
- package/layers/core/app/pages/diagnostics.vue +228 -0
- package/layers/core/app/plugins/error-handler.ts +47 -0
- package/layers/core/app/plugins/feature-detection.client.ts +32 -0
- package/layers/core/app/plugins/init.ts +188 -0
- package/layers/core/app/plugins/loading.client.ts +54 -0
- package/layers/core/app/plugins/scroll-guard.client.ts +53 -0
- package/layers/core/app/types/detection.ts +117 -0
- package/layers/core/app/types/index.ts +10 -0
- package/layers/core/app/types/loading.ts +47 -0
- package/layers/core/app/types/runtime-config.ts +31 -0
- package/layers/core/app/types/scroll-guard.ts +25 -0
- package/layers/core/app/utils/helpers.ts +246 -0
- package/layers/core/app/utils/index.ts +8 -0
- package/layers/core/app/utils/regex.ts +6 -0
- package/layers/core/app.config.ts +193 -0
- package/layers/core/nuxt.config.ts +84 -0
- package/layers/core/package.json +25 -0
- package/layers/core/tailwind.config.js +28 -0
- package/layers/core/tsconfig.json +6 -0
- package/layers/forms/app/components/Form/Contact.vue +78 -0
- package/layers/forms/app/components/Form/Field.vue +85 -0
- package/layers/forms/app/composables/useFormSchema.ts +35 -0
- package/layers/forms/app/config/fields.ts +104 -0
- package/layers/forms/app/types/fields.ts +60 -0
- package/layers/forms/app.config.ts +12 -0
- package/layers/forms/nuxt.config.ts +17 -0
- package/layers/forms/package.json +17 -0
- package/layers/forms/tsconfig.json +6 -0
- package/layers/layout/.nuxtrc +1 -0
- package/layers/layout/CLAUDE.MD +186 -0
- package/layers/layout/GRID_SYSTEM.md +993 -0
- package/layers/layout/README.md +73 -0
- package/layers/layout/app/assets/css/layout/grids.css +180 -0
- package/layers/layout/app/assets/css/main.css +1 -0
- package/layers/layout/app/components/Layout/Grid/Debug.vue +79 -0
- package/layers/layout/app/components/Layout/Grid/Item.vue +180 -0
- package/layers/layout/app/components/Layout/Page/Container.vue +100 -0
- package/layers/layout/app/components/Layout/Page/Header.vue +33 -0
- package/layers/layout/app/components/Layout/Section/Gallery.vue +68 -0
- package/layers/layout/app/components/Layout/Section/Hero.vue +71 -0
- package/layers/layout/app/components/Layout/Section/Split.vue +56 -0
- package/layers/layout/app/components/Layout/Section/index.vue +39 -0
- package/layers/layout/app/composables/GridPlacement.ts +31 -0
- package/layers/layout/app/composables/useGridConfig.ts +27 -0
- package/layers/layout/app/types/layouts.ts +37 -0
- package/layers/layout/app.config.ts +97 -0
- package/layers/layout/nuxt.config.ts +14 -0
- package/layers/layout/package.json +14 -0
- package/layers/layout/tailwind.config.js +28 -0
- package/layers/layout/tsconfig.json +6 -0
- package/layers/motion/README.md +107 -0
- package/layers/motion/TASKS.MD +16 -0
- package/layers/motion/app/assets/css/main.css +111 -0
- package/layers/motion/app/components/Motion/Marquee.vue +171 -0
- package/layers/motion/app/components/Motion/Parallax.vue +75 -0
- package/layers/motion/app/components/Motion/ScrollLink.vue +49 -0
- package/layers/motion/app/components/Motion/ScrollProgress.vue +127 -0
- package/layers/motion/app/components/Motion/ScrollStats.vue +102 -0
- package/layers/motion/app/components/Motion/Staggered.vue +73 -0
- package/layers/motion/app/components/Motion/TextReveal.vue +101 -0
- package/layers/motion/app/components/Motion/Transition.vue +89 -0
- package/layers/motion/app/components/Motion/VelocityEffect.vue +139 -0
- package/layers/motion/app/components/Motion/index.vue +16 -0
- package/layers/motion/app/composables/useGsap.ts +21 -0
- package/layers/motion/app/composables/useMotion.ts +137 -0
- package/layers/motion/app/composables/useSmoothScroll.ts +154 -0
- package/layers/motion/app/plugins/gsap.client.ts +15 -0
- package/layers/motion/app/plugins/locomotive-scroll.client.ts +49 -0
- package/layers/motion/app/utils/gsapAnimations.ts +122 -0
- package/layers/motion/app.config.ts +30 -0
- package/layers/motion/nuxt.config.ts +19 -0
- package/layers/motion/package.json +17 -0
- package/layers/motion/tsconfig.json +6 -0
- package/layers/shader/AGENTS.MD +195 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/.prettierignore +6 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/.prettierrc +18 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/LICENSE +21 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/README.md +100 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/index.html +13 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/jsconfig.json +30 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/package.json +18 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/pnpm-lock.yaml +633 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/public/vite.svg +1 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/components/sketch/webgpu_sketch.js +128 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/components/sketches_dropdown/index.css +87 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/components/sketches_dropdown/sketches_dropdown.js +169 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/index.css +25 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/main.js +93 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/router.js +43 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/sketches/flare-1.js +68 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/sketches/noise/dawn-1.js +56 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/distortion/bulge_distortion.js +35 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/distortion/swirl_distortion.js +35 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/distortion/wave_distortion.js +43 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/common.js +145 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/curl_noise_3d.js +53 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/curl_noise_4d.js +55 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/fbm.js +163 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/perlin_noise_3d.js +70 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/simplex_noise_3d.js +59 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/simplex_noise_4d.js +72 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/turbulence.js +41 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/canvas_weave_pattern.js +26 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/grain_texture_pattern.js +10 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/led_pattern.js +45 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/pixellation_pattern.js +15 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/speckled_noise_pattern.js +34 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/vignette_pattern.js +21 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/bulge_distortion_effect.js +27 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/chromatic_aberration_effect.js +45 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/crt_scanline_effect.js +45 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/dither_effect.js +126 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/grain_texture_effect.js +21 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/halftone_effect.js +44 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/led_effect.js +31 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/pixellation_effect.js +29 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/swirl_distortion_effect.js +25 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/vignette_effect.js +22 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/wave_distortion_effect.js +27 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/color/cosine_palette.js +15 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/color/tonemapping.js +151 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/bloom.js +13 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/bloom_edge_pattern.js +20 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/domain_index.js +11 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/median3.js +22 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/repeating_pattern.js +13 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/screen_aspect_uv.js +14 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/lighting.js +60 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/math/complex.js +86 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/math/coordinates.js +119 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/sdf/operations.js +24 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/sdf/shapes.js +182 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/src/utils/math.js +33 -0
- package/layers/shader/additional-modular-tsl-shaders-for-claude/vite.config.js +23 -0
- package/layers/shader/app/assets/css/main.css +41 -0
- package/layers/shader/app/components/Effect/Bloom.vue +8 -0
- package/layers/shader/app/components/Effect/ChromaticAberration.vue +8 -0
- package/layers/shader/app/components/Effect/PostProcessing.vue +20 -0
- package/layers/shader/app/components/Material/AmbientAurora.vue +172 -0
- package/layers/shader/app/components/Material/AmbientFlow.vue +175 -0
- package/layers/shader/app/components/Material/AmbientGradientMesh.vue +173 -0
- package/layers/shader/app/components/Material/AmbientNebula.vue +181 -0
- package/layers/shader/app/components/Material/AmbientOcean.vue +161 -0
- package/layers/shader/app/components/Material/Fresnel.vue +89 -0
- package/layers/shader/app/components/Material/Gradient.vue +185 -0
- package/layers/shader/app/components/Material/Image.vue +232 -0
- package/layers/shader/app/components/Material/Node.vue +79 -0
- package/layers/shader/app/components/Material/Noise.vue +141 -0
- package/layers/shader/app/components/Mesh/Plane.vue +27 -0
- package/layers/shader/app/components/Shader/Background.vue +159 -0
- package/layers/shader/app/components/Shader/Canvas.vue +97 -0
- package/layers/shader/app/components/Shader/Debug.vue +66 -0
- package/layers/shader/app/components/WebGPUCanvas.client.vue +245 -0
- package/layers/shader/app/composables/useAmbientMaterials.ts +452 -0
- package/layers/shader/app/composables/useMousePosition.ts +94 -0
- package/layers/shader/app/composables/useRendererCapabilities.ts +111 -0
- package/layers/shader/app/composables/useShader.ts +148 -0
- package/layers/shader/app/composables/useShaderTime.ts +146 -0
- package/layers/shader/app/composables/useTSLNodes.ts +112 -0
- package/layers/shader/app/composables/useUniforms.ts +188 -0
- package/layers/shader/app/plugins/shader.client.ts +30 -0
- package/layers/shader/app/shaders/common/blend.ts +255 -0
- package/layers/shader/app/shaders/common/effects.ts +299 -0
- package/layers/shader/app/shaders/common/grain.ts +453 -0
- package/layers/shader/app/shaders/common/index.ts +22 -0
- package/layers/shader/app/shaders/common/lighting.ts +146 -0
- package/layers/shader/app/shaders/common/math.ts +250 -0
- package/layers/shader/app/shaders/common/noise.ts +823 -0
- package/layers/shader/app/shaders/common/noiseHelpers.ts +114 -0
- package/layers/shader/app/shaders/common/palette.ts +319 -0
- package/layers/shader/app/shaders/common/patterns.ts +216 -0
- package/layers/shader/app/shaders/common/sdf.ts +224 -0
- package/layers/shader/app/shaders/common/shapes.ts +366 -0
- package/layers/shader/app/shaders/common/tonemapping.ts +172 -0
- package/layers/shader/app/shaders/common/uv.ts +396 -0
- package/layers/shader/app/shaders/createMaterial.ts +314 -0
- package/layers/shader/app/shaders/index.ts +282 -0
- package/layers/shader/app/shaders/layers/aurora.ts +146 -0
- package/layers/shader/app/shaders/layers/index.ts +19 -0
- package/layers/shader/app/shaders/layers/meshGradient.ts +152 -0
- package/layers/shader/app/shaders/layers/paperShading.ts +148 -0
- package/layers/shader/app/shaders/layers/shaderGradient.ts +152 -0
- package/layers/shader/app/shaders/layers/stripe.ts +137 -0
- package/layers/shader/app/shaders/types.ts +12 -0
- package/layers/shader/app/types/index.ts +4 -0
- package/layers/shader/app/types/materials.ts +45 -0
- package/layers/shader/app/types/renderer.ts +50 -0
- package/layers/shader/app/types/tsl.ts +39 -0
- package/layers/shader/app/types/uniforms.ts +21 -0
- package/layers/shader/app/utils/tsl/animation.ts +251 -0
- package/layers/shader/app/utils/tsl/color.ts +189 -0
- package/layers/shader/app/utils/tsl/index.ts +84 -0
- package/layers/shader/app/utils/tsl/math.ts +111 -0
- package/layers/shader/app/utils/tsl/noise.ts +195 -0
- package/layers/shader/app/utils/tsl/patterns.ts +183 -0
- package/layers/shader/app/utils/tsl/uv.ts +145 -0
- package/layers/shader/app.config.ts +18 -0
- package/layers/shader/modular-tsl-shaders-for-claude/common/blend.tsl +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/common/noise.tsl +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/common/shapes.tsl +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/common/vertexFresnel.tsl +9 -0
- package/layers/shader/modular-tsl-shaders-for-claude/common/vertexPlane.tsl +6 -0
- package/layers/shader/modular-tsl-shaders-for-claude/effects/background.tsl +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/effects/gradient.tsl +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/effects/gradientLegend.tsl +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/effects/simpleGradient.tsl +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/layers/aurora.ts +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/layers/fragmentsTech.ts +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/layers/fresnel.ts +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/layers/linearGradient.ts +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/layers/meshGradient.ts +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/layers/noise.ts +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/layers/paperShading.ts +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/layers/radial.ts +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/layers/shaderGradient.ts +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/layers/stripe.ts +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/materials/createMaterial.ts +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/utils/glslUtils.ts +1 -0
- package/layers/shader/modular-tsl-shaders-for-claude/utils/palette.ts +1 -0
- package/layers/shader/nuxt.config.ts +48 -0
- package/layers/shader/package.json +17 -0
- package/layers/shader/tsconfig.json +6 -0
- package/layers/theme/app/assets/css/theme.css +47 -0
- package/layers/theme/app/components/ThemePicker/AccentButton.vue +51 -0
- package/layers/theme/app/components/ThemePicker/Colors.vue +22 -0
- package/layers/theme/app/components/ThemePicker/Menu.vue +108 -0
- package/layers/theme/app/components/ThemePicker/MenuButton.vue +9 -0
- package/layers/theme/app/composables/useThemePreferences.ts +158 -0
- package/layers/theme/app/plugins/theme.client.ts +5 -0
- package/layers/theme/app/types/theme.ts +34 -0
- package/layers/theme/app.config.ts +14 -0
- package/layers/theme/nuxt.config.ts +46 -0
- package/layers/theme/package.json +14 -0
- package/layers/theme/server/plugins/theme-fouc.ts +51 -0
- package/layers/theme/tsconfig.json +7 -0
- package/layers/ui/CLAUDE.MD +325 -0
- package/layers/ui/app/assets/css/main.css +4 -0
- package/layers/ui/app/components/Links/Group.vue +38 -0
- package/layers/ui/app/components/Links/Named.vue +32 -0
- package/layers/ui/app/components/Media/Picture.vue +41 -0
- package/layers/ui/app/components/Site/Title.vue +15 -0
- package/layers/ui/app/components/Typography/CodeBlock.vue +37 -0
- package/layers/ui/app/components/Typography/Headline.vue +73 -0
- package/layers/ui/app/components/Typography/QuoteBlock.vue +13 -0
- package/layers/ui/app/components/Typography/TextStroke.vue +109 -0
- package/layers/ui/app/components/Typography/index.vue +49 -0
- package/layers/ui/app/composables/color.ts +36 -0
- package/layers/ui/app/composables/picture.ts +145 -0
- package/layers/ui/app/composables/typography.ts +77 -0
- package/layers/ui/app/layouts/default.vue +4 -0
- package/layers/ui/app/pages/index.vue +236 -0
- package/layers/ui/app/types/breakpoints.ts +179 -0
- package/layers/ui/app/types/colors.ts +29 -0
- package/layers/ui/app/types/media.ts +185 -0
- package/layers/ui/app/types/typography.ts +108 -0
- package/layers/ui/app/utils/regex.ts +6 -0
- package/layers/ui/app.config.ts +12 -0
- package/layers/ui/nuxt.config.ts +38 -0
- package/layers/ui/package.json +14 -0
- package/layers/ui/tsconfig.json +6 -0
- package/package.json +128 -0
- package/playgroundOLD/app.config.ts +5 -0
- package/playgroundOLD/nuxt.config.ts +12 -0
- package/pnpm-workspace.yaml +6 -0
- package/prettier.config.cjs +19 -0
- package/stylelint.config.mjs +111 -0
- package/turbo.json +16 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<!-- eslint-disable vue/require-default-prop -->
|
|
2
|
+
<!-- eslint-disable vue/no-unused-properties -->
|
|
3
|
+
<script lang="ts" setup>
|
|
4
|
+
import { useColor } from '#layers/ui/app/composables/color'
|
|
5
|
+
import { useTypography } from '#layers/ui/app/composables/typography'
|
|
6
|
+
import type { UiColors } from '#layers/ui/app/types/colors'
|
|
7
|
+
import type {
|
|
8
|
+
FontLeading,
|
|
9
|
+
FontSlant,
|
|
10
|
+
FontTracking,
|
|
11
|
+
FontWeight,
|
|
12
|
+
FontWidth,
|
|
13
|
+
TextAlign,
|
|
14
|
+
TextTransform,
|
|
15
|
+
TypographyTag,
|
|
16
|
+
} from '#layers/ui/app/types/typography'
|
|
17
|
+
|
|
18
|
+
const props = withDefaults(
|
|
19
|
+
defineProps<{
|
|
20
|
+
tag?: TypographyTag
|
|
21
|
+
weight?: FontWeight
|
|
22
|
+
width?: FontWidth
|
|
23
|
+
slant?: FontSlant
|
|
24
|
+
leading?: FontLeading
|
|
25
|
+
tracking?: FontTracking
|
|
26
|
+
align?: TextAlign
|
|
27
|
+
transform?: TextTransform
|
|
28
|
+
color?: UiColors
|
|
29
|
+
}>(),
|
|
30
|
+
{
|
|
31
|
+
tag: 'p',
|
|
32
|
+
weight: 'font-normal',
|
|
33
|
+
width: 'normal',
|
|
34
|
+
slant: 'normal',
|
|
35
|
+
leading: 'leading-normal',
|
|
36
|
+
tracking: 'tracking-normal',
|
|
37
|
+
align: 'left',
|
|
38
|
+
transform: 'none',
|
|
39
|
+
}
|
|
40
|
+
)
|
|
41
|
+
const { classes } = useTypography(props)
|
|
42
|
+
const colorClass = useColor(props.color, 'text')
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
<template>
|
|
46
|
+
<component :is="tag" :class="[classes, colorClass]" v-bind="$attrs">
|
|
47
|
+
<slot />
|
|
48
|
+
</component>
|
|
49
|
+
</template>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ColorUsage, UiColors } from '#layers/ui/app/types/colors'
|
|
2
|
+
|
|
3
|
+
const colorMap: Record<UiColors, string> = {
|
|
4
|
+
// Semantic
|
|
5
|
+
dimmed: 'dimmed',
|
|
6
|
+
muted: 'muted',
|
|
7
|
+
toned: 'toned',
|
|
8
|
+
highlighted: 'highlighted',
|
|
9
|
+
inverted: 'inverted',
|
|
10
|
+
default: 'default',
|
|
11
|
+
|
|
12
|
+
// Status
|
|
13
|
+
info: 'info',
|
|
14
|
+
success: 'success',
|
|
15
|
+
warning: 'warning',
|
|
16
|
+
error: 'error',
|
|
17
|
+
|
|
18
|
+
// Nuxt UI core
|
|
19
|
+
primary: 'primary',
|
|
20
|
+
neutral: 'neutral',
|
|
21
|
+
|
|
22
|
+
// Custom
|
|
23
|
+
secondary: 'secondary',
|
|
24
|
+
accent: 'accent',
|
|
25
|
+
|
|
26
|
+
// Base
|
|
27
|
+
black: 'black',
|
|
28
|
+
white: 'white',
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function useColor(color?: UiColors, type: ColorUsage = 'text') {
|
|
32
|
+
return computed(() => {
|
|
33
|
+
const colorName = color ? colorMap[color] : 'default'
|
|
34
|
+
return `${type}-${colorName}`
|
|
35
|
+
})
|
|
36
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BREAKPOINT_VALUES,
|
|
3
|
+
DEVICE_BREAKPOINT_VALUES,
|
|
4
|
+
PHONE_BREAKPOINT_VALUES,
|
|
5
|
+
TABLET_BREAKPOINT_VALUES,
|
|
6
|
+
} from '#layers/ui/app/types/breakpoints'
|
|
7
|
+
import type { PictureProps, ResponsiveSizes, UsePictureReturn } from '#layers/ui/app/types/media'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Convert ResponsiveSizes object to CSS sizes attribute string
|
|
11
|
+
* Supports Tailwind, device, phone, tablet, and orientation breakpoints
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* // Tailwind breakpoints
|
|
16
|
+
* { default: '100vw', md: '50vw', lg: '33vw' }
|
|
17
|
+
* // Returns: '(min-width: 1024px) 33vw, (min-width: 768px) 50vw, 100vw'
|
|
18
|
+
*
|
|
19
|
+
* // Device breakpoints
|
|
20
|
+
* { default: '100vw', tablet: '768px', desktop: '1024px' }
|
|
21
|
+
* // Returns: '(min-width: 1024px) 1024px, (min-width: 640px) 768px, 100vw'
|
|
22
|
+
*
|
|
23
|
+
* // Phone breakpoints
|
|
24
|
+
* { default: '100vw', 'phone-md': '375px', 'phone-lg': '428px' }
|
|
25
|
+
* // Returns: '(min-width: 428px) 428px, (min-width: 375px) 375px, 100vw'
|
|
26
|
+
*
|
|
27
|
+
* // Orientation breakpoints
|
|
28
|
+
* { default: '100vw', portrait: '100vw', landscape: '50vw' }
|
|
29
|
+
* // Returns: '(orientation: landscape) 50vw, (orientation: portrait) 100vw, 100vw'
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
function responsiveSizesToString(sizes: ResponsiveSizes): string {
|
|
33
|
+
// Combine all min-width breakpoints with their values
|
|
34
|
+
const breakpointEntries: Array<{ key: keyof ResponsiveSizes; value: number }> = []
|
|
35
|
+
|
|
36
|
+
// Add Tailwind breakpoints
|
|
37
|
+
const tailwindBreakpoints: Array<keyof typeof BREAKPOINT_VALUES> = ['2xl', 'xl', 'lg', 'md', 'sm']
|
|
38
|
+
for (const bp of tailwindBreakpoints) {
|
|
39
|
+
if (sizes[bp]) {
|
|
40
|
+
breakpointEntries.push({ key: bp, value: BREAKPOINT_VALUES[bp] })
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Add device breakpoints (skip mobile as it's 0px - handled by default)
|
|
45
|
+
const deviceBreakpoints: Array<keyof typeof DEVICE_BREAKPOINT_VALUES> = [
|
|
46
|
+
'wide',
|
|
47
|
+
'desktop',
|
|
48
|
+
'tablet',
|
|
49
|
+
]
|
|
50
|
+
for (const bp of deviceBreakpoints) {
|
|
51
|
+
if (sizes[bp]) {
|
|
52
|
+
breakpointEntries.push({ key: bp, value: DEVICE_BREAKPOINT_VALUES[bp] })
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Add phone breakpoints
|
|
57
|
+
const phoneBreakpoints: Array<keyof typeof PHONE_BREAKPOINT_VALUES> = [
|
|
58
|
+
'phone-lg',
|
|
59
|
+
'phone-md',
|
|
60
|
+
'phone-sm',
|
|
61
|
+
]
|
|
62
|
+
for (const bp of phoneBreakpoints) {
|
|
63
|
+
if (sizes[bp]) {
|
|
64
|
+
breakpointEntries.push({ key: bp, value: PHONE_BREAKPOINT_VALUES[bp] })
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Add tablet breakpoints
|
|
69
|
+
const tabletBreakpoints: Array<keyof typeof TABLET_BREAKPOINT_VALUES> = [
|
|
70
|
+
'tablet-lg',
|
|
71
|
+
'tablet-md',
|
|
72
|
+
'tablet-sm',
|
|
73
|
+
]
|
|
74
|
+
for (const bp of tabletBreakpoints) {
|
|
75
|
+
if (sizes[bp]) {
|
|
76
|
+
breakpointEntries.push({ key: bp, value: TABLET_BREAKPOINT_VALUES[bp] })
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Sort by value descending (largest to smallest)
|
|
81
|
+
breakpointEntries.sort((a, b) => b.value - a.value)
|
|
82
|
+
|
|
83
|
+
// Build media queries
|
|
84
|
+
const mediaQueries: string[] = []
|
|
85
|
+
|
|
86
|
+
// Add orientation breakpoints first (these are feature queries, not min-width)
|
|
87
|
+
if (sizes.landscape) {
|
|
88
|
+
mediaQueries.push(`(orientation: landscape) ${sizes.landscape}`)
|
|
89
|
+
}
|
|
90
|
+
if (sizes.portrait) {
|
|
91
|
+
mediaQueries.push(`(orientation: portrait) ${sizes.portrait}`)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Add min-width breakpoints
|
|
95
|
+
for (const entry of breakpointEntries) {
|
|
96
|
+
const size = sizes[entry.key]
|
|
97
|
+
if (size) {
|
|
98
|
+
mediaQueries.push(`(min-width: ${entry.value}px) ${size}`)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Add default size at the end (no media query)
|
|
103
|
+
mediaQueries.push(sizes.default)
|
|
104
|
+
|
|
105
|
+
return mediaQueries.join(', ')
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Composable for Picture component
|
|
110
|
+
* Computes responsive sizes, formats, and attributes for NuxtPicture
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```ts
|
|
114
|
+
* const { sizesString, computedFormat, imgAttrs } = usePicture(props)
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export function usePicture(props: Partial<PictureProps>): UsePictureReturn {
|
|
118
|
+
/**
|
|
119
|
+
* Compute sizes attribute string
|
|
120
|
+
* Handles both string and ResponsiveSizes object formats
|
|
121
|
+
*/
|
|
122
|
+
const sizesString = computed(() => {
|
|
123
|
+
if (!props.sizes) {
|
|
124
|
+
return '100vw' // Default to full viewport width
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (typeof props.sizes === 'string') {
|
|
128
|
+
return props.sizes
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return responsiveSizesToString(props.sizes)
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Compute format string with fallback
|
|
136
|
+
*/
|
|
137
|
+
const computedFormat = computed(() => {
|
|
138
|
+
return props.format ?? 'webp'
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
return {
|
|
142
|
+
sizesString,
|
|
143
|
+
computedFormat,
|
|
144
|
+
}
|
|
145
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
FontLeading,
|
|
3
|
+
FontSlant,
|
|
4
|
+
FontTracking,
|
|
5
|
+
FontWeight,
|
|
6
|
+
FontWidth,
|
|
7
|
+
TextAlign,
|
|
8
|
+
TextTransform,
|
|
9
|
+
} from '#layers/ui/app/types/typography'
|
|
10
|
+
|
|
11
|
+
type AxisValue = string | number | undefined
|
|
12
|
+
|
|
13
|
+
function normalizeAxis(
|
|
14
|
+
value: AxisValue,
|
|
15
|
+
options: {
|
|
16
|
+
prefix?: string
|
|
17
|
+
fallback?: string
|
|
18
|
+
numericFormatter?: (value: number) => string
|
|
19
|
+
} = {}
|
|
20
|
+
) {
|
|
21
|
+
const { prefix = '', fallback = '', numericFormatter } = options
|
|
22
|
+
|
|
23
|
+
if (typeof value === 'number') {
|
|
24
|
+
return numericFormatter
|
|
25
|
+
? numericFormatter(value)
|
|
26
|
+
: prefix
|
|
27
|
+
? `${prefix}-[${value}]`
|
|
28
|
+
: `[${value}]`
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return value ?? fallback
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function useTypography(props: {
|
|
35
|
+
weight?: FontWeight
|
|
36
|
+
slant?: FontSlant
|
|
37
|
+
width?: FontWidth
|
|
38
|
+
leading?: FontLeading
|
|
39
|
+
tracking?: FontTracking
|
|
40
|
+
align?: TextAlign
|
|
41
|
+
transform?: TextTransform
|
|
42
|
+
}) {
|
|
43
|
+
const classes = computed(() =>
|
|
44
|
+
[
|
|
45
|
+
normalizeAxis(props.weight, {
|
|
46
|
+
prefix: 'font',
|
|
47
|
+
fallback: 'font-normal',
|
|
48
|
+
}),
|
|
49
|
+
|
|
50
|
+
normalizeAxis(props.width, {
|
|
51
|
+
prefix: 'font',
|
|
52
|
+
}),
|
|
53
|
+
|
|
54
|
+
normalizeAxis(props.slant, {
|
|
55
|
+
fallback: 'not-italic',
|
|
56
|
+
}),
|
|
57
|
+
|
|
58
|
+
normalizeAxis(props.leading, {
|
|
59
|
+
prefix: 'leading',
|
|
60
|
+
fallback: 'leading-normal',
|
|
61
|
+
}),
|
|
62
|
+
|
|
63
|
+
normalizeAxis(props.tracking, {
|
|
64
|
+
prefix: 'tracking',
|
|
65
|
+
fallback: 'tracking-normal',
|
|
66
|
+
}),
|
|
67
|
+
|
|
68
|
+
props.align ? `text-${props.align}` : '',
|
|
69
|
+
|
|
70
|
+
props.transform && props.transform !== 'none' ? props.transform : '',
|
|
71
|
+
]
|
|
72
|
+
.filter(Boolean)
|
|
73
|
+
.join(' ')
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
return { classes }
|
|
77
|
+
}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
const umainRef = ref()
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<template>
|
|
6
|
+
<MastMain :umain="umainRef">
|
|
7
|
+
<UContainer class="py-12 space-y-12">
|
|
8
|
+
<!-- Header Section -->
|
|
9
|
+
<div class="space-y-4">
|
|
10
|
+
<SiteTitle site-title="UI Layer" tag="h1" title-variant="default" />
|
|
11
|
+
<Typography
|
|
12
|
+
tag="p"
|
|
13
|
+
weight="font-normal"
|
|
14
|
+
leading="leading-relaxed"
|
|
15
|
+
color="muted"
|
|
16
|
+
class="text-lg"
|
|
17
|
+
>
|
|
18
|
+
A unified, typed design system for Nuxt applications. This layer provides typography,
|
|
19
|
+
colors, media handling, and reusable UI primitives.
|
|
20
|
+
</Typography>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<!-- Typography Section -->
|
|
24
|
+
<section class="space-y-6">
|
|
25
|
+
<TypographyHeadline :level="2" color="highlighted">
|
|
26
|
+
Typography Components
|
|
27
|
+
</TypographyHeadline>
|
|
28
|
+
|
|
29
|
+
<div class="space-y-4">
|
|
30
|
+
<div class="space-y-2">
|
|
31
|
+
<TypographyHeadline :level="1"> Headline Level 1 </TypographyHeadline>
|
|
32
|
+
<TypographyHeadline :level="2"> Headline Level 2 </TypographyHeadline>
|
|
33
|
+
<TypographyHeadline :level="3"> Headline Level 3 </TypographyHeadline>
|
|
34
|
+
<TypographyHeadline :level="4"> Headline Level 4 </TypographyHeadline>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<Typography tag="p" leading="leading-relaxed">
|
|
38
|
+
The Typography component provides full control over font weight, width, slant, leading,
|
|
39
|
+
tracking, alignment, and text transformation through typed props.
|
|
40
|
+
</Typography>
|
|
41
|
+
|
|
42
|
+
<TypographyCodeBlock language="typescript" color="muted">
|
|
43
|
+
<Typography weight="font-bold" leading="leading-tight" tracking="tracking-tight" >
|
|
44
|
+
Fully typed typography </Typography></TypographyCodeBlock
|
|
45
|
+
>
|
|
46
|
+
</div>
|
|
47
|
+
</section>
|
|
48
|
+
|
|
49
|
+
<!-- Color System Section -->
|
|
50
|
+
<section class="space-y-6">
|
|
51
|
+
<TypographyHeadline :level="2" color="highlighted"> Color System </TypographyHeadline>
|
|
52
|
+
|
|
53
|
+
<div class="space-y-4">
|
|
54
|
+
<div>
|
|
55
|
+
<Typography tag="h3" weight="font-semibold" class="mb-2"> Semantic Colors </Typography>
|
|
56
|
+
<div class="flex flex-wrap gap-2">
|
|
57
|
+
<Typography
|
|
58
|
+
color="dimmed"
|
|
59
|
+
class="px-3 py-2 bg-neutral-100 dark:bg-neutral-800 rounded"
|
|
60
|
+
>
|
|
61
|
+
Dimmed
|
|
62
|
+
</Typography>
|
|
63
|
+
<Typography
|
|
64
|
+
color="muted"
|
|
65
|
+
class="px-3 py-2 bg-neutral-100 dark:bg-neutral-800 rounded"
|
|
66
|
+
>
|
|
67
|
+
Muted
|
|
68
|
+
</Typography>
|
|
69
|
+
<Typography
|
|
70
|
+
color="toned"
|
|
71
|
+
class="px-3 py-2 bg-neutral-100 dark:bg-neutral-800 rounded"
|
|
72
|
+
>
|
|
73
|
+
Toned
|
|
74
|
+
</Typography>
|
|
75
|
+
<Typography
|
|
76
|
+
color="highlighted"
|
|
77
|
+
class="px-3 py-2 bg-neutral-100 dark:bg-neutral-800 rounded"
|
|
78
|
+
>
|
|
79
|
+
Highlighted
|
|
80
|
+
</Typography>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<div>
|
|
85
|
+
<Typography tag="h3" weight="font-semibold" class="mb-2"> Status Colors </Typography>
|
|
86
|
+
<div class="flex flex-wrap gap-2">
|
|
87
|
+
<Typography color="info" class="px-3 py-2 bg-neutral-100 dark:bg-neutral-800 rounded">
|
|
88
|
+
Info
|
|
89
|
+
</Typography>
|
|
90
|
+
<Typography
|
|
91
|
+
color="success"
|
|
92
|
+
class="px-3 py-2 bg-neutral-100 dark:bg-neutral-800 rounded"
|
|
93
|
+
>
|
|
94
|
+
Success
|
|
95
|
+
</Typography>
|
|
96
|
+
<Typography
|
|
97
|
+
color="warning"
|
|
98
|
+
class="px-3 py-2 bg-neutral-100 dark:bg-neutral-800 rounded"
|
|
99
|
+
>
|
|
100
|
+
Warning
|
|
101
|
+
</Typography>
|
|
102
|
+
<Typography
|
|
103
|
+
color="error"
|
|
104
|
+
class="px-3 py-2 bg-neutral-100 dark:bg-neutral-800 rounded"
|
|
105
|
+
>
|
|
106
|
+
Error
|
|
107
|
+
</Typography>
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
</section>
|
|
112
|
+
|
|
113
|
+
<!-- Components Section -->
|
|
114
|
+
<section class="space-y-6">
|
|
115
|
+
<TypographyHeadline :level="2" color="highlighted">
|
|
116
|
+
Available Components
|
|
117
|
+
</TypographyHeadline>
|
|
118
|
+
|
|
119
|
+
<div class="grid md:grid-cols-2 gap-6">
|
|
120
|
+
<UCard>
|
|
121
|
+
<template #header>
|
|
122
|
+
<TypographyHeadline :level="3"> Typography </TypographyHeadline>
|
|
123
|
+
</template>
|
|
124
|
+
<div class="space-y-2">
|
|
125
|
+
<Typography tag="p" color="muted" leading="leading-relaxed">
|
|
126
|
+
Base component with full control over font properties
|
|
127
|
+
</Typography>
|
|
128
|
+
<ul class="list-disc list-inside space-y-1 text-sm text-muted">
|
|
129
|
+
<li>Typography (base)</li>
|
|
130
|
+
<li>Headline (h1-h6)</li>
|
|
131
|
+
<li>CodeBlock</li>
|
|
132
|
+
<li>QuoteBlock</li>
|
|
133
|
+
</ul>
|
|
134
|
+
</div>
|
|
135
|
+
</UCard>
|
|
136
|
+
|
|
137
|
+
<UCard>
|
|
138
|
+
<template #header>
|
|
139
|
+
<TypographyHeadline :level="3"> Links </TypographyHeadline>
|
|
140
|
+
</template>
|
|
141
|
+
<div class="space-y-2">
|
|
142
|
+
<Typography tag="p" color="muted" leading="leading-relaxed">
|
|
143
|
+
Type-safe navigation with named routes
|
|
144
|
+
</Typography>
|
|
145
|
+
<ul class="list-disc list-inside space-y-1 text-sm text-muted">
|
|
146
|
+
<li>Named route enforcement</li>
|
|
147
|
+
<li>Color support</li>
|
|
148
|
+
<li>ULink wrapper</li>
|
|
149
|
+
</ul>
|
|
150
|
+
</div>
|
|
151
|
+
</UCard>
|
|
152
|
+
|
|
153
|
+
<UCard>
|
|
154
|
+
<template #header>
|
|
155
|
+
<TypographyHeadline :level="3"> Media </TypographyHeadline>
|
|
156
|
+
</template>
|
|
157
|
+
<div class="space-y-2">
|
|
158
|
+
<Typography tag="p" color="muted" leading="leading-relaxed">
|
|
159
|
+
Responsive image handling with optimization
|
|
160
|
+
</Typography>
|
|
161
|
+
<ul class="list-disc list-inside space-y-1 text-sm text-muted">
|
|
162
|
+
<li>Picture component</li>
|
|
163
|
+
<li>Multiple formats (avif, webp)</li>
|
|
164
|
+
<li>Responsive sizing</li>
|
|
165
|
+
<li>Lazy loading</li>
|
|
166
|
+
</ul>
|
|
167
|
+
</div>
|
|
168
|
+
</UCard>
|
|
169
|
+
|
|
170
|
+
<UCard>
|
|
171
|
+
<template #header>
|
|
172
|
+
<TypographyHeadline :level="3"> Branding </TypographyHeadline>
|
|
173
|
+
</template>
|
|
174
|
+
<div class="space-y-2">
|
|
175
|
+
<Typography tag="p" color="muted" leading="leading-relaxed">
|
|
176
|
+
Site branding and structure components
|
|
177
|
+
</Typography>
|
|
178
|
+
<ul class="list-disc list-inside space-y-1 text-sm text-muted">
|
|
179
|
+
<li>Masthead/Main wrapper</li>
|
|
180
|
+
<li>Site Title with variants</li>
|
|
181
|
+
<li>Semantic HTML structure</li>
|
|
182
|
+
</ul>
|
|
183
|
+
</div>
|
|
184
|
+
</UCard>
|
|
185
|
+
</div>
|
|
186
|
+
</section>
|
|
187
|
+
|
|
188
|
+
<!-- Quote Example -->
|
|
189
|
+
<section class="space-y-6">
|
|
190
|
+
<TypographyHeadline :level="2" color="highlighted"> Quote Block </TypographyHeadline>
|
|
191
|
+
|
|
192
|
+
<TypographyQuoteBlock color="muted" class="border-l-4 border-primary pl-4 italic">
|
|
193
|
+
A unified, typed design system that provides consistency across projects while maintaining
|
|
194
|
+
flexibility for customization.
|
|
195
|
+
</TypographyQuoteBlock>
|
|
196
|
+
</section>
|
|
197
|
+
|
|
198
|
+
<!-- Features List -->
|
|
199
|
+
<section class="space-y-6">
|
|
200
|
+
<TypographyHeadline :level="2" color="highlighted"> Key Features </TypographyHeadline>
|
|
201
|
+
|
|
202
|
+
<div class="grid md:grid-cols-3 gap-4">
|
|
203
|
+
<div class="space-y-2">
|
|
204
|
+
<Typography weight="font-semibold" color="primary"> Fully Typed </Typography>
|
|
205
|
+
<Typography tag="p" color="muted" leading="leading-relaxed" class="text-sm">
|
|
206
|
+
Complete TypeScript coverage with semantic types for typography, colors, and
|
|
207
|
+
breakpoints
|
|
208
|
+
</Typography>
|
|
209
|
+
</div>
|
|
210
|
+
|
|
211
|
+
<div class="space-y-2">
|
|
212
|
+
<Typography weight="font-semibold" color="primary"> Composable First </Typography>
|
|
213
|
+
<Typography tag="p" color="muted" leading="leading-relaxed" class="text-sm">
|
|
214
|
+
Built on Vue composables (useTypography, useColor, usePicture) for maximum reusability
|
|
215
|
+
</Typography>
|
|
216
|
+
</div>
|
|
217
|
+
|
|
218
|
+
<div class="space-y-2">
|
|
219
|
+
<Typography weight="font-semibold" color="primary"> Responsive Ready </Typography>
|
|
220
|
+
<Typography tag="p" color="muted" leading="leading-relaxed" class="text-sm">
|
|
221
|
+
Comprehensive breakpoint system supporting Tailwind, device, phone, and tablet
|
|
222
|
+
breakpoints
|
|
223
|
+
</Typography>
|
|
224
|
+
</div>
|
|
225
|
+
</div>
|
|
226
|
+
</section>
|
|
227
|
+
|
|
228
|
+
<!-- Footer -->
|
|
229
|
+
<footer class="pt-8 border-t border-neutral-200 dark:border-neutral-800">
|
|
230
|
+
<Typography tag="p" color="dimmed" align="center" class="text-sm">
|
|
231
|
+
UI Layer - A reusable design system for Nuxt
|
|
232
|
+
</Typography>
|
|
233
|
+
</footer>
|
|
234
|
+
</UContainer>
|
|
235
|
+
</MastMain>
|
|
236
|
+
</template>
|