kmcom-nuxt-layers 1.7.9 → 2.2.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 (519) hide show
  1. package/layers/animations/nuxt.config.ts +17 -0
  2. package/layers/animations/package.json +6 -0
  3. package/layers/animations/tsconfig.json +7 -0
  4. package/layers/canvas/app/components/ShaderCanvas.vue +125 -0
  5. package/layers/{shader → canvas}/app/composables/useRendererCapabilities.ts +10 -2
  6. package/layers/{shader → canvas}/app/composables/useShaderTime.ts +3 -3
  7. package/layers/canvas/app/types/renderer.ts +50 -0
  8. package/layers/canvas/nuxt.config.ts +189 -0
  9. package/layers/canvas/package.json +22 -0
  10. package/layers/canvas/tsconfig.json +7 -0
  11. package/layers/content/app/components/Blog/Article.vue +12 -6
  12. package/layers/content/app/components/Blog/Card.vue +24 -24
  13. package/layers/content/app/components/Blog/List.vue +8 -11
  14. package/layers/content/app/components/Gallery/AmbientImage.vue +15 -15
  15. package/layers/content/app/components/Gallery/Card.vue +19 -19
  16. package/layers/content/app/components/Gallery/Detail.vue +29 -20
  17. package/layers/content/app/components/Gallery/Grid.vue +8 -11
  18. package/layers/content/app/components/Gallery/ImageDetail.vue +18 -17
  19. package/layers/content/app/components/Gallery/ImagePage.vue +8 -9
  20. package/layers/content/app/components/Gallery/Lightbox.vue +38 -33
  21. package/layers/content/app/components/Gallery/Page.vue +8 -8
  22. package/layers/content/app/components/Gallery/SlugPage.vue +7 -8
  23. package/layers/content/app/components/NuxtContent/Detail.vue +29 -27
  24. package/layers/content/app/components/NuxtContent/List.vue +10 -9
  25. package/layers/content/app/components/NuxtContent/Renderer.vue +4 -4
  26. package/layers/content/app/components/NuxtContent/Surround.vue +3 -3
  27. package/layers/content/app/components/NuxtContent/Toc.vue +5 -5
  28. package/layers/content/app/components/Portfolio/Card.vue +17 -17
  29. package/layers/content/app/components/Portfolio/ColorPalette.vue +11 -11
  30. package/layers/content/app/components/Portfolio/Detail.vue +9 -13
  31. package/layers/content/app/components/Portfolio/ItemPage.vue +8 -9
  32. package/layers/content/app/components/Portfolio/List.vue +10 -13
  33. package/layers/content/app/components/Portfolio/Page.vue +8 -8
  34. package/layers/content/app/components/Portfolio/Typography.vue +4 -4
  35. package/layers/content/app/components/content/Figure.vue +14 -14
  36. package/layers/content/app/composables/createPortfolioComposables.ts +4 -1
  37. package/layers/content/app/composables/useBlogPosts.ts +3 -1
  38. package/layers/content/app/composables/useCollectionItem.ts +4 -1
  39. package/layers/content/app/composables/useCollectionSurround.ts +1 -0
  40. package/layers/content/app/composables/useContentPage.ts +1 -0
  41. package/layers/content/app/composables/useGalleryItems.ts +4 -1
  42. package/layers/content/app/composables/usePortfolioItems.ts +4 -1
  43. package/layers/content/app/types/app-config.d.ts +1 -1
  44. package/layers/content/app/types/content.ts +27 -30
  45. package/layers/content/nuxt.config.ts +4 -3
  46. package/layers/content/package.json +4 -4
  47. package/layers/core/app/components/DiagnosticsPage.vue +203 -203
  48. package/layers/core/app/components/ErrorBoundary.vue +51 -49
  49. package/layers/core/app/components/LoadingScreen.vue +112 -111
  50. package/layers/core/app/composables/useBrowser.ts +2 -1
  51. package/layers/core/app/composables/useCache.ts +4 -2
  52. package/layers/core/app/composables/useErrorLog.ts +7 -10
  53. package/layers/core/app/composables/useFeatures.ts +4 -2
  54. package/layers/core/app/composables/useLoading.ts +1 -0
  55. package/layers/core/app/composables/useNetworkInfo.ts +1 -0
  56. package/layers/core/app/composables/usePWAInfo.ts +4 -3
  57. package/layers/core/app/composables/useRendering.ts +1 -0
  58. package/layers/core/app/composables/useScreen.ts +1 -0
  59. package/layers/core/app/composables/useScrollGuard.ts +2 -1
  60. package/layers/core/app/pages/[...slug].vue +99 -99
  61. package/layers/core/app/plugins/error-handler.ts +1 -1
  62. package/layers/core/app/plugins/feature-detection.client.ts +2 -1
  63. package/layers/core/app/plugins/init.ts +8 -19
  64. package/layers/core/app/plugins/loading.client.ts +4 -2
  65. package/layers/core/app/plugins/scroll-guard.client.ts +4 -4
  66. package/layers/core/app/types/app-config.d.ts +5 -1
  67. package/layers/core/app/types/detection.ts +8 -8
  68. package/layers/core/app/types/index.ts +5 -4
  69. package/layers/core/app/types/loading.ts +3 -3
  70. package/layers/core/app/types/runtime-config.ts +2 -2
  71. package/layers/core/app/types/scroll-guard.ts +2 -2
  72. package/layers/core/app/types/site.ts +43 -0
  73. package/layers/core/app/utils/helpers.ts +4 -0
  74. package/layers/core/nuxt.config.ts +1 -0
  75. package/layers/core/package.json +1 -1
  76. package/layers/feeds/app/app.config.ts +23 -0
  77. package/layers/feeds/app/assets/css/feeds.css +66 -0
  78. package/layers/feeds/app/plugins/feed-head.ts +73 -0
  79. package/layers/feeds/nuxt.config.ts +36 -0
  80. package/layers/feeds/package.json +23 -0
  81. package/layers/feeds/tsconfig.json +7 -0
  82. package/layers/forms/app/components/Form/Contact.vue +1 -0
  83. package/layers/forms/app/components/Form/Field.vue +70 -74
  84. package/layers/forms/app/composables/useFormSchema.ts +2 -0
  85. package/layers/forms/app/config/fields.ts +1 -0
  86. package/layers/forms/app/types/app-config.d.ts +1 -1
  87. package/layers/forms/app/types/fields.ts +1 -1
  88. package/layers/forms/nuxt.config.ts +4 -9
  89. package/layers/forms/package.json +4 -9
  90. package/layers/layout/app/assets/css/layout/grids.css +12 -12
  91. package/layers/layout/app/assets/css/layout/modes/fluid.css +10 -10
  92. package/layers/layout/app/components/Layout/Container.vue +34 -34
  93. package/layers/layout/app/components/Layout/Grid/Debug.vue +55 -55
  94. package/layers/layout/app/components/Layout/Grid/Item.vue +239 -231
  95. package/layers/layout/app/components/Layout/Main.vue +27 -23
  96. package/layers/layout/app/components/Layout/Page/Container.vue +71 -67
  97. package/layers/layout/app/components/Layout/Page/Header.vue +22 -21
  98. package/layers/layout/app/components/Layout/Page/index.vue +1 -0
  99. package/layers/layout/app/components/Layout/Section/Gallery.vue +49 -48
  100. package/layers/layout/app/components/Layout/Section/Grid.vue +29 -29
  101. package/layers/layout/app/components/Layout/Section/Hero.vue +31 -29
  102. package/layers/layout/app/components/Layout/Section/Sidebar.vue +48 -48
  103. package/layers/layout/app/components/Layout/Section/Split.vue +28 -28
  104. package/layers/layout/app/components/Layout/Section/Stack.vue +39 -37
  105. package/layers/layout/app/components/Layout/Section/Title.vue +21 -20
  106. package/layers/layout/app/composables/GridPlacement.ts +1 -1
  107. package/layers/layout/app/composables/useGridConfig.ts +2 -1
  108. package/layers/layout/app/types/app-config.d.ts +2 -1
  109. package/layers/layout/app/types/layouts.ts +4 -4
  110. package/layers/layout/nuxt.config.ts +4 -1
  111. package/layers/mailer/nuxt.config.ts +26 -0
  112. package/layers/mailer/package.json +15 -0
  113. package/layers/mailer/tsconfig.json +7 -0
  114. package/layers/motion/app/components/Motion/index.vue +5 -5
  115. package/layers/motion/nuxt.config.ts +6 -22
  116. package/layers/motion/package.json +0 -5
  117. package/layers/navigation/app/app.config.ts +38 -0
  118. package/layers/navigation/app/assets/css/navigation.css +3 -0
  119. package/layers/navigation/app/components/Links/Group.vue +49 -0
  120. package/layers/navigation/app/components/Links/Named.vue +33 -0
  121. package/layers/navigation/app/components/Mast/Footer.vue +13 -0
  122. package/layers/{ui → navigation}/app/components/Mast/Header.vue +2 -2
  123. package/layers/{ui → navigation}/app/components/Mast/Nav.vue +2 -2
  124. package/layers/navigation/app/components/Mast/NavModal.vue +76 -0
  125. package/layers/{ui → navigation}/app/composables/mastNav.ts +7 -4
  126. package/layers/{ui → navigation}/app/composables/toast.ts +1 -0
  127. package/layers/{ui → navigation}/app/composables/useSite.ts +1 -0
  128. package/layers/navigation/app/types/nav.ts +11 -0
  129. package/layers/{ui → navigation}/app/utils/createModal.ts +2 -1
  130. package/layers/navigation/nuxt.config.ts +19 -0
  131. package/layers/navigation/package.json +6 -0
  132. package/layers/navigation/tsconfig.json +7 -0
  133. package/layers/page-transitions/app/app.config.ts +15 -0
  134. package/layers/page-transitions/app/composables/usePageTransition.ts +32 -0
  135. package/layers/page-transitions/app/plugins/page-transitions.client.ts +14 -0
  136. package/layers/page-transitions/nuxt.config.ts +17 -0
  137. package/layers/page-transitions/package.json +6 -0
  138. package/layers/page-transitions/tsconfig.json +7 -0
  139. package/layers/routing/app/composables/{useFeatures.ts → useFeatureFlags.ts} +1 -1
  140. package/layers/routing/app/composables/useRoutingConfig.ts +5 -6
  141. package/layers/routing/app/middleware/01.maintenance.global.ts +1 -1
  142. package/layers/routing/app/middleware/02.governance.global.ts +2 -2
  143. package/layers/routing/app/plugins/feature-flags.client.ts +4 -4
  144. package/layers/routing/app/plugins/scroll-routing.client.ts +4 -3
  145. package/layers/routing/app/types/app-config.d.ts +2 -1
  146. package/layers/routing/app/types/route-meta.d.ts +1 -1
  147. package/layers/routing/app/types/routing.ts +5 -2
  148. package/layers/routing/app/utils/resolveRoute.ts +2 -2
  149. package/layers/routing/nuxt.config.ts +6 -2
  150. package/layers/scripts/app/app.config.ts +44 -0
  151. package/layers/scripts/app/composables/useAnalytics.ts +49 -0
  152. package/layers/scripts/app/composables/useGtm.ts +21 -0
  153. package/layers/scripts/app/composables/useScriptLoader.ts +31 -0
  154. package/layers/scripts/app/composables/useScriptsConsent.ts +23 -0
  155. package/layers/scripts/app/composables/useYoutubeEmbed.ts +14 -0
  156. package/layers/scripts/nuxt.config.ts +22 -0
  157. package/layers/scripts/package.json +14 -0
  158. package/layers/scripts/tsconfig.json +7 -0
  159. package/layers/{motion/app/types/app-config.d.ts → scroll/app/app.config.ts} +16 -1
  160. package/layers/scroll/app/components/Motion/HorizontalScroll.vue +61 -0
  161. package/layers/scroll/app/components/Motion/Parallax.vue +76 -0
  162. package/layers/scroll/app/components/Motion/PinnedSection.vue +77 -0
  163. package/layers/scroll/app/components/Motion/ScrollLink.vue +50 -0
  164. package/layers/scroll/app/components/Motion/ScrollProgress.vue +85 -0
  165. package/layers/scroll/app/components/Motion/ScrollScene.vue +121 -0
  166. package/layers/{motion → scroll}/app/components/Motion/ScrollStats.vue +51 -50
  167. package/layers/scroll/app/components/Motion/ScrollStep.vue +44 -0
  168. package/layers/{motion → scroll}/app/composables/useGsap.ts +0 -6
  169. package/layers/{motion → scroll}/app/composables/useScrollSteps.ts +2 -5
  170. package/layers/{motion → scroll}/app/composables/useSectionProgress.ts +14 -7
  171. package/layers/{motion → scroll}/app/composables/useSmoothScroll.ts +6 -37
  172. package/layers/{motion → scroll}/app/plugins/locomotive-scroll.client.ts +3 -2
  173. package/layers/scroll/nuxt.config.ts +33 -0
  174. package/layers/scroll/package.json +11 -0
  175. package/layers/scroll/tsconfig.json +7 -0
  176. package/layers/seo/app/app.config.ts +30 -0
  177. package/layers/seo/app/composables/useSeoConfig.ts +14 -0
  178. package/layers/seo/nuxt.config.ts +34 -0
  179. package/layers/seo/package.json +14 -0
  180. package/layers/seo/tsconfig.json +7 -0
  181. package/layers/shader/app/components/Effect/Bloom.vue +2 -2
  182. package/layers/shader/app/components/Effect/ChromaticAberration.vue +2 -2
  183. package/layers/shader/app/components/Effect/PostProcessing.vue +14 -10
  184. package/layers/shader/app/components/Material/AmbientAurora.client.vue +162 -158
  185. package/layers/shader/app/components/Material/AmbientFlow.client.vue +165 -161
  186. package/layers/shader/app/components/Material/AmbientGradientMesh.client.vue +179 -162
  187. package/layers/shader/app/components/Material/AmbientNebula.client.vue +167 -163
  188. package/layers/shader/app/components/Material/AmbientOcean.client.vue +154 -150
  189. package/layers/shader/app/components/Material/Fresnel.client.vue +78 -75
  190. package/layers/shader/app/components/Material/Gradient.client.vue +175 -173
  191. package/layers/shader/app/components/Material/Image.client.vue +228 -225
  192. package/layers/shader/app/components/Material/Node.client.vue +66 -63
  193. package/layers/shader/app/components/Material/Noise.client.vue +128 -124
  194. package/layers/shader/app/components/Mesh/Plane.vue +20 -18
  195. package/layers/shader/app/components/Node/Color.client.vue +47 -45
  196. package/layers/shader/app/components/Node/Fresnel.client.vue +47 -47
  197. package/layers/shader/app/components/Node/Gradient.client.vue +120 -70
  198. package/layers/shader/app/components/Node/Mix.client.vue +41 -39
  199. package/layers/shader/app/components/Node/Noise.client.vue +91 -83
  200. package/layers/shader/app/components/Pipeline/ACESTonemap.client.vue +7 -10
  201. package/layers/shader/app/components/Pipeline/AddBlend.client.vue +33 -19
  202. package/layers/shader/app/components/Pipeline/AgedFilm.client.vue +61 -40
  203. package/layers/shader/app/components/Pipeline/Aurora.client.vue +92 -56
  204. package/layers/shader/app/components/Pipeline/BilinearGradient.client.vue +65 -34
  205. package/layers/shader/app/components/Pipeline/BillowNoise.client.vue +56 -32
  206. package/layers/shader/app/components/Pipeline/BrightnessContrast.client.vue +36 -20
  207. package/layers/shader/app/components/Pipeline/CellularNoise.client.vue +55 -31
  208. package/layers/shader/app/components/Pipeline/ChannelMixer.client.vue +62 -34
  209. package/layers/shader/app/components/Pipeline/ChebyshevNoiseField.client.vue +77 -50
  210. package/layers/shader/app/components/Pipeline/Checkerboard.client.vue +50 -31
  211. package/layers/shader/app/components/Pipeline/ChromaticAberration.client.vue +49 -33
  212. package/layers/shader/app/components/Pipeline/ChromaticScreenWaves.client.vue +61 -36
  213. package/layers/shader/app/components/Pipeline/Circle.client.vue +53 -30
  214. package/layers/shader/app/components/Pipeline/Clouds.client.vue +86 -48
  215. package/layers/shader/app/components/Pipeline/ColorBurnBlend.client.vue +34 -19
  216. package/layers/shader/app/components/Pipeline/ColorDodgeBlend.client.vue +34 -19
  217. package/layers/shader/app/components/Pipeline/ColourRamp.client.vue +76 -46
  218. package/layers/shader/app/components/Pipeline/ComplexPlaneField.client.vue +80 -50
  219. package/layers/shader/app/components/Pipeline/ConicGradient.client.vue +46 -28
  220. package/layers/shader/app/components/Pipeline/CosinePalette.client.vue +80 -53
  221. package/layers/shader/app/components/Pipeline/CoverageAlpha.client.vue +12 -14
  222. package/layers/shader/app/components/Pipeline/Cross.client.vue +66 -37
  223. package/layers/shader/app/components/Pipeline/CurlNoise.client.vue +58 -35
  224. package/layers/shader/app/components/Pipeline/DarkenBlend.client.vue +34 -19
  225. package/layers/shader/app/components/Pipeline/DayNightCycle.client.vue +65 -39
  226. package/layers/shader/app/components/Pipeline/Desaturate.client.vue +23 -16
  227. package/layers/shader/app/components/Pipeline/DiagonalGradient.client.vue +50 -29
  228. package/layers/shader/app/components/Pipeline/DiamondGradient.client.vue +47 -29
  229. package/layers/shader/app/components/Pipeline/DifferenceBlend.client.vue +34 -19
  230. package/layers/shader/app/components/Pipeline/DivideBlend.client.vue +34 -19
  231. package/layers/shader/app/components/Pipeline/DomainWarpedNoise.client.vue +79 -37
  232. package/layers/shader/app/components/Pipeline/Dots.client.vue +70 -34
  233. package/layers/shader/app/components/Pipeline/DuoTone.client.vue +40 -26
  234. package/layers/shader/app/components/Pipeline/ExclusionBlend.client.vue +38 -19
  235. package/layers/shader/app/components/Pipeline/ExponentialFog.client.vue +52 -35
  236. package/layers/shader/app/components/Pipeline/Exposure.client.vue +22 -16
  237. package/layers/shader/app/components/Pipeline/FBMNoise.client.vue +62 -39
  238. package/layers/shader/app/components/Pipeline/FilmBurn.client.vue +60 -38
  239. package/layers/shader/app/components/Pipeline/FilmGrain.client.vue +53 -31
  240. package/layers/shader/app/components/Pipeline/FisheyeRay.client.vue +39 -28
  241. package/layers/shader/app/components/Pipeline/Flame.client.vue +59 -35
  242. package/layers/shader/app/components/Pipeline/FocalGradient.client.vue +56 -33
  243. package/layers/shader/app/components/Pipeline/Gamma.client.vue +21 -16
  244. package/layers/shader/app/components/Pipeline/GodRays.client.vue +76 -42
  245. package/layers/shader/app/components/Pipeline/GradientNoise.client.vue +57 -32
  246. package/layers/shader/app/components/Pipeline/Grain.client.vue +84 -47
  247. package/layers/shader/app/components/Pipeline/Grid.client.vue +56 -33
  248. package/layers/shader/app/components/Pipeline/Halation.client.vue +52 -34
  249. package/layers/shader/app/components/Pipeline/Halftone.client.vue +34 -23
  250. package/layers/shader/app/components/Pipeline/HardLightBlend.client.vue +33 -19
  251. package/layers/shader/app/components/Pipeline/Haze.client.vue +57 -36
  252. package/layers/shader/app/components/Pipeline/Hexagon.client.vue +54 -31
  253. package/layers/shader/app/components/Pipeline/Hue.client.vue +20 -16
  254. package/layers/shader/app/components/Pipeline/Invert.client.vue +6 -10
  255. package/layers/shader/app/components/Pipeline/LensFlare.client.vue +56 -37
  256. package/layers/shader/app/components/Pipeline/LightenBlend.client.vue +31 -19
  257. package/layers/shader/app/components/Pipeline/LinearGradient.client.vue +36 -28
  258. package/layers/shader/app/components/Pipeline/LinearGradient4.client.vue +65 -43
  259. package/layers/shader/app/components/Pipeline/LinearToSRGB.client.vue +26 -20
  260. package/layers/shader/app/components/Pipeline/Marble.client.vue +97 -57
  261. package/layers/shader/app/components/Pipeline/MixBlend.client.vue +45 -35
  262. package/layers/shader/app/components/Pipeline/MonochromeTint.client.vue +40 -25
  263. package/layers/shader/app/components/Pipeline/MultiplyBlend.client.vue +33 -19
  264. package/layers/shader/app/components/Pipeline/NoisyGradient.client.vue +83 -42
  265. package/layers/shader/app/components/Pipeline/NoisyGradientBlend.client.vue +141 -81
  266. package/layers/shader/app/components/Pipeline/OverlayBlend.client.vue +33 -19
  267. package/layers/shader/app/components/Pipeline/PaperTexture.client.vue +47 -30
  268. package/layers/shader/app/components/Pipeline/Polygon.client.vue +74 -37
  269. package/layers/shader/app/components/Pipeline/Posterise.client.vue +21 -16
  270. package/layers/shader/app/components/Pipeline/RadialGradient.client.vue +45 -30
  271. package/layers/shader/app/components/Pipeline/RayAutoOrbit.client.vue +43 -30
  272. package/layers/shader/app/components/Pipeline/RayMouseOrbit.client.vue +60 -47
  273. package/layers/shader/app/components/Pipeline/RayRotateX.client.vue +28 -20
  274. package/layers/shader/app/components/Pipeline/RayRotateY.client.vue +28 -20
  275. package/layers/shader/app/components/Pipeline/RayRotateZ.client.vue +28 -20
  276. package/layers/shader/app/components/Pipeline/RayTiltBasis.client.vue +55 -34
  277. package/layers/shader/app/components/Pipeline/RaymarchTunnel.client.vue +132 -88
  278. package/layers/shader/app/components/Pipeline/Rectangle.client.vue +78 -37
  279. package/layers/shader/app/components/Pipeline/ReinhardTonemap.client.vue +12 -14
  280. package/layers/shader/app/components/Pipeline/RidgedNoise.client.vue +54 -31
  281. package/layers/shader/app/components/Pipeline/Ring.client.vue +69 -34
  282. package/layers/shader/app/components/Pipeline/RingField.client.vue +63 -43
  283. package/layers/shader/app/components/Pipeline/RisographGrain.client.vue +66 -32
  284. package/layers/shader/app/components/Pipeline/RotatedGradientBlend.client.vue +73 -48
  285. package/layers/shader/app/components/Pipeline/SDFColourMask.client.vue +31 -25
  286. package/layers/shader/app/components/Pipeline/SDFRadialMask.client.vue +31 -21
  287. package/layers/shader/app/components/Pipeline/SRGBToLinear.client.vue +25 -20
  288. package/layers/shader/app/components/Pipeline/Saturation.client.vue +22 -16
  289. package/layers/shader/app/components/Pipeline/Scanlines.client.vue +42 -26
  290. package/layers/shader/app/components/Pipeline/ScreenBlend.client.vue +33 -19
  291. package/layers/shader/app/components/Pipeline/ShaderDebugger.client.vue +58 -45
  292. package/layers/shader/app/components/Pipeline/SimplexNoise.client.vue +59 -37
  293. package/layers/shader/app/components/Pipeline/SkyAtmosphere.client.vue +87 -54
  294. package/layers/shader/app/components/Pipeline/SoftLightBlend.client.vue +33 -19
  295. package/layers/shader/app/components/Pipeline/SolidColour.client.vue +24 -16
  296. package/layers/shader/app/components/Pipeline/SplitTone.client.vue +58 -34
  297. package/layers/shader/app/components/Pipeline/Star.client.vue +73 -37
  298. package/layers/shader/app/components/Pipeline/Starfield.client.vue +68 -34
  299. package/layers/shader/app/components/Pipeline/Stripes.client.vue +64 -36
  300. package/layers/shader/app/components/Pipeline/SubtractBlend.client.vue +33 -19
  301. package/layers/shader/app/components/Pipeline/TanhTonemap.client.vue +25 -19
  302. package/layers/shader/app/components/Pipeline/Threshold.client.vue +23 -17
  303. package/layers/shader/app/components/Pipeline/Tint.client.vue +36 -25
  304. package/layers/shader/app/components/Pipeline/Triangle.client.vue +54 -31
  305. package/layers/shader/app/components/Pipeline/UVAspectCorrect.client.vue +5 -10
  306. package/layers/shader/app/components/Pipeline/UVBreath.client.vue +44 -31
  307. package/layers/shader/app/components/Pipeline/UVBulge.client.vue +35 -21
  308. package/layers/shader/app/components/Pipeline/UVClamp.client.vue +14 -14
  309. package/layers/shader/app/components/Pipeline/UVColumnOffset.client.vue +36 -23
  310. package/layers/shader/app/components/Pipeline/UVFlipX.client.vue +6 -10
  311. package/layers/shader/app/components/Pipeline/UVFlipXY.client.vue +6 -10
  312. package/layers/shader/app/components/Pipeline/UVFlipY.client.vue +6 -10
  313. package/layers/shader/app/components/Pipeline/UVFractBand.client.vue +31 -21
  314. package/layers/shader/app/components/Pipeline/UVMousePull.client.vue +41 -33
  315. package/layers/shader/app/components/Pipeline/UVNoiseRotate.client.vue +65 -46
  316. package/layers/shader/app/components/Pipeline/UVNoiseWarp.client.vue +49 -30
  317. package/layers/shader/app/components/Pipeline/UVOrbit.client.vue +37 -29
  318. package/layers/shader/app/components/Pipeline/UVParallax.client.vue +41 -33
  319. package/layers/shader/app/components/Pipeline/UVPixelate.client.vue +21 -16
  320. package/layers/shader/app/components/Pipeline/UVPulse.client.vue +41 -28
  321. package/layers/shader/app/components/Pipeline/UVRipple.client.vue +53 -29
  322. package/layers/shader/app/components/Pipeline/UVRotate.client.vue +40 -32
  323. package/layers/shader/app/components/Pipeline/UVScale.client.vue +33 -25
  324. package/layers/shader/app/components/Pipeline/UVScroll.client.vue +26 -22
  325. package/layers/shader/app/components/Pipeline/UVScrollX.client.vue +20 -16
  326. package/layers/shader/app/components/Pipeline/UVScrollY.client.vue +20 -16
  327. package/layers/shader/app/components/Pipeline/UVShear.client.vue +33 -20
  328. package/layers/shader/app/components/Pipeline/UVSineWarpXY.client.vue +58 -40
  329. package/layers/shader/app/components/Pipeline/UVSwapAxes.client.vue +6 -10
  330. package/layers/shader/app/components/Pipeline/UVTile.client.vue +26 -22
  331. package/layers/shader/app/components/Pipeline/UVTwirl.client.vue +31 -21
  332. package/layers/shader/app/components/Pipeline/UVWarp.client.vue +44 -25
  333. package/layers/shader/app/components/Pipeline/VHSBleed.client.vue +63 -43
  334. package/layers/shader/app/components/Pipeline/ValueNoise.client.vue +57 -32
  335. package/layers/shader/app/components/Pipeline/Vibrance.client.vue +25 -19
  336. package/layers/shader/app/components/Pipeline/Vignette.client.vue +35 -24
  337. package/layers/shader/app/components/Pipeline/VoronoiEdges.client.vue +66 -38
  338. package/layers/shader/app/components/Pipeline/Water.client.vue +78 -39
  339. package/layers/shader/app/components/Pipeline/WaveBendLayer.client.vue +74 -46
  340. package/layers/shader/app/components/Pipeline/WaveColourLayer.client.vue +76 -43
  341. package/layers/shader/app/components/Pipeline/WhiteBalance.client.vue +38 -27
  342. package/layers/shader/app/components/Pipeline/Wood.client.vue +85 -50
  343. package/layers/shader/app/components/Preset/Aurora.client.vue +69 -52
  344. package/layers/shader/app/components/Preset/Flow.client.vue +63 -47
  345. package/layers/shader/app/components/Preset/GradientMesh.client.vue +63 -47
  346. package/layers/shader/app/components/Preset/Nebula.client.vue +65 -47
  347. package/layers/shader/app/components/Preset/Ocean.client.vue +64 -47
  348. package/layers/shader/app/components/Preset/ThemeAurora.client.vue +107 -70
  349. package/layers/shader/app/components/Preset/ThemeBubble.client.vue +108 -71
  350. package/layers/shader/app/components/Preset/ThemeFlow.client.vue +107 -70
  351. package/layers/shader/app/components/Preset/ThemeGradient.client.vue +108 -71
  352. package/layers/shader/app/components/Preset/ThemeLavaLamp.client.vue +107 -70
  353. package/layers/shader/app/components/Preset/ThemePlasma.client.vue +107 -70
  354. package/layers/shader/app/components/Preset/ThemeWave.client.vue +107 -70
  355. package/layers/shader/app/components/Shader/Background.client.vue +169 -163
  356. package/layers/shader/app/components/Shader/Debug.vue +45 -40
  357. package/layers/shader/app/components/Shader/Host.client.vue +120 -121
  358. package/layers/shader/app/components/Shader/Material.client.vue +42 -36
  359. package/layers/shader/app/components/Shader/Pipeline.client.vue +55 -46
  360. package/layers/shader/app/components/Shader/PipelineContext.vue +12 -12
  361. package/layers/shader/app/components/Shader/Runtime.client.vue +42 -37
  362. package/layers/shader/app/composables/useAmbientMaterials.ts +316 -105
  363. package/layers/shader/app/composables/useCSSColourUniform.ts +7 -6
  364. package/layers/shader/app/composables/useCSSFloatUniform.ts +4 -5
  365. package/layers/shader/app/composables/useMousePosition.ts +1 -1
  366. package/layers/shader/app/composables/useShader.ts +5 -3
  367. package/layers/shader/app/composables/useShaderColor.ts +8 -1
  368. package/layers/shader/app/composables/useShaderFloat.ts +3 -1
  369. package/layers/shader/app/composables/useShaderGraph.ts +6 -3
  370. package/layers/shader/app/composables/useShaderPerf.ts +2 -3
  371. package/layers/shader/app/composables/useShaderPipeline.ts +14 -6
  372. package/layers/shader/app/composables/useShaderRuntime.ts +7 -4
  373. package/layers/shader/app/composables/useShaderVec2.ts +4 -0
  374. package/layers/shader/app/composables/useSunDirectionUniform.ts +7 -6
  375. package/layers/shader/app/composables/useTSLNodes.ts +1 -0
  376. package/layers/shader/app/composables/useThemeColors.ts +14 -10
  377. package/layers/shader/app/composables/useUniforms.ts +5 -2
  378. package/layers/shader/app/plugins/shader.client.ts +3 -2
  379. package/layers/shader/app/shaders/common/blend.ts +3 -0
  380. package/layers/shader/app/shaders/common/complex.ts +4 -5
  381. package/layers/shader/app/shaders/common/effects.ts +10 -6
  382. package/layers/shader/app/shaders/common/grain.ts +4 -0
  383. package/layers/shader/app/shaders/common/lighting.ts +4 -1
  384. package/layers/shader/app/shaders/common/math.ts +3 -0
  385. package/layers/shader/app/shaders/common/noise.ts +7 -4
  386. package/layers/shader/app/shaders/common/noiseHelpers.ts +2 -0
  387. package/layers/shader/app/shaders/common/palette.ts +6 -1
  388. package/layers/shader/app/shaders/common/patterns.ts +7 -4
  389. package/layers/shader/app/shaders/common/sdf.ts +3 -1
  390. package/layers/shader/app/shaders/common/shapes.ts +3 -0
  391. package/layers/shader/app/shaders/common/tonemapping.ts +2 -0
  392. package/layers/shader/app/shaders/common/uv.ts +8 -1
  393. package/layers/shader/app/shaders/createMaterial.ts +6 -2
  394. package/layers/shader/app/shaders/layers/aurora.ts +6 -3
  395. package/layers/shader/app/shaders/layers/meshGradient.ts +6 -3
  396. package/layers/shader/app/shaders/layers/paperShading.ts +6 -2
  397. package/layers/shader/app/shaders/layers/shaderGradient.ts +5 -0
  398. package/layers/shader/app/shaders/layers/stripe.ts +6 -3
  399. package/layers/shader/app/shaders/types.ts +1 -0
  400. package/layers/shader/app/types/app-config.d.ts +1 -1
  401. package/layers/shader/app/types/index.ts +4 -4
  402. package/layers/shader/app/types/materials.ts +5 -4
  403. package/layers/shader/app/types/renderer.ts +1 -50
  404. package/layers/shader/app/types/tsl.ts +4 -3
  405. package/layers/shader/app/types/uniforms.ts +3 -2
  406. package/layers/shader/app/utils/tsl/animation.ts +2 -0
  407. package/layers/shader/app/utils/tsl/color.ts +5 -2
  408. package/layers/shader/app/utils/tsl/math.ts +1 -0
  409. package/layers/shader/app/utils/tsl/noise.ts +2 -0
  410. package/layers/shader/app/utils/tsl/oklch.ts +2 -0
  411. package/layers/shader/app/utils/tsl/patterns.ts +2 -0
  412. package/layers/shader/app/utils/tsl/tween.ts +4 -2
  413. package/layers/shader/app/utils/tsl/uv.ts +2 -0
  414. package/layers/shader/nuxt.config.ts +8 -115
  415. package/layers/shader/package.json +3 -9
  416. package/layers/theme/app/assets/css/theme.css +2 -2
  417. package/layers/theme/app/components/ThemePicker/AccentButton.vue +32 -30
  418. package/layers/theme/app/components/ThemePicker/Colors.vue +6 -5
  419. package/layers/theme/app/components/ThemePicker/Menu.vue +23 -23
  420. package/layers/theme/app/composables/useAccentColor.ts +2 -1
  421. package/layers/theme/app/composables/useThemeContrast.ts +1 -1
  422. package/layers/theme/app/composables/useThemeMotion.ts +1 -1
  423. package/layers/theme/app/composables/useThemeTransparency.ts +1 -4
  424. package/layers/theme/app/plugins/theme.client.ts +33 -15
  425. package/layers/theme/app/types/app-config.d.ts +3 -2
  426. package/layers/theme/app/types/theme.ts +1 -1
  427. package/layers/theme/nuxt.config.ts +4 -1
  428. package/layers/transitions/app/components/Motion/Transition.vue +76 -0
  429. package/layers/transitions/nuxt.config.ts +19 -0
  430. package/layers/transitions/package.json +6 -0
  431. package/layers/transitions/tsconfig.json +7 -0
  432. package/layers/typography/app/components/Typography/CodeBlock.vue +44 -0
  433. package/layers/typography/app/components/Typography/Headline.vue +90 -0
  434. package/layers/typography/app/components/Typography/HeadlineScreen.vue +75 -0
  435. package/layers/typography/app/components/Typography/QuoteBlock.vue +21 -0
  436. package/layers/{ui → typography}/app/components/Typography/TextStroke.vue +33 -32
  437. package/layers/typography/app/components/Typography/index.vue +54 -0
  438. package/layers/{ui → typography}/app/composables/typography.ts +1 -0
  439. package/layers/{ui → typography}/app/types/typography.ts +1 -1
  440. package/layers/typography/nuxt.config.ts +17 -0
  441. package/layers/typography/package.json +6 -0
  442. package/layers/typography/tsconfig.json +7 -0
  443. package/layers/ui/app/assets/css/ui.css +0 -20
  444. package/layers/ui/nuxt.config.ts +5 -21
  445. package/layers/visual/app/app.config.ts +115 -0
  446. package/layers/visual/app/assets/css/visual.css +15 -0
  447. package/layers/visual/app/components/Accent/Blob.vue +32 -0
  448. package/layers/{ui → visual}/app/components/Accent/Scene.vue +26 -23
  449. package/layers/visual/app/components/Base/Modal.vue +123 -0
  450. package/layers/visual/app/components/Gradient/Background.vue +24 -0
  451. package/layers/visual/app/components/Gradient/Text.vue +24 -0
  452. package/layers/visual/app/components/Media/Picture.vue +51 -0
  453. package/layers/visual/app/components/Progress/Bar.vue +36 -0
  454. package/layers/{ui → visual}/app/components/Progress/Circular.vue +26 -25
  455. package/layers/visual/app/components/Tint/Overlay.vue +27 -0
  456. package/layers/{ui → visual}/app/composables/accent.ts +1 -0
  457. package/layers/{ui → visual}/app/composables/gradient.ts +3 -0
  458. package/layers/{ui → visual}/app/composables/picture.ts +2 -0
  459. package/layers/{ui → visual}/app/composables/tint.ts +3 -2
  460. package/layers/{ui → visual}/app/types/accent.ts +2 -2
  461. package/layers/{ui → visual}/app/types/gradient.ts +2 -2
  462. package/layers/{ui → visual}/app/types/media.ts +4 -3
  463. package/layers/{ui → visual}/app/types/tint.ts +1 -1
  464. package/layers/visual/nuxt.config.ts +19 -0
  465. package/layers/visual/package.json +6 -0
  466. package/layers/visual/tsconfig.json +7 -0
  467. package/package.json +32 -6
  468. package/layers/motion/app/app.config.ts +0 -27
  469. package/layers/motion/app/components/Motion/HorizontalScroll.vue +0 -61
  470. package/layers/motion/app/components/Motion/Parallax.vue +0 -75
  471. package/layers/motion/app/components/Motion/PinnedSection.vue +0 -77
  472. package/layers/motion/app/components/Motion/ScrollLink.vue +0 -49
  473. package/layers/motion/app/components/Motion/ScrollProgress.vue +0 -82
  474. package/layers/motion/app/components/Motion/ScrollScene.vue +0 -121
  475. package/layers/motion/app/components/Motion/ScrollStep.vue +0 -45
  476. package/layers/motion/app/components/Motion/Transition.vue +0 -76
  477. package/layers/shader/app/components/Shader/Canvas.vue +0 -121
  478. package/layers/ui/app/app.config.ts +0 -57
  479. package/layers/ui/app/components/Accent/Blob.vue +0 -29
  480. package/layers/ui/app/components/Base/Modal.vue +0 -111
  481. package/layers/ui/app/components/Gradient/Background.vue +0 -22
  482. package/layers/ui/app/components/Gradient/Text.vue +0 -22
  483. package/layers/ui/app/components/Links/Group.vue +0 -47
  484. package/layers/ui/app/components/Links/Named.vue +0 -31
  485. package/layers/ui/app/components/Mast/Footer.vue +0 -15
  486. package/layers/ui/app/components/Mast/NavModal.vue +0 -72
  487. package/layers/ui/app/components/Media/Picture.vue +0 -50
  488. package/layers/ui/app/components/Progress/Bar.vue +0 -35
  489. package/layers/ui/app/components/Tint/Overlay.vue +0 -25
  490. package/layers/ui/app/components/Typography/CodeBlock.vue +0 -42
  491. package/layers/ui/app/components/Typography/Headline.vue +0 -88
  492. package/layers/ui/app/components/Typography/HeadlineScreen.vue +0 -77
  493. package/layers/ui/app/components/Typography/QuoteBlock.vue +0 -20
  494. package/layers/ui/app/components/Typography/index.vue +0 -52
  495. package/layers/ui/app/types/app-config.d.ts +0 -22
  496. package/layers/ui/app/types/nav.ts +0 -5
  497. /package/layers/{motion → animations}/app/components/Motion/CountUp.vue +0 -0
  498. /package/layers/{motion → animations}/app/components/Motion/Cursor.vue +0 -0
  499. /package/layers/{motion → animations}/app/components/Motion/Magnetic.vue +0 -0
  500. /package/layers/{motion → animations}/app/components/Motion/Marquee.vue +0 -0
  501. /package/layers/{motion → animations}/app/components/Motion/MarqueeText.vue +0 -0
  502. /package/layers/{motion → animations}/app/components/Motion/Staggered.vue +0 -0
  503. /package/layers/{motion → animations}/app/components/Motion/TextReveal.vue +0 -0
  504. /package/layers/{motion → animations}/app/components/Motion/Tilt.vue +0 -0
  505. /package/layers/{motion → animations}/app/components/Motion/VelocityEffect.vue +0 -0
  506. /package/layers/{motion → animations}/app/composables/useCountUp.ts +0 -0
  507. /package/layers/{motion → animations}/app/composables/useCursorFollower.ts +0 -0
  508. /package/layers/{motion → animations}/app/composables/useMagneticElement.ts +0 -0
  509. /package/layers/{motion → animations}/app/composables/useMarqueeCopies.ts +0 -0
  510. /package/layers/{motion → animations}/app/composables/useMarqueeVelocity.ts +0 -0
  511. /package/layers/{motion → animations}/app/composables/useTiltEffect.ts +0 -0
  512. /package/layers/{ui → navigation}/app/components/Mast/Main.vue +0 -0
  513. /package/layers/{ui → navigation}/app/components/Site/Subtitle.vue +0 -0
  514. /package/layers/{ui → navigation}/app/components/Site/Title.vue +0 -0
  515. /package/layers/{ui → navigation}/app/utils/regex.ts +0 -0
  516. /package/layers/{motion/app/assets/css/motion.css → transitions/app/assets/css/transitions.css} +0 -0
  517. /package/layers/{ui → typography}/app/composables/color.ts +0 -0
  518. /package/layers/{ui → typography}/app/types/colors.ts +0 -0
  519. /package/layers/{ui → visual}/app/types/breakpoints.ts +0 -0
