kmcom-nuxt-layers 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/README.md +44 -0
  2. package/docs/ARCHITECTURE.md +196 -0
  3. package/docs/USAGE.md +175 -0
  4. package/layers/content/app/.DS_Store +0 -0
  5. package/layers/content/package.json +1 -1
  6. package/layers/core/app/.DS_Store +0 -0
  7. package/layers/core/nuxt.config.ts +1 -1
  8. package/layers/core/package.json +1 -2
  9. package/layers/forms/app/.DS_Store +0 -0
  10. package/layers/forms/package.json +1 -2
  11. package/layers/layout/app/.DS_Store +0 -0
  12. package/layers/layout/package.json +1 -2
  13. package/layers/motion/app/.DS_Store +0 -0
  14. package/layers/motion/package.json +1 -2
  15. package/layers/shader/app/.DS_Store +0 -0
  16. package/layers/shader/package.json +1 -1
  17. package/layers/theme/app/.DS_Store +0 -0
  18. package/layers/theme/package.json +1 -2
  19. package/layers/ui/app/.DS_Store +0 -0
  20. package/layers/ui/nuxt.config.ts +1 -1
  21. package/layers/ui/package.json +1 -1
  22. package/package.json +69 -3
  23. package/.claude/rules/nuxt-layers.md +0 -23
  24. package/.claude/rules/typescript.md +0 -16
  25. package/.claude/rules/vue-components.md +0 -34
  26. package/.claude/settings.local.json +0 -81
  27. package/.editorconfig +0 -27
  28. package/.github/workflows/npm-publish.yml +0 -33
  29. package/.oxlintrc.json +0 -10
  30. package/.prettierignore +0 -87
  31. package/CLAUDE.md +0 -71
  32. package/apps/playground/README.md +0 -75
  33. package/apps/playground/app/app.config.ts +0 -10
  34. package/apps/playground/app/app.vue +0 -12
  35. package/apps/playground/app/components/AmbientBackground.client.vue +0 -795
  36. package/apps/playground/app/components/ShaderDemoCanvas.client.vue +0 -636
  37. package/apps/playground/app/components/ShaderImageDemo.client.vue +0 -211
  38. package/apps/playground/app/pages/ambient.vue +0 -387
  39. package/apps/playground/app/pages/content.vue +0 -200
  40. package/apps/playground/app/pages/core.vue +0 -560
  41. package/apps/playground/app/pages/forms.vue +0 -645
  42. package/apps/playground/app/pages/index.vue +0 -257
  43. package/apps/playground/app/pages/layout.vue +0 -591
  44. package/apps/playground/app/pages/locomotive-scroll.vue +0 -738
  45. package/apps/playground/app/pages/motion.vue +0 -848
  46. package/apps/playground/app/pages/shader.vue +0 -1701
  47. package/apps/playground/app/pages/theme.vue +0 -115
  48. package/apps/playground/app/pages/ui.vue +0 -656
  49. package/apps/playground/content/blog/hello-world.md +0 -127
  50. package/apps/playground/content/blog/second-post.md +0 -99
  51. package/apps/playground/content/blog/third-post.md +0 -33
  52. package/apps/playground/content/gallery/autumn-collection.md +0 -57
  53. package/apps/playground/content/gallery/summer-collection.md +0 -52
  54. package/apps/playground/content/pages/index.md +0 -132
  55. package/apps/playground/content/portfolio/project-one.md +0 -90
  56. package/apps/playground/content/portfolio/project-two.md +0 -96
  57. package/apps/playground/content.config.ts +0 -93
  58. package/apps/playground/nuxt.config.ts +0 -99
  59. package/apps/playground/package.json +0 -17
  60. package/apps/playground/public/favicon.ico +0 -0
  61. package/apps/playground/public/robots.txt +0 -2
  62. package/apps/playground/tsconfig.json +0 -25
  63. package/eslint.config.mjs +0 -223
  64. package/eslint.configCOPY.mjs +0 -216
  65. package/eslintconfigCURRENT.mjs +0 -244
  66. package/eslintconfigOLD.mjs +0 -178
  67. package/files for claude/Scroller.vue +0 -31
  68. package/files for claude/TextMarquee.vue +0 -255
  69. package/files for claude/gsap.client.ts +0 -18
  70. package/files for claude/gsap.ts +0 -10
  71. package/files for claude/scroll.ts +0 -28
  72. package/layers/content/content.config.ts +0 -93
  73. package/layers/core/tailwind.config.js +0 -28
  74. package/layers/layout/.nuxtrc +0 -1
  75. package/layers/layout/CLAUDE.MD +0 -186
  76. package/layers/layout/GRID_SYSTEM.md +0 -993
  77. package/layers/layout/README.md +0 -73
  78. package/layers/layout/tailwind.config.js +0 -28
  79. package/layers/motion/README.md +0 -107
  80. package/layers/motion/TASKS.MD +0 -16
  81. package/layers/shader/AGENTS.MD +0 -195
  82. package/layers/shader/additional-modular-tsl-shaders-for-claude/.prettierignore +0 -6
  83. package/layers/shader/additional-modular-tsl-shaders-for-claude/.prettierrc +0 -18
  84. package/layers/shader/additional-modular-tsl-shaders-for-claude/LICENSE +0 -21
  85. package/layers/shader/additional-modular-tsl-shaders-for-claude/README.md +0 -100
  86. package/layers/shader/additional-modular-tsl-shaders-for-claude/index.html +0 -13
  87. package/layers/shader/additional-modular-tsl-shaders-for-claude/jsconfig.json +0 -30
  88. package/layers/shader/additional-modular-tsl-shaders-for-claude/package.json +0 -18
  89. package/layers/shader/additional-modular-tsl-shaders-for-claude/pnpm-lock.yaml +0 -633
  90. package/layers/shader/additional-modular-tsl-shaders-for-claude/public/vite.svg +0 -1
  91. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/components/sketch/webgpu_sketch.js +0 -128
  92. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/components/sketches_dropdown/index.css +0 -87
  93. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/components/sketches_dropdown/sketches_dropdown.js +0 -169
  94. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/index.css +0 -25
  95. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/main.js +0 -93
  96. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/router.js +0 -43
  97. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/sketches/flare-1.js +0 -68
  98. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/sketches/noise/dawn-1.js +0 -56
  99. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/distortion/bulge_distortion.js +0 -35
  100. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/distortion/swirl_distortion.js +0 -35
  101. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/distortion/wave_distortion.js +0 -43
  102. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/common.js +0 -145
  103. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/curl_noise_3d.js +0 -53
  104. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/curl_noise_4d.js +0 -55
  105. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/fbm.js +0 -163
  106. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/perlin_noise_3d.js +0 -70
  107. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/simplex_noise_3d.js +0 -59
  108. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/simplex_noise_4d.js +0 -72
  109. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/noise/turbulence.js +0 -41
  110. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/canvas_weave_pattern.js +0 -26
  111. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/grain_texture_pattern.js +0 -10
  112. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/led_pattern.js +0 -45
  113. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/pixellation_pattern.js +0 -15
  114. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/speckled_noise_pattern.js +0 -34
  115. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/patterns/vignette_pattern.js +0 -21
  116. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/bulge_distortion_effect.js +0 -27
  117. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/chromatic_aberration_effect.js +0 -45
  118. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/crt_scanline_effect.js +0 -45
  119. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/dither_effect.js +0 -126
  120. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/grain_texture_effect.js +0 -21
  121. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/halftone_effect.js +0 -44
  122. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/led_effect.js +0 -31
  123. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/pixellation_effect.js +0 -29
  124. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/swirl_distortion_effect.js +0 -25
  125. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/vignette_effect.js +0 -22
  126. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/post_processing/wave_distortion_effect.js +0 -27
  127. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/color/cosine_palette.js +0 -15
  128. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/color/tonemapping.js +0 -151
  129. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/bloom.js +0 -13
  130. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/bloom_edge_pattern.js +0 -20
  131. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/domain_index.js +0 -11
  132. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/median3.js +0 -22
  133. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/repeating_pattern.js +0 -13
  134. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/function/screen_aspect_uv.js +0 -14
  135. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/lighting.js +0 -60
  136. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/math/complex.js +0 -86
  137. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/math/coordinates.js +0 -119
  138. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/sdf/operations.js +0 -24
  139. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/tsl/utils/sdf/shapes.js +0 -182
  140. package/layers/shader/additional-modular-tsl-shaders-for-claude/src/utils/math.js +0 -33
  141. package/layers/shader/additional-modular-tsl-shaders-for-claude/vite.config.js +0 -23
  142. package/layers/shader/modular-tsl-shaders-for-claude/common/blend.tsl +0 -1
  143. package/layers/shader/modular-tsl-shaders-for-claude/common/noise.tsl +0 -1
  144. package/layers/shader/modular-tsl-shaders-for-claude/common/shapes.tsl +0 -1
  145. package/layers/shader/modular-tsl-shaders-for-claude/common/vertexFresnel.tsl +0 -9
  146. package/layers/shader/modular-tsl-shaders-for-claude/common/vertexPlane.tsl +0 -6
  147. package/layers/shader/modular-tsl-shaders-for-claude/effects/background.tsl +0 -1
  148. package/layers/shader/modular-tsl-shaders-for-claude/effects/gradient.tsl +0 -1
  149. package/layers/shader/modular-tsl-shaders-for-claude/effects/gradientLegend.tsl +0 -1
  150. package/layers/shader/modular-tsl-shaders-for-claude/effects/simpleGradient.tsl +0 -1
  151. package/layers/shader/modular-tsl-shaders-for-claude/layers/aurora.ts +0 -1
  152. package/layers/shader/modular-tsl-shaders-for-claude/layers/fragmentsTech.ts +0 -1
  153. package/layers/shader/modular-tsl-shaders-for-claude/layers/fresnel.ts +0 -1
  154. package/layers/shader/modular-tsl-shaders-for-claude/layers/linearGradient.ts +0 -1
  155. package/layers/shader/modular-tsl-shaders-for-claude/layers/meshGradient.ts +0 -1
  156. package/layers/shader/modular-tsl-shaders-for-claude/layers/noise.ts +0 -1
  157. package/layers/shader/modular-tsl-shaders-for-claude/layers/paperShading.ts +0 -1
  158. package/layers/shader/modular-tsl-shaders-for-claude/layers/radial.ts +0 -1
  159. package/layers/shader/modular-tsl-shaders-for-claude/layers/shaderGradient.ts +0 -1
  160. package/layers/shader/modular-tsl-shaders-for-claude/layers/stripe.ts +0 -1
  161. package/layers/shader/modular-tsl-shaders-for-claude/materials/createMaterial.ts +0 -1
  162. package/layers/shader/modular-tsl-shaders-for-claude/utils/glslUtils.ts +0 -1
  163. package/layers/shader/modular-tsl-shaders-for-claude/utils/palette.ts +0 -1
  164. package/layers/theme/server/plugins/theme-fouc.ts +0 -51
  165. package/layers/ui/CLAUDE.MD +0 -325
  166. package/playgroundOLD/app.config.ts +0 -5
  167. package/playgroundOLD/nuxt.config.ts +0 -12
  168. package/pnpm-workspace.yaml +0 -6
  169. package/prettier.config.cjs +0 -19
  170. package/stylelint.config.mjs +0 -111
  171. package/turbo.json +0 -16
