kmcom-nuxt-layers 2.2.5 → 2.2.8

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 (218) hide show
  1. package/docs/FEEDS.md +197 -0
  2. package/docs/LAYERS-FIXES.md +101 -0
  3. package/docs/MIGRATION.md +627 -0
  4. package/docs/feed-layer.md +374 -0
  5. package/docs/patch-picture-provider-type.md +52 -0
  6. package/docs/shaderGuide.md +2071 -0
  7. package/docs/types-architecture.md +234 -0
  8. package/layers/animations/app/components/Motion/CountUp.vue +1 -1
  9. package/layers/animations/app/components/Motion/Magnetic.vue +1 -1
  10. package/layers/animations/app/components/Motion/Marquee.vue +3 -2
  11. package/layers/animations/app/components/Motion/MarqueeText.vue +3 -2
  12. package/layers/animations/app/components/Motion/Tilt.vue +1 -1
  13. package/layers/animations/app/composables/useCountUp.ts +4 -1
  14. package/layers/animations/app/composables/useMagneticElement.ts +2 -4
  15. package/layers/animations/app/composables/useMarqueeCopies.ts +4 -4
  16. package/layers/animations/app/composables/useTiltEffect.ts +1 -1
  17. package/layers/animations/app/types/animations.ts +8 -0
  18. package/layers/animations/app/types/index.ts +1 -0
  19. package/layers/animations/package.json +4 -1
  20. package/layers/canvas/app/components/ShaderCanvas.vue +4 -4
  21. package/layers/canvas/app/composables/useRendererCapabilities.ts +19 -15
  22. package/layers/canvas/app/types/index.ts +1 -0
  23. package/layers/canvas/package.json +2 -1
  24. package/layers/canvas/tsconfig.json +2 -1
  25. package/layers/content/app/components/Blog/Card.vue +5 -5
  26. package/layers/content/app/components/Gallery/AmbientImage.vue +3 -3
  27. package/layers/content/app/components/Gallery/Card.vue +3 -3
  28. package/layers/content/app/components/Gallery/Lightbox.vue +5 -1
  29. package/layers/content/app/components/NuxtContent/Detail.vue +5 -1
  30. package/layers/content/app/components/NuxtContent/Surround.vue +5 -3
  31. package/layers/content/app/components/NuxtContent/Toc.vue +1 -1
  32. package/layers/content/app/components/Portfolio/Card.vue +5 -5
  33. package/layers/content/app/components/content/Figure.vue +3 -3
  34. package/layers/content/app/composables/useBlogPosts.ts +2 -2
  35. package/layers/content/app/composables/useCollectionItem.ts +1 -3
  36. package/layers/content/app/composables/useGalleryItems.ts +2 -2
  37. package/layers/content/app/types/index.ts +1 -0
  38. package/layers/content/package.json +2 -1
  39. package/layers/core/app/composables/useCache.ts +0 -1
  40. package/layers/core/app/composables/useErrorLog.ts +9 -11
  41. package/layers/core/app/plugins/error-handler.ts +36 -36
  42. package/layers/core/app/plugins/feature-detection.client.ts +15 -15
  43. package/layers/core/app/plugins/init.ts +121 -129
  44. package/layers/core/app/plugins/loading.client.ts +27 -27
  45. package/layers/core/app/plugins/scroll-guard.client.ts +26 -26
  46. package/layers/core/app/utils/helpers.ts +14 -12
  47. package/layers/core/nuxt.config.ts +1 -0
  48. package/layers/feeds/app/plugins/feed-head.ts +62 -63
  49. package/layers/feeds/package.json +2 -1
  50. package/layers/feeds/server/routes/feed/discovery.get.ts +1 -2
  51. package/layers/feeds/server/utils/content-adapter.ts +3 -2
  52. package/layers/forms/app/components/Form/Field.vue +4 -4
  53. package/layers/forms/app/types/index.ts +1 -0
  54. package/layers/forms/package.json +2 -1
  55. package/layers/forms/server/api/contact.post.ts +1 -1
  56. package/layers/layout/app/components/Layout/Grid/Item.vue +33 -19
  57. package/layers/layout/app/components/Layout/Page/Container.vue +11 -11
  58. package/layers/layout/app/components/Layout/Page/Header.vue +1 -1
  59. package/layers/layout/app/components/Layout/Page/index.vue +1 -1
  60. package/layers/layout/app/components/Layout/Section/Gallery.vue +6 -1
  61. package/layers/layout/app/components/Layout/Section/Title.vue +1 -1
  62. package/layers/layout/app/types/index.ts +1 -0
  63. package/layers/layout/package.json +2 -1
  64. package/layers/mailer/app/types/index.ts +1 -0
  65. package/layers/mailer/app/types/mailer.ts +25 -0
  66. package/layers/mailer/package.json +2 -1
  67. package/layers/motion/package.json +2 -1
  68. package/layers/navigation/app/components/Links/Group.vue +1 -0
  69. package/layers/navigation/app/components/Links/Named.vue +2 -0
  70. package/layers/navigation/app/types/index.ts +1 -0
  71. package/layers/navigation/package.json +4 -1
  72. package/layers/page-transitions/app/plugins/page-transitions.client.ts +9 -9
  73. package/layers/page-transitions/package.json +4 -1
  74. package/layers/routing/app/plugins/feature-flags.client.ts +9 -9
  75. package/layers/routing/app/types/app-config.d.ts +3 -1
  76. package/layers/routing/app/types/index.ts +1 -0
  77. package/layers/routing/package.json +2 -1
  78. package/layers/scripts/app/composables/useGtm.ts +1 -1
  79. package/layers/scripts/app/types/index.ts +1 -0
  80. package/layers/scripts/app/types/scripts.ts +14 -0
  81. package/layers/scripts/package.json +2 -1
  82. package/layers/scroll/app/components/Motion/ScrollScene.vue +3 -1
  83. package/layers/scroll/app/composables/useScrollSteps.ts +2 -9
  84. package/layers/scroll/app/composables/useSectionProgress.ts +2 -1
  85. package/layers/scroll/app/plugins/locomotive-scroll.client.ts +54 -61
  86. package/layers/scroll/app/types/index.ts +1 -0
  87. package/layers/scroll/app/types/scroll.ts +32 -0
  88. package/layers/scroll/package.json +3 -0
  89. package/layers/seo/package.json +2 -1
  90. package/layers/shader/app/components/Material/Fresnel.client.vue +1 -1
  91. package/layers/shader/app/components/Material/Image.client.vue +1 -1
  92. package/layers/shader/app/components/Material/Node.client.vue +7 -7
  93. package/layers/shader/app/components/Material/Noise.client.vue +1 -1
  94. package/layers/shader/app/components/Node/Color.client.vue +17 -20
  95. package/layers/shader/app/components/Node/Noise.client.vue +31 -34
  96. package/layers/shader/app/components/Pipeline/Aurora.client.vue +4 -8
  97. package/layers/shader/app/components/Pipeline/BilinearGradient.client.vue +8 -11
  98. package/layers/shader/app/components/Pipeline/BillowNoise.client.vue +4 -8
  99. package/layers/shader/app/components/Pipeline/BrightnessContrast.client.vue +6 -2
  100. package/layers/shader/app/components/Pipeline/CellularNoise.client.vue +4 -8
  101. package/layers/shader/app/components/Pipeline/Checkerboard.client.vue +4 -8
  102. package/layers/shader/app/components/Pipeline/Circle.client.vue +5 -8
  103. package/layers/shader/app/components/Pipeline/Clouds.client.vue +4 -8
  104. package/layers/shader/app/components/Pipeline/ColorBurnBlend.client.vue +2 -19
  105. package/layers/shader/app/components/Pipeline/ColorDodgeBlend.client.vue +2 -19
  106. package/layers/shader/app/components/Pipeline/ColourRamp.client.vue +5 -9
  107. package/layers/shader/app/components/Pipeline/ConicGradient.client.vue +5 -8
  108. package/layers/shader/app/components/Pipeline/Cross.client.vue +4 -8
  109. package/layers/shader/app/components/Pipeline/CurlNoise.client.vue +3 -7
  110. package/layers/shader/app/components/Pipeline/DarkenBlend.client.vue +2 -19
  111. package/layers/shader/app/components/Pipeline/DayNightCycle.client.vue +5 -8
  112. package/layers/shader/app/components/Pipeline/DiagonalGradient.client.vue +5 -8
  113. package/layers/shader/app/components/Pipeline/DiamondGradient.client.vue +5 -8
  114. package/layers/shader/app/components/Pipeline/DifferenceBlend.client.vue +2 -19
  115. package/layers/shader/app/components/Pipeline/DomainWarpedNoise.client.vue +4 -8
  116. package/layers/shader/app/components/Pipeline/Dots.client.vue +4 -8
  117. package/layers/shader/app/components/Pipeline/DuoTone.client.vue +5 -9
  118. package/layers/shader/app/components/Pipeline/ExclusionBlend.client.vue +3 -23
  119. package/layers/shader/app/components/Pipeline/ExponentialFog.client.vue +4 -7
  120. package/layers/shader/app/components/Pipeline/FilmBurn.client.vue +4 -7
  121. package/layers/shader/app/components/Pipeline/Flame.client.vue +4 -8
  122. package/layers/shader/app/components/Pipeline/FocalGradient.client.vue +5 -8
  123. package/layers/shader/app/components/Pipeline/GodRays.client.vue +4 -7
  124. package/layers/shader/app/components/Pipeline/GradientNoise.client.vue +4 -8
  125. package/layers/shader/app/components/Pipeline/Grid.client.vue +4 -8
  126. package/layers/shader/app/components/Pipeline/Halation.client.vue +3 -7
  127. package/layers/shader/app/components/Pipeline/HardLightBlend.client.vue +2 -19
  128. package/layers/shader/app/components/Pipeline/Haze.client.vue +4 -7
  129. package/layers/shader/app/components/Pipeline/Hexagon.client.vue +4 -8
  130. package/layers/shader/app/components/Pipeline/LensFlare.client.vue +4 -7
  131. package/layers/shader/app/components/Pipeline/LightenBlend.client.vue +2 -19
  132. package/layers/shader/app/components/Pipeline/LinearGradient4.client.vue +2 -2
  133. package/layers/shader/app/components/Pipeline/Marble.client.vue +4 -8
  134. package/layers/shader/app/components/Pipeline/MonochromeTint.client.vue +3 -7
  135. package/layers/shader/app/components/Pipeline/MultiplyBlend.client.vue +2 -19
  136. package/layers/shader/app/components/Pipeline/NoisyGradient.client.vue +4 -8
  137. package/layers/shader/app/components/Pipeline/NoisyGradientBlend.client.vue +4 -8
  138. package/layers/shader/app/components/Pipeline/OverlayBlend.client.vue +2 -19
  139. package/layers/shader/app/components/Pipeline/Polygon.client.vue +4 -8
  140. package/layers/shader/app/components/Pipeline/RaymarchTunnel.client.vue +4 -7
  141. package/layers/shader/app/components/Pipeline/Rectangle.client.vue +4 -8
  142. package/layers/shader/app/components/Pipeline/RidgedNoise.client.vue +4 -8
  143. package/layers/shader/app/components/Pipeline/Ring.client.vue +4 -8
  144. package/layers/shader/app/components/Pipeline/ScreenBlend.client.vue +2 -19
  145. package/layers/shader/app/components/Pipeline/SkyAtmosphere.client.vue +6 -9
  146. package/layers/shader/app/components/Pipeline/SoftLightBlend.client.vue +2 -19
  147. package/layers/shader/app/components/Pipeline/SplitTone.client.vue +4 -8
  148. package/layers/shader/app/components/Pipeline/Star.client.vue +4 -8
  149. package/layers/shader/app/components/Pipeline/Stripes.client.vue +4 -8
  150. package/layers/shader/app/components/Pipeline/Tint.client.vue +4 -7
  151. package/layers/shader/app/components/Pipeline/Triangle.client.vue +4 -8
  152. package/layers/shader/app/components/Pipeline/ValueNoise.client.vue +4 -8
  153. package/layers/shader/app/components/Pipeline/VoronoiEdges.client.vue +4 -8
  154. package/layers/shader/app/components/Pipeline/Water.client.vue +5 -8
  155. package/layers/shader/app/components/Pipeline/WaveBendLayer.client.vue +4 -7
  156. package/layers/shader/app/components/Pipeline/WaveColourLayer.client.vue +3 -7
  157. package/layers/shader/app/components/Pipeline/Wood.client.vue +4 -8
  158. package/layers/shader/app/components/Preset/Aurora.client.vue +15 -21
  159. package/layers/shader/app/components/Preset/Flow.client.vue +2 -1
  160. package/layers/shader/app/components/Preset/GradientMesh.client.vue +2 -1
  161. package/layers/shader/app/components/Preset/Nebula.client.vue +2 -1
  162. package/layers/shader/app/components/Preset/Ocean.client.vue +2 -1
  163. package/layers/shader/app/components/Preset/ThemeAurora.client.vue +30 -90
  164. package/layers/shader/app/components/Preset/ThemeBubble.client.vue +30 -91
  165. package/layers/shader/app/components/Preset/ThemeFlow.client.vue +30 -90
  166. package/layers/shader/app/components/Preset/ThemeGradient.client.vue +30 -91
  167. package/layers/shader/app/components/Preset/ThemeLavaLamp.client.vue +30 -90
  168. package/layers/shader/app/components/Preset/ThemePlasma.client.vue +30 -90
  169. package/layers/shader/app/components/Preset/ThemeWave.client.vue +30 -90
  170. package/layers/shader/app/components/Shader/Background.client.vue +4 -4
  171. package/layers/shader/app/components/Shader/Host.client.vue +31 -33
  172. package/layers/shader/app/components/Shader/Runtime.client.vue +15 -23
  173. package/layers/shader/app/composables/useAmbientMaterials.ts +53 -51
  174. package/layers/shader/app/composables/useShaderMixBlend.ts +26 -0
  175. package/layers/shader/app/composables/useThemePreset.ts +75 -0
  176. package/layers/shader/app/plugins/shader.client.ts +21 -21
  177. package/layers/shader/app/shaders/common/noise.ts +2 -7
  178. package/layers/shader/app/shaders/types.ts +6 -6
  179. package/layers/shader/app/types/tsl.ts +7 -25
  180. package/layers/shader/app/types/uniforms.ts +2 -1
  181. package/layers/shader/app/utils/tsl/color.ts +7 -1
  182. package/layers/shader/package.json +2 -1
  183. package/layers/theme/app/components/ThemePicker/Colors.vue +1 -3
  184. package/layers/theme/app/plugins/theme.client.ts +54 -51
  185. package/layers/theme/app/types/app-config.d.ts +4 -2
  186. package/layers/theme/app/types/index.ts +1 -0
  187. package/layers/theme/app/types/theme.ts +3 -18
  188. package/layers/theme/package.json +2 -1
  189. package/layers/theme/server/plugins/theme-fouc.ts +1 -1
  190. package/layers/transitions/package.json +4 -1
  191. package/layers/typography/app/components/Typography/CodeBlock.vue +2 -2
  192. package/layers/typography/app/components/Typography/Headline.vue +2 -2
  193. package/layers/typography/app/components/Typography/HeadlineScreen.vue +1 -1
  194. package/layers/typography/app/components/Typography/QuoteBlock.vue +4 -1
  195. package/layers/typography/app/components/Typography/TextStroke.vue +2 -0
  196. package/layers/typography/app/components/Typography/index.vue +36 -27
  197. package/layers/typography/app/composables/typography.ts +27 -21
  198. package/layers/typography/app/types/colors.ts +9 -29
  199. package/layers/typography/app/types/index.ts +2 -0
  200. package/layers/typography/package.json +4 -1
  201. package/layers/ui/package.json +2 -1
  202. package/layers/visual/app/app.config.ts +5 -2
  203. package/layers/visual/app/components/Accent/Blob.vue +20 -20
  204. package/layers/visual/app/components/Accent/Scene.vue +2 -2
  205. package/layers/visual/app/components/Base/Modal.vue +2 -2
  206. package/layers/visual/app/components/Gradient/Background.vue +2 -2
  207. package/layers/visual/app/components/Gradient/Text.vue +2 -2
  208. package/layers/visual/app/components/Media/Picture.vue +3 -1
  209. package/layers/visual/app/components/Progress/Bar.vue +6 -6
  210. package/layers/visual/app/components/Tint/Overlay.vue +14 -14
  211. package/layers/visual/app/composables/accent.ts +10 -8
  212. package/layers/visual/app/composables/gradient.ts +2 -3
  213. package/layers/visual/app/composables/tint.ts +7 -7
  214. package/layers/visual/app/types/index.ts +6 -0
  215. package/layers/visual/app/types/media.ts +4 -2
  216. package/layers/visual/app/types/tint.ts +2 -1
  217. package/layers/visual/package.json +4 -1
  218. package/package.json +5 -2