@@ -1,3 +1,5 @@
1
+ /* eslint-disable no-restricted-syntax */
2
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
3
  import { Color, Vector3 } from 'three'
2
4
  import { uniform } from 'three/tsl'
3
5
 
@@ -10,21 +12,20 @@ import { uniform } from 'three/tsl'
10
12
  * // Use primaryNode directly inside useShaderStage closures.
11
13
  */
12
14
  export function useCSSColourUniform(varName: string) {
13
- // @ts-ignore — TSL uniform types
15
+ // @ts-expect-error — TSL uniform types
14
16
  const node = uniform(new Vector3(0, 0, 0))
15
17
  const c = new Color()
16
18
 
17
19
  function sync() {
18
- const raw = getComputedStyle(document.documentElement)
19
- .getPropertyValue(varName)
20
- .trim()
20
+ const raw = getComputedStyle(document.documentElement).getPropertyValue(varName).trim()
21
21
  if (!raw) return
22
22
  try {
23
23
  c.set(raw)
24
- // @ts-ignore
24
+ // @ts-expect-error
25
25
  node.value.set(c.r, c.g, c.b)
26
+ } catch {
27
+ /* unsupported format — leave previous value */
26
28
  }
27
- catch { /* unsupported format — leave previous value */ }
28
29
  }
29
30
 
30
31
  onMounted(() => {
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
2
  import { uniform } from 'three/tsl'
2
3
 
3
4
  /**
@@ -8,15 +9,13 @@ import { uniform } from 'three/tsl'
8
9
  * const spacingNode = useCSSFloatUniform('--spacing-scale')
9
10
  */
10
11
  export function useCSSFloatUniform(varName: string) {
11
- // @ts-ignore — TSL uniform types
12
+ // @ts-expect-error — TSL uniform types
12
13
  const node = uniform(0)
13
14
 
14
15
  function sync() {
15
- const raw = getComputedStyle(document.documentElement)
16
- .getPropertyValue(varName)
17
- .trim()
16
+ const raw = getComputedStyle(document.documentElement).getPropertyValue(varName).trim()
18
17
  const val = parseFloat(raw)
19
- // @ts-ignore
18
+ // @ts-expect-error
20
19
  if (!isNaN(val)) node.value = val
21
20
  }
22
21
 
@@ -1,7 +1,7 @@
1
1
  import { useMouse, useWindowSize } from '@vueuse/core'
2
2
  import { vec2 as tslVec2, uniform } from 'three/tsl'
3
3
 
4
- export interface MousePositionOptions {
4
+ export type MousePositionOptions = {
5
5
  /** Smoothing factor (0-1, lower = smoother) */
6
6
  smoothing?: number
7
7
  /** Normalize to -1 to 1 range instead of 0 to 1 */
@@ -1,11 +1,13 @@
1
- /* eslint-disable no-restricted-imports */
2
- import { MeshBasicNodeMaterial, MeshStandardNodeMaterial } from 'three/webgpu'
1
+ /* eslint-disable complexity */
2
+ /* eslint-disable no-restricted-syntax */
3
3
  import { onUnmounted, shallowRef } from 'vue'
4
+ import { MeshBasicNodeMaterial, MeshStandardNodeMaterial } from 'three/webgpu'
5
+
4
6
  import type { NodeMaterialConfig, TSLNode } from '../types'
5
7
 
6
8
  export type ShaderMaterialType = 'basic' | 'standard'
7
9
 
8
- export interface UseShaderOptions {
10
+ export type UseShaderOptions = {
9
11
  type?: ShaderMaterialType
10
12
  config?: NodeMaterialConfig
11
13
  autoDispose?: boolean
@@ -1,6 +1,9 @@
1
+ /* eslint-disable no-restricted-syntax */
2
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
3
  // @ts-nocheck - TSL types are complex
2
4
  import { Color } from 'three'
3
5
  import { uniform } from 'three/tsl'
6
+
4
7
  import type { TweenHandle } from '../utils/tsl/tween'
5
8
 
6
9
  /**
@@ -31,7 +34,11 @@ export function useShaderColor(initialHex: string) {
31
34
  hex.value = `#${color.getHexString()}`
32
35
  }
33
36
 
34
- function tweenTo(targetHex: string, duration: number, easing?: (t: number) => number): TweenHandle {
37
+ function tweenTo(
38
+ targetHex: string,
39
+ duration: number,
40
+ easing?: (t: number) => number
41
+ ): TweenHandle {
35
42
  activeTween?.cancel()
36
43
 
37
44
  const startR = color.r
@@ -1,8 +1,10 @@
1
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
2
  // @ts-nocheck - TSL types are complex
2
3
  import { uniform } from 'three/tsl'
4
+
3
5
  import type { TweenHandle } from '../utils/tsl/tween'
4
6
 
5
- export interface ShaderFloatOptions {
7
+ export type ShaderFloatOptions = {
6
8
  min?: number
7
9
  max?: number
8
10
  }
@@ -1,18 +1,21 @@
1
+ /* eslint-disable max-params */
2
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
3
  // @ts-nocheck - TSL types are complex
2
- import { mix as tslMix } from 'three/tsl'
3
4
  import type { InjectionKey } from 'vue'
5
+ import { mix as tslMix } from 'three/tsl'
6
+
4
7
  import type { TSLNode } from '../types'
5
8
 
6
9
  export type BlendMode = 'normal' | 'add' | 'multiply' | 'screen' | 'overlay' | 'mix'
7
10
 
8
- export interface ShaderGraphEntry {
11
+ export type ShaderGraphEntry = {
9
12
  node: TSLNode
10
13
  order: number
11
14
  blend: BlendMode
12
15
  opacity: number
13
16
  }
14
17
 
15
- export interface ShaderGraph {
18
+ export type ShaderGraph = {
16
19
  register: (id: string, node: TSLNode, order?: number, blend?: BlendMode, opacity?: number) => void
17
20
  unregister: (id: string) => void
18
21
  update: (id: string, node: TSLNode) => void
@@ -33,13 +33,13 @@ export function useShaderPerf(label = 'pipeline') {
33
33
 
34
34
  if (accumMs >= 500) {
35
35
  fps.value = Math.round((frames / accumMs) * 1000)
36
- frameMs.value = Math.round(accumMs / frames * 10) / 10
36
+ frameMs.value = Math.round((accumMs / frames) * 10) / 10
37
37
  frames = 0
38
38
  accumMs = 0
39
39
  }
40
40
 
41
41
  stageCount.value = pipeline
42
- ? (pipeline.stagesFor('uv').length + pipeline.stagesFor('fragment').length)
42
+ ? pipeline.stagesFor('uv').length + pipeline.stagesFor('fragment').length
43
43
  : 0
44
44
  rafId = requestAnimationFrame(tick)
45
45
  }
@@ -64,7 +64,6 @@ export function useShaderPerf(label = 'pipeline') {
64
64
 
65
65
  if (import.meta.dev) {
66
66
  watch([fps, frameMs, stageCount], ([f, ms, s]) => {
67
- // eslint-disable-next-line no-console
68
67
  console.debug(`[ShaderPerf:${label}] ${f}fps ${ms}ms/frame ${s} stages`)
69
68
  })
70
69
  }
@@ -1,15 +1,16 @@
1
1
  import type { InjectionKey, Ref, ShallowRef } from 'vue'
2
+
2
3
  import type { TSLNode } from '../types'
3
4
 
4
5
  export type ShaderStage = 'fragment' | 'vertex' | 'ray' | 'uv'
5
6
 
6
- export interface ShaderStageEntry {
7
+ export type ShaderStageEntry = {
7
8
  fn: (input: TSLNode) => TSLNode
8
9
  order: number
9
10
  stage: ShaderStage
10
11
  }
11
12
 
12
- export interface ShaderPipelineContext {
13
+ export type ShaderPipelineContext = {
13
14
  register: (fn: ShaderStageEntry['fn'], order?: number, stage?: ShaderStage) => void
14
15
  unregister: (fn: ShaderStageEntry['fn']) => void
15
16
  stagesFor: (stage: ShaderStage) => ShaderStageEntry[]
@@ -41,7 +42,7 @@ export function useShaderPipeline(): ShaderPipelineContext {
41
42
  }
42
43
 
43
44
  function unregister(fn: ShaderStageEntry['fn']) {
44
- const i = entries.findIndex(e => e.fn === fn)
45
+ const i = entries.findIndex((e) => e.fn === fn)
45
46
  if (i !== -1) {
46
47
  entries.splice(i, 1)
47
48
  version.value++
@@ -49,10 +50,17 @@ export function useShaderPipeline(): ShaderPipelineContext {
49
50
  }
50
51
 
51
52
  function stagesFor(stage: ShaderStage): ShaderStageEntry[] {
52
- return entries.filter(e => e.stage === stage).sort((a, b) => a.order - b.order)
53
+ return entries.filter((e) => e.stage === stage).sort((a, b) => a.order - b.order)
53
54
  }
54
55
 
55
- const context: ShaderPipelineContext = { register, unregister, stagesFor, version, uvNode, rayNode }
56
+ const context: ShaderPipelineContext = {
57
+ register,
58
+ unregister,
59
+ stagesFor,
60
+ version,
61
+ uvNode,
62
+ rayNode,
63
+ }
56
64
  provide(SHADER_PIPELINE_KEY, context)
57
65
  return context
58
66
  }
@@ -75,7 +83,7 @@ export function useShaderPipeline(): ShaderPipelineContext {
75
83
  export function useShaderStage(
76
84
  stageFn: ShaderStageEntry['fn'],
77
85
  order = 0,
78
- stage: ShaderStage = 'fragment',
86
+ stage: ShaderStage = 'fragment'
79
87
  ): void {
80
88
  const pipeline = inject(SHADER_PIPELINE_KEY)
81
89
  if (!pipeline) {
@@ -1,11 +1,14 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
3
  // @ts-nocheck - TSL types are complex
4
+ import type { InjectionKey } from 'vue'
2
5
  import { Color } from 'three'
3
6
  import { uniform } from 'three/tsl'
4
- import type { InjectionKey } from 'vue'
5
- import type { ShaderTimeOptions } from './useShaderTime'
7
+
6
8
  import type { MousePositionOptions } from './useMousePosition'
9
+ import type { ShaderTimeOptions } from './useShaderTime'
7
10
 
8
- export interface ShaderRuntimeOptions {
11
+ export type ShaderRuntimeOptions = {
9
12
  speed?: number
10
13
  accentColor?: string
11
14
  darkMode?: boolean
@@ -13,7 +16,7 @@ export interface ShaderRuntimeOptions {
13
16
  autoStart?: boolean
14
17
  }
15
18
 
16
- export interface ShaderRuntime {
19
+ export type ShaderRuntime = {
17
20
  // Sub-systems
18
21
  time: ReturnType<typeof useShaderTime>
19
22
  mouse: ReturnType<typeof useMousePosition>
@@ -1,6 +1,10 @@
1
+ /* eslint-disable max-params */
2
+ /* eslint-disable no-restricted-syntax */
3
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
4
  // @ts-nocheck - TSL types are complex
2
5
  import { Vector2 } from 'three'
3
6
  import { uniform } from 'three/tsl'
7
+
4
8
  import type { TweenHandle } from '../utils/tsl/tween'
5
9
 
6
10
  /**
@@ -1,7 +1,8 @@
1
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
2
  import { Vector2 } from 'three'
2
3
  import { float, time, uniform, vec3 } from 'three/tsl'
3
4
 
4
- export interface SunDirectionOptions {
5
+ export type SunDirectionOptions = {
5
6
  /** Animation speed (radians/second). Only used when useMouseY is false. */
6
7
  speed?: number
7
8
  /** Drive elevation from mouse Y instead of time. */
@@ -25,12 +26,12 @@ export function useSunDirectionUniform(options: SunDirectionOptions = {}) {
25
26
  const { speed = 0.05, useMouseY = false } = options
26
27
 
27
28
  if (useMouseY) {
28
- // @ts-ignore
29
+ // @ts-expect-error
29
30
  const mouse = uniform(new Vector2(0.5, 0.5))
30
31
 
31
32
  onMounted(() => {
32
33
  const onMove = (e: MouseEvent) => {
33
- // @ts-ignore
34
+ // @ts-expect-error
34
35
  mouse.value.set(e.clientX / window.innerWidth, e.clientY / window.innerHeight)
35
36
  }
36
37
  window.addEventListener('mousemove', onMove)
@@ -40,15 +41,15 @@ export function useSunDirectionUniform(options: SunDirectionOptions = {}) {
40
41
  // angle = -(mouseY - 0.5) — top of screen = sun high, bottom = sun low
41
42
  const angle = mouse.y.oneMinus().sub(0.5)
42
43
  const a = angle.mul(5).add(0.5)
43
- // @ts-ignore
44
+ // @ts-expect-error
44
45
  return vec3(float(0), a.sin().negate(), a.cos())
45
46
  }
46
47
 
47
48
  // Animated mode — pure TSL expression, no JS uniform needed
48
- // @ts-ignore
49
+ // @ts-expect-error
49
50
  const speedNode = uniform(speed)
50
51
  const angle = time.mul(speedNode).sin().div(8).sub(0.2)
51
52
  const a = angle.mul(5).add(0.5)
52
- // @ts-ignore
53
+ // @ts-expect-error
53
54
  return vec3(float(0), a.sin().negate(), a.cos())
54
55
  }
@@ -1,4 +1,5 @@
1
1
  import * as TSL from 'three/tsl'
2
+
2
3
  import * as animation from '../utils/tsl/animation'
3
4
  import * as color from '../utils/tsl/color'
4
5
  import * as math from '../utils/tsl/math'
@@ -1,4 +1,5 @@
1
- import { parseOKLCH, oklchToColor } from '../utils/tsl/oklch'
1
+ /* eslint-disable no-restricted-syntax */
2
+ import { oklchToColor, parseOKLCH } from '../utils/tsl/oklch'
2
3
 
3
4
  export function useThemeColors() {
4
5
  const { activeAccent } = useAccentColor()
@@ -9,13 +10,10 @@ export function useThemeColors() {
9
10
  const infoHex = ref('#38bdf8')
10
11
  const primaryLightHex = ref('#a78bfa')
11
12
 
12
- const clearColor = computed(() =>
13
- colorMode.value === 'dark' ? '#0a0a0a' : '#f8f8f8'
14
- )
13
+ const clearColor = computed(() => (colorMode.value === 'dark' ? '#0a0a0a' : '#f8f8f8'))
15
14
 
16
15
  function cssVarToHex(varName: string): string {
17
- const raw = getComputedStyle(document.documentElement)
18
- .getPropertyValue(varName).trim()
16
+ const raw = getComputedStyle(document.documentElement).getPropertyValue(varName).trim()
19
17
  try {
20
18
  const [l, c, h] = parseOKLCH(raw)
21
19
  return `#${oklchToColor(l, c, h).getHexString()}`
@@ -32,10 +30,16 @@ export function useThemeColors() {
32
30
  requestAnimationFrame(applyColors)
33
31
  return
34
32
  }
35
- primaryHex.value = primary
36
- secondaryHex.value = isDark ? cssVarToHex('--ui-color-neutral-700') : cssVarToHex('--ui-color-secondary-500')
37
- primaryLightHex.value = isDark ? cssVarToHex('--ui-color-neutral-900') : cssVarToHex('--ui-color-primary-300')
38
- infoHex.value = isDark ? cssVarToHex('--ui-color-secondary-500') : cssVarToHex('--ui-color-neutral-300')
33
+ primaryHex.value = primary
34
+ secondaryHex.value = isDark
35
+ ? cssVarToHex('--ui-color-neutral-700')
36
+ : cssVarToHex('--ui-color-secondary-500')
37
+ primaryLightHex.value = isDark
38
+ ? cssVarToHex('--ui-color-neutral-900')
39
+ : cssVarToHex('--ui-color-primary-300')
40
+ infoHex.value = isDark
41
+ ? cssVarToHex('--ui-color-secondary-500')
42
+ : cssVarToHex('--ui-color-neutral-300')
39
43
  }
40
44
 
41
45
  function refresh() {
@@ -1,8 +1,11 @@
1
+ /* eslint-disable @typescript-eslint/consistent-type-assertions */
2
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
3
  // @ts-nocheck
2
- /* eslint-disable no-restricted-imports */
4
+
5
+ import { reactive, ref, watch } from 'vue'
3
6
  import { Color, Vector2, Vector3 } from 'three'
4
7
  import { uniform } from 'three/tsl'
5
- import { reactive, ref, watch } from 'vue'
8
+
6
9
  import type { UniformValue, UniformValues } from '../types'
7
10
 
8
11
  /**
@@ -1,5 +1,6 @@
1
- /* eslint-disable no-console */
2
- import { checkWebGPUSupport } from '../composables/useRendererCapabilities'
1
+ /* eslint-disable no-restricted-syntax */
2
+ /* eslint-disable @typescript-eslint/consistent-type-assertions */
3
+ import { checkWebGPUSupport } from '#layers/canvas/app/composables/useRendererCapabilities'
3
4
 
4
5
  export default defineNuxtPlugin(async () => {
5
6
  const config = useAppConfig()
@@ -1,9 +1,12 @@
1
+ /* eslint-disable max-params */
2
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
3
  // @ts-nocheck - TSL types are complex and not fully exported from three/tsl
2
4
  /**
3
5
  * Modular TSL Color Blending Utilities
4
6
  * Provides composable blend mode functions for shader effects
5
7
  */
6
8
  import { abs, clamp, float, max, min, mix, step, vec3 } from 'three/tsl'
9
+
7
10
  import type { TSLNode } from '../types'
8
11
 
9
12
  // ============================================
@@ -1,9 +1,11 @@
1
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
2
  // @ts-nocheck - TSL types are complex and not fully exported from three/tsl
2
3
  /**
3
4
  * Complex number arithmetic in TSL
4
5
  * Both functions operate on vec2 (x = real, y = imaginary).
5
6
  */
6
- import { vec2, dot } from 'three/tsl'
7
+ import { dot, vec2 } from 'three/tsl'
8
+
7
9
  import type { TSLNode } from '../types'
8
10
 
9
11
  /**
@@ -13,10 +15,7 @@ import type { TSLNode } from '../types'
13
15
  */
14
16
  export function complexDiv(a: TSLNode, b: TSLNode): TSLNode {
15
17
  const denom = dot(b, b)
16
- return vec2(
17
- a.x.mul(b.x).add(a.y.mul(b.y)).div(denom),
18
- a.y.mul(b.x).sub(a.x.mul(b.y)).div(denom),
19
- )
18
+ return vec2(a.x.mul(b.x).add(a.y.mul(b.y)).div(denom), a.y.mul(b.x).sub(a.x.mul(b.y)).div(denom))
20
19
  }
21
20
 
22
21
  /**
@@ -1,3 +1,6 @@
1
+ /* eslint-disable complexity */
2
+ /* eslint-disable no-restricted-syntax */
3
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
4
  // @ts-nocheck - TSL types are complex and not fully exported from three/tsl
2
5
  /**
3
6
  * Modular TSL Post-Processing Effects
@@ -16,13 +19,14 @@ import {
16
19
  vec2,
17
20
  vec4,
18
21
  } from 'three/tsl'
22
+
19
23
  import type { TSLNode } from '../types'
20
24
 
21
25
  // ============================================
22
26
  // LED Effect
23
27
  // ============================================
24
28
 
25
- export interface LEDEffectOptions {
29
+ export type LEDEffectOptions = {
26
30
  scalar?: TSLNode | number
27
31
  zoom?: TSLNode | number
28
32
  exponent?: TSLNode | number
@@ -65,7 +69,7 @@ export function ledEffect(
65
69
  // Pixellation Effect
66
70
  // ============================================
67
71
 
68
- export interface PixellationEffectOptions {
72
+ export type PixellationEffectOptions = {
69
73
  size?: TSLNode | number
70
74
  }
71
75
 
@@ -104,7 +108,7 @@ export function pixellationEffect(
104
108
  // Chromatic Aberration Effect
105
109
  // ============================================
106
110
 
107
- export interface ChromaticAberrationOptions {
111
+ export type ChromaticAberrationOptions = {
108
112
  strength?: TSLNode | number
109
113
  radial?: TSLNode | number
110
114
  direction?: TSLNode | [number, number]
@@ -161,7 +165,7 @@ export function chromaticAberrationEffect(
161
165
  // Bulge/Pinch Effect
162
166
  // ============================================
163
167
 
164
- export interface BulgeEffectOptions {
168
+ export type BulgeEffectOptions = {
165
169
  strength?: TSLNode | number
166
170
  radius?: TSLNode | number
167
171
  power?: TSLNode | number
@@ -207,7 +211,7 @@ export function bulgeEffect(
207
211
  // Wave Distortion Effect
208
212
  // ============================================
209
213
 
210
- export interface WaveDistortionOptions {
214
+ export type WaveDistortionOptions = {
211
215
  frequency?: TSLNode | number
212
216
  amplitude?: TSLNode | number
213
217
  time?: TSLNode | number
@@ -254,7 +258,7 @@ export function waveDistortionEffect(
254
258
  // Swirl Distortion Effect
255
259
  // ============================================
256
260
 
257
- export interface SwirlDistortionOptions {
261
+ export type SwirlDistortionOptions = {
258
262
  strength?: TSLNode | number
259
263
  radius?: TSLNode | number
260
264
  center?: TSLNode | [number, number]
@@ -1,9 +1,13 @@
1
+ /* eslint-disable max-params */
2
+ /* eslint-disable @typescript-eslint/no-unused-vars */
3
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
4
  // @ts-nocheck - TSL types are complex and not fully exported from three/tsl
2
5
  /**
3
6
  * Modular TSL Grain & Film Effects
4
7
  * Provides composable grain and texture overlay functions
5
8
  */
6
9
  import { clamp, dot, float, floor, fract, mix, sin, smoothstep, vec2, vec3 } from 'three/tsl'
10
+
7
11
  import type { TSLNode } from '../types'
8
12
 
9
13
  // ============================================
@@ -1,9 +1,12 @@
1
+ /* eslint-disable max-params */
2
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
3
  // @ts-nocheck - TSL types are complex and not fully exported from three/tsl
2
4
  /**
3
5
  * Modular TSL Lighting Utilities
4
6
  * Provides common lighting models for shader effects
5
7
  */
6
8
  import { dot, float, max, mix, normalize, pow, reflect, vec3 } from 'three/tsl'
9
+
7
10
  import type { TSLNode } from '../types'
8
11
 
9
12
  // ============================================
@@ -110,7 +113,7 @@ export function blinnPhongSpecular(
110
113
  // Combined Lighting
111
114
  // ============================================
112
115
 
113
- export interface LightingOptions {
116
+ export type LightingOptions = {
114
117
  ambient?: TSLNode | number
115
118
  diffuseStrength?: TSLNode | number
116
119
  specularStrength?: TSLNode | number
@@ -1,3 +1,5 @@
1
+ /* eslint-disable max-params */
2
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
3
  // @ts-nocheck - TSL types are complex and not fully exported from three/tsl
2
4
  /**
3
5
  * Modular TSL Math Utilities
@@ -23,6 +25,7 @@ import {
23
25
  vec2,
24
26
  vec4,
25
27
  } from 'three/tsl'
28
+
26
29
  import type { TSLNode } from '../types'
27
30
 
28
31
  // ============================================
@@ -1,3 +1,5 @@
1
+ /* eslint-disable @typescript-eslint/consistent-type-assertions */
2
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
3
  // @ts-nocheck - TSL types are complex and not fully exported from three/tsl
2
4
  /**
3
5
  * Modular TSL Noise Utilities
@@ -26,6 +28,7 @@ import {
26
28
  vec3,
27
29
  vec4,
28
30
  } from 'three/tsl'
31
+
29
32
  import type { TSLNode } from '../types'
30
33
  import {
31
34
  fade,
@@ -204,7 +207,7 @@ export function gradientNoise3D(p: TSLNode): TSLNode {
204
207
  // FBM (Fractal Brownian Motion)
205
208
  // ============================================
206
209
 
207
- export interface FBMOptions {
210
+ export type FBMOptions = {
208
211
  octaves?: number
209
212
  lacunarity?: number
210
213
  gain?: number
@@ -255,7 +258,7 @@ export function fbm3D(p: TSLNode, options: FBMOptions = {}): TSLNode {
255
258
  // Voronoi / Cellular Noise
256
259
  // ============================================
257
260
 
258
- export interface VoronoiResult {
261
+ export type VoronoiResult = {
259
262
  distance: TSLNode
260
263
  cellId: TSLNode
261
264
  }
@@ -699,7 +702,7 @@ export function ridgedFbm3d(p: TSLNode, options: FBMOptions = {}): TSLNode {
699
702
  // Warped FBM Coordinates
700
703
  // ============================================
701
704
 
702
- export interface WarpedFbmOptions {
705
+ export type WarpedFbmOptions = {
703
706
  frequency?: number
704
707
  offset1?: number
705
708
  offset2?: number
@@ -751,7 +754,7 @@ export function warpedFbmCoords(
751
754
  // Turbulence Rotational (XorDev style)
752
755
  // ============================================
753
756
 
754
- export interface TurbulenceRotationalOptions {
757
+ export type TurbulenceRotationalOptions = {
755
758
  octaves?: number
756
759
  amplitude?: number
757
760
  speed?: number
@@ -1,9 +1,11 @@
1
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
2
  // @ts-nocheck - TSL types are complex and not fully exported from three/tsl
2
3
  /**
3
4
  * Modular TSL Noise Helper Functions
4
5
  * Provides primitive functions required by 3D/4D noise algorithms
5
6
  */
6
7
  import { abs, dot, floor, fract, lessThan, mod, mul, sub, vec3, vec4 } from 'three/tsl'
8
+
7
9
  import type { TSLNode } from '../types'
8
10
 
9
11
  // ============================================
@@ -1,3 +1,7 @@
1
+ /* eslint-disable max-params */
2
+ /* eslint-disable @typescript-eslint/consistent-type-assertions */
3
+ /* eslint-disable @typescript-eslint/no-unused-vars */
4
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
1
5
  // @ts-nocheck - TSL types are complex and not fully exported from three/tsl
2
6
  /**
3
7
  * Modular TSL Palette & Color Utilities
@@ -19,13 +23,14 @@ import {
19
23
  vec3,
20
24
  vec4,
21
25
  } from 'three/tsl'
26
+
22
27
  import type { TSLNode } from '../types'
23
28
 
24
29
  // ============================================
25
30
  // Color Stop Types
26
31
  // ============================================
27
32
 
28
- export interface ColorStop {
33
+ export type ColorStop = {
29
34
  position: number
30
35
  color: string | [number, number, number]
31
36
  }