package/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # kmcom-nuxt-layers
2
+
3
+ Composable Nuxt 4 layers for building scalable Vue applications. Pick only the layers you need.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ npm install kmcom-nuxt-layers
9
+ ```
10
+
11
+ ```ts
12
+ // nuxt.config.ts
13
+ export default defineNuxtConfig({
14
+ extends: [
15
+ 'kmcom-nuxt-layers/layers/core',
16
+ 'kmcom-nuxt-layers/layers/ui',
17
+ // add more layers as needed
18
+ ]
19
+ })
20
+ ```
21
+
22
+ ## Layers
23
+
24
+ | Layer | Description |
25
+ |-------|-------------|
26
+ | **core** | Foundation — Nuxt UI, VueUse, Pinia, loading screen, error handling, scroll guard |
27
+ | **ui** | Design system — typography, color, media, branding components |
28
+ | **layout** | Page structure — grids, containers, spacing |
29
+ | **motion** | Animations — GSAP, Locomotive Scroll |
30
+ | **shader** | 3D / WebGPU — Three.js, TresJS |
31
+ | **forms** | Validation — Zod-based form system |
32
+ | **theme** | Theming — color mode, accent colors |
33
+ | **content** | CMS — @nuxt/content, Nuxt Studio |
34
+
35
+ All layers depend on `core`. Always list `core` first in `extends`.
36
+
37
+ ## Documentation
38
+
39
+ - **[Usage Guide](docs/USAGE.md)** — installation, configuration examples, layer dependencies
40
+ - **[Architecture](docs/ARCHITECTURE.md)** — internal structure, alias system, dev workflow
41
+
42
+ ## License
43
+
44
+ ISC
@@ -0,0 +1,196 @@
1
+ # Architecture
2
+
3
+ Internal documentation for the `kmcom-nuxt-layers` monorepo.
4
+
5
+ ## Monorepo Structure
6
+
7
+ ```
8
+ nuxt-layers/
9
+ ├── apps/
10
+ │ └── playground/ # Demo / development Nuxt app
11
+ ├── layers/
12
+ │ ├── core/ # Base utilities, plugins, error handling
13
+ │ ├── ui/ # Typography, color, media primitives
14
+ │ ├── layout/ # Grid, containers, page structure
15
+ │ ├── motion/ # GSAP + Locomotive Scroll animations
16
+ │ ├── shader/ # Three.js / TresJS WebGPU shaders
17
+ │ ├── forms/ # Zod-based form validation
18
+ │ ├── theme/ # Color mode, accent colors, accessibility
19
+ │ └── content/ # @nuxt/content integration, Nuxt Studio
20
+ ├── packages/ # Shared utilities (placeholder)
21
+ ├── pnpm-workspace.yaml
22
+ ├── turbo.json
23
+ └── package.json
24
+ ```
25
+
26
+ **Tooling:** pnpm workspaces for dependency management, Turbo for parallel task orchestration (`build`, `dev`, `lint`, `typecheck`).
27
+
28
+ ## Layer Pattern
29
+
30
+ Each layer under `layers/` is an independent Nuxt-extendable package. A layer's `package.json` declares `"main": "./nuxt.config.ts"`, making it resolvable by Nuxt's `extends` mechanism.
31
+
32
+ Typical layer directory structure:
33
+
34
+ ```
35
+ layers/<name>/
36
+ ├── nuxt.config.ts # Layer config (alias, modules, css, plugins)
37
+ ├── app.config.ts # Typed runtime config with defaults
38
+ ├── package.json # name, main, dependencies
39
+ ├── app/
40
+ │ ├── assets/css/main.css # Layer-specific CSS
41
+ │ ├── components/ # Auto-imported Vue components
42
+ │ ├── composables/ # Auto-imported composables
43
+ │ ├── plugins/ # Nuxt plugins
44
+ │ ├── types/ # TypeScript type definitions
45
+ │ └── utils/ # Utility functions
46
+ └── .playground/ # Isolated dev/test app for this layer
47
+ ```
48
+
49
+ ## Alias System
50
+
51
+ Each layer registers a `#layers/<name>` alias pointing to its own root directory via `import.meta.dirname`:
52
+
53
+ ```ts
54
+ // layers/core/nuxt.config.ts
55
+ alias: {
56
+ '#layers/core': import.meta.dirname,
57
+ }
58
+ ```
59
+
60
+ This allows layers to reference their own files with stable paths that resolve correctly both in the monorepo and when consumed from `node_modules`:
61
+
62
+ ```ts
63
+ css: ['#layers/core/app/assets/css/main.css'],
64
+ plugins: ['#layers/core/app/plugins/init.ts'],
65
+ ```
66
+
67
+ ## Layer Dependency Graph
68
+
69
+ ```
70
+ core (foundation — no dependencies)
71
+ ├── ui (typography, color, media)
72
+ ├── layout (grid, containers)
73
+ ├── motion (GSAP, Locomotive Scroll)
74
+ ├── shader (Three.js, TresJS)
75
+ ├── forms (Zod validation)
76
+ ├── theme (color mode, accents)
77
+ └── content (@nuxt/content, Nuxt Studio)
78
+ ```
79
+
80
+ All layers depend on `core`. The `core` layer must always be listed first in `extends`.
81
+
82
+ ## Playground Composition System
83
+
84
+ The `apps/playground/nuxt.config.ts` supports selective layer loading via the `PLAYGROUND_LAYERS` environment variable.
85
+
86
+ ```bash
87
+ # Load only core + ui
88
+ PLAYGROUND_LAYERS=core,ui pnpm -F playground dev
89
+
90
+ # Load all layers (default when env var is unset)
91
+ pnpm dev
92
+ ```
93
+
94
+ The `resolveExtendedLayers()` function:
95
+ 1. Parses `PLAYGROUND_LAYERS` as a comma-separated list
96
+ 2. Auto-includes each layer's dependencies (defined in `LAYER_DEPENDENCIES`)
97
+ 3. Returns paths in correct order (dependencies first, following `AVAILABLE_LAYERS` order)
98
+
99
+ ## CSS Cascade
100
+
101
+ Each layer loads its own CSS via the `css` array in `nuxt.config.ts`:
102
+
103
+ ```ts
104
+ css: ['#layers/<name>/app/assets/css/main.css']
105
+ ```
106
+
107
+ - **core** imports Tailwind CSS 4 and Nuxt UI base styles
108
+ - **theme** uses a separate `theme.css` file for color mode variables
109
+ - Layer CSS is loaded in `extends` order, so core styles are always available to downstream layers
110
+
111
+ ## Component Auto-Import
112
+
113
+ Nuxt auto-discovers components from all extended layers' `app/components/` directories. No manual registration needed.
114
+
115
+ The shader layer uses explicit component registration with `global: true` for its WebGPU components:
116
+
117
+ ```ts
118
+ components: [{
119
+ path: './app/components',
120
+ pathPrefix: false,
121
+ global: true,
122
+ }]
123
+ ```
124
+
125
+ ## app.config.ts
126
+
127
+ Each layer provides typed runtime configuration via `app.config.ts` with sensible defaults. Consumers can override any value in their own `app.config.ts`.
128
+
129
+ Key config namespaces:
130
+ - `coreLayer` — loading screen, error handling, scroll guard, 404 page
131
+ - `motion` — Lenis smooth scroll, GSAP ScrollTrigger integration
132
+ - `themeLayer` — accent colors, default accent
133
+
134
+ Type augmentation is done via `declare module '@nuxt/schema'` in each layer's `app.config.ts`.
135
+
136
+ ## Git Subtree Management
137
+
138
+ Layers are managed as git subtrees from separate upstream repositories:
139
+
140
+ ```bash
141
+ # Push layer changes to upstream
142
+ git subtree push --prefix=layers/<layer> <remote-url> main
143
+
144
+ # Pull updates from upstream
145
+ git subtree pull --prefix=layers/<layer> <remote-url> main --squash
146
+ ```
147
+
148
+ Always commit changes to the monorepo first, then push to upstream if needed.
149
+
150
+ ## Dev Workflow
151
+
152
+ ```bash
153
+ # Start all layers via playground
154
+ pnpm dev
155
+
156
+ # Start specific layer combinations
157
+ pnpm dev:core # core only
158
+ pnpm dev:ui # core + ui
159
+ pnpm dev:layout # core + ui + layout
160
+ pnpm dev:motion # core + motion
161
+
162
+ # Build / lint / typecheck (all packages via Turbo)
163
+ pnpm build
164
+ pnpm lint
165
+ pnpm typecheck
166
+
167
+ # Layer-specific tasks
168
+ pnpm layer:core # turbo dev for core
169
+ pnpm build:core # turbo build for core
170
+
171
+ # Clean everything
172
+ pnpm clean
173
+ ```
174
+
175
+ ## .playground Directories
176
+
177
+ Each layer has a `.playground/` directory containing a minimal Nuxt app for isolated development and testing of that layer. These are used by the `dev` script in each layer's `package.json`:
178
+
179
+ ```bash
180
+ cd layers/core && pnpm dev # runs nuxi dev .playground
181
+ ```
182
+
183
+ Some layers (ui, content) support standalone mode via environment variables (`UI_STANDALONE`, `CONTENT_STANDALONE`) which auto-extends core when running outside the monorepo playground.
184
+
185
+ ## Layer Details
186
+
187
+ | Layer | Description |
188
+ |-------|-------------|
189
+ | **core** | Foundation layer. Nuxt UI, VueUse, device detection, Pinia, loading screen, error handler, scroll guard, feature detection, PWA support (production only). |
190
+ | **ui** | Design system primitives. Typography components (Headline, CodeBlock, QuoteBlock), color system, media/picture component, site branding, breakpoint types. |
191
+ | **layout** | Page structure. Grid systems, containers, spacing, layout compositions with breakpoint-based responsiveness. |
192
+ | **motion** | Animation layer. GSAP with ScrollTrigger, Locomotive Scroll (Lenis) smooth scrolling, motion composables. Transpiles GSAP for SSR. |
193
+ | **shader** | WebGPU/WebGL layer. Three.js + TresJS integration, TSL shader support, post-processing. Includes custom shader utilities and auto-imported shader modules. |
194
+ | **forms** | Form validation layer. Zod schema-based validation, form composables, typed form components. |
195
+ | **theme** | Theming layer. Color mode switching, accent color palette, theme plugin, CSS custom properties for dynamic theming. |
196
+ | **content** | Content management layer. @nuxt/content integration, better-sqlite3 for local content DB, optional Nuxt Studio support. |
package/docs/USAGE.md ADDED
@@ -0,0 +1,175 @@
1
+ # Usage Guide
2
+
3
+ How to consume `kmcom-nuxt-layers` in your Nuxt 4 project.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install kmcom-nuxt-layers
9
+ ```
10
+
11
+ ## Basic Usage
12
+
13
+ Add layers to the `extends` array in your `nuxt.config.ts`. Each layer is referenced by its filesystem path within the package:
14
+
15
+ ```ts
16
+ // nuxt.config.ts
17
+ export default defineNuxtConfig({
18
+ extends: [
19
+ 'kmcom-nuxt-layers/layers/core',
20
+ 'kmcom-nuxt-layers/layers/ui',
21
+ ]
22
+ })
23
+ ```
24
+
25
+ Nuxt resolves each layer via the `package.json` → `"main": "./nuxt.config.ts"` entry. No import maps or special configuration needed.
26
+
27
+ ## Available Layers
28
+
29
+ | Layer | Extends Path | Depends On | Required Dependencies |
30
+ |-------|-------------|------------|----------------------|
31
+ | **core** | `kmcom-nuxt-layers/layers/core` | — | `nuxt`, `@nuxt/ui`, `pinia`, `@vueuse/nuxt`, `@nuxtjs/device` |
32
+ | **ui** | `kmcom-nuxt-layers/layers/ui` | core | — |
33
+ | **layout** | `kmcom-nuxt-layers/layers/layout` | core | — |
34
+ | **motion** | `kmcom-nuxt-layers/layers/motion` | core | `gsap`, `locomotive-scroll` |
35
+ | **shader** | `kmcom-nuxt-layers/layers/shader` | core | `three`, `@tresjs/nuxt`, `@tresjs/core`, `@tresjs/cientos`, `@tresjs/post-processing` |
36
+ | **forms** | `kmcom-nuxt-layers/layers/forms` | core | `zod` |
37
+ | **theme** | `kmcom-nuxt-layers/layers/theme` | core | — |
38
+ | **content** | `kmcom-nuxt-layers/layers/content` | core | `@nuxt/content`, `better-sqlite3` |
39
+
40
+ ## Layer Dependency Rules
41
+
42
+ 1. **Always include `core` first** — all other layers depend on it
43
+ 2. **Order matters** — list `core` before any layer that depends on it
44
+ 3. **Only include what you need** — each layer is independent (apart from the core dependency)
45
+
46
+ ## Layer-Specific Dependencies
47
+
48
+ Install additional dependencies only for the layers you use:
49
+
50
+ ```bash
51
+ # Motion layer
52
+ npm install gsap locomotive-scroll
53
+
54
+ # Shader layer
55
+ npm install three @tresjs/nuxt @tresjs/core @tresjs/cientos @tresjs/post-processing
56
+
57
+ # Forms layer
58
+ npm install zod
59
+
60
+ # Content layer
61
+ npm install @nuxt/content better-sqlite3
62
+ ```
63
+
64
+ ## Configuration Examples
65
+
66
+ ### Core + UI (design system)
67
+
68
+ ```ts
69
+ export default defineNuxtConfig({
70
+ extends: [
71
+ 'kmcom-nuxt-layers/layers/core',
72
+ 'kmcom-nuxt-layers/layers/ui',
73
+ ]
74
+ })
75
+ ```
76
+
77
+ ### Core + UI + Layout (full page structure)
78
+
79
+ ```ts
80
+ export default defineNuxtConfig({
81
+ extends: [
82
+ 'kmcom-nuxt-layers/layers/core',
83
+ 'kmcom-nuxt-layers/layers/ui',
84
+ 'kmcom-nuxt-layers/layers/layout',
85
+ ]
86
+ })
87
+ ```
88
+
89
+ ### Core + Motion (animations)
90
+
91
+ ```bash
92
+ npm install gsap locomotive-scroll
93
+ ```
94
+
95
+ ```ts
96
+ export default defineNuxtConfig({
97
+ extends: [
98
+ 'kmcom-nuxt-layers/layers/core',
99
+ 'kmcom-nuxt-layers/layers/motion',
100
+ ]
101
+ })
102
+ ```
103
+
104
+ ### Full Stack
105
+
106
+ ```bash
107
+ npm install gsap locomotive-scroll three @tresjs/nuxt @tresjs/core @tresjs/cientos @tresjs/post-processing zod @nuxt/content better-sqlite3
108
+ ```
109
+
110
+ ```ts
111
+ export default defineNuxtConfig({
112
+ extends: [
113
+ 'kmcom-nuxt-layers/layers/core',
114
+ 'kmcom-nuxt-layers/layers/ui',
115
+ 'kmcom-nuxt-layers/layers/layout',
116
+ 'kmcom-nuxt-layers/layers/motion',
117
+ 'kmcom-nuxt-layers/layers/shader',
118
+ 'kmcom-nuxt-layers/layers/forms',
119
+ 'kmcom-nuxt-layers/layers/theme',
120
+ 'kmcom-nuxt-layers/layers/content',
121
+ ]
122
+ })
123
+ ```
124
+
125
+ ## Overriding Layer Config
126
+
127
+ Each layer provides typed runtime defaults via `app.config.ts`. Override any value in your own `app.config.ts`:
128
+
129
+ ```ts
130
+ // app.config.ts
131
+ export default defineAppConfig({
132
+ // Core layer overrides
133
+ coreLayer: {
134
+ loading: {
135
+ enabled: false, // Disable loading screen
136
+ },
137
+ scrollGuard: {
138
+ enabled: false, // Disable scroll guard
139
+ },
140
+ },
141
+
142
+ // Motion layer overrides
143
+ motion: {
144
+ lenis: {
145
+ duration: 0.8, // Faster smooth scroll
146
+ smoothTouch: true, // Enable on touch devices
147
+ },
148
+ },
149
+
150
+ // Theme layer overrides
151
+ themeLayer: {
152
+ defaultAccent: 'indigo', // Change default accent color
153
+ accents: ['blue', 'indigo', 'violet', 'purple'], // Limit palette
154
+ },
155
+ })
156
+ ```
157
+
158
+ ### Available Config Namespaces
159
+
160
+ | Namespace | Layer | Key Options |
161
+ |-----------|-------|-------------|
162
+ | `coreLayer.loading` | core | `enabled`, `minDuration`, `maxDuration`, `background`, `textColor` |
163
+ | `coreLayer.scrollGuard` | core | `enabled`, `strict`, `excludeSelectors`, `debug` |
164
+ | `coreLayer.errors` | core | `logToConsole`, `logToExternal`, `externalUrl` |
165
+ | `coreLayer.notFound` | core | `icon`, `title`, `description`, `showHomeButton`, `actions`, `suggestions` |
166
+ | `motion` | motion | `gsapScrollTrigger`, `lenis.*` (duration, smoothWheel, smoothTouch, etc.) |
167
+ | `themeLayer` | theme | `accents`, `defaultAccent` |
168
+
169
+ ## Optional Modules
170
+
171
+ Some modules used in the layers are optional or dev-only:
172
+
173
+ - **`@nuxt/eslint`** — Loaded only in development (`NODE_ENV !== 'production'`). Install if you want layer-provided ESLint config during dev.
174
+ - **`@vite-pwa/nuxt`** — Loaded only in production by the core layer. Install if you want PWA support.
175
+ - **`nuxt-studio`** — Optional peer dependency of the content layer. Install for Nuxt Studio CMS integration.
Binary file
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "content",
2
+ "name": "kmcom-layer-content",
3
3
  "type": "module",
4
4
  "version": "0.0.1",
5
5
  "main": "./nuxt.config.ts",
Binary file
@@ -10,7 +10,7 @@ export default defineNuxtConfig({
10
10
 
11
11
  // Base modules (always loaded)
12
12
  modules: [
13
- '@nuxt/eslint',
13
+ ...(process.env.NODE_ENV !== 'production' ? ['@nuxt/eslint'] : []),
14
14
  '@nuxt/ui',
15
15
  // '@nuxt/image'
16
16
  '@vueuse/nuxt',
@@ -1,7 +1,6 @@
1
1
  {
2
- "name": "@layers/core",
2
+ "name": "kmcom-layer-core",
3
3
  "version": "0.0.1",
4
- "private": true,
5
4
  "type": "module",
6
5
  "main": "./nuxt.config.ts",
7
6
  "scripts": {
Binary file
@@ -1,7 +1,6 @@
1
1
  {
2
- "name": "@layers/forms",
2
+ "name": "kmcom-layer-forms",
3
3
  "version": "0.0.1",
4
- "private": true,
5
4
  "type": "module",
6
5
  "main": "./nuxt.config.ts",
7
6
  "scripts": {
Binary file
@@ -1,8 +1,7 @@
1
1
  {
2
- "name": "layout",
2
+ "name": "kmcom-layer-layout",
3
3
  "type": "module",
4
4
  "version": "0.0.1",
5
- "private": true,
6
5
  "main": "./nuxt.config.ts",
7
6
  "scripts": {
8
7
  "dev": "nuxi dev .playground",
Binary file
@@ -1,7 +1,6 @@
1
1
  {
2
- "name": "motion",
2
+ "name": "kmcom-layer-motion",
3
3
  "version": "0.0.1",
4
- "private": true,
5
4
  "type": "module",
6
5
  "main": "./nuxt.config.ts",
7
6
  "scripts": {
Binary file
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "@nuxt-layers/shader",
2
+ "name": "kmcom-layer-shader",
3
3
  "version": "0.0.1",
4
4
  "type": "module",
5
5
  "main": "./nuxt.config.ts",
Binary file
@@ -1,7 +1,6 @@
1
1
  {
2
- "name": "@layers/theme",
2
+ "name": "kmcom-layer-theme",
3
3
  "version": "0.0.1",
4
- "private": true,
5
4
  "type": "module",
6
5
  "main": "./nuxt.config.ts",
7
6
  "scripts": {
Binary file
@@ -12,7 +12,7 @@ export default defineNuxtConfig({
12
12
  },
13
13
 
14
14
  modules: [
15
- '@nuxt/eslint',
15
+ ...(process.env.NODE_ENV !== 'production' ? ['@nuxt/eslint'] : []),
16
16
  '@nuxt/ui',
17
17
  // '@nuxt/image'
18
18
  ],
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "ui",
2
+ "name": "kmcom-layer-ui",
3
3
  "type": "module",
4
4
  "version": "0.0.1",
5
5
  "main": "./nuxt.config.ts",
package/package.json CHANGED
@@ -1,8 +1,16 @@
1
1
  {
2
2
  "name": "kmcom-nuxt-layers",
3
3
  "private": false,
4
- "version": "1.0.2",
5
- "description": "",
4
+ "version": "1.1.0",
5
+ "description": "Composable Nuxt 4 layers for building scalable Vue applications",
6
+ "files": [
7
+ "layers/*/nuxt.config.ts",
8
+ "layers/*/app.config.ts",
9
+ "layers/*/package.json",
10
+ "layers/*/tsconfig.json",
11
+ "layers/*/app/**",
12
+ "docs/"
13
+ ],
6
14
  "keywords": [],
7
15
  "author": "Kieran Mansfield",
8
16
  "license": "ISC",
@@ -15,7 +23,65 @@
15
23
  "nuxt": "^4.0.0",
16
24
  "@nuxt/ui": "^4.0.0",
17
25
  "pinia": "^3.0.0",
18
- "@vueuse/nuxt": "^14.0.0"
26
+ "@vueuse/nuxt": "^14.0.0",
27
+ "@nuxtjs/device": "^4.0.0",
28
+ "gsap": "^3.12.0",
29
+ "locomotive-scroll": "^5.0.0",
30
+ "three": "^0.170.0",
31
+ "@tresjs/nuxt": "^5.0.0",
32
+ "@tresjs/core": "^5.0.0",
33
+ "@tresjs/cientos": "^5.0.0",
34
+ "@tresjs/post-processing": "^3.0.0",
35
+ "zod": "^3.20.0",
36
+ "@nuxt/content": "^3.0.0",
37
+ "better-sqlite3": "^12.0.0",
38
+ "@nuxt/eslint": "^1.0.0",
39
+ "@vite-pwa/nuxt": "^1.0.0",
40
+ "nuxt-studio": "^1.0.0"
41
+ },
42
+ "peerDependenciesMeta": {
43
+ "@nuxtjs/device": {
44
+ "optional": true
45
+ },
46
+ "gsap": {
47
+ "optional": true
48
+ },
49
+ "locomotive-scroll": {
50
+ "optional": true
51
+ },
52
+ "three": {
53
+ "optional": true
54
+ },
55
+ "@tresjs/nuxt": {
56
+ "optional": true
57
+ },
58
+ "@tresjs/core": {
59
+ "optional": true
60
+ },
61
+ "@tresjs/cientos": {
62
+ "optional": true
63
+ },
64
+ "@tresjs/post-processing": {
65
+ "optional": true
66
+ },
67
+ "zod": {
68
+ "optional": true
69
+ },
70
+ "@nuxt/content": {
71
+ "optional": true
72
+ },
73
+ "better-sqlite3": {
74
+ "optional": true
75
+ },
76
+ "@nuxt/eslint": {
77
+ "optional": true
78
+ },
79
+ "@vite-pwa/nuxt": {
80
+ "optional": true
81
+ },
82
+ "nuxt-studio": {
83
+ "optional": true
84
+ }
19
85
  },
20
86
  "devDependencies": {
21
87
  "@commitlint/cli": "^20.4.1",
@@ -1,23 +0,0 @@
1
- ---
2
- paths:
3
- - "layers/**/*"
4
- ---
5
-
6
- # Nuxt Layers Development
7
-
8
- ## Layer Structure
9
- Each layer is an independent package that extends Nuxt apps with:
10
- - Components (`components/`)
11
- - Composables (`composables/`)
12
- - Utilities (`utils/`)
13
- - Nuxt config (`nuxt.config.ts`)
14
-
15
- ## Best Practices
16
- - Layers should be self-contained and composable
17
- - Avoid circular dependencies between layers
18
- - Test changes against the playground app
19
-
20
- ## Layer Dependencies
21
- - `ui` → depends on nothing
22
- - `layout` → may use `ui` components
23
- - `core` → base utilities, no UI dependencies
@@ -1,16 +0,0 @@
1
- ---
2
- paths:
3
- - "**/*.ts"
4
- - "**/*.tsx"
5
- ---
6
-
7
- # TypeScript Conventions
8
-
9
- ## Style
10
- - No semicolons, single quotes, ES5 trailing commas
11
- - Max line length: 100 characters
12
-
13
- ## Type Definitions
14
- - Prefer interfaces for object shapes
15
- - Use type aliases for unions/intersections
16
- - Export types alongside implementations