{"version":3,"file":"GradientWave.DKJeqgWu.mjs","names":[],"sources":["https:/framerusercontent.com/modules/qbISo04IgXwHvt1f08Bw/PqHx9uwswPwEixzYIrpZ/GradientWave.js"],"sourcesContent":["import{defineShader,ControlType}from\"framer\";export default defineShader({title:\"Wave Gradient\",fragment:`\n#define S(a,b,t) smoothstep(a,b,t)\n\nmat2 Rot(float a) {\n    float s = sin(a), c = cos(a);\n    return mat2(c, -s, s, c);\n}\n\nvec2 hash(vec2 p) {\n    float s = u_seed;\n    vec2 k1 = vec2(2127.1 + s * 13.37, 81.17 + s * 7.31);\n    vec2 k2 = vec2(1269.5 + s * 11.13, 283.37 + s * 5.79);\n    p = vec2(dot(p, k1), dot(p, k2));\n    return fract(sin(p) * (43758.5453 + s * 1.618));\n}\n\nfloat noise(in vec2 p) {\n    vec2 i = floor(p);\n    vec2 f = fract(p);\n    vec2 u = f * f * (3.0 - 2.0 * f);\n    float n = mix(\n        mix(dot(-1.0 + 2.0 * hash(i), f),\n            dot(-1.0 + 2.0 * hash(i + vec2(1.0, 0.0)), f - vec2(1.0, 0.0)), u.x),\n        mix(dot(-1.0 + 2.0 * hash(i + vec2(0.0, 1.0)), f - vec2(0.0, 1.0)),\n            dot(-1.0 + 2.0 * hash(i + vec2(1.0, 1.0)), f - vec2(1.0, 1.0)), u.x),\n        u.y\n    );\n    return 0.5 + 0.5 * n;\n}\n\nvec3 getColor(int idx) {\n    if (u_colors_length < 1) return vec3(0.0);\n    int safeIdx = clamp(idx, 0, u_colors_length - 1);\n    return u_colors[safeIdx].rgb;\n}\n\nfloat seedF(float base) {\n    return base * (1.0 + 0.5 * sin(u_seed * 3.17 + base));\n}\n\nvec2 warpUV(vec2 uv) {\n    float t = u_time * u_waveSpeed;\n\n    float angleOffset = sin(u_seed * 2.73) * 30.0;\n    mat2 dirRot = Rot(radians(u_waveAngle + angleOffset));\n    vec2 ruv = dirRot * uv;\n\n    float fxMod = seedF(u_waveFreqX);\n    float fyMod = seedF(u_waveFreqY);\n\n    float phaseX = fract(sin(u_seed * 7.19) * 437.58) * 6.2832;\n    float phaseY = fract(cos(u_seed * 3.41) * 291.37) * 6.2832;\n\n    // Core wave with seed-dependent harmonics\n    float harmonic = sin(u_seed * 1.23) * 0.5;\n    float a = fyMod * ruv.y - sin(ruv.x * fxMod + ruv.y - t + phaseX);\n    a += harmonic * sin(ruv.x * fxMod * 2.0 + ruv.y * 0.5 + t * 0.7 + phaseY);\n\n    // Smoothstep mask (unchanged)\n    a = smoothstep(\n        cos(a) * u_maskSoftness,\n        sin(a) * u_maskSoftness + 3.,\n        cos(a - fyMod * ruv.y) - sin(a - fxMod * ruv.x)\n    );\n\n    a *= u_waveAmplitude;\n\n    uv = cos(a) * uv + sin(a) * vec2(-uv.y, uv.x);\n    return uv;\n}\n\nvoid main() {\n    vec2 fragCoord = v_uv * u_resolution;\n    vec2 uv = fragCoord / u_resolution.xy;\n    float ratio = u_resolution.x / u_resolution.y;\n    float t = u_time * u_waveSpeed;\n\n    vec2 tuv = uv - 0.5;\n\n    vec2 seedShift = vec2(sin(u_seed * 4.37), cos(u_seed * 5.91)) * 100.0;\n    float degree = noise(vec2(t * 0.1, tuv.x * tuv.y) + seedShift);\n    tuv.y *= 1.0 / ratio;\n    tuv *= Rot(radians((degree - 0.5) * 720.0 + 180.0));\n    tuv.y *= ratio;\n\n    // Seed-rotate uv2 before warping\n    vec2 uv2 = (fragCoord * 2.0 - u_resolution.xy) / (u_resolution.x + u_resolution.y) * 2.0;\n    float preRotAngle = fract(sin(u_seed * 5.63) * 173.29) * 6.2832;\n    uv2 *= Rot(preRotAngle);\n    vec2 warped = warpUV(uv2) * 0.5 + 0.5;\n\n    vec2 blendUV = mix(tuv, warped - 0.5, u_blendAmount);\n\n    float layerRot1 = -5.0 + sin(u_seed * 1.83) * 20.0;\n    float layerRot2 = 10.0 + cos(u_seed * 2.47) * 20.0;\n\n    vec3 c0 = getColor(0);\n    vec3 c1 = getColor(1);\n    vec3 c2 = getColor(2);\n    vec3 c3 = getColor(3);\n\n    vec3 layer1 = mix(c0, c2, S(-0.3, 0.3, (blendUV * Rot(radians(layerRot1))).x));\n    vec3 layer2 = mix(c3, c1, S(-0.3, 0.3, (blendUV * Rot(radians(layerRot2))).x));\n    vec3 col = mix(layer1, layer2, S(0.3, -0.3, blendUV.y));\n\n    col = mix(col, col * col + 0.5 * sqrt(col), 0.3);\n\n    fragColor = vec4(col, 1.0);\n}\n`,propertyControls:{colors:{type:ControlType.Array,title:\"Colors\",control:{type:ControlType.Color},maxCount:4,defaultValue:[\"#FF3624\",\"#9EABFF\",\"#FFAE00\",\"#E29EFF\"]},seed:{type:ControlType.Number,title:\"Seed\",defaultValue:32,min:0,max:100,step:1},waveSpeed:{type:ControlType.Number,title:\"Speed\",defaultValue:1.5,min:0,max:3,step:.01},waveFreqX:{type:ControlType.Number,title:\"Freq X\",defaultValue:.9,min:.1,max:6,step:.1},waveFreqY:{type:ControlType.Number,title:\"Freq Y\",defaultValue:6,min:.1,max:6,step:.1},waveAngle:{type:ControlType.Number,title:\"Angle\",defaultValue:105,min:-180,max:180,step:1},waveAmplitude:{type:ControlType.Number,title:\"Amplitude\",defaultValue:2.1,min:.5,max:3,step:.01},maskSoftness:{type:ControlType.Number,title:\"Softness\",defaultValue:.74,min:.01,max:2,step:.01},blendAmount:{type:ControlType.Number,title:\"Blend\",defaultValue:.54,min:0,max:1,step:.01}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"shader\",\"name\":null,\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./GradientWave.map"],"mappings":"+HAA4C,IAAgB,EAAa,CAAC,MAAM,gBAAgB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6GvG,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAY,MAAM,MAAM,SAAS,QAAQ,CAAC,KAAK,EAAY,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,UAAU,UAAU,UAAU,SAAS,CAAC,EAAE,KAAK,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,aAAa,GAAG,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,aAAa,IAAI,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,GAAG,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,aAAa,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,EAAE,cAAc,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,aAAa,IAAI,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,IAAI,IAAI,IAAI,IAAI,EAAE,KAAK,GAAG,EAAE,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,aAAa,IAAI,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC"}