@@ -1,7 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector2, Vector3 } from 'three'
2
+ import { Color, Vector2 } from 'three'
3
3
  import { float, mix, uniform, vec2, vec4 } from 'three/tsl'
4
4
 
5
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
+
5
7
  /** Radial gradient with an offset focal point — asymmetric radial. */
6
8
  const {
7
9
  colorA = '#ffffff',
@@ -19,13 +21,8 @@
19
21
  order?: number
20
22
  }>()
21
23
 
22
- function toVec3Node(hex: string) {
23
- const c = new Color(hex)
24
- return uniform(new Vector3(c.r, c.g, c.b))
25
- }
26
-
27
- const colorANode = toVec3Node(colorA)
28
- const colorBNode = toVec3Node(colorB)
24
+ const colorANode = hexToVec3Uniform(colorA)
25
+ const colorBNode = hexToVec3Uniform(colorB)
29
26
  const focalNode = uniform(new Vector2(...focal))
30
27
  const radiusNode = uniform(radius)
31
28
  watch(
@@ -1,7 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector2, Vector3 } from 'three'
2
+ import { Color, Vector2 } from 'three'
3
3
  import { cos, float, smoothstep, uniform, vec2, vec4 } from 'three/tsl'
4
4
 
5
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
+
5
7
  /**
6
8
  * Radial god rays — procedural volumetric light shafts emanating from a source point.
7
9
  * Uses angular spokes in UV space to approximate crepuscular rays.
@@ -27,13 +29,8 @@
27
29
  order?: number
28
30
  }>()
29
31
 
30
- function toVec3Node(hex: string) {
31
- const c = new Color(hex)
32
- return uniform(new Vector3(c.r, c.g, c.b))
33
- }
34
-
35
32
  const posNode = uniform(new Vector2(...position))
36
- const colorNode = toVec3Node(color)
33
+ const colorNode = hexToVec3Uniform(color)
37
34
  const intensityNode = uniform(intensity)
38
35
  const rayCountNode = uniform(rayCount)
39
36
  const decayNode = uniform(decay)
@@ -1,8 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector3 } from 'three'
2
+ import { Color } from 'three'
3
3
  import { float, mix, time, uniform, vec3, vec4 } from 'three/tsl'
4
4
 
5
5
  import { gradientNoise3D } from '../../shaders/common/noise'
6
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
7
 
7
8
  const {
8
9
  colorA = '#000000',
@@ -18,13 +19,8 @@
18
19
  order?: number
19
20
  }>()
20
21
 
21
- function toVec3Node(hex: string) {
22
- const c = new Color(hex)
23
- return uniform(new Vector3(c.r, c.g, c.b))
24
- }
25
-
26
- const colorANode = toVec3Node(colorA)
27
- const colorBNode = toVec3Node(colorB)
22
+ const colorANode = hexToVec3Uniform(colorA)
23
+ const colorBNode = hexToVec3Uniform(colorB)
28
24
  const scaleNode = uniform(scale)
29
25
  const speedNode = uniform(speed)
30
26
  watch(
@@ -1,8 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector3 } from 'three'
2
+ import { Color } from 'three'
3
3
  import { float, mix, uniform, vec4 } from 'three/tsl'
4
4
 
5
5
  import { grid } from '../../shaders/common/shapes'
6
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
7
 
7
8
  const {
8
9
  colorA = '#000000',
@@ -20,13 +21,8 @@
20
21
  order?: number
21
22
  }>()
22
23
 
23
- function toVec3Node(hex: string) {
24
- const c = new Color(hex)
25
- return uniform(new Vector3(c.r, c.g, c.b))
26
- }
27
-
28
- const colorANode = toVec3Node(colorA)
29
- const colorBNode = toVec3Node(colorB)
24
+ const colorANode = hexToVec3Uniform(colorA)
25
+ const colorBNode = hexToVec3Uniform(colorB)
30
26
  const cellNode = uniform(cellSize)
31
27
  const lineNode = uniform(lineWidth)
32
28
  watch(
@@ -1,8 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector3 } from 'three'
2
+ import { Color } from 'three'
3
3
  import { float, smoothstep, uniform, vec4 } from 'three/tsl'
4
4
 
5
5
  import { luminance } from '../../shaders/common/blend'
6
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
7
 
7
8
  /**
8
9
  * Red/warm glow bleed around highlight areas — the analogue film halation effect.
@@ -23,12 +24,7 @@
23
24
  order?: number
24
25
  }>()
25
26
 
26
- function toVec3Node(hex: string) {
27
- const c = new Color(hex)
28
- return uniform(new Vector3(c.r, c.g, c.b))
29
- }
30
-
31
- const colorNode = toVec3Node(color)
27
+ const colorNode = hexToVec3Uniform(color)
32
28
  const thresholdNode = uniform(threshold)
33
29
  const intensityNode = uniform(intensity)
34
30
  watch(
@@ -1,9 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { Color } from 'three'
3
- import { mix, uniform, vec4 } from 'three/tsl'
4
-
5
2
  import { blendHardLight } from '../../shaders/common/blend'
6
- import type { TSLNode } from '../../shaders/types'
7
3
 
8
4
  const {
9
5
  color = '#808080',
@@ -15,23 +11,10 @@
15
11
  order?: number
16
12
  }>()
17
13
 
18
- const colorNode: TSLNode = uniform(new Color(color))
19
- const opacityNode = uniform(opacity)
20
- watch(
14
+ useShaderMixBlend(
15
+ blendHardLight,
21
16
  () => color,
22
- (v) => {
23
- colorNode.value.set(v)
24
- }
25
- )
26
- watch(
27
17
  () => opacity,
28
- (v) => {
29
- opacityNode.value = v
30
- }
31
- )
32
-
33
- useShaderStage(
34
- (prev) => vec4(mix(prev.xyz, blendHardLight(prev.xyz, colorNode), opacityNode), prev.w),
35
18
  order
36
19
  )
37
20
  </script>
@@ -1,7 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector3 } from 'three'
2
+ import { Color } from 'three'
3
3
  import { float, smoothstep, uniform, vec4 } from 'three/tsl'
4
4
 
5
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
+
5
7
  /**
6
8
  * Edge haze — additive fog/bloom at screen boundaries.
7
9
  * Useful for dreamlike or atmospheric borders.
@@ -21,12 +23,7 @@
21
23
  order?: number
22
24
  }>()
23
25
 
24
- function toVec3Node(hex: string) {
25
- const c = new Color(hex)
26
- return uniform(new Vector3(c.r, c.g, c.b))
27
- }
28
-
29
- const colorNode = toVec3Node(color)
26
+ const colorNode = hexToVec3Uniform(color)
30
27
  const reachNode = uniform(reach)
31
28
  const intensityNode = uniform(intensity)
32
29
  watch(
@@ -1,8 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector3 } from 'three'
2
+ import { Color } from 'three'
3
3
  import { float, mix, smoothstep, uniform, vec4 } from 'three/tsl'
4
4
 
5
5
  import { sdHexagon } from '../../shaders/common/sdf'
6
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
7
 
7
8
  const {
8
9
  colorA = '#000000',
@@ -18,13 +19,8 @@
18
19
  order?: number
19
20
  }>()
20
21
 
21
- function toVec3Node(hex: string) {
22
- const c = new Color(hex)
23
- return uniform(new Vector3(c.r, c.g, c.b))
24
- }
25
-
26
- const colorANode = toVec3Node(colorA)
27
- const colorBNode = toVec3Node(colorB)
22
+ const colorANode = hexToVec3Uniform(colorA)
23
+ const colorBNode = hexToVec3Uniform(colorB)
28
24
  const radiusNode = uniform(radius)
29
25
  const softnessNode = uniform(softness)
30
26
  watch(
@@ -1,7 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector2, Vector3 } from 'three'
2
+ import { Color, Vector2 } from 'three'
3
3
  import { float, smoothstep, uniform, vec2, vec4 } from 'three/tsl'
4
4
 
5
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
+
5
7
  /**
6
8
  * Procedural lens flare — starburst + ghost circle artefacts along the flare axis.
7
9
  */
