kmcom-nuxt-layers 2.2.12 → 2.3.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.
- package/docs/FEEDS.md +1 -2
- package/layers/animations/app/composables/useMagneticElement.ts +11 -9
- package/layers/animations/app/composables/useTiltEffect.ts +11 -9
- package/layers/animations/app/utils/pointerMotion.ts +31 -0
- package/layers/canvas/app/components/ShaderCanvas.vue +2 -2
- package/layers/content/app/composables/useCollectionItems.ts +28 -0
- package/layers/content/app/composables/useGalleryItems.ts +8 -14
- package/layers/content/app/composables/usePortfolioItems.ts +10 -18
- package/layers/core/app/composables/useBrowser.ts +9 -82
- package/layers/core/app/composables/useFeatures.ts +3 -27
- package/layers/core/app/plugins/init.ts +157 -135
- package/layers/core/app/utils/browserInfo.ts +115 -0
- package/layers/core/app/utils/featureClasses.ts +40 -0
- package/layers/core/app/utils/helpers.test.ts +51 -0
- package/layers/feeds/app/components/Feeds/Index.vue +1 -1
- package/layers/feeds/app/components/Feeds/RouteCard.vue +3 -9
- package/layers/feeds/app/utils/feed-catalog.ts +9 -4
- package/layers/feeds/nuxt.config.ts +0 -1
- package/layers/feeds/server/utils/content-adapter.test.ts +68 -0
- package/layers/feeds/server/utils/content-adapter.ts +2 -22
- package/layers/feeds/server/utils/feed-author.ts +32 -0
- package/layers/feeds/server/utils/feed-config.ts +88 -0
- package/layers/feeds/server/utils/feed-service.ts +11 -30
- package/layers/feeds/server/utils/feed-xml.ts +26 -0
- package/layers/feeds/server/utils/formats/rss.ts +10 -15
- package/layers/feeds/server/utils/formats.test.ts +71 -0
- package/layers/forms/app/components/Form/Field.vue +42 -30
- package/layers/forms/app/utils/fieldProps.ts +65 -0
- package/layers/layout/app/components/Layout/Grid/Item.vue +29 -146
- package/layers/layout/app/utils/gridPlacementStyle.ts +195 -0
- package/layers/mailer/app/types/mailer.ts +7 -25
- package/layers/mailer/server/utils/email.ts +28 -13
- package/layers/mailer/server/utils/hooks.ts +1 -20
- package/layers/navigation/app/composables/useSite.ts +2 -9
- package/layers/navigation/app/utils/site.ts +26 -0
- package/layers/routing/app/utils/resolveRoute.test.ts +47 -0
- package/layers/routing/app/utils/resolveRoute.ts +19 -10
- package/layers/scripts/app/composables/useAnalytics.ts +8 -41
- package/layers/scripts/app/composables/useGtm.ts +6 -13
- package/layers/scripts/app/utils/scriptClients.ts +70 -0
- package/layers/scroll/app/composables/useSmoothScroll.ts +9 -43
- package/layers/scroll/app/utils/scroll.ts +103 -0
- package/layers/seo/app/composables/useSeoConfig.ts +3 -9
- package/layers/seo/app/utils/seoConfig.ts +38 -0
- package/layers/shader/app/components/Material/AmbientAurora.client.vue +11 -33
- package/layers/shader/app/components/Material/AmbientFlow.client.vue +10 -37
- package/layers/shader/app/components/Material/AmbientGradientMesh.client.vue +10 -37
- package/layers/shader/app/components/Material/AmbientNebula.client.vue +12 -37
- package/layers/shader/app/components/Material/AmbientOcean.client.vue +9 -33
- package/layers/shader/app/components/Material/Gradient.client.vue +25 -46
- package/layers/shader/app/components/Material/Image.client.vue +10 -55
- package/layers/shader/app/components/Material/Node.client.vue +18 -5
- package/layers/shader/app/components/Material/Noise.client.vue +9 -43
- package/layers/shader/app/components/Preset/ThemeBubble.client.vue +2 -1
- package/layers/shader/app/components/Preset/ThemeFlow.client.vue +2 -1
- package/layers/shader/app/components/Preset/ThemeGradient.client.vue +2 -1
- package/layers/shader/app/components/Preset/ThemeLavaLamp.client.vue +2 -1
- package/layers/shader/app/components/Preset/ThemePlasma.client.vue +2 -1
- package/layers/shader/app/components/Preset/ThemeWave.client.vue +2 -1
- package/layers/shader/app/components/Shader/Background.client.vue +44 -24
- package/layers/shader/app/composables/useAmbientMaterials.ts +5 -1
- package/layers/shader/app/composables/useShader.ts +38 -23
- package/layers/shader/app/composables/useShaderGraph.ts +11 -6
- package/layers/shader/app/composables/useShaderMixBlend.ts +4 -4
- package/layers/shader/app/composables/useShaderRuntime.ts +0 -1
- package/layers/shader/app/composables/useShaderVec2.ts +2 -4
- package/layers/shader/app/composables/useThemePreset.ts +34 -8
- package/layers/shader/app/composables/useUniformWatchers.ts +15 -0
- package/layers/shader/app/composables/useUniforms.ts +0 -1
- package/layers/shader/app/shaders/common/blend.ts +4 -4
- package/layers/shader/app/shaders/common/effects.ts +38 -21
- package/layers/shader/app/shaders/common/grain.ts +46 -49
- package/layers/shader/app/shaders/common/lighting.ts +17 -15
- package/layers/shader/app/shaders/common/math.ts +2 -4
- package/layers/shader/app/shaders/common/nodes.ts +17 -0
- package/layers/shader/app/shaders/common/palette.ts +21 -11
- package/layers/shader/app/shaders/common/patterns.ts +25 -14
- package/layers/shader/app/shaders/common/shapes.ts +97 -88
- package/layers/shader/app/shaders/common/uv.ts +33 -34
- package/layers/shader/app/shaders/createMaterial.ts +92 -78
- package/layers/shader/app/shaders/layers/paperShading.ts +22 -10
- package/layers/shader/app/shaders/layers/shaderGradient.ts +46 -21
- package/layers/shader/app/utils/tsl/tween.ts +2 -4
- package/layers/shader/package.json +5 -1
- package/layers/starter/app/components/StarterDesignSystem.vue +1913 -0
- package/layers/starter/app/components/StarterHome.vue +407 -0
- package/layers/starter/nuxt.config.ts +15 -0
- package/layers/starter/package.json +10 -0
- package/layers/theme/app/components/ThemePicker/Menu.vue +3 -25
- package/layers/theme/app/composables/useThemePreferenceModels.ts +39 -0
- package/layers/theme/server/plugins/theme-fouc.ts +1 -92
- package/layers/theme/server/utils/accent-css.ts +75 -0
- package/layers/typography/app/composables/typography.ts +3 -7
- package/layers/visual/app/composables/accent.ts +2 -9
- package/layers/visual/app/composables/gradient.ts +33 -46
- package/layers/visual/app/composables/picture.ts +2 -79
- package/layers/visual/app/utils/colorTokens.ts +23 -0
- package/layers/visual/app/utils/gradientStyle.ts +41 -0
- package/layers/visual/app/utils/responsiveSizes.ts +49 -0
- package/package.json +17 -5
- package/layers/feeds/app/utils/feed-catalog.test.ts +0 -71
- package/layers/feeds/server/routes/feed/discovery.get.ts +0 -31
|
@@ -106,102 +106,116 @@ const sideMap: Record<string, Side> = {
|
|
|
106
106
|
double: DoubleSide,
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
|
|
110
|
-
// Factory Functions
|
|
111
|
-
// ============================================
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Create a shader material from a shader type
|
|
115
|
-
*/
|
|
116
|
-
export function createShaderMaterial<T extends ShaderType>(
|
|
109
|
+
function createShaderUniforms<T extends ShaderType>(
|
|
117
110
|
type: T,
|
|
118
|
-
shaderOptions?: ShaderOptions<T
|
|
119
|
-
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
111
|
+
shaderOptions?: ShaderOptions<T>
|
|
112
|
+
): ShaderUniforms<T> {
|
|
113
|
+
switch (type) {
|
|
114
|
+
case 'stripe':
|
|
115
|
+
return createStripeGradientUniforms(shaderOptions as StripeGradientOptions) as ShaderUniforms<T>
|
|
116
|
+
case 'meshGradient':
|
|
117
|
+
return createMeshGradientUniforms(shaderOptions as MeshGradientOptions) as ShaderUniforms<T>
|
|
118
|
+
case 'aurora':
|
|
119
|
+
return createAuroraUniforms(shaderOptions as AuroraOptions) as ShaderUniforms<T>
|
|
120
|
+
case 'shaderGradient':
|
|
121
|
+
return createShaderGradientUniforms(shaderOptions as ShaderGradientOptions) as ShaderUniforms<T>
|
|
122
|
+
case 'paperShading':
|
|
123
|
+
return createPaperShadingUniforms(shaderOptions as PaperShadingOptions) as ShaderUniforms<T>
|
|
124
|
+
}
|
|
125
|
+
}
|
|
128
126
|
|
|
129
|
-
|
|
130
|
-
|
|
127
|
+
function createShaderColorNode<T extends ShaderType>(type: T, uniforms: ShaderUniforms<T>): TSLNode {
|
|
128
|
+
switch (type) {
|
|
129
|
+
case 'stripe':
|
|
130
|
+
return stripeGradient(uniforms as StripeGradientUniforms)
|
|
131
|
+
case 'meshGradient':
|
|
132
|
+
return meshGradient(uniforms as MeshGradientUniforms)
|
|
133
|
+
case 'aurora':
|
|
134
|
+
return aurora(uniforms as AuroraUniforms)
|
|
135
|
+
case 'shaderGradient':
|
|
136
|
+
return shaderGradient(uniforms as ShaderGradientUniforms)
|
|
137
|
+
case 'paperShading':
|
|
138
|
+
return paperShading(uniforms as PaperShadingUniforms)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
131
141
|
|
|
132
|
-
|
|
142
|
+
function updateShaderUniforms<T extends ShaderType>(
|
|
143
|
+
type: T,
|
|
144
|
+
uniforms: ShaderUniforms<T>,
|
|
145
|
+
options: Partial<ShaderOptions<T>>
|
|
146
|
+
): void {
|
|
133
147
|
switch (type) {
|
|
134
148
|
case 'stripe':
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
149
|
+
updateStripeGradientUniforms(
|
|
150
|
+
uniforms as StripeGradientUniforms,
|
|
151
|
+
options as Partial<StripeGradientOptions>
|
|
152
|
+
)
|
|
153
|
+
return
|
|
140
154
|
case 'meshGradient':
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
155
|
+
updateMeshGradientUniforms(
|
|
156
|
+
uniforms as MeshGradientUniforms,
|
|
157
|
+
options as Partial<MeshGradientOptions>
|
|
158
|
+
)
|
|
159
|
+
return
|
|
146
160
|
case 'aurora':
|
|
147
|
-
uniforms
|
|
148
|
-
|
|
149
|
-
break
|
|
161
|
+
updateAuroraUniforms(uniforms as AuroraUniforms, options as Partial<AuroraOptions>)
|
|
162
|
+
return
|
|
150
163
|
case 'shaderGradient':
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
164
|
+
updateShaderGradientUniforms(
|
|
165
|
+
uniforms as ShaderGradientUniforms,
|
|
166
|
+
options as Partial<ShaderGradientOptions>
|
|
167
|
+
)
|
|
168
|
+
return
|
|
156
169
|
case 'paperShading':
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
break
|
|
162
|
-
default:
|
|
163
|
-
throw new Error(`Unknown shader type: ${type}`)
|
|
170
|
+
updatePaperShadingUniforms(
|
|
171
|
+
uniforms as PaperShadingUniforms,
|
|
172
|
+
options as Partial<PaperShadingOptions>
|
|
173
|
+
)
|
|
164
174
|
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function applyMaterialOptions(
|
|
178
|
+
material: MeshBasicNodeMaterial,
|
|
179
|
+
colorNode: TSLNode,
|
|
180
|
+
options?: MaterialOptions
|
|
181
|
+
): void {
|
|
182
|
+
const {
|
|
183
|
+
transparent = false,
|
|
184
|
+
side = 'double',
|
|
185
|
+
opacity = 1,
|
|
186
|
+
depthTest = true,
|
|
187
|
+
depthWrite = true,
|
|
188
|
+
} = options || {}
|
|
165
189
|
|
|
166
|
-
// Create material
|
|
167
|
-
const material = new MeshBasicNodeMaterial()
|
|
168
|
-
material.colorNode = transparent ? vec4(colorNode, opacity) : colorNode
|
|
169
190
|
material.transparent = transparent
|
|
170
191
|
material.side = sideMap[side] || DoubleSide
|
|
171
192
|
material.depthTest = depthTest
|
|
172
193
|
material.depthWrite = depthWrite
|
|
194
|
+
material.colorNode = transparent ? vec4(colorNode, opacity) : colorNode
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// ============================================
|
|
198
|
+
// Factory Functions
|
|
199
|
+
// ============================================
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Create a shader material from a shader type
|
|
203
|
+
*/
|
|
204
|
+
export function createShaderMaterial<T extends ShaderType>(
|
|
205
|
+
type: T,
|
|
206
|
+
shaderOptions?: ShaderOptions<T>,
|
|
207
|
+
materialOptions?: MaterialOptions
|
|
208
|
+
): ShaderMaterialResult<T> {
|
|
209
|
+
const uniforms = createShaderUniforms(type, shaderOptions)
|
|
210
|
+
const colorNode = createShaderColorNode(type, uniforms)
|
|
211
|
+
|
|
212
|
+
// Create material
|
|
213
|
+
const material = new MeshBasicNodeMaterial()
|
|
214
|
+
applyMaterialOptions(material, colorNode, materialOptions)
|
|
173
215
|
|
|
174
216
|
// Update function
|
|
175
217
|
const update = (options: Partial<ShaderOptions<T>>) => {
|
|
176
|
-
|
|
177
|
-
case 'stripe':
|
|
178
|
-
updateStripeGradientUniforms(
|
|
179
|
-
uniforms as StripeGradientUniforms,
|
|
180
|
-
options as Partial<StripeGradientOptions>
|
|
181
|
-
)
|
|
182
|
-
break
|
|
183
|
-
case 'meshGradient':
|
|
184
|
-
updateMeshGradientUniforms(
|
|
185
|
-
uniforms as MeshGradientUniforms,
|
|
186
|
-
options as Partial<MeshGradientOptions>
|
|
187
|
-
)
|
|
188
|
-
break
|
|
189
|
-
case 'aurora':
|
|
190
|
-
updateAuroraUniforms(uniforms as AuroraUniforms, options as Partial<AuroraOptions>)
|
|
191
|
-
break
|
|
192
|
-
case 'shaderGradient':
|
|
193
|
-
updateShaderGradientUniforms(
|
|
194
|
-
uniforms as ShaderGradientUniforms,
|
|
195
|
-
options as Partial<ShaderGradientOptions>
|
|
196
|
-
)
|
|
197
|
-
break
|
|
198
|
-
case 'paperShading':
|
|
199
|
-
updatePaperShadingUniforms(
|
|
200
|
-
uniforms as PaperShadingUniforms,
|
|
201
|
-
options as Partial<PaperShadingOptions>
|
|
202
|
-
)
|
|
203
|
-
break
|
|
204
|
-
}
|
|
218
|
+
updateShaderUniforms(type, uniforms, options)
|
|
205
219
|
}
|
|
206
220
|
|
|
207
221
|
// Dispose function
|
|
@@ -9,6 +9,18 @@ import { grain as grainFn, paperTexture } from '../common/grain'
|
|
|
9
9
|
import { fbm2D, simplexNoise2D } from '../common/noise'
|
|
10
10
|
import type { FloatUniform, TSLNode } from '../types'
|
|
11
11
|
|
|
12
|
+
const DEFAULT_PAPER_SHADING_OPTIONS = {
|
|
13
|
+
paperColor: '#f5f0e6',
|
|
14
|
+
inkColor: '#1a1a1a',
|
|
15
|
+
inkColor2: '#3d5a80',
|
|
16
|
+
speed: 0.1,
|
|
17
|
+
textureIntensity: 0.15,
|
|
18
|
+
flowIntensity: 1,
|
|
19
|
+
grainIntensity: 0.08,
|
|
20
|
+
bleed: 0.5,
|
|
21
|
+
edgeDarkness: 0.3,
|
|
22
|
+
} as const
|
|
23
|
+
|
|
12
24
|
export type PaperShadingOptions = {
|
|
13
25
|
/** Base paper color */
|
|
14
26
|
paperColor?: string
|
|
@@ -49,16 +61,16 @@ export function createPaperShadingUniforms(
|
|
|
49
61
|
options: PaperShadingOptions = {}
|
|
50
62
|
): PaperShadingUniforms {
|
|
51
63
|
const {
|
|
52
|
-
paperColor
|
|
53
|
-
inkColor
|
|
54
|
-
inkColor2
|
|
55
|
-
speed
|
|
56
|
-
textureIntensity
|
|
57
|
-
flowIntensity
|
|
58
|
-
grainIntensity
|
|
59
|
-
bleed
|
|
60
|
-
edgeDarkness
|
|
61
|
-
} = options
|
|
64
|
+
paperColor,
|
|
65
|
+
inkColor,
|
|
66
|
+
inkColor2,
|
|
67
|
+
speed,
|
|
68
|
+
textureIntensity,
|
|
69
|
+
flowIntensity,
|
|
70
|
+
grainIntensity,
|
|
71
|
+
bleed,
|
|
72
|
+
edgeDarkness,
|
|
73
|
+
} = { ...DEFAULT_PAPER_SHADING_OPTIONS, ...options }
|
|
62
74
|
|
|
63
75
|
return {
|
|
64
76
|
paperColor: uniform(new Color(paperColor)),
|
|
@@ -8,6 +8,31 @@ import { cos, mix, pow, sin, smoothstep, time as tslTime, uniform, uv, vec2, vec
|
|
|
8
8
|
import { fbm2D, simplexNoise2D } from '../common/noise'
|
|
9
9
|
import type { FloatUniform, TSLNode } from '../types'
|
|
10
10
|
|
|
11
|
+
const DEFAULT_SHADER_GRADIENT_OPTIONS = {
|
|
12
|
+
color1: '#ff5722',
|
|
13
|
+
color2: '#673ab7',
|
|
14
|
+
color3: '#2196f3',
|
|
15
|
+
speed: 0.4,
|
|
16
|
+
morphIntensity: 1,
|
|
17
|
+
grain: 0.03,
|
|
18
|
+
lightX: 0.5,
|
|
19
|
+
lightY: 0.5,
|
|
20
|
+
brightness: 1,
|
|
21
|
+
zoom: 1,
|
|
22
|
+
} as const
|
|
23
|
+
|
|
24
|
+
function setNumberUniform(uniform: FloatUniform, value: number | undefined): void {
|
|
25
|
+
if (value !== undefined) {
|
|
26
|
+
uniform.value = value
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function setColorUniform(uniform: TSLNode, value: string | undefined): void {
|
|
31
|
+
if (value !== undefined) {
|
|
32
|
+
uniform.value = new Color(value)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
11
36
|
export type ShaderGradientOptions = {
|
|
12
37
|
/** Primary color */
|
|
13
38
|
color1?: string
|
|
@@ -51,17 +76,17 @@ export function createShaderGradientUniforms(
|
|
|
51
76
|
options: ShaderGradientOptions = {}
|
|
52
77
|
): ShaderGradientUniforms {
|
|
53
78
|
const {
|
|
54
|
-
color1
|
|
55
|
-
color2
|
|
56
|
-
color3
|
|
57
|
-
speed
|
|
58
|
-
morphIntensity
|
|
59
|
-
grain
|
|
60
|
-
lightX
|
|
61
|
-
lightY
|
|
62
|
-
brightness
|
|
63
|
-
zoom
|
|
64
|
-
} = options
|
|
79
|
+
color1,
|
|
80
|
+
color2,
|
|
81
|
+
color3,
|
|
82
|
+
speed,
|
|
83
|
+
morphIntensity,
|
|
84
|
+
grain,
|
|
85
|
+
lightX,
|
|
86
|
+
lightY,
|
|
87
|
+
brightness,
|
|
88
|
+
zoom,
|
|
89
|
+
} = { ...DEFAULT_SHADER_GRADIENT_OPTIONS, ...options }
|
|
65
90
|
|
|
66
91
|
return {
|
|
67
92
|
color1: uniform(new Color(color1)),
|
|
@@ -139,14 +164,14 @@ export function updateShaderGradientUniforms(
|
|
|
139
164
|
uniforms: ShaderGradientUniforms,
|
|
140
165
|
options: Partial<ShaderGradientOptions>
|
|
141
166
|
): void {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
167
|
+
setColorUniform(uniforms.color1, options.color1)
|
|
168
|
+
setColorUniform(uniforms.color2, options.color2)
|
|
169
|
+
setColorUniform(uniforms.color3, options.color3)
|
|
170
|
+
setNumberUniform(uniforms.speed, options.speed)
|
|
171
|
+
setNumberUniform(uniforms.morphIntensity, options.morphIntensity)
|
|
172
|
+
setNumberUniform(uniforms.grain, options.grain)
|
|
173
|
+
setNumberUniform(uniforms.lightX, options.lightX)
|
|
174
|
+
setNumberUniform(uniforms.lightY, options.lightY)
|
|
175
|
+
setNumberUniform(uniforms.brightness, options.brightness)
|
|
176
|
+
setNumberUniform(uniforms.zoom, options.zoom)
|
|
152
177
|
}
|
|
@@ -14,11 +14,9 @@ export type TweenHandle = {
|
|
|
14
14
|
*/
|
|
15
15
|
export function tweenUniform(
|
|
16
16
|
uniformNode: { value: number },
|
|
17
|
-
from: number,
|
|
18
|
-
to: number,
|
|
19
|
-
duration: number,
|
|
20
|
-
easing?: (t: number) => number
|
|
17
|
+
...args: [from: number, to: number, duration: number, easing?: (t: number) => number]
|
|
21
18
|
): TweenHandle {
|
|
19
|
+
const [from, to, duration, easing] = args
|
|
22
20
|
let startTime: number | null = null
|
|
23
21
|
let cancelled = false
|
|
24
22
|
let resolvePromise: () => void
|