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.
Files changed (380) hide show
  1. package/.claude/rules/nuxt-layers.md +23 -0
  2. package/.claude/rules/typescript.md +16 -0
  3. package/.claude/rules/vue-components.md +34 -0
  4. package/.claude/settings.local.json +81 -0
  5. package/.editorconfig +27 -0
  6. package/.github/workflows/npm-publish.yml +33 -0
  7. package/.oxlintrc.json +10 -0
  8. package/.prettierignore +87 -0
  9. package/CLAUDE.md +71 -0
  10. package/apps/playground/README.md +75 -0
  11. package/apps/playground/app/app.config.ts +10 -0
  12. package/apps/playground/app/app.vue +12 -0
  13. package/apps/playground/app/components/AmbientBackground.client.vue +795 -0
  14. package/apps/playground/app/components/ShaderDemoCanvas.client.vue +636 -0
  15. package/apps/playground/app/components/ShaderImageDemo.client.vue +211 -0
  16. package/apps/playground/app/pages/ambient.vue +387 -0
  17. package/apps/playground/app/pages/content.vue +200 -0
  18. package/apps/playground/app/pages/core.vue +560 -0
  19. package/apps/playground/app/pages/forms.vue +645 -0
  20. package/apps/playground/app/pages/index.vue +257 -0
  21. package/apps/playground/app/pages/layout.vue +591 -0
  22. package/apps/playground/app/pages/locomotive-scroll.vue +738 -0
  23. package/apps/playground/app/pages/motion.vue +848 -0
  24. package/apps/playground/app/pages/shader.vue +1701 -0
  25. package/apps/playground/app/pages/theme.vue +115 -0
  26. package/apps/playground/app/pages/ui.vue +656 -0
  27. package/apps/playground/content/blog/hello-world.md +127 -0
  28. package/apps/playground/content/blog/second-post.md +99 -0
  29. package/apps/playground/content/blog/third-post.md +33 -0
  30. package/apps/playground/content/gallery/autumn-collection.md +57 -0
  31. package/apps/playground/content/gallery/summer-collection.md +52 -0
  32. package/apps/playground/content/pages/index.md +132 -0
  33. package/apps/playground/content/portfolio/project-one.md +90 -0
  34. package/apps/playground/content/portfolio/project-two.md +96 -0
  35. package/apps/playground/content.config.ts +93 -0
  36. package/apps/playground/nuxt.config.ts +99 -0
  37. package/apps/playground/package.json +17 -0
  38. package/apps/playground/public/favicon.ico +0 -0
  39. package/apps/playground/public/robots.txt +2 -0
  40. package/apps/playground/tsconfig.json +25 -0
  41. package/eslint.config.mjs +223 -0
  42. package/eslint.configCOPY.mjs +216 -0
  43. package/eslintconfigCURRENT.mjs +244 -0
  44. package/eslintconfigOLD.mjs +178 -0
  45. package/files for claude/Scroller.vue +31 -0
  46. package/files for claude/TextMarquee.vue +255 -0
  47. package/files for claude/gsap.client.ts +18 -0
  48. package/files for claude/gsap.ts +10 -0
  49. package/files for claude/scroll.ts +28 -0
  50. package/layers/content/app/assets/css/main.css +1 -0
  51. package/layers/content/app/components/Blog/Article.vue +29 -0
  52. package/layers/content/app/components/Blog/Card.vue +40 -0
  53. package/layers/content/app/components/Blog/List.vue +35 -0
  54. package/layers/content/app/components/Gallery/AmbientImage.vue +52 -0
  55. package/layers/content/app/components/Gallery/Card.vue +39 -0
  56. package/layers/content/app/components/Gallery/Detail.vue +76 -0
  57. package/layers/content/app/components/Gallery/Grid.vue +48 -0
  58. package/layers/content/app/components/Gallery/ImageDetail.vue +92 -0
  59. package/layers/content/app/components/Gallery/Lightbox.vue +102 -0
  60. package/layers/content/app/components/NuxtContent/Detail.vue +53 -0
  61. package/layers/content/app/components/NuxtContent/List.vue +21 -0
  62. package/layers/content/app/components/NuxtContent/Renderer.vue +14 -0
  63. package/layers/content/app/components/NuxtContent/Surround.vue +15 -0
  64. package/layers/content/app/components/NuxtContent/Toc.vue +18 -0
  65. package/layers/content/app/components/Portfolio/Card.vue +39 -0
  66. package/layers/content/app/components/Portfolio/ColorPalette.vue +39 -0
  67. package/layers/content/app/components/Portfolio/Detail.vue +49 -0
  68. package/layers/content/app/components/Portfolio/List.vue +44 -0
  69. package/layers/content/app/components/Portfolio/Typography.vue +37 -0
  70. package/layers/content/app/components/content/Figure.vue +31 -0
  71. package/layers/content/app/composables/useBlogPost.ts +3 -0
  72. package/layers/content/app/composables/useBlogPosts.ts +23 -0
  73. package/layers/content/app/composables/useCollectionItem.ts +5 -0
  74. package/layers/content/app/composables/useCollectionSurround.ts +9 -0
  75. package/layers/content/app/composables/useContentPage.ts +3 -0
  76. package/layers/content/app/composables/useGalleryItem.ts +3 -0
  77. package/layers/content/app/composables/useGalleryItems.ts +19 -0
  78. package/layers/content/app/composables/usePortfolioItem.ts +3 -0
  79. package/layers/content/app/composables/usePortfolioItems.ts +23 -0
  80. package/layers/content/app/pages/blog/[slug].vue +10 -0
  81. package/layers/content/app/pages/blog/index.vue +15 -0
  82. package/layers/content/app/pages/gallery/[slug]/[imageId].vue +11 -0
  83. package/layers/content/app/pages/gallery/[slug]/index.vue +10 -0
  84. package/layers/content/app/pages/gallery/index.vue +15 -0
  85. package/layers/content/app/pages/portfolio/[slug].vue +10 -0
  86. package/layers/content/app/pages/portfolio/index.vue +15 -0
  87. package/layers/content/app/types/content.ts +84 -0
  88. package/layers/content/app.config.ts +12 -0
  89. package/layers/content/content.config.ts +93 -0
  90. package/layers/content/nuxt.config.ts +31 -0
  91. package/layers/content/package.json +31 -0
  92. package/layers/content/tsconfig.json +6 -0
  93. package/layers/core/app/assets/css/base.css +88 -0
  94. package/layers/core/app/assets/css/layout.css +36 -0
  95. package/layers/core/app/assets/css/main.css +7 -0
  96. package/layers/core/app/assets/css-backup.zip +0 -0
  97. package/layers/core/app/components/ErrorBoundary.vue +102 -0
  98. package/layers/core/app/components/LoadingScreen.vue +137 -0
  99. package/layers/core/app/composables/useBrowser.ts +161 -0
  100. package/layers/core/app/composables/useCache.ts +138 -0
  101. package/layers/core/app/composables/useDevice.ts +36 -0
  102. package/layers/core/app/composables/useEnv.ts +23 -0
  103. package/layers/core/app/composables/useErrorLog.ts +158 -0
  104. package/layers/core/app/composables/useFeatures.ts +269 -0
  105. package/layers/core/app/composables/useLoading.ts +109 -0
  106. package/layers/core/app/composables/useNetworkInfo.ts +83 -0
  107. package/layers/core/app/composables/usePWAInfo.ts +104 -0
  108. package/layers/core/app/composables/useRendering.ts +97 -0
  109. package/layers/core/app/composables/useScreen.ts +95 -0
  110. package/layers/core/app/composables/useScrollGuard.ts +266 -0
  111. package/layers/core/app/error.vue +103 -0
  112. package/layers/core/app/layouts/default.vue +4 -0
  113. package/layers/core/app/pages/[...slug].vue +168 -0
  114. package/layers/core/app/pages/diagnostics.vue +228 -0
  115. package/layers/core/app/plugins/error-handler.ts +47 -0
  116. package/layers/core/app/plugins/feature-detection.client.ts +32 -0
  117. package/layers/core/app/plugins/init.ts +188 -0
  118. package/layers/core/app/plugins/loading.client.ts +54 -0
  119. package/layers/core/app/plugins/scroll-guard.client.ts +53 -0
  120. package/layers/core/app/types/detection.ts +117 -0
  121. package/layers/core/app/types/index.ts +10 -0
  122. package/layers/core/app/types/loading.ts +47 -0
  123. package/layers/core/app/types/runtime-config.ts +31 -0
  124. package/layers/core/app/types/scroll-guard.ts +25 -0
  125. package/layers/core/app/utils/helpers.ts +246 -0
  126. package/layers/core/app/utils/index.ts +8 -0
  127. package/layers/core/app/utils/regex.ts +6 -0
  128. package/layers/core/app.config.ts +193 -0
  129. package/layers/core/nuxt.config.ts +84 -0
  130. package/layers/core/package.json +25 -0
  131. package/layers/core/tailwind.config.js +28 -0
  132. package/layers/core/tsconfig.json +6 -0
  133. package/layers/forms/app/components/Form/Contact.vue +78 -0
  134. package/layers/forms/app/components/Form/Field.vue +85 -0
  135. package/layers/forms/app/composables/useFormSchema.ts +35 -0
  136. package/layers/forms/app/config/fields.ts +104 -0
  137. package/layers/forms/app/types/fields.ts +60 -0
  138. package/layers/forms/app.config.ts +12 -0
  139. package/layers/forms/nuxt.config.ts +17 -0
  140. package/layers/forms/package.json +17 -0
  141. package/layers/forms/tsconfig.json +6 -0
  142. package/layers/layout/.nuxtrc +1 -0
  143. package/layers/layout/CLAUDE.MD +186 -0
  144. package/layers/layout/GRID_SYSTEM.md +993 -0
  145. package/layers/layout/README.md +73 -0
  146. package/layers/layout/app/assets/css/layout/grids.css +180 -0
  147. package/layers/layout/app/assets/css/main.css +1 -0
  148. package/layers/layout/app/components/Layout/Grid/Debug.vue +79 -0
  149. package/layers/layout/app/components/Layout/Grid/Item.vue +180 -0
  150. package/layers/layout/app/components/Layout/Page/Container.vue +100 -0
  151. package/layers/layout/app/components/Layout/Page/Header.vue +33 -0
  152. package/layers/layout/app/components/Layout/Section/Gallery.vue +68 -0
  153. package/layers/layout/app/components/Layout/Section/Hero.vue +71 -0
  154. package/layers/layout/app/components/Layout/Section/Split.vue +56 -0
  155. package/layers/layout/app/components/Layout/Section/index.vue +39 -0
  156. package/layers/layout/app/composables/GridPlacement.ts +31 -0
  157. package/layers/layout/app/composables/useGridConfig.ts +27 -0
  158. package/layers/layout/app/types/layouts.ts +37 -0
  159. package/layers/layout/app.config.ts +97 -0
  160. package/layers/layout/nuxt.config.ts +14 -0
  161. package/layers/layout/package.json +14 -0
  162. package/layers/layout/tailwind.config.js +28 -0
  163. package/layers/layout/tsconfig.json +6 -0
  164. package/layers/motion/README.md +107 -0
  165. package/layers/motion/TASKS.MD +16 -0
  166. package/layers/motion/app/assets/css/main.css +111 -0
  167. package/layers/motion/app/components/Motion/Marquee.vue +171 -0
  168. package/layers/motion/app/components/Motion/Parallax.vue +75 -0
  169. package/layers/motion/app/components/Motion/ScrollLink.vue +49 -0
  170. package/layers/motion/app/components/Motion/ScrollProgress.vue +127 -0
  171. package/layers/motion/app/components/Motion/ScrollStats.vue +102 -0
  172. package/layers/motion/app/components/Motion/Staggered.vue +73 -0
  173. package/layers/motion/app/components/Motion/TextReveal.vue +101 -0
  174. package/layers/motion/app/components/Motion/Transition.vue +89 -0
  175. package/layers/motion/app/components/Motion/VelocityEffect.vue +139 -0
  176. package/layers/motion/app/components/Motion/index.vue +16 -0
  177. package/layers/motion/app/composables/useGsap.ts +21 -0
  178. package/layers/motion/app/composables/useMotion.ts +137 -0
  179. package/layers/motion/app/composables/useSmoothScroll.ts +154 -0
  180. package/layers/motion/app/plugins/gsap.client.ts +15 -0
  181. package/layers/motion/app/plugins/locomotive-scroll.client.ts +49 -0
  182. package/layers/motion/app/utils/gsapAnimations.ts +122 -0
  183. package/layers/motion/app.config.ts +30 -0
  184. package/layers/motion/nuxt.config.ts +19 -0
  185. package/layers/motion/package.json +17 -0
  186. package/layers/motion/tsconfig.json +6 -0
  187. package/layers/shader/AGENTS.MD +195 -0
  188. package/layers/shader/additional-modular-tsl-shaders-for-claude/.prettierignore +6 -0
  189. package/layers/shader/additional-modular-tsl-shaders-for-claude/.prettierrc +18 -0
  190. package/layers/shader/additional-modular-tsl-shaders-for-claude/LICENSE +21 -0
  191. package/layers/shader/additional-modular-tsl-shaders-for-claude/README.md +100 -0
  192. package/layers/shader/additional-modular-tsl-shaders-for-claude/index.html +13 -0
  193. package/layers/shader/additional-modular-tsl-shaders-for-claude/jsconfig.json +30 -0
  194. package/layers/shader/additional-modular-tsl-shaders-for-claude/package.json +18 -0
  195. package/layers/shader/additional-modular-tsl-shaders-for-claude/pnpm-lock.yaml +633 -0
  196. package/layers/shader/additional-modular-tsl-shaders-for-claude/public/vite.svg +1 -0
  197. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/components/sketch/webgpu_sketch.js +128 -0
  198. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/components/sketches_dropdown/index.css +87 -0
  199. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/components/sketches_dropdown/sketches_dropdown.js +169 -0
  200. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/index.css +25 -0
  201. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/main.js +93 -0
  202. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/router.js +43 -0
  203. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/sketches/flare-1.js +68 -0
  204. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/sketches/noise/dawn-1.js +56 -0
  205. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/distortion/bulge_distortion.js +35 -0
  206. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/distortion/swirl_distortion.js +35 -0
  207. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/distortion/wave_distortion.js +43 -0
  208. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/common.js +145 -0
  209. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/curl_noise_3d.js +53 -0
  210. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/curl_noise_4d.js +55 -0
  211. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/fbm.js +163 -0
  212. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/perlin_noise_3d.js +70 -0
  213. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/simplex_noise_3d.js +59 -0
  214. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/simplex_noise_4d.js +72 -0
  215. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/turbulence.js +41 -0
  216. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/canvas_weave_pattern.js +26 -0
  217. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/grain_texture_pattern.js +10 -0
  218. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/led_pattern.js +45 -0
  219. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/pixellation_pattern.js +15 -0
  220. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/speckled_noise_pattern.js +34 -0
  221. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/vignette_pattern.js +21 -0
  222. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/bulge_distortion_effect.js +27 -0
  223. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/chromatic_aberration_effect.js +45 -0
  224. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/crt_scanline_effect.js +45 -0
  225. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/dither_effect.js +126 -0
  226. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/grain_texture_effect.js +21 -0
  227. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/halftone_effect.js +44 -0
  228. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/led_effect.js +31 -0
  229. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/pixellation_effect.js +29 -0
  230. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/swirl_distortion_effect.js +25 -0
  231. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/vignette_effect.js +22 -0
  232. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/wave_distortion_effect.js +27 -0
  233. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/color/cosine_palette.js +15 -0
  234. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/color/tonemapping.js +151 -0
  235. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/bloom.js +13 -0
  236. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/bloom_edge_pattern.js +20 -0
  237. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/domain_index.js +11 -0
  238. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/median3.js +22 -0
  239. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/repeating_pattern.js +13 -0
  240. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/screen_aspect_uv.js +14 -0
  241. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/lighting.js +60 -0
  242. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/math/complex.js +86 -0
  243. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/math/coordinates.js +119 -0
  244. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/sdf/operations.js +24 -0
  245. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/sdf/shapes.js +182 -0
  246. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/utils/math.js +33 -0
  247. package/layers/shader/additional-modular-tsl-shaders-for-claude/vite.config.js +23 -0
  248. package/layers/shader/app/assets/css/main.css +41 -0
  249. package/layers/shader/app/components/Effect/Bloom.vue +8 -0
  250. package/layers/shader/app/components/Effect/ChromaticAberration.vue +8 -0
  251. package/layers/shader/app/components/Effect/PostProcessing.vue +20 -0
  252. package/layers/shader/app/components/Material/AmbientAurora.vue +172 -0
  253. package/layers/shader/app/components/Material/AmbientFlow.vue +175 -0
  254. package/layers/shader/app/components/Material/AmbientGradientMesh.vue +173 -0
  255. package/layers/shader/app/components/Material/AmbientNebula.vue +181 -0
  256. package/layers/shader/app/components/Material/AmbientOcean.vue +161 -0
  257. package/layers/shader/app/components/Material/Fresnel.vue +89 -0
  258. package/layers/shader/app/components/Material/Gradient.vue +185 -0
  259. package/layers/shader/app/components/Material/Image.vue +232 -0
  260. package/layers/shader/app/components/Material/Node.vue +79 -0
  261. package/layers/shader/app/components/Material/Noise.vue +141 -0
  262. package/layers/shader/app/components/Mesh/Plane.vue +27 -0
  263. package/layers/shader/app/components/Shader/Background.vue +159 -0
  264. package/layers/shader/app/components/Shader/Canvas.vue +97 -0
  265. package/layers/shader/app/components/Shader/Debug.vue +66 -0
  266. package/layers/shader/app/components/WebGPUCanvas.client.vue +245 -0
  267. package/layers/shader/app/composables/useAmbientMaterials.ts +452 -0
  268. package/layers/shader/app/composables/useMousePosition.ts +94 -0
  269. package/layers/shader/app/composables/useRendererCapabilities.ts +111 -0
  270. package/layers/shader/app/composables/useShader.ts +148 -0
  271. package/layers/shader/app/composables/useShaderTime.ts +146 -0
  272. package/layers/shader/app/composables/useTSLNodes.ts +112 -0
  273. package/layers/shader/app/composables/useUniforms.ts +188 -0
  274. package/layers/shader/app/plugins/shader.client.ts +30 -0
  275. package/layers/shader/app/shaders/common/blend.ts +255 -0
  276. package/layers/shader/app/shaders/common/effects.ts +299 -0
  277. package/layers/shader/app/shaders/common/grain.ts +453 -0
  278. package/layers/shader/app/shaders/common/index.ts +22 -0
  279. package/layers/shader/app/shaders/common/lighting.ts +146 -0
  280. package/layers/shader/app/shaders/common/math.ts +250 -0
  281. package/layers/shader/app/shaders/common/noise.ts +823 -0
  282. package/layers/shader/app/shaders/common/noiseHelpers.ts +114 -0
  283. package/layers/shader/app/shaders/common/palette.ts +319 -0
  284. package/layers/shader/app/shaders/common/patterns.ts +216 -0
  285. package/layers/shader/app/shaders/common/sdf.ts +224 -0
  286. package/layers/shader/app/shaders/common/shapes.ts +366 -0
  287. package/layers/shader/app/shaders/common/tonemapping.ts +172 -0
  288. package/layers/shader/app/shaders/common/uv.ts +396 -0
  289. package/layers/shader/app/shaders/createMaterial.ts +314 -0
  290. package/layers/shader/app/shaders/index.ts +282 -0
  291. package/layers/shader/app/shaders/layers/aurora.ts +146 -0
  292. package/layers/shader/app/shaders/layers/index.ts +19 -0
  293. package/layers/shader/app/shaders/layers/meshGradient.ts +152 -0
  294. package/layers/shader/app/shaders/layers/paperShading.ts +148 -0
  295. package/layers/shader/app/shaders/layers/shaderGradient.ts +152 -0
  296. package/layers/shader/app/shaders/layers/stripe.ts +137 -0
  297. package/layers/shader/app/shaders/types.ts +12 -0
  298. package/layers/shader/app/types/index.ts +4 -0
  299. package/layers/shader/app/types/materials.ts +45 -0
  300. package/layers/shader/app/types/renderer.ts +50 -0
  301. package/layers/shader/app/types/tsl.ts +39 -0
  302. package/layers/shader/app/types/uniforms.ts +21 -0
  303. package/layers/shader/app/utils/tsl/animation.ts +251 -0
  304. package/layers/shader/app/utils/tsl/color.ts +189 -0
  305. package/layers/shader/app/utils/tsl/index.ts +84 -0
  306. package/layers/shader/app/utils/tsl/math.ts +111 -0
  307. package/layers/shader/app/utils/tsl/noise.ts +195 -0
  308. package/layers/shader/app/utils/tsl/patterns.ts +183 -0
  309. package/layers/shader/app/utils/tsl/uv.ts +145 -0
  310. package/layers/shader/app.config.ts +18 -0
  311. package/layers/shader/modular-tsl-shaders-for-claude/common/blend.tsl +1 -0
  312. package/layers/shader/modular-tsl-shaders-for-claude/common/noise.tsl +1 -0
  313. package/layers/shader/modular-tsl-shaders-for-claude/common/shapes.tsl +1 -0
  314. package/layers/shader/modular-tsl-shaders-for-claude/common/vertexFresnel.tsl +9 -0
  315. package/layers/shader/modular-tsl-shaders-for-claude/common/vertexPlane.tsl +6 -0
  316. package/layers/shader/modular-tsl-shaders-for-claude/effects/background.tsl +1 -0
  317. package/layers/shader/modular-tsl-shaders-for-claude/effects/gradient.tsl +1 -0
  318. package/layers/shader/modular-tsl-shaders-for-claude/effects/gradientLegend.tsl +1 -0
  319. package/layers/shader/modular-tsl-shaders-for-claude/effects/simpleGradient.tsl +1 -0
  320. package/layers/shader/modular-tsl-shaders-for-claude/layers/aurora.ts +1 -0
  321. package/layers/shader/modular-tsl-shaders-for-claude/layers/fragmentsTech.ts +1 -0
  322. package/layers/shader/modular-tsl-shaders-for-claude/layers/fresnel.ts +1 -0
  323. package/layers/shader/modular-tsl-shaders-for-claude/layers/linearGradient.ts +1 -0
  324. package/layers/shader/modular-tsl-shaders-for-claude/layers/meshGradient.ts +1 -0
  325. package/layers/shader/modular-tsl-shaders-for-claude/layers/noise.ts +1 -0
  326. package/layers/shader/modular-tsl-shaders-for-claude/layers/paperShading.ts +1 -0
  327. package/layers/shader/modular-tsl-shaders-for-claude/layers/radial.ts +1 -0
  328. package/layers/shader/modular-tsl-shaders-for-claude/layers/shaderGradient.ts +1 -0
  329. package/layers/shader/modular-tsl-shaders-for-claude/layers/stripe.ts +1 -0
  330. package/layers/shader/modular-tsl-shaders-for-claude/materials/createMaterial.ts +1 -0
  331. package/layers/shader/modular-tsl-shaders-for-claude/utils/glslUtils.ts +1 -0
  332. package/layers/shader/modular-tsl-shaders-for-claude/utils/palette.ts +1 -0
  333. package/layers/shader/nuxt.config.ts +48 -0
  334. package/layers/shader/package.json +17 -0
  335. package/layers/shader/tsconfig.json +6 -0
  336. package/layers/theme/app/assets/css/theme.css +47 -0
  337. package/layers/theme/app/components/ThemePicker/AccentButton.vue +51 -0
  338. package/layers/theme/app/components/ThemePicker/Colors.vue +22 -0
  339. package/layers/theme/app/components/ThemePicker/Menu.vue +108 -0
  340. package/layers/theme/app/components/ThemePicker/MenuButton.vue +9 -0
  341. package/layers/theme/app/composables/useThemePreferences.ts +158 -0
  342. package/layers/theme/app/plugins/theme.client.ts +5 -0
  343. package/layers/theme/app/types/theme.ts +34 -0
  344. package/layers/theme/app.config.ts +14 -0
  345. package/layers/theme/nuxt.config.ts +46 -0
  346. package/layers/theme/package.json +14 -0
  347. package/layers/theme/server/plugins/theme-fouc.ts +51 -0
  348. package/layers/theme/tsconfig.json +7 -0
  349. package/layers/ui/CLAUDE.MD +325 -0
  350. package/layers/ui/app/assets/css/main.css +4 -0
  351. package/layers/ui/app/components/Links/Group.vue +38 -0
  352. package/layers/ui/app/components/Links/Named.vue +32 -0
  353. package/layers/ui/app/components/Media/Picture.vue +41 -0
  354. package/layers/ui/app/components/Site/Title.vue +15 -0
  355. package/layers/ui/app/components/Typography/CodeBlock.vue +37 -0
  356. package/layers/ui/app/components/Typography/Headline.vue +73 -0
  357. package/layers/ui/app/components/Typography/QuoteBlock.vue +13 -0
  358. package/layers/ui/app/components/Typography/TextStroke.vue +109 -0
  359. package/layers/ui/app/components/Typography/index.vue +49 -0
  360. package/layers/ui/app/composables/color.ts +36 -0
  361. package/layers/ui/app/composables/picture.ts +145 -0
  362. package/layers/ui/app/composables/typography.ts +77 -0
  363. package/layers/ui/app/layouts/default.vue +4 -0
  364. package/layers/ui/app/pages/index.vue +236 -0
  365. package/layers/ui/app/types/breakpoints.ts +179 -0
  366. package/layers/ui/app/types/colors.ts +29 -0
  367. package/layers/ui/app/types/media.ts +185 -0
  368. package/layers/ui/app/types/typography.ts +108 -0
  369. package/layers/ui/app/utils/regex.ts +6 -0
  370. package/layers/ui/app.config.ts +12 -0
  371. package/layers/ui/nuxt.config.ts +38 -0
  372. package/layers/ui/package.json +14 -0
  373. package/layers/ui/tsconfig.json +6 -0
  374. package/package.json +128 -0
  375. package/playgroundOLD/app.config.ts +5 -0
  376. package/playgroundOLD/nuxt.config.ts +12 -0
  377. package/pnpm-workspace.yaml +6 -0
  378. package/prettier.config.cjs +19 -0
  379. package/stylelint.config.mjs +111 -0
  380. 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,4 @@
1
+ <!-- eslint-disable vue/no-multiple-template-root -->
2
+ <template>
3
+ <slot />
4
+ </template>
@@ -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
+ &lt;Typography weight="font-bold" leading="leading-tight" tracking="tracking-tight" &gt;
44
+ Fully typed typography &lt;/Typography&gt;</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>