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,993 @@
1
+ # Swiss Grid System - Layout Layer Documentation
2
+
3
+ ## Table of Contents
4
+
5
+ 1. [Overview](#overview)
6
+ 2. [Philosophy & Design Principles](#philosophy--design-principles)
7
+ 3. [Architecture](#architecture)
8
+ 4. [Core Concepts](#core-concepts)
9
+ 5. [Components Reference](#components-reference)
10
+ 6. [Configuration & Customization](#configuration--customization)
11
+ 7. [Using with Nuxt Layers](#using-with-nuxt-layers)
12
+ 8. [Examples](#examples)
13
+ 9. [Best Practices](#best-practices)
14
+
15
+ ---
16
+
17
+ ## Overview
18
+
19
+ The **ui-layout-layer** implements a Swiss Grid System inspired by Josef Müller-Brockmann's typographic grid systems. It uses modern CSS Grid with **subgrid** to create a precise, responsive, and mathematically consistent layout system for Nuxt applications.
20
+
21
+ ### Key Features
22
+
23
+ - **Responsive Grid Density**: 6 columns (mobile) → 12 columns (tablet) → 18 columns (desktop)
24
+ - **Vertical Rhythm**: 12-row sections spanning 100vh with consistent baseline grid
25
+ - **CSS Subgrid**: Precise alignment across component hierarchy
26
+ - **Layered Z-Index System**: Semantic layering (back, mid, front, top)
27
+ - **Configurable Presets**: Pre-built responsive layouts for common patterns
28
+ - **Container Queries**: @container support for component-level responsiveness
29
+ - **Debug Mode**: Visual grid overlay (Cmd/Ctrl+G)
30
+
31
+ ---
32
+
33
+ ## Philosophy & Design Principles
34
+
35
+ ### Swiss Design Roots
36
+
37
+ The grid system follows Swiss/International Typographic Style principles:
38
+
39
+ 1. **Mathematical Precision**: Grid-based layouts with exact column/row placement
40
+ 2. **Hierarchy through Scale**: Z-index layering and responsive density changes
41
+ 3. **Rhythm & Harmony**: Baseline grid (0.25rem units) maintains vertical rhythm
42
+ 4. **Functional Clarity**: Components are named for their purpose, not appearance
43
+ 5. **Modular Composition**: Small, reusable components compose into complex layouts
44
+
45
+ ### Why CSS Subgrid?
46
+
47
+ Traditional grid systems require duplicating grid definitions at every level. **Subgrid** allows child grids to inherit parent grid lines, ensuring:
48
+
49
+ - Pixel-perfect alignment across nesting levels
50
+ - Single source of truth for grid configuration
51
+ - No "grid within grid" positioning calculations
52
+ - Simplified component APIs
53
+
54
+ ---
55
+
56
+ ## Architecture
57
+
58
+ ### Component Hierarchy
59
+
60
+ ```
61
+ MastMain (root grid container)
62
+ └── LayoutSection (subgrid, 12 rows)
63
+ └── LayoutGridItem (positioned on inherited grid lines)
64
+ └── Your Content
65
+ ```
66
+
67
+ ### CSS Utilities
68
+
69
+ The system provides three core CSS utilities (defined in `app/assets/css/layout/grids.css`):
70
+
71
+ 1. **`mastmain`** - Root grid container
72
+ 2. **`basesection`** - Full-viewport section using subgrid
73
+ 3. **`prose-rhythm`** - Typography vertical rhythm utilities
74
+
75
+ ---
76
+
77
+ ## Core Concepts
78
+
79
+ ### 1. Responsive Grid Density
80
+
81
+ The grid adapts its column count based on viewport width:
82
+
83
+ | Breakpoint | Width | Columns | CSS Variable |
84
+ |------------|-------|---------|--------------|
85
+ | Mobile | < 768px | 6 | `--grid-cols: 6` |
86
+ | Tablet | ≥ 768px | 12 | `--grid-cols: 12` |
87
+ | Desktop | ≥ 1280px | 18 | `--grid-cols: 18` |
88
+
89
+ **Breakpoints** are defined in `grids.css`:
90
+ - Tablet: `48rem` (768px)
91
+ - Desktop: `80rem` (1280px)
92
+
93
+ ### 2. Vertical Grid (12 Rows)
94
+
95
+ Each section spans **12 rows** that together fill **100vh**:
96
+
97
+ ```css
98
+ --grid-rows-per-section: 12;
99
+ --section-height: 100vh;
100
+ --grid-row-height: calc(
101
+ (var(--section-height) - (var(--grid-rows-per-section) - 1) * var(--grid-gap)) /
102
+ var(--grid-rows-per-section)
103
+ );
104
+ ```
105
+
106
+ On mobile (`width < 48rem`), sections grow beyond 12 rows if content requires it.
107
+
108
+ ### 3. Gap & Padding
109
+
110
+ - **Gap between columns/rows**: `clamp(0.75rem, 1.5vw, 1.5rem)` (12px → 24px)
111
+ - **Outer padding (gutters)**: `clamp(1rem, 2.5vw, 2rem)` (16px → 32px)
112
+
113
+ These are responsive and scale smoothly with viewport size.
114
+
115
+ ### 4. Baseline Rhythm
116
+
117
+ Typography and spacing snap to a **0.25rem (4px)** baseline grid:
118
+
119
+ ```css
120
+ --rhythm: 0.25rem;
121
+ ```
122
+
123
+ Utilities:
124
+ - `leading-rhythm-4` through `leading-rhythm-8` (line-height)
125
+ - `space-rhythm-1` through `space-rhythm-8` (margin-block)
126
+ - `prose-rhythm` (auto-apply rhythm to prose content)
127
+
128
+ ### 5. Layering System
129
+
130
+ Four semantic z-index layers defined in `app.config.ts`:
131
+
132
+ ```ts
133
+ layers: {
134
+ back: 0, // Background images, decorative elements
135
+ mid: 10, // Default content layer
136
+ front: 20, // Overlays, modals
137
+ top: 30, // Tooltips, dropdowns
138
+ }
139
+ ```
140
+
141
+ Use via `layer` prop on `<LayoutGridItem>`.
142
+
143
+ ---
144
+
145
+ ## Components Reference
146
+
147
+ ### `<LayoutSection>`
148
+
149
+ **File**: `app/components/Layout/Section/index.vue`
150
+
151
+ Full-viewport section using CSS subgrid. Inherits parent grid lines.
152
+
153
+ **Props**:
154
+ - `fullHeight?: boolean` - Force `min-h-svh` (default: `false`)
155
+ - `fullWidth?: boolean` - Break outside grid gutters for edge-to-edge content (default: `false`)
156
+
157
+ **CSS Utility**: `basesection`
158
+
159
+ **Usage**:
160
+ ```vue
161
+ <LayoutSection full-height>
162
+ <LayoutGridItem>Content</LayoutGridItem>
163
+ </LayoutSection>
164
+
165
+ <!-- Full-bleed section (breaks outside grid padding) -->
166
+ <LayoutSection full-width>
167
+ <div class="bg-black text-white p-8">
168
+ Edge-to-edge content with no gutters
169
+ </div>
170
+ </LayoutSection>
171
+ ```
172
+
173
+ ---
174
+
175
+ ### `<LayoutGridItem>`
176
+
177
+ **File**: `app/components/Layout/Grid/Item.vue`
178
+
179
+ Positions content on the parent section's grid using `grid-column` and `grid-row`.
180
+
181
+ **Props**:
182
+
183
+ | Prop | Type | Description |
184
+ |------|------|-------------|
185
+ | `as` | `string` | HTML element (default: `'div'`) |
186
+ | `preset` | `string` | Named preset: `'hero'`, `'centered'`, `'fullWidth'`, `'sidebar'`, `'content'` |
187
+ | `colStart` | `number \| ResponsiveValue<number>` | Starting column (1-18) |
188
+ | `colSpan` | `number \| ResponsiveValue<number>` | Columns to span (default: 1) |
189
+ | `rowStart` | `number \| ResponsiveValue<number>` | Starting row (1-12) |
190
+ | `rowSpan` | `number \| ResponsiveValue<number>` | Rows to span (default: 1) |
191
+ | `align` | `'start' \| 'center' \| 'end' \| 'stretch'` | Vertical alignment |
192
+ | `justify` | `'start' \| 'center' \| 'end' \| 'stretch'` | Horizontal alignment |
193
+ | `z` | `number` | Explicit z-index |
194
+ | `layer` | `'back' \| 'mid' \| 'front' \| 'top'` | Semantic layer |
195
+ | `bleed` | `'left' \| 'right' \| 'both'` | Edge bleed (ignores padding) |
196
+ | `aspect` | `'1/1' \| '4/3' \| '16/9'` etc. | Aspect ratio |
197
+
198
+ **ResponsiveValue Type**:
199
+ ```ts
200
+ interface ResponsiveValue<T> {
201
+ default: T
202
+ md?: T
203
+ lg?: T
204
+ }
205
+ ```
206
+
207
+ **Examples**:
208
+ ```vue
209
+ <!-- Using preset -->
210
+ <LayoutGridItem preset="hero">
211
+ <h1>Hero Content</h1>
212
+ </LayoutGridItem>
213
+
214
+ <!-- Responsive positioning -->
215
+ <LayoutGridItem
216
+ :col-start="{ default: 1, md: 2, lg: 4 }"
217
+ :col-span="{ default: 6, md: 10, lg: 12 }"
218
+ align="center"
219
+ layer="front"
220
+ >
221
+ Content
222
+ </LayoutGridItem>
223
+
224
+ <!-- Full-bleed background -->
225
+ <LayoutGridItem bleed="both" layer="back">
226
+ <NuxtImg src="/bg.jpg" class="size-full object-cover" />
227
+ </LayoutGridItem>
228
+ ```
229
+
230
+ ---
231
+
232
+ ### `<LayoutGridDebug>`
233
+
234
+ **File**: `app/components/Layout/Grid/Debug.vue`
235
+
236
+ Visual grid overlay for development. Toggle with **Cmd+G** (Mac) or **Ctrl+G** (Windows/Linux).
237
+
238
+ **Props**:
239
+ - `gap?: string` - Gap between columns (default: `clamp(0.75rem, 1.5vw, 1.5rem)`)
240
+ - `color?: string` - Overlay color (default: `rgba(255, 0, 0, 0.1)`)
241
+
242
+ **Usage**:
243
+ ```vue
244
+ <LayoutGridDebug />
245
+ ```
246
+
247
+ Automatically adapts to responsive grid density (6/12/18 columns).
248
+
249
+ ---
250
+
251
+ ### `<LayoutSectionHero>`
252
+
253
+ **File**: `app/components/Layout/Section/Hero.vue`
254
+
255
+ Pre-configured hero section with slots for background, main content, and footer.
256
+
257
+ **Props**:
258
+ - `fullHeight?: boolean` - Force `100svh` (default: `true`)
259
+
260
+ **Slots**:
261
+ - `background` - Full-bleed background layer (z: 0)
262
+ - `default` - Centered content (z: 10)
263
+ - `footer` - Bottom-aligned content (z: 10)
264
+
265
+ **Example**:
266
+ ```vue
267
+ <LayoutSectionHero>
268
+ <template #background>
269
+ <NuxtImg src="/hero.jpg" class="size-full object-cover" />
270
+ </template>
271
+
272
+ <h1>Welcome</h1>
273
+ <p>Subtitle text</p>
274
+
275
+ <template #footer>
276
+ <UButton to="/get-started">Get Started</UButton>
277
+ </template>
278
+ </LayoutSectionHero>
279
+ ```
280
+
281
+ ---
282
+
283
+ ### `<PageContainer>`
284
+
285
+ **File**: `app/components/Layout/Page/Container.vue`
286
+
287
+ Unified page wrapper integrating Swiss Grid or Nuxt UI's `<UPage>` layout.
288
+
289
+ **Props**:
290
+ - `title: string` - Page title (required, sets `<title>` and header)
291
+ - `description?: string` - Meta description for SEO
292
+ - `showHeader?: boolean` - Show visible page header (default: `true`)
293
+ - `headerPreset?: string` - Grid preset for header (default: `'centered'`)
294
+ - `layout?: 'grid' | 'upage'` - Layout mode (default: `'grid'`)
295
+
296
+ **Example**:
297
+ ```vue
298
+ <PageContainer
299
+ title="About Us"
300
+ description="Learn about our company"
301
+ header-preset="hero"
302
+ >
303
+ <LayoutSection>
304
+ <LayoutGridItem preset="centered">
305
+ <p>Page content</p>
306
+ </LayoutGridItem>
307
+ </LayoutSection>
308
+ </PageContainer>
309
+ ```
310
+
311
+ ---
312
+
313
+ ## Configuration & Customization
314
+
315
+ ### App Config (`app.config.ts`)
316
+
317
+ The grid system is fully configurable via `app.config.ts`:
318
+
319
+ ```ts
320
+ export default defineAppConfig({
321
+ layoutLayer: {
322
+ ui: {
323
+ grid: {
324
+ // Core settings
325
+ columns: { default: 6, md: 12, lg: 18 },
326
+ rowsPerSection: 12,
327
+ rhythm: '0.25rem',
328
+
329
+ // Z-index layers
330
+ layers: {
331
+ back: 0,
332
+ mid: 10,
333
+ front: 20,
334
+ top: 30,
335
+ },
336
+
337
+ // Preset layouts
338
+ presets: {
339
+ hero: {
340
+ colStart: { default: 1, md: 2, lg: 4 },
341
+ colSpan: { default: 6, md: 10, lg: 12 },
342
+ rowSpan: 12,
343
+ },
344
+ centered: {
345
+ colStart: { default: 1, md: 2, lg: 5 },
346
+ colSpan: { default: 6, md: 10, lg: 10 },
347
+ rowSpan: 12,
348
+ },
349
+ fullWidth: {
350
+ colStart: 1,
351
+ colSpan: { default: 6, md: 12, lg: 18 },
352
+ },
353
+ sidebar: {
354
+ colStart: { default: 1, md: 1, lg: 1 },
355
+ colSpan: { default: 6, md: 4, lg: 4 },
356
+ },
357
+ content: {
358
+ colStart: { default: 1, md: 5, lg: 5 },
359
+ colSpan: { default: 6, md: 8, lg: 14 },
360
+ },
361
+ },
362
+ },
363
+ },
364
+ },
365
+ })
366
+ ```
367
+
368
+ ### Type Definitions (`app/types/layouts.ts`)
369
+
370
+ ```ts
371
+ export interface ResponsiveValue<T> {
372
+ default: T
373
+ sm?: T
374
+ md?: T
375
+ lg?: T
376
+ xl?: T
377
+ }
378
+
379
+ export interface GridLayers {
380
+ back: number
381
+ mid: number
382
+ front: number
383
+ top: number
384
+ }
385
+
386
+ export interface GridPresetsItem {
387
+ colStart: number | ResponsiveValue<number>
388
+ colSpan: number | ResponsiveValue<number>
389
+ rowStart?: number | ResponsiveValue<number>
390
+ rowSpan?: number
391
+ }
392
+
393
+ export interface GridConfig {
394
+ columns: ResponsiveValue<number>
395
+ rowsPerSection: number
396
+ rhythm: string
397
+ layers: GridLayers
398
+ presets: GridPresets
399
+ }
400
+ ```
401
+
402
+ ---
403
+
404
+ ## Using with Nuxt Layers
405
+
406
+ ### Extending the Layer
407
+
408
+ In your consuming Nuxt project:
409
+
410
+ **1. Install the layer:**
411
+ ```bash
412
+ npm install @your-org/ui-layout-layer
413
+ ```
414
+
415
+ **2. Extend in `nuxt.config.ts`:**
416
+ ```ts
417
+ export default defineNuxtConfig({
418
+ extends: ['@your-org/ui-layout-layer'],
419
+ })
420
+ ```
421
+
422
+ **3. (Optional) Override grid configuration:**
423
+
424
+ Create your own `app.config.ts`:
425
+
426
+ ```ts
427
+ export default defineAppConfig({
428
+ layoutLayer: {
429
+ ui: {
430
+ grid: {
431
+ // Override columns
432
+ columns: { default: 4, md: 8, lg: 12 },
433
+
434
+ // Add custom presets
435
+ presets: {
436
+ ...useAppConfig().layoutLayer?.ui?.grid?.presets,
437
+ myCustomPreset: {
438
+ colStart: { default: 1, md: 3, lg: 5 },
439
+ colSpan: { default: 4, md: 6, lg: 8 },
440
+ },
441
+ },
442
+ },
443
+ },
444
+ },
445
+ })
446
+ ```
447
+
448
+ ### Using Components in Your Project
449
+
450
+ Components are auto-imported via Nuxt's component discovery:
451
+
452
+ ```vue
453
+ <template>
454
+ <LayoutSection>
455
+ <LayoutGridItem preset="hero">
456
+ <h1>My Page</h1>
457
+ </LayoutGridItem>
458
+ </LayoutSection>
459
+ </template>
460
+ ```
461
+
462
+ ### Creating Custom Layout Components
463
+
464
+ Extend the base components in your project:
465
+
466
+ ```vue
467
+ <!-- ~/components/MyCustomSection.vue -->
468
+ <template>
469
+ <LayoutSection full-height>
470
+ <LayoutGridItem bleed="both" layer="back">
471
+ <div class="gradient-background" />
472
+ </LayoutGridItem>
473
+
474
+ <LayoutGridItem preset="centered">
475
+ <slot />
476
+ </LayoutGridItem>
477
+ </LayoutSection>
478
+ </template>
479
+ ```
480
+
481
+ ### Root Layout Setup
482
+
483
+ In your project's `app.vue` or layout file, ensure the root grid is initialized:
484
+
485
+ ```vue
486
+ <template>
487
+ <div class="mastmain">
488
+ <NuxtPage />
489
+ </div>
490
+ </template>
491
+
492
+ <style>
493
+ /* Import layer CSS */
494
+ @import '@your-org/ui-layout-layer/app/assets/css/main.css';
495
+ </style>
496
+ ```
497
+
498
+ Or use auto-import via `nuxt.config.ts`:
499
+
500
+ ```ts
501
+ export default defineNuxtConfig({
502
+ css: ['@your-org/ui-layout-layer/app/assets/css/main.css'],
503
+ })
504
+ ```
505
+
506
+ ---
507
+
508
+ ## Examples
509
+
510
+ ### Example 1: Simple Centered Page
511
+
512
+ ```vue
513
+ <template>
514
+ <PageContainer title="About" description="About our company">
515
+ <LayoutSection>
516
+ <LayoutGridItem preset="centered">
517
+ <h1>About Us</h1>
518
+ <p>We build great products.</p>
519
+ </LayoutGridItem>
520
+ </LayoutSection>
521
+ </PageContainer>
522
+ </template>
523
+ ```
524
+
525
+ ---
526
+
527
+ ### Example 2: Hero Section with Background
528
+
529
+ ```vue
530
+ <template>
531
+ <LayoutSectionHero>
532
+ <template #background>
533
+ <NuxtImg
534
+ src="/hero-bg.jpg"
535
+ class="size-full object-cover"
536
+ alt=""
537
+ />
538
+ </template>
539
+
540
+ <div class="text-center">
541
+ <h1 class="text-5xl font-bold">Welcome to Our Site</h1>
542
+ <p class="text-xl mt-4">Building the future, one line at a time</p>
543
+ </div>
544
+
545
+ <template #footer>
546
+ <UButton size="xl" to="/signup">Get Started</UButton>
547
+ </template>
548
+ </LayoutSectionHero>
549
+ </template>
550
+ ```
551
+
552
+ ---
553
+
554
+ ### Example 3: Two-Column Layout
555
+
556
+ ```vue
557
+ <template>
558
+ <LayoutSection>
559
+ <!-- Sidebar -->
560
+ <LayoutGridItem
561
+ :col-start="{ default: 1, md: 1, lg: 1 }"
562
+ :col-span="{ default: 6, md: 4, lg: 5 }"
563
+ :row-span="12"
564
+ >
565
+ <aside>
566
+ <nav>Navigation items</nav>
567
+ </aside>
568
+ </LayoutGridItem>
569
+
570
+ <!-- Main content -->
571
+ <LayoutGridItem
572
+ :col-start="{ default: 1, md: 5, lg: 6 }"
573
+ :col-span="{ default: 6, md: 8, lg: 13 }"
574
+ :row-span="12"
575
+ >
576
+ <main>
577
+ <h1>Main Content</h1>
578
+ <p>Article text...</p>
579
+ </main>
580
+ </LayoutGridItem>
581
+ </LayoutSection>
582
+ </template>
583
+ ```
584
+
585
+ ---
586
+
587
+ ### Example 4: Gallery with Overlapping Items
588
+
589
+ ```vue
590
+ <template>
591
+ <LayoutSection>
592
+ <!-- Background image -->
593
+ <LayoutGridItem
594
+ :col-start="1"
595
+ :col-span="{ default: 6, md: 8, lg: 10 }"
596
+ :row-start="2"
597
+ :row-span="6"
598
+ layer="back"
599
+ >
600
+ <NuxtImg src="/image1.jpg" class="size-full object-cover" />
601
+ </LayoutGridItem>
602
+
603
+ <!-- Overlapping foreground image -->
604
+ <LayoutGridItem
605
+ :col-start="{ default: 3, md: 7, lg: 9 }"
606
+ :col-span="{ default: 4, md: 6, lg: 8 }"
607
+ :row-start="5"
608
+ :row-span="6"
609
+ layer="front"
610
+ >
611
+ <NuxtImg src="/image2.jpg" class="size-full object-cover shadow-xl" />
612
+ </LayoutGridItem>
613
+
614
+ <!-- Text overlay -->
615
+ <LayoutGridItem
616
+ :col-start="{ default: 2, md: 3, lg: 4 }"
617
+ :col-span="{ default: 4, md: 5, lg: 6 }"
618
+ :row-start="8"
619
+ :row-span="3"
620
+ layer="top"
621
+ align="center"
622
+ >
623
+ <div class="bg-white p-6">
624
+ <h2>Featured Work</h2>
625
+ </div>
626
+ </LayoutGridItem>
627
+ </LayoutSection>
628
+ </template>
629
+ ```
630
+
631
+ ---
632
+
633
+ ### Example 5: Using Presets with Overrides
634
+
635
+ ```vue
636
+ <template>
637
+ <LayoutSection>
638
+ <!-- Use preset but override row position -->
639
+ <LayoutGridItem
640
+ preset="hero"
641
+ :row-start="3"
642
+ :row-span="8"
643
+ >
644
+ <h1>Custom positioned hero content</h1>
645
+ </LayoutGridItem>
646
+ </LayoutSection>
647
+ </template>
648
+ ```
649
+
650
+ ---
651
+
652
+ ## Best Practices
653
+
654
+ ### 1. Always Use ResponsiveValue for Positioning
655
+
656
+ Instead of hardcoding values, use responsive objects:
657
+
658
+ ```vue
659
+ <!-- ❌ Don't -->
660
+ <LayoutGridItem :col-start="2" :col-span="10">
661
+
662
+ <!-- ✅ Do -->
663
+ <LayoutGridItem
664
+ :col-start="{ default: 1, md: 2, lg: 4 }"
665
+ :col-span="{ default: 6, md: 10, lg: 12 }"
666
+ >
667
+ ```
668
+
669
+ ### 2. Leverage Presets for Consistency
670
+
671
+ Define common layouts as presets in `app.config.ts`:
672
+
673
+ ```ts
674
+ presets: {
675
+ articleHeader: {
676
+ colStart: { default: 1, md: 3, lg: 5 },
677
+ colSpan: { default: 6, md: 8, lg: 10 },
678
+ rowStart: 2,
679
+ rowSpan: 3,
680
+ },
681
+ }
682
+ ```
683
+
684
+ Then use:
685
+ ```vue
686
+ <LayoutGridItem preset="articleHeader">
687
+ ```
688
+
689
+ ### 3. Use Semantic Layer Names
690
+
691
+ Instead of manual z-index values:
692
+
693
+ ```vue
694
+ <!-- ❌ Don't -->
695
+ <LayoutGridItem :z="5">
696
+
697
+ <!-- ✅ Do -->
698
+ <LayoutGridItem layer="back">
699
+ ```
700
+
701
+ ### 4. Bleed Only When Necessary
702
+
703
+ Full-bleed is great for backgrounds but should be used sparingly for content:
704
+
705
+ ```vue
706
+ <!-- Background image: full bleed -->
707
+ <LayoutGridItem bleed="both" layer="back">
708
+ <img src="/bg.jpg" />
709
+ </LayoutGridItem>
710
+
711
+ <!-- Content: respect grid gutters -->
712
+ <LayoutGridItem preset="centered">
713
+ <p>Readable content</p>
714
+ </LayoutGridItem>
715
+ ```
716
+
717
+ ### 5. Enable Grid Debug During Development
718
+
719
+ Add to your layout:
720
+
721
+ ```vue
722
+ <template>
723
+ <div class="mastmain">
724
+ <NuxtPage />
725
+ <LayoutGridDebug v-if="isDev" />
726
+ </div>
727
+ </template>
728
+
729
+ <script setup>
730
+ const isDev = process.dev
731
+ </script>
732
+ ```
733
+
734
+ Or use Cmd/Ctrl+G to toggle dynamically.
735
+
736
+ ### 6. Maintain Vertical Rhythm in Typography
737
+
738
+ Use rhythm utilities for consistent spacing:
739
+
740
+ ```vue
741
+ <div class="prose-rhythm">
742
+ <h1>Heading</h1>
743
+ <p>Paragraph with automatic rhythm spacing.</p>
744
+ <p>Another paragraph.</p>
745
+ </div>
746
+ ```
747
+
748
+ ### 7. Container Queries for Component-Level Responsiveness
749
+
750
+ `LayoutGridItem` includes `@container` support:
751
+
752
+ ```vue
753
+ <LayoutGridItem preset="sidebar">
754
+ <div class="@container/item">
755
+ <p class="text-sm @lg:text-base">Responsive to grid item width</p>
756
+ </div>
757
+ </LayoutGridItem>
758
+ ```
759
+
760
+ ### 8. Mobile-First Responsive Values
761
+
762
+ Always provide `default` (mobile) values first:
763
+
764
+ ```ts
765
+ // ✅ Mobile-first
766
+ colStart: { default: 1, md: 3, lg: 5 }
767
+
768
+ // ❌ Missing default
769
+ colStart: { md: 3, lg: 5 } // Will error
770
+ ```
771
+
772
+ ### 9. Avoid Deep Nesting
773
+
774
+ The grid is flat by design. Avoid nesting `<LayoutSection>` inside `<LayoutGridItem>`:
775
+
776
+ ```vue
777
+ <!-- ❌ Don't nest sections -->
778
+ <LayoutSection>
779
+ <LayoutGridItem>
780
+ <LayoutSection>...</LayoutSection>
781
+ </LayoutGridItem>
782
+ </LayoutSection>
783
+
784
+ <!-- ✅ Use sibling sections -->
785
+ <LayoutSection>...</LayoutSection>
786
+ <LayoutSection>...</LayoutSection>
787
+ ```
788
+
789
+ ### 10. Test Across Breakpoints
790
+
791
+ Always test your layouts at:
792
+ - Mobile: < 768px (6 columns)
793
+ - Tablet: 768px - 1279px (12 columns)
794
+ - Desktop: ≥ 1280px (18 columns)
795
+
796
+ Use responsive design mode in browser DevTools or the grid debug overlay.
797
+
798
+ ---
799
+
800
+ ## Composables
801
+
802
+ ### `useGridConfig()`
803
+
804
+ **File**: `app/composables/useGridConfig.ts`
805
+
806
+ Access grid configuration from `app.config.ts`:
807
+
808
+ ```ts
809
+ const { config, getPreset, layers } = useGridConfig()
810
+
811
+ const heroPreset = getPreset('hero')
812
+ // { colStart: { default: 1, md: 2, lg: 4 }, ... }
813
+
814
+ const allLayers = layers.value
815
+ // { back: 0, mid: 10, front: 20, top: 30 }
816
+ ```
817
+
818
+ **Returns**:
819
+ - `config` - Computed full grid config
820
+ - `getPreset(name: string)` - Get preset by name
821
+ - `layers` - Computed z-index layer values
822
+
823
+ ---
824
+
825
+ ## Tailwind Configuration
826
+
827
+ The layer includes a `tailwind.config.js` with safelist patterns for dynamic grid classes:
828
+
829
+ ```js
830
+ safelist: [
831
+ {
832
+ pattern: /^(md|lg):(col|row)-(start|span)-[0-9]+$/,
833
+ },
834
+ ],
835
+ ```
836
+
837
+ This ensures responsive grid utility classes are always generated, even when used with dynamic values.
838
+
839
+ ---
840
+
841
+ ## Browser Support
842
+
843
+ - **CSS Grid**: All modern browsers
844
+ - **CSS Subgrid**: Chrome 117+, Safari 16+, Firefox 71+
845
+ - **Container Queries**: Chrome 105+, Safari 16+, Firefox 110+
846
+
847
+ For older browsers, consider:
848
+ - Progressive enhancement (grid gracefully degrades)
849
+ - Polyfills (e.g., `css-grid-polyfill` for IE11)
850
+ - Feature detection (`@supports (grid-template-columns: subgrid)`)
851
+
852
+ ---
853
+
854
+ ## Troubleshooting
855
+
856
+ ### Grid Items Not Aligning
857
+
858
+ **Problem**: Items don't align to grid lines.
859
+
860
+ **Solution**: Ensure parent has `mastmain` or `basesection` utility class:
861
+ ```vue
862
+ <div class="mastmain">
863
+ <LayoutSection>...</LayoutSection>
864
+ </div>
865
+ ```
866
+
867
+ ### Responsive Values Not Working
868
+
869
+ **Problem**: `md:` or `lg:` classes not applying.
870
+
871
+ **Solution**: Check Tailwind safelist includes grid patterns (see `tailwind.config.js`).
872
+
873
+ ### Section Not Full Height
874
+
875
+ **Problem**: Section doesn't fill viewport.
876
+
877
+ **Solution**: Use `full-height` prop:
878
+ ```vue
879
+ <LayoutSection full-height>
880
+ ```
881
+
882
+ ### Grid Overflow on Mobile
883
+
884
+ **Problem**: Content overflows horizontally on mobile.
885
+
886
+ **Solution**: Ensure all `<LayoutGridItem>` have mobile-friendly `colSpan`:
887
+ ```vue
888
+ <LayoutGridItem :col-span="{ default: 6, md: 10, lg: 12 }">
889
+ ```
890
+
891
+ ### Preset Not Found
892
+
893
+ **Problem**: `getPreset('myPreset')` returns `undefined`.
894
+
895
+ **Solution**: Verify preset exists in `app.config.ts`:
896
+ ```ts
897
+ presets: {
898
+ myPreset: { ... }
899
+ }
900
+ ```
901
+
902
+ ---
903
+
904
+ ## Advanced Customization
905
+
906
+ ### Custom Breakpoints
907
+
908
+ Override breakpoints by extending the CSS:
909
+
910
+ ```css
911
+ /* Your project's CSS */
912
+ @import '@your-org/ui-layout-layer/app/assets/css/main.css';
913
+
914
+ @utility mastmain {
915
+ /* Override tablet breakpoint to 64rem (1024px) */
916
+ @media (width >= 64rem) {
917
+ :root {
918
+ --grid-cols: 12;
919
+ }
920
+ }
921
+ }
922
+ ```
923
+
924
+ ### Dynamic Grid Configuration
925
+
926
+ Use runtime config to dynamically adjust grid:
927
+
928
+ ```ts
929
+ // nuxt.config.ts
930
+ export default defineNuxtConfig({
931
+ runtimeConfig: {
932
+ public: {
933
+ gridColumns: {
934
+ default: 6,
935
+ md: 12,
936
+ lg: 18,
937
+ },
938
+ },
939
+ },
940
+ })
941
+ ```
942
+
943
+ Access in component:
944
+ ```ts
945
+ const config = useRuntimeConfig()
946
+ const columns = config.public.gridColumns
947
+ ```
948
+
949
+ ### Adding New Presets Programmatically
950
+
951
+ ```ts
952
+ // composables/useCustomPresets.ts
953
+ export function useCustomPresets() {
954
+ const { config } = useGridConfig()
955
+
956
+ const addPreset = (name: string, preset: GridPresetsItem) => {
957
+ if (config.value) {
958
+ config.value.presets[name] = preset
959
+ }
960
+ }
961
+
962
+ return { addPreset }
963
+ }
964
+ ```
965
+
966
+ ---
967
+
968
+ ## Resources
969
+
970
+ - [CSS Subgrid on MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_grid_layout/Subgrid)
971
+ - [Container Queries Guide](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_containment/Container_queries)
972
+ - [Josef Müller-Brockmann Grid Systems](https://www.amazon.com/Grid-Systems-Graphic-Design-Communication/dp/3721201450)
973
+ - [Nuxt Layers Documentation](https://nuxt.com/docs/getting-started/layers)
974
+ - [Tailwind CSS Grid Documentation](https://tailwindcss.com/docs/grid-template-columns)
975
+
976
+ ---
977
+
978
+ ## Contributing
979
+
980
+ When contributing to the grid system:
981
+
982
+ 1. Maintain backwards compatibility
983
+ 2. Document all new presets in `app.config.ts`
984
+ 3. Update types in `app/types/layouts.ts`
985
+ 4. Add examples to this documentation
986
+ 5. Test across all breakpoints (6/12/18 columns)
987
+ 6. Ensure mobile-first responsive design
988
+
989
+ ---
990
+
991
+ ## License
992
+
993
+ This layer is part of the Nuxt UI ecosystem. Refer to the project's LICENSE file for details.