@@ -23,13 +25,8 @@
23
25
  order?: number
24
26
  }>()
25
27
 
26
- function toVec3Node(hex: string) {
27
- const c = new Color(hex)
28
- return uniform(new Vector3(c.r, c.g, c.b))
29
- }
30
-
31
28
  const posNode = uniform(new Vector2(...position))
32
- const colorNode = toVec3Node(color)
29
+ const colorNode = hexToVec3Uniform(color)
33
30
  const intensityNode = uniform(intensity)
34
31
  const ghostCountNode = uniform(ghostCount)
35
32
  watch(
@@ -1,9 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { Color } from 'three'
3
- import { mix, uniform, vec4 } from 'three/tsl'
4
-
5
2
  import { blendLighten } from '../../shaders/common/blend'
6
- import type { TSLNode } from '../../shaders/types'
7
3
 
8
4
  const {
9
5
  color = '#808080',
@@ -15,23 +11,10 @@
15
11
  order?: number
16
12
  }>()
17
13
 
18
- const colorNode: TSLNode = uniform(new Color(color))
19
- const opacityNode = uniform(opacity)
20
- watch(
14
+ useShaderMixBlend(
15
+ blendLighten,
21
16
  () => color,
22
- (v) => {
23
- colorNode.value.set(v)
24
- }
25
- )
26
- watch(
27
17
  () => opacity,
28
- (v) => {
29
- opacityNode.value = v
30
- }
31
- )
32
-
33
- useShaderStage(
34
- (prev) => vec4(mix(prev.xyz, blendLighten(prev.xyz, colorNode), opacityNode), prev.w),
35
18
  order
36
19
  )
37
20
  </script>
@@ -5,8 +5,8 @@
5
5
  const {
6
6
  colorA = '#000000',
7
7
  colorB = '#ffffff',
8
- colorC,
9
- colorD,
8
+ colorC = undefined,
9
+ colorD = undefined,
10
10
  axis = 'y',
11
11
  order = 0,
12
12
  } = defineProps<{
@@ -1,8 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector3 } from 'three'
2
+ import { Color } from 'three'
3
3
  import { float, mix, sin, time, uniform, vec4 } from 'three/tsl'
4
4
 
5
5
  import { fbm2D } from '../../shaders/common/noise'
6
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
7
 
7
8
  const {
8
9
  colorA = '#f5f0e8',
@@ -31,13 +32,8 @@
31
32
  order?: number
32
33
  }>()
33
34
 
34
- function toVec3Node(hex: string) {
35
- const c = new Color(hex)
36
- return uniform(new Vector3(c.r, c.g, c.b))
37
- }
38
-
39
- const colorANode = toVec3Node(colorA)
40
- const colorBNode = toVec3Node(colorB)
35
+ const colorANode = hexToVec3Uniform(colorA)
36
+ const colorBNode = hexToVec3Uniform(colorB)
41
37
  const freqNode = uniform(frequency)
42
38
  const noiseScaleNode = uniform(noiseScale)
43
39
  const noiseStrNode = uniform(noiseStrength)
@@ -1,8 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector3 } from 'three'
2
+ import { Color } from 'three'
3
3
  import { uniform, vec4 } from 'three/tsl'
4
4
 
5
5
  import { desaturate } from '../../shaders/common/blend'
6
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
7
 
7
8
  const {
8
9
  color = '#4466aa',
@@ -16,12 +17,7 @@
16
17
  order?: number
17
18
  }>()
18
19
 
19
- function toVec3Node(hex: string) {
20
- const c = new Color(hex)
21
- return uniform(new Vector3(c.r, c.g, c.b))
22
- }
23
-
24
- const colorNode = toVec3Node(color)
20
+ const colorNode = hexToVec3Uniform(color)
25
21
  const desatNode = uniform(desaturation)
26
22
  watch(
27
23
  () => color,
@@ -1,9 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { Color } from 'three'
3
- import { mix, uniform, vec4 } from 'three/tsl'
4
-
5
2
  import { blendMultiply } from '../../shaders/common/blend'
6
- import type { TSLNode } from '../../shaders/types'
7
3
 
8
4
  const {
9
5
  color = '#808080',
@@ -15,23 +11,10 @@
15
11
  order?: number
16
12
  }>()
17
13
 
18
- const colorNode: TSLNode = uniform(new Color(color))
19
- const opacityNode = uniform(opacity)
20
- watch(
14
+ useShaderMixBlend(
15
+ blendMultiply,
21
16
  () => color,
22
- (v) => {
23
- colorNode.value.set(v)
24
- }
25
- )
26
- watch(
27
17
  () => opacity,
28
- (v) => {
29
- opacityNode.value = v
30
- }
31
- )
32
-
33
- useShaderStage(
34
- (prev) => vec4(mix(prev.xyz, blendMultiply(prev.xyz, colorNode), opacityNode), prev.w),
35
18
  order
36
19
  )
37
20
  </script>
@@ -1,8 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector3 } from 'three'
2
+ import { Color } from 'three'
3
3
  import { float, mix, time, uniform, vec4 } from 'three/tsl'
4
4
 
5
5
  import { fbm2D } from '../../shaders/common/noise'
6
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
7
 
7
8
  /** Linear gradient with per-pixel FBM noise offset — living, organic gradient. */
8
9
  const {
@@ -27,13 +28,8 @@
27
28
  order?: number
28
29
  }>()
29
30
 
30
- function toVec3Node(hex: string) {
31
- const c = new Color(hex)
32
- return uniform(new Vector3(c.r, c.g, c.b))
33
- }
34
-
35
- const colorANode = toVec3Node(colorA)
36
- const colorBNode = toVec3Node(colorB)
31
+ const colorANode = hexToVec3Uniform(colorA)
32
+ const colorBNode = hexToVec3Uniform(colorB)
37
33
  const angleNode = uniform((angle * Math.PI) / 180)
38
34
  const noiseStrNode = uniform(noiseStrength)
39
35
  const noiseScaleNode = uniform(noiseScale)
@@ -1,8 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector3 } from 'three'
2
+ import { Color } from 'three'
3
3
  import { cos, float, mix, sin, smoothstep, time, uniform, vec2, vec4 } from 'three/tsl'
4
4
 
5
5
  import { simplexNoise2D } from '../../shaders/common/noise'
6
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
7
 
7
8
  /**
8
9
  * Self-contained Grainient/Shadertoy gradient pattern.
@@ -48,13 +49,8 @@
48
49
 
49
50
  const DEG2RAD = Math.PI / 180
50
51
 
51
- function toVec3Node(hex: string) {
52
- const c = new Color(hex)
53
- return uniform(new Vector3(c.r, c.g, c.b))
54
- }
55
-
56
- const colorANode = toVec3Node(colorA)
57
- const colorBNode = toVec3Node(colorB)
52
+ const colorANode = hexToVec3Uniform(colorA)
53
+ const colorBNode = hexToVec3Uniform(colorB)
58
54
  const noiseScaleNode = uniform(noiseScale)
59
55
  const rotAmountNode = uniform(rotationAmount * DEG2RAD)
60
56
  const warpFreqNode = uniform(warpFrequency)
@@ -1,9 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { Color } from 'three'
3
- import { mix, uniform, vec4 } from 'three/tsl'
4
-
5
2
  import { blendOverlay } from '../../shaders/common/blend'
6
- import type { TSLNode } from '../../shaders/types'
7
3
 
8
4
  const {
9
5
  color = '#808080',
@@ -15,23 +11,10 @@
15
11
  order?: number
16
12
  }>()
17
13
 
18
- const colorNode: TSLNode = uniform(new Color(color))
19
- const opacityNode = uniform(opacity)
20
- watch(
14
+ useShaderMixBlend(
15
+ blendOverlay,
21
16
  () => color,
22
- (v) => {
23
- colorNode.value.set(v)
24
- }
25
- )
26
- watch(
27
17
  () => opacity,
28
- (v) => {
29
- opacityNode.value = v
30
- }
31
- )
32
-
33
- useShaderStage(
34
- (prev) => vec4(mix(prev.xyz, blendOverlay(prev.xyz, colorNode), opacityNode), prev.w),
35
18
  order
36
19
  )
37
20
  </script>
@@ -1,8 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector3 } from 'three'
2
+ import { Color } from 'three'
3
3
  import { float, mix, uniform, vec4 } from 'three/tsl'
4
4
 
5
5
  import { polygon } from '../../shaders/common/shapes'
6
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
7
 
7
8
  const {
8
9
  colorA = '#000000',
@@ -24,13 +25,8 @@
24
25
  order?: number
25
26
  }>()
26
27
 
27
- function toVec3Node(hex: string) {
28
- const c = new Color(hex)
29
- return uniform(new Vector3(c.r, c.g, c.b))
30
- }
31
-
32
- const colorANode = toVec3Node(colorA)
33
- const colorBNode = toVec3Node(colorB)
28
+ const colorANode = hexToVec3Uniform(colorA)
29
+ const colorBNode = hexToVec3Uniform(colorB)
34
30
  const radiusNode = uniform(radius)
35
31
  const softnessNode = uniform(softness)
36
32
  const rotationNode = uniform((rotation * Math.PI) / 180)
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector3 } from 'three'
2
+ import { Color } from 'three'
3
3
  import {
4
4
  abs,
5
5
  Break,
@@ -17,6 +17,7 @@
17
17
  } from 'three/tsl'
18
18
 
19
19
  import type { TSLNode } from '../../shaders/types'
20
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
20
21
 
21
22
  const {
22
23
  radius = 0.8,
@@ -42,12 +43,8 @@
42
43
  const radiusNode = uniform(radius)
43
44
  const speedNode = uniform(speed)
44
45
 
45
- function toVec3Node(hex: string) {
46
- const c = new Color(hex)
47
- return uniform(new Vector3(c.r, c.g, c.b))
48
- }
49
- const colorANode = toVec3Node(colorA)
50
- const colorBNode = toVec3Node(colorB)
46
+ const colorANode = hexToVec3Uniform(colorA)
47
+ const colorBNode = hexToVec3Uniform(colorB)
51
48
 
52
49
  watch(
53
50
  () => radius,
@@ -1,8 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector3 } from 'three'
2
+ import { Color } from 'three'
3
3
  import { float, mix, uniform, vec4 } from 'three/tsl'
4
4
 
5
5
  import { roundedRect } from '../../shaders/common/shapes'
6
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
7
 
7
8
  const {
8
9
  colorA = '#000000',
@@ -22,13 +23,8 @@
22
23
  order?: number
23
24
  }>()
24
25
 
25
- function toVec3Node(hex: string) {
26
- const c = new Color(hex)
27
- return uniform(new Vector3(c.r, c.g, c.b))
28
- }
29
-
30
- const colorANode = toVec3Node(colorA)
31
- const colorBNode = toVec3Node(colorB)
26
+ const colorANode = hexToVec3Uniform(colorA)
27
+ const colorBNode = hexToVec3Uniform(colorB)
32
28
  const widthNode = uniform(width)
33
29
  const heightNode = uniform(height)
34
30
  const cornerNode = uniform(cornerRadius)
@@ -1,8 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector3 } from 'three'
2
+ import { Color } from 'three'
3
3
  import { float, mix, time, uniform, vec4 } from 'three/tsl'
4
4
 
5
5
  import { ridgedFbm2d } from '../../shaders/common/noise'
6
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
7
 
7
8
  const {
8
9
  colorA = '#000000',
@@ -18,13 +19,8 @@
18
19
  order?: number
19
20
  }>()
20
21
 
21
- function toVec3Node(hex: string) {
22
- const c = new Color(hex)
23
- return uniform(new Vector3(c.r, c.g, c.b))
24
- }
25
-
26
- const colorANode = toVec3Node(colorA)
27
- const colorBNode = toVec3Node(colorB)
22
+ const colorANode = hexToVec3Uniform(colorA)
23
+ const colorBNode = hexToVec3Uniform(colorB)
28
24
  const scaleNode = uniform(scale)
29
25
  const speedNode = uniform(speed)
30
26
  watch(
@@ -1,8 +1,9 @@
1
1
  <script setup lang="ts">
2
- import { Color, Vector3 } from 'three'
2
+ import { Color } from 'three'
3
3
  import { float, mix, uniform, vec4 } from 'three/tsl'
4
4
 
5
5
  import { ring } from '../../shaders/common/shapes'
6
+ import { hexToVec3Uniform } from '../../utils/tsl/color'
6
7
 
7
8
  const {
8
9
  colorA = '#000000',
@@ -20,13 +21,8 @@
20
21
  order?: number
21
22
  }>()
22
23
 
23
- function toVec3Node(hex: string) {
24
- const c = new Color(hex)
25
- return uniform(new Vector3(c.r, c.g, c.b))
26
- }
27
-
28
- const colorANode = toVec3Node(colorA)
29
- const colorBNode = toVec3Node(colorB)
24
+ const colorANode = hexToVec3Uniform(colorA)
25
+ const colorBNode = hexToVec3Uniform(colorB)
30
26
  const innerNode = uniform(innerRadius)
31
27
  const outerNode = uniform(outerRadius)
32
28
  const softnessNode = uniform(softness)
@@ -1,9 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { Color } from 'three'
3
- import { mix, uniform, vec4 } from 'three/tsl'
4
-
5
2
  import { blendScreen } from '../../shaders/common/blend'
6
- import type { TSLNode } from '../../shaders/types'
7
3
 
8
4
  const {
9
5
  color = '#808080',
@@ -15,23 +11,10 @@
15
11
  order?: number
16
12
  }>()
17
13
 
18
- const colorNode: TSLNode = uniform(new Color(color))
19
- const opacityNode = uniform(opacity)
20
- watch(
14
+ useShaderMixBlend(
15
+ blendScreen,
21
16
  () => color,
22
- (v) => {
23
- colorNode.value.set(v)
24
- }
25
- )
26
- watch(
27
17
  () => opacity,
28
- (v) => {
29
- opacityNode.value = v
30
- }
31
- )
32
-
33
- useShaderStage(
34
- (prev) => vec4(mix(prev.xyz, blendScreen(prev.xyz, colorNode), opacityNode), prev.w),
35
18
  order
36
19
  )
37
20
  </script>