1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,16082,e=>{"use strict";var t=e.i(213429),a=e.i(161871),r=e.i(886242);e.i(459510);var i=e.i(571629),o=e.i(598203),l=e.i(368928),s=e.i(505195),u=e.i(62415),n=e.i(453042),d=e.i(935962),f=e.i(868466),p=e.i(977363),h=e.i(382827),c=e.i(440477),m=e.i(437941),x=e.i(833985);function v(e){let t=function(e){let t=[],a=0,r=e.length;for(;a<r;){for(;a<r&&/\s/.test(e[a]);)a++;if(a>=r)break;if(e.slice(a).match(/^[a-zA-Z-]+\(/)){let i=a,o=0;for(;a<r;){if("("===e[a])o++;else if(")"===e[a]&&0==--o){a++;break}a++}t.push(e.slice(i,a).trim());continue}let i=a;for(;a<r&&!/\s/.test(e[a]);)a++;t.push(e.slice(i,a))}return t}(e.trim()),a=!1,r,i=[];for(let e of t){if("inset"===e.toLowerCase()){a=!0;continue}if(/^-?(\d+\.?\d*|\.\d+)(px|em|rem|%)?$/.test(e)){i.push(parseFloat(e));continue}if(/^#[0-9a-fA-F]{3,8}$/.test(e)||/^(rgb|rgba|hsl|hsla)\(/.test(e)||new Set(["transparent","currentcolor","black","white","red","green","blue","yellow","cyan","magenta","orange","purple","pink","brown","gray","grey","silver","gold","navy","teal","maroon","olive","lime","aqua","fuchsia","darkblue","darkgreen","darkred","darkcyan","darkmagenta","darkyellow","darkgray","darkgrey","lightblue","lightgreen","lightpink","lightyellow","lightgray","lightgrey","lightcyan","lightcoral","lightsalmon","cornflowerblue","dodgerblue","steelblue","royalblue","midnightblue","slategray","slategrey","dimgray","dimgrey","darkslategray","darkslategrey","coral","tomato","orangered","firebrick","crimson","indianred","chocolate","sienna","saddlebrown","peru","tan","wheat","lavender","thistle","plum","violet","orchid","mediumvioletred","deeppink","hotpink","palevioletred","darkviolet","darkorchid","darkmagenta","mediumpurple","blueviolet","indigo","rebeccapurple","greenyellow","chartreuse","lawngreen","limegreen","palegreen","mediumspringgreen","springgreen","mediumaquamarine","mediumseagreen","seagreen","forestgreen","darkgreen","darkolivegreen","olivedrab","yellowgreen","aliceblue","antiquewhite","azure","beige","bisque","blanchedalmond","burlywood","cadetblue","cornsilk","floralwhite","gainsboro","ghostwhite","honeydew","ivory","khaki","darkkhaki","linen","mintcream","mistyrose","moccasin","navajowhite","oldlace","papayawhip","peachpuff","rosybrown","sandybrown","seashell","snow","whitesmoke","skyblue","deepskyblue","lightskyblue","lightsteelblue","powderblue","aquamarine","turquoise","mediumturquoise","darkturquoise","lightseagreen","darkcyan","salmon","lightsalmon","darksalmon","goldenrod","darkgoldenrod","palegoldenrod","lemonchiffon","lightgoldenrodyellow"]).has(e.toLowerCase())){r=e;continue}r=e}let o=i[0]??0,l=i[1]??0,s=Math.max(0,i[2]??0),u=i[3]??0,n=1,d=r??"rgba(0,0,0,1)",f=d.match(/^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\s*\)$/);f&&void 0!==f[4]&&(n=parseFloat(f[4]),d=`rgb(${f[1]}, ${f[2]}, ${f[3]})`);let p=d.match(/^hsla?\(\s*([\d.]+)\s*,\s*([\d.]+%?)\s*,\s*([\d.]+%?)\s*(?:,\s*([\d.]+))?\s*\)$/);return p&&void 0!==p[4]&&(n=parseFloat(p[4]),d=`hsl(${p[1]}, ${p[2]}, ${p[3]})`),{offsetX:o,offsetY:l,blur:s,spread:u,color:d,alpha:n,inset:a}}function g(e){return e&&"none"!==e.trim()&&""!==e.trim()?(function(e){let t=[],a=0,r=0;for(let i=0;i<e.length;i++){let o=e[i];"("===o?a++:")"===o?a--:","===o&&0===a&&(t.push(e.slice(r,i).trim()),r=i+1)}let i=e.slice(r).trim();return i.length>0&&t.push(i),t})(e.trim()).map(v):[]}function w(e){switch(Math.max(1,Math.min(5,Math.round(e)))){case 1:return{sigmaExtent:2.12,sampleStride:2,maxRadius:26};case 2:return{sigmaExtent:2.35,sampleStride:2,maxRadius:34};case 3:return{sigmaExtent:2.62,sampleStride:1,maxRadius:44};case 4:return{sigmaExtent:2.88,sampleStride:1,maxRadius:56};default:return{sigmaExtent:3,sampleStride:1,maxRadius:64}}}function b(e){let t=0;for(let a of e){if(!a.inset)t=Math.max(t,Math.abs(a.offsetX)+1.5*a.blur+Math.max(a.spread,0),Math.abs(a.offsetY)+1.5*a.blur+Math.max(a.spread,0))}return Math.ceil(t)}function y(e){let[t,a,r]=new n.Color(e.color).toArray();return[t,a,r,e.alpha]}function S(e){return null==e?[0,0,0,0]:"number"==typeof e?[e,e,e,e]:e}let R=`in vec2 aPosition; 2out vec2 vTextureCoord; 3out vec2 vPixelCoord; 4 5uniform vec4 uInputSize; 6uniform vec4 uOutputFrame; 7uniform vec4 uOutputTexture; 8 9vec4 filterVertexPosition(void) 10{ 11 vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy; 12 13 position.x = position.x * (2.0 / uOutputTexture.x) - 1.0; 14 position.y = position.y * (2.0 * uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z; 15 16 return vec4(position, 0.0, 1.0); 17} 18 19vec2 filterTextureCoord(void) 20{ 21 return aPosition * (uOutputFrame.zw * uInputSize.zw); 22} 23 24void main(void) 25{ 26 gl_Position = filterVertexPosition(); 27 vTextureCoord = filterTextureCoord(); 28 // Pixel coordinate relative to the output frame origin 29 vPixelCoord = aPosition * uOutputFrame.zw; 30}
31`,C=`// pixi-box-shadow â SDF / box mode only (shapeMode: 'box') 32// 33// Dedicated fragment shader: no texture-mode branches, no extra texture bindings. 34// Analytical rounded-rect shadow in one pass. 35 36precision highp float; 37 38in vec2 vTextureCoord; 39in vec2 vPixelCoord; 40out vec4 finalColor; 41 42uniform sampler2D uTexture; 43uniform vec4 uInputSize; 44 45uniform vec2 uElementSize; 46uniform vec4 uBorderRadius; 47uniform vec2 uPaddingOffset; 48 49/** scaleX, scaleY, boundsMinX, boundsMinY â map filter pixel to world when uCoordMode is set */ 50uniform vec4 uFilterToWorld; 51/** Linear part of worldâlocal: (a, c, b, d) for local.x = a*wx+c*wy+tx, local.y = b*wx+d*wy+ty */ 52uniform vec4 uWLinear; 53/** (tx, ty, coordMode, _) â coordMode 1 = evaluate SDF in container local space (rotation-safe) */ 54uniform vec4 uWTrans; 55uniform vec2 uLocalRectCenter; 56 57uniform int uShadowCount; 58uniform vec4 uShadowOffsetBlurSpread[8]; 59uniform vec4 uShadowColor[8]; 60uniform float uShadowInset[8]; 61 62/** Display-object alpha (worldAlpha) â scales shadows with the element like CSS opacity */ 63uniform float uWorldAlpha; 64 65float erf_approx(float x) { 66 float ax = abs(x); 67 float t = 1.0 / (1.0 + 0.3275911 * ax); 68 float y = 1.0 - (((((1.061405429 * t - 1.453152027) * t) + 1.421413741) * t - 0.284496736) * t + 0.254829592) * t * exp(-ax * ax); 69 return sign(x) * y; 70} 71 72float gaussianCDF(float x, float sigma) { 73 return 0.5 + 0.5 * erf_approx(x * (0.7071067811865476 / sigma)); 74} 75 76float blurredBox1D(float x, float halfW, float sigma) { 77 return gaussianCDF(x + halfW, sigma) - gaussianCDF(x - halfW, sigma); 78} 79 80float sdRoundedBox(vec2 p, vec2 b, vec4 r) { 81 vec2 rr = (p.x > 0.0) ? r.yz : r.xw; 82 rr.x = (p.y > 0.0) ? rr.y : rr.x; 83 float rad = rr.x; 84 vec2 q = abs(p) - b + rad; 85 return min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - rad; 86} 87 88float roundedBoxShadow(vec2 p, vec2 halfSize, float sigma, vec4 radii) { 89 if (sigma < 0.001) { 90 float d = sdRoundedBox(p, halfSize, radii); 91 return 1.0 - smoothstep(-0.5, 0.5, d); 92 } 93 94 float maxRadius = max(max(radii.x, radii.y), max(radii.z, radii.w)); 95 if (maxRadius < 0.5) { 96 float xInt = blurredBox1D(p.x, halfSize.x, sigma); 97 float yInt = blurredBox1D(p.y, halfSize.y, sigma); 98 return xInt * yInt; 99 } 100 101 vec4 effRadii = sqrt(radii * radii + 2.0 * sigma * sigma); 102 float maxDim = min(halfSize.x, halfSize.y); 103 effRadii = min(effRadii, vec4(maxDim)); 104 105 float d = sdRoundedBox(p, halfSize, effRadii); 106 return 1.0 - gaussianCDF(d, sigma); 107} 108 109void main(void) { 110 vec4 texColor = texture(uTexture, vTextureCoord); 111 112 // CSS group opacity: flatten shadow + fill at full opacity, then multiply once (not shadow\xd7α + fill\xd7α). 113 if (uWorldAlpha < 1e-5) { 114 finalColor = vec4(0.0); 115 return; 116 } 117 float wa = uWorldAlpha; 118 vec4 texFull = texColor / wa; 119 120 vec2 p; 121 if (uWTrans.z > 0.5) { 122 vec2 world = vPixelCoord * uFilterToWorld.xy + uFilterToWorld.zw; 123 vec2 local = vec2( 124 dot(uWLinear.xy, world), 125 dot(uWLinear.zw, world) 126 ) + uWTrans.xy; 127 p = local - uLocalRectCenter; 128 } else { 129 vec2 localPos = vPixelCoord - uPaddingOffset; 130 vec2 elementCenter = uElementSize * 0.5; 131 p = localPos - elementCenter; 132 } 133 vec2 halfSize = uElementSize * 0.5; 134 135 float maxR = min(halfSize.x, halfSize.y); 136 vec4 baseRadii = min(uBorderRadius, vec4(maxR)); 137 138 float elementSDF = sdRoundedBox(p, halfSize, baseRadii); 139 float insideElement = 1.0 - smoothstep(-0.5, 0.5, elementSDF); 140 141 vec4 outerResult = vec4(0.0); 142 vec4 insetResult = vec4(0.0); 143 144 for (int i = 7; i >= 0; i--) { 145 if (i >= uShadowCount) continue; 146 147 vec4 obs = uShadowOffsetBlurSpread[i]; 148 vec2 offset = obs.xy; 149 float blur = obs.z; 150 float spread = obs.w; 151 vec4 shadowCol = uShadowColor[i]; 152 float isInset = uShadowInset[i]; 153 154 if (shadowCol.a < 0.001) continue; 155 156 float sigma = blur * 0.5; 157 vec2 shadowP = p - offset; 158 float shadowValue; 159 160 if (isInset > 0.5) { 161 vec2 insetHalf = max(halfSize - spread, vec2(0.001)); 162 vec4 insetRadii = clamp(baseRadii - spread, vec4(0.0), vec4(min(insetHalf.x, insetHalf.y))); 163 float inner = roundedBoxShadow(shadowP, insetHalf, sigma, insetRadii); 164 shadowValue = (1.0 - inner) * insideElement; 165 166 vec4 shadow = vec4(shadowCol.rgb * shadowCol.a * shadowValue, shadowCol.a * shadowValue); 167 insetResult = insetResult + shadow * (1.0 - insetResult.a); 168 } else { 169 vec2 outerHalf = max(halfSize + spread, vec2(0.001)); 170 vec4 outerRadii = clamp(baseRadii + spread, vec4(0.0), vec4(min(outerHalf.x, outerHalf.y))); 171 shadowValue = roundedBoxShadow(shadowP, outerHalf, sigma, outerRadii); 172 173 vec4 shadow = vec4(shadowCol.rgb * shadowCol.a * shadowValue, shadowCol.a * shadowValue); 174 outerResult = outerResult + shadow * (1.0 - outerResult.a); 175 } 176 } 177 178 vec4 color = outerResult; 179 color = texFull + color * (1.0 - texFull.a); 180 color = vec4( 181 insetResult.rgb + color.rgb * (1.0 - insetResult.a), 182 insetResult.a + color.a * (1.0 - insetResult.a) 183 ); 184 185 finalColor = color * wa; 186} 187`,z=`// SDF / box mode only â no uBlurredAlpha bindings (matches first-commit GPU layout). 188
189struct GlobalFilterUniforms { 190 uInputSize: vec4<f32>, 191 uInputPixel: vec4<f32>, 192 uInputClamp: vec4<f32>, 193 uOutputFrame: vec4<f32>, 194 uGlobalFrame: vec4<f32>, 195 uOutputTexture: vec4<f32>, 196}; 197 198struct BoxShadowUniforms { 199 uElementSize: vec2<f32>, 200 uPaddingOffset: vec2<f32>, 201 uBorderRadius: vec4<f32>, 202 uShadowCount: i32, 203 _pad0: i32, 204 _pad1: i32, 205 _pad2: i32, 206 uFilterToWorld: vec4<f32>, 207 uWLinear: vec4<f32>, 208 uWTrans: vec4<f32>, 209 uLocalRectCenter: vec2<f32>, 210 _padShape: vec2<f32>, 211 uShadowOffsetBlurSpread: array<vec4<f32>, 8>, 212 uShadowColor: array<vec4<f32>, 8>, 213 uShadowInset: array<vec4<f32>, 2>, 214 uWorldAlpha: f32, 215}; 216 217@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms; 218@group(0) @binding(1) var uTexture: texture_2d<f32>; 219@group(0) @binding(2) var uSampler: sampler; 220 221@group(1) @binding(0) var<uniform> bsu: BoxShadowUniforms; 222 223struct VSOutput { 224 @builtin(position) position: vec4<f32>, 225 @location(0) uv: vec2<f32>, 226 @location(1) pixelCoord: vec2<f32>, 227}; 228 229fn filterVertexPosition(aPosition: vec2<f32>) -> vec4<f32> { 230 var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy; 231 position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0; 232 position.y = position.y * (2.0 * gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z; 233 return vec4<f32>(position, 0.0, 1.0); 234} 235 236fn filterTextureCoord(aPosition: vec2<f32>) -> vec2<f32> { 237 return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw); 238} 239 240@vertex 241fn mainVertex(@location(0) aPosition: vec2<f32>) -> VSOutput { 242 var output: VSOutput; 243 output.position = filterVertexPosition(aPosition); 244 output.uv = filterTextureCoord(aPosition); 245 output.pixelCoord = aPosition * gfu.uOutputFrame.zw; 246 return output; 247} 248 249fn erf_approx(x: f32) -> f32 { 250 let ax = abs(x); 251 let t = 1.0 / (1.0 + 0.3275911 * ax); 252 let y = 1.0 - (((((1.061405429 * t - 1.453152027) * t) + 1.421413741) * t - 0.284496736) * t + 0.254829592) * t * exp(-ax * ax); 253 return sign(x) * y; 254} 255 256fn gaussianCDF(x: f32, sigma: f32) -> f32 { 257 return 0.5 + 0.5 * erf_approx(x * (0.7071067811865476 / sigma)); 258} 259 260fn blurredBox1D(x: f32, halfW: f32, sigma: f32) -> f32 { 261 return gaussianCDF(x + halfW, sigma) - gaussianCDF(x - halfW, sigma); 262} 263 264fn sdRoundedBox(p: vec2<f32>, b: vec2<f32>, r: vec4<f32>) -> f32 { 265 var rr = select(r.xw, r.yz, p.x > 0.0); 266 rr.x = select(rr.x, rr.y, p.y > 0.0); 267 let rad = rr.x; 268 let q = abs(p) - b + rad; 269 return min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - rad; 270} 271 272fn roundedBoxShadow(p: vec2<f32>, halfSize: vec2<f32>, sigma: f32, radii: vec4<f32>) -> f32 { 273 if (sigma < 0.001) { 274 let d = sdRoundedBox(p, halfSize, radii); 275 return 1.0 - smoothstep(-0.5, 0.5, d); 276 } 277 278 let maxRadius = max(max(radii.x, radii.y), max(radii.z, radii.w)); 279 if (maxRadius < 0.5) { 280 let xInt = blurredBox1D(p.x, halfSize.x, sigma); 281 let yInt = blurredBox1D(p.y, halfSize.y, sigma); 282 return xInt * yInt; 283 } 284 285 let effRadii = sqrt(radii * radii + 2.0 * sigma * sigma); 286 let maxDim = min(halfSize.x, halfSize.y); 287 let clampedRadii = min(effRadii, vec4<f32>(maxDim)); 288 let d = sdRoundedBox(p, halfSize, clampedRadii); 289 return 1.0 - gaussianCDF(d, sigma); 290} 291 292fn getShadowInset(index: i32) -> f32 { 293 let vecIndex = index / 4; 294 let compIndex = index % 4; 295 let v = bsu.uShadowInset[vecIndex]; 296 if (compIndex == 0) { return v.x; } 297 if (compIndex == 1) { return v.y; } 298 if (compIndex == 2) { return v.z; } 299 return v.w; 300} 301 302@fragment 303fn mainFragment(input: VSOutput) -> @location(0) vec4<f32> { 304 let texColor = textureSample(uTexture, uSampler, input.uv); 305 306 // CSS group opacity: flatten shadow + fill at full opacity, then multiply once. 307 if (bsu.uWorldAlpha < 1e-5) { 308 return vec4<f32>(0.0); 309 } 310 let wa = bsu.uWorldAlpha; 311 let texFull = texColor / wa; 312 313 var p: vec2<f32>; 314 if (bsu.uWTrans.z > 0.5) { 315 let world = input.pixelCoord * bsu.uFilterToWorld.xy + bsu.uFilterToWorld.zw; 316 let local = vec2<f32>( 317 dot(bsu.uWLinear.xy, world), 318 dot(bsu.uWLinear.zw, world) 319 ) + bsu.uWTrans.xy; 320 p = local - bsu.uLocalRectCenter; 321 } else { 322 let localPos = input.pixelCoord - bsu.uPaddingOffset; 323 let elementCenter = bsu.uElementSize * 0.5; 324 p = localPos - elementCenter; 325 } 326 let halfSize = bsu.uElementSize * 0.5; 327 328 let maxR = min(halfSize.x, halfSize.y); 329 let baseRadii = min(bsu.uBorderRadius, vec4<f32>(maxR)); 330 331 let elementSDF = sdRoundedBox(p, halfSize, baseRadii); 332 let insideElement = 1.0 - smoothstep(-0.5, 0.5, elementSDF); 333 334 var outerResult = vec4<f32>(0.0); 335 var insetResult = vec4<f32>(0.0); 336 337 for (var i = 7; i >= 0; i--) { 338 if (i >
338= bsu.uShadowCount) { continue; } 339 340 let obs = bsu.uShadowOffsetBlurSpread[i]; 341 let offset = obs.xy; 342 let blur = obs.z; 343 let spread = obs.w; 344 let shadowCol = bsu.uShadowColor[i]; 345 let isInset = getShadowInset(i); 346 347 if (shadowCol.a < 0.001) { continue; } 348 349 let sigma = blur * 0.5; 350 let shadowP = p - offset; 351 352 var shadowValue: f32; 353 354 if (isInset > 0.5) { 355 let insetHalf = max(halfSize - spread, vec2<f32>(0.001)); 356 let insetRadii = clamp(baseRadii - spread, vec4<f32>(0.0), vec4<f32>(min(insetHalf.x, insetHalf.y))); 357 let inner = roundedBoxShadow(shadowP, insetHalf, sigma, insetRadii); 358 shadowValue = (1.0 - inner) * insideElement; 359 360 let shadow = vec4<f32>(shadowCol.rgb * shadowCol.a * shadowValue, shadowCol.a * shadowValue); 361 insetResult = insetResult + shadow * (1.0 - insetResult.a); 362 } else { 363 let outerHalf = max(halfSize + spread, vec2<f32>(0.001)); 364 let outerRadii = clamp(baseRadii + spread, vec4<f32>(0.0), vec4<f32>(min(outerHalf.x, outerHalf.y))); 365 shadowValue = roundedBoxShadow(shadowP, outerHalf, sigma, outerRadii); 366 367 let shadow = vec4<f32>(shadowCol.rgb * shadowCol.a * shadowValue, shadowCol.a * shadowValue); 368 outerResult = outerResult + shadow * (1.0 - outerResult.a); 369 } 370 } 371 372 var color = outerResult; 373 color = texFull + color * (1.0 - texFull.a); 374 color = vec4<f32>( 375 insetResult.rgb + color.rgb * (1.0 - insetResult.a), 376 insetResult.a + color.a * (1.0 - insetResult.a) 377 ); 378 379 return color * wa; 380}
381`,T=`// pixi-box-shadow â Texture / arbitrary-shape mode (shapeMode: 'texture') 382// 383// Composites pre-blurred alpha (two-pass separable Gaussian from apply() pipeline). 384// Compositing order (matches CSS spec): 385// 1. Outer shadows â behind the element 386// 2. Element texture â the actual rendered content 387// 3. Inset shadows â on top of element background, below content 388 389precision highp float; 390 391in vec2 vTextureCoord; 392in vec2 vPixelCoord; 393out vec4 finalColor; 394 395uniform sampler2D uTexture; 396uniform vec4 uInputSize; 397 398uniform sampler2D uBlurredAlpha; 399 400uniform vec2 uElementSize; 401uniform vec4 uBorderRadius; 402uniform vec2 uPaddingOffset; 403 404uniform int uShadowCount; 405uniform vec4 uShadowOffsetBlurSpread[8]; 406uniform vec4 uShadowColor[8]; 407uniform float uShadowInset[8]; 408 409uniform int uShapeMode; 410uniform int uQuality; 411uniform float uMaxSigma; 412uniform int uRenderElement; 413 414/** Display-object alpha (worldAlpha) â scales shadows with the element like CSS opacity */ 415uniform float uWorldAlpha; 416 417float erf_approx(float x) { 418 float ax = abs(x); 419 float t = 1.0 / (1.0 + 0.3275911 * ax); 420 float y = 1.0 - (((((1.061405429 * t - 1.453152027) * t) + 1.421413741) * t - 0.284496736) * t + 0.254829592) * t * exp(-ax * ax); 421 return sign(x) * y; 422} 423 424float gaussianCDF(float x, float sigma) { 425 return 0.5 + 0.5 * erf_approx(x * (0.7071067811865476 / sigma)); 426} 427 428float blurredBox1D(float x, float halfW, float sigma) { 429 return gaussianCDF(x + halfW, sigma) - gaussianCDF(x - halfW, sigma); 430} 431 432float sdRoundedBox(vec2 p, vec2 b, vec4 r) { 433 vec2 rr = (p.x > 0.0) ? r.yz : r.xw; 434 rr.x = (p.y > 0.0) ? rr.y : rr.x; 435 float rad = rr.x; 436 vec2 q = abs(p) - b + rad; 437 return min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - rad; 438} 439 440float roundedBoxShadow(vec2 p, vec2 halfSize, float sigma, vec4 radii) { 441 if (sigma < 0.001) { 442 float d = sdRoundedBox(p, halfSize, radii); 443 return 1.0 - smoothstep(-0.5, 0.5, d); 444 } 445 446 float maxRadius = max(max(radii.x, radii.y), max(radii.z, radii.w)); 447 if (maxRadius < 0.5) { 448 float xInt = blurredBox1D(p.x, halfSize.x, sigma); 449 float yInt = blurredBox1D(p.y, halfSize.y, sigma); 450 return xInt * yInt; 451 } 452 453 vec4 effRadii = sqrt(radii * radii + 2.0 * sigma * sigma); 454 float maxDim = min(halfSize.x, halfSize.y); 455 effRadii = min(effRadii, vec4(maxDim)); 456 457 float d = sdRoundedBox(p, halfSize, effRadii); 458 return 1.0 - gaussianCDF(d, sigma); 459} 460 461float readBlurredAlpha(vec2 uv, float sigma, float spread) { 462 float alpha; 463 464 if (sigma < 0.5) { 465 alpha = texture(uTexture, uv).a; 466 } else { 467 alpha = texture(uBlurredAlpha, uv).a; 468 } 469 470 if (abs(spread) > 0.01) { 471 float effectiveSigma = max(sigma, 0.5); 472 float edgeAlpha = gaussianCDF(-spread, effectiveSigma); 473 alpha = smoothstep(0.0, edgeAlpha * 2.0, alpha); 474 } 475 476 return alpha; 477} 478 479void main(void) { 480 vec4 texColor = texture(uTexture, vTextureCoord); 481 482 // CSS group opacity: flatten shadow + fill at full opacity, then multiply once. 483 if (uWorldAlpha < 1e-5) { 484 finalColor = vec4(0.0); 485 return; 486 } 487 float wa = uWorldAlpha; 488 vec4 texFull = texColor / wa; 489 490 vec2 localPos = vPixelCoord - uPaddingOffset; 491 vec2 elementCenter = uElementSize * 0.5; 492 vec2 p = localPos - elementCenter; 493 vec2 halfSize = uElementSize * 0.5; 494 495 float maxR = min(halfSize.x, halfSize.y); 496 vec4 baseRadii = min(uBorderRadius, vec4(maxR)); 497 498 float elementSDF = sdRoundedBox(p, halfSize, baseRadii); 499 float insideElement; 500 if (uShapeMode == 1) { 501 insideElement = texFull.a; 502 } else { 503 insideElement = 1.0 - smoothstep(-0.5, 0.5, elementSDF); 504 } 505 506 vec4 outerResult = vec4(0.0); 507 vec4 insetResult = vec4(0.0); 508 509 for (int i = 7; i >= 0; i--) { 510 if (i >= uShadowCount) continue; 511 512 vec4 obs = uShadowOffsetBlurSpread[i]; 513 vec2 offset = obs.xy; 514 float blur = obs.z; 515 float spread = obs.w; 516 vec4 shadowCol = uShadowColor[i]; 517 float isInset = uShadowInset[i]; 518 519 if (shadowCol.a < 0.001) continue; 520 521 float sigma = blur * 0.5; 522 float shadowValue; 523 524 if (uShapeMode == 1) { 525 vec2 offsetUV = offset * uInputSize.zw; 526 float sampledAlpha = readBlurredAlpha( 527 vTextureCoord - offsetUV, 528 sigma, 529 isInset > 0.5 ? -spread : spread 530 ); 531 float aFull = clamp(sampledAlpha / wa, 0.0, 1.0); 532 533 if (isInset > 0.5) { 534 shadowValue = (1.0 - aFull) * step(0.5, insideElement); 535 } else { 536 shadowValue = aFull; 537 } 538 539 vec4 shadow = vec4(shadowCol.rgb * shadowCol.a * shadowValue, shadowCol.a * shadowValue); 540 if (isInset > 0.5) { 541 insetResult = insetResult + shadow * (1.0 - insetResult.a); 542 } else { 543 outerResult = outerResult + shadow * (1.0 - outerResult.a); 544 } 545 } else { 546 vec2 shadowP = p - offset; 547 548 if (isInset > 0.5) { 549 vec2 insetHalf = max(halfSize - spread, vec2(0.001)); 550 vec4 insetRadii = clamp(baseRadii - spread, vec4(0.0), vec4(min(insetHalf.x, insetHalf.y))); 551 float inner = roundedBoxShadow(shadowP, insetHalf, sigma, insetRadii); 552 shadowValue = (1.0 - inner) * insideElement; 553 554 vec4 shadow = vec4(shadowCol.rgb * shadowCol.a * shadowValue, shadowCol.a * shadowValue); 555 insetResult = insetResult + shadow * (1.0 - insetResult.a); 556 } else { 557 vec2 outerHalf = max(halfSize + spread, vec2(0.001)); 558 vec4 outerRadii = clamp(baseRadii + spread, vec4(0.0), vec4(min(outerHalf.x, outerHalf.y))); 559 shadowValue = roundedBoxShadow(shadowP, outerHalf, sigma, outerRadii); 560 561 vec4 shadow = vec4(shadowCol.rgb * shadowCol.a * shadowValue, shadowCol.a * shadowValue); 562 outerResult = outerResult + shadow * (1.0 - outerResult.a); 563 } 564 } 565 } 566 567 if (uRenderElement == 1) { 568 vec4 color = outerResult; 569 color = texFull + color * (1.0 - texFull.a); 570 color = vec4( 571 insetResult.rgb + color.rgb * (1.0 - insetResult.a), 572 insetResult.a + color.a * (1.0 - insetResult.a) 573 ); 574 finalColor = color * wa; 575 } else { 576 finalColor = outerResult; 577 } 578} 579`,F=`struct GlobalFilterUniforms { 580 uInputSize: vec4<f32>, 581 uInputPixel: vec4<f32>, 582 uInputClamp: vec4<f32>, 583 uOutputFrame: vec4<f32>, 584 uGlobalFrame: vec4<f32>, 585 uOutputTexture: vec4<f32>, 586}; 587 588struct BoxShadowUniforms { 589 uElementSize: vec2<f32>, 590 uPaddingOffset: vec2<f32>, 591 uBorderRadius: vec4<f32>, 592 uShadowCount: i32, 593 uShapeMode: i32, 594 uQuality: i32, 595 _pad0: i32, 596 uShadowOffsetBlurSpread: array<vec4<f32>, 8>, 597 uShadowColor: array<vec4<f32>, 8>, 598 uShadowInset: array<vec4<f32>, 2>, 599 uMaxSigma: f32, 600 uRenderElement: i32, 601 uWorldAlpha: f32, 602}; 603 604@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms; 605@group(0) @binding(1) var uTexture: texture_2d<f32>; 606@group(0) @binding(2) var uSampler: sampler; 607 608@group(1) @binding(0) var<uniform> bsu: BoxShadowUniforms; 609@group(1) @binding(1) var uBlurredAlpha: texture_2d<f32>; 610@group(1) @binding(2) var uBlurredAlphaSampler: sampler; 611
612struct VSOutput { 613 @builtin(position) position: vec4<f32>, 614 @location(0) uv: vec2<f32>, 615 @location(1) pixelCoord: vec2<f32>, 616}; 617 618fn filterVertexPosition(aPosition: vec2<f32>) -> vec4<f32> { 619 var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy; 620 position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0; 621 position.y = position.y * (2.0 * gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z; 622 return vec4<f32>(position, 0.0, 1.0); 623} 624 625fn filterTextureCoord(aPosition: vec2<f32>) -> vec2<f32> { 626 return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw); 627} 628 629@vertex 630fn mainVertex(@location(0) aPosition: vec2<f32>) -> VSOutput { 631 var output: VSOutput; 632 output.position = filterVertexPosition(aPosition); 633 output.uv = filterTextureCoord(aPosition); 634 output.pixelCoord = aPosition * gfu.uOutputFrame.zw; 635 return output; 636} 637 638fn erf_approx(x: f32) -> f32 { 639 let ax = abs(x); 640 let t = 1.0 / (1.0 + 0.3275911 * ax); 641 let y = 1.0 - (((((1.061405429 * t - 1.453152027) * t) + 1.421413741) * t - 0.284496736) * t + 0.254829592) * t * exp(-ax * ax); 642 return sign(x) * y; 643} 644 645fn gaussianCDF(x: f32, sigma: f32) -> f32 { 646 return 0.5 + 0.5 * erf_approx(x * (0.7071067811865476 / sigma)); 647} 648 649fn blurredBox1D(x: f32, halfW: f32, sigma: f32) -> f32 { 650 return gaussianCDF(x + halfW, sigma) - gaussianCDF(x - halfW, sigma); 651} 652 653fn sdRoundedBox(p: vec2<f32>, b: vec2<f32>, r: vec4<f32>) -> f32 { 654 var rr = select(r.xw, r.yz, p.x > 0.0); 655 rr.x = select(rr.x, rr.y, p.y > 0.0); 656 let rad = rr.x; 657 let q = abs(p) - b + rad; 658 return min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - rad; 659} 660 661fn roundedBoxShadow(p: vec2<f32>, halfSize: vec2<f32>, sigma: f32, radii: vec4<f32>) -> f32 { 662 if (sigma < 0.001) { 663 let d = sdRoundedBox(p, halfSize, radii); 664 return 1.0 - smoothstep(-0.5, 0.5, d); 665 } 666 667 let maxRadius = max(max(radii.x, radii.y), max(radii.z, radii.w)); 668 if (maxRadius < 0.5) { 669 let xInt = blurredBox1D(p.x, halfSize.x, sigma); 670 let yInt = blurredBox1D(p.y, halfSize.y, sigma); 671 return xInt * yInt; 672 } 673 674 let effRadii = sqrt(radii * radii + 2.0 * sigma * sigma); 675 let maxDim = min(halfSize.x, halfSize.y); 676 let clampedRadii = min(effRadii, vec4<f32>(maxDim)); 677 let d = sdRoundedBox(p, halfSize, clampedRadii); 678 return 1.0 - gaussianCDF(d, sigma); 679} 680 681fn getShadowInset(index: i32) -> f32 { 682 let vecIndex = index / 4; 683 let compIndex = index % 4; 684 let v = bsu.uShadowInset[vecIndex]; 685 if (compIndex == 0) { return v.x; } 686 if (compIndex == 1) { return v.y; } 687 if (compIndex == 2) { return v.z; } 688 return v.w; 689} 690 691fn readBlurredAlpha(uv: vec2<f32>, sigma: f32, spread: f32) -> f32 { 692 var alpha: f32; 693 694 if (sigma < 0.5) { 695 alpha = textureSample(uTexture, uSampler, uv).a; 696 } else { 697 alpha = textureSample(uBlurredAlpha, uBlurredAlphaSampler, uv).a; 698 } 699 700 // Spread: use gaussianCDF to find the new edge alpha, then remap 701 if (abs(spread) > 0.01) { 702 let effectiveSigma = max(sigma, 0.5); 703 let edgeAlpha = gaussianCDF(-spread, effectiveSigma); 704 alpha = smoothstep(0.0, edgeAlpha * 2.0, alpha); 705 } 706 707 return alpha; 708} 709 710@fragment 711fn mainFragment(input: VSOutput) -> @location(0) vec4<f32> { 712 let texColor = textureSample(uTexture, uSampler, input.uv); 713 714 if (bsu.uWorldAlpha < 1e-5) { 715 return vec4<f32>(0.0); 716 } 717 let wa = bsu.uWorldAlpha; 718 let texFull = texColor / wa; 719 720 let localPos = input.pixelCoord - bsu.uPaddingOffset; 721 let elementCenter = bsu.uElementSize * 0.5; 722 let p = localPos - elementCenter; 723 let halfSize = bsu.uElementSize * 0.5; 724 725 let maxR = min(halfSize.x, halfSize.y); 726 let baseRadii = min(bsu.uBorderRadius, vec4<f32>(maxR)); 727 728 let elementSDF = sdRoundedBox(p, halfSize, baseRadii); 729 var insideElement: f32; 730 if (bsu.uShapeMode == 1) { 731 insideElement = texFull.a; 732 } else { 733 insideElement = 1.0 - smoothstep(-0.5, 0.5, elementSDF); 734 } 735 736 var outerResult = vec4<f32>(0.0); 737 var insetResult = vec4<f32>(0.0); 738 739 for (var i = 7; i >= 0; i--) { 740 if (i >= bsu.uShadowCount) { continue; } 741 742 let obs = bsu.uShadowOffsetBlurSpread[i]; 743 let offset = obs.xy; 744 let blur = obs.z; 745 let spread = obs.w; 746 let shadowCol = bsu.uShadowColor[i]; 747 let isInset = getShadowInset(i); 748 749 // Skip shadows with zero alpha (per-group rendering) 750 if (shadowCol.a < 0.001) { continue; } 751 752 let sigma = blur * 0.5; 753 754 var shadowValue: f32; 755 756 if (bsu.uShapeMode == 1) { 757 let offsetUV = offset * gfu.uInputSize.zw; 758 var spreadArg: f32; 759 if (isInset > 0.5) { 760 spreadArg = -spread; 761 } else { 762 spreadArg = spread; 763 } 764 let sampledAlpha = readBlurredAlpha(input.uv - offsetUV, sigma, spreadArg); 765 let aFull = clamp(sampledAlpha / wa, 0.0, 1.0); 766 767 if (isInset > 0.5) { 768 shadowValue = (1.0 - aFull) * step(0.5, insideElement); 769 } else { 770 shadowValue = aFull; 771 } 772 773 let shadow = vec4<f32>
773(shadowCol.rgb * shadowCol.a * shadowValue, shadowCol.a * shadowValue); 774 if (isInset > 0.5) { 775 insetResult = insetResult + shadow * (1.0 - insetResult.a); 776 } else { 777 outerResult = outerResult + shadow * (1.0 - outerResult.a); 778 } 779 } else { 780 let shadowP = p - offset; 781 782 if (isInset > 0.5) { 783 let insetHalf = max(halfSize - spread, vec2<f32>(0.001)); 784 let insetRadii = clamp(baseRadii - spread, vec4<f32>(0.0), vec4<f32>(min(insetHalf.x, insetHalf.y))); 785 let inner = roundedBoxShadow(shadowP, insetHalf, sigma, insetRadii); 786 shadowValue = (1.0 - inner) * insideElement; 787 788 let shadow = vec4<f32>(shadowCol.rgb * shadowCol.a * shadowValue, shadowCol.a * shadowValue); 789 insetResult = insetResult + shadow * (1.0 - insetResult.a); 790 } else { 791 let outerHalf = max(halfSize + spread, vec2<f32>(0.001)); 792 let outerRadii = clamp(baseRadii + spread, vec4<f32>(0.0), vec4<f32>(min(outerHalf.x, outerHalf.y))); 793 shadowValue = roundedBoxShadow(shadowP, outerHalf, sigma, outerRadii); 794 795 let shadow = vec4<f32>(shadowCol.rgb * shadowCol.a * shadowValue, shadowCol.a * shadowValue); 796 outerResult = outerResult + shadow * (1.0 - outerResult.a); 797 } 798 } 799 } 800 801 // Compositing 802 if (bsu.uRenderElement == 1) { 803 // Full composite: outer shadows + element + inset shadows; then CSS-style group opacity. 804 var color = outerResult; 805 color = texFull + color * (1.0 - texFull.a); 806 color = vec4<f32>( 807 insetResult.rgb + color.rgb * (1.0 - insetResult.a), 808 insetResult.a + color.a * (1.0 - insetResult.a) 809 ); 810 return color * wa; 811 } else { 812 // Shadows only (no element) â intermediate per-sigma pass 813 return outerResult; 814 } 815}
816`,P=`// pixi-box-shadow â Alpha Blur Vertex Shader (WebGL) 817// 818// Simple passthrough vertex shader for the 1D Gaussian blur passes. 819// Used for both horizontal and vertical blur directions. 820 821in vec2 aPosition; 822out vec2 vTextureCoord; 823 824uniform vec4 uInputSize; 825uniform vec4 uOutputFrame; 826uniform vec4 uOutputTexture; 827 828vec4 filterVertexPosition(void) 829{ 830 vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy; 831 832 position.x = position.x * (2.0 / uOutputTexture.x) - 1.0; 833 position.y = position.y * (2.0 * uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z; 834 835 return vec4(position, 0.0, 1.0); 836} 837 838vec2 filterTextureCoord(void) 839{ 840 return aPosition * (uOutputFrame.zw * uInputSize.zw); 841} 842 843void main(void) 844{ 845 gl_Position = filterVertexPosition(); 846 vTextureCoord = filterTextureCoord(); 847} 848`,_=`// pixi-box-shadow â Alpha Blur Fragment Shader (WebGL) 849// 850// Performs a 1D Gaussian blur on a texture's alpha channel. 851// Used in two passes (horizontal + vertical) to produce a 852// separable 2D Gaussian blur â matching CSS filter: drop-shadow() quality. 853// 854// The direction uniform controls whether this is a horizontal or vertical pass. 855// Output is vec4(0, 0, 0, blurredAlpha) â only alpha matters for shadow generation. 856 857precision highp float; 858 859in vec2 vTextureCoord; 860out vec4 finalColor; 861 862uniform sampler2D uTexture; 863uniform vec4 uInputSize; 864 865uniform vec2 uDirection; // (1,0) for horizontal, (0,1) for vertical 866uniform float uStrength; // sigma of the Gaussian 867uniform float uSigmaExtent; // radius = ceil(sigma * uSigmaExtent), capped by uMaxRadius 868uniform float uSampleStride; // sample every N pixels (1 or 2) 869uniform float uMaxRadius; // max kernel radius per side (pixels) 870 871void main(void) { 872 // If sigma is negligible, pass through the alpha unchanged 873 if (uStrength < 0.001) { 874 float a = texture(uTexture, vTextureCoord).a; 875 finalColor = vec4(0.0, 0.0, 0.0, a); 876 return; 877 } 878 879 float sigma = uStrength; 880 881 float radiusF = min(ceil(sigma * uSigmaExtent), uMaxRadius); 882 int radius = int(radiusF); 883 884 // Pixel step in texture coordinates for the blur direction 885 vec2 pixelStep = uDirection * uInputSize.zw; 886 887 // Compute Gaussian weights and accumulate blurred alpha 888 float invTwoSigmaSq = 1.0 / (2.0 * sigma * sigma); 889 890 // Center sample (weight = 1.0) 891 float totalWeight = 1.0; 892 float totalAlpha = texture(uTexture, vTextureCoord).a; 893 894 // Symmetric samples: tap at \xb1off for off = stride, 2*stride, ⦠⤠radius. 895 // WebGL 1 GLSL ES1.00: loop index must use constant initializer/bounds; 896 // cannot write \`for (float off = uSampleStride; ...)\`. 897 const int BLUR_MAX_STEPS = 64; 898 for (int i = 1; i <= BLUR_MAX_STEPS; i++) { 899 float off = float(i) * uSampleStride; 900 if (off > float(radius) + 1e-4) { 901 break; 902 } 903 904 float weight = exp(-off * off * invTwoSigmaSq); 905 906 vec2 uv1 = vTextureCoord + pixelStep * off; 907 vec2 uv2 = vTextureCoord - pixelStep * off; 908 909 totalAlpha += texture(uTexture, uv1).a * weight; 910 totalAlpha += texture(uTexture, uv2).a * weight; 911 totalWeight += 2.0 * weight; 912 } 913 914 float blurredAlpha = totalAlpha / totalWeight; 915 finalColor = vec4(0.0, 0.0, 0.0, blurredAlpha); 916}
917`,B=`// pixi-box-shadow â Alpha Blur Shader (WebGPU / WGSL) 918// 919// Performs a 1D Gaussian blur on a texture's alpha channel. 920// Used in two passes (horizontal + vertical) to produce a 921// separable 2D Gaussian blur â matching CSS filter: drop-shadow() quality. 922 923struct GlobalFilterUniforms { 924 uInputSize: vec4<f32>, 925 uInputPixel: vec4<f32>, 926 uInputClamp: vec4<f32>, 927 uOutputFrame: vec4<f32>, 928 uGlobalFrame: vec4<f32>, 929 uOutputTexture: vec4<f32>, 930}; 931 932struct AlphaBlurUniforms { 933 uDirection: vec2<f32>, 934 uStrength: f32, 935 uSigmaExtent: f32, 936 uSampleStride: f32, 937 uMaxRadius: f32, 938 uPad: f32, 939}; 940 941@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms; 942@group(0) @binding(1) var uTexture: texture_2d<f32>; 943@group(0) @binding(2) var uSampler: sampler; 944 945@group(1) @binding(0) var<uniform> abu: AlphaBlurUniforms; 946 947struct VSOutput { 948 @builtin(position) position: vec4<f32>, 949 @location(0) uv: vec2<f32>, 950}; 951 952fn filterVertexPosition(aPosition: vec2<f32>) -> vec4<f32> { 953 var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy; 954 position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0; 955 position.y = position.y * (2.0 * gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z; 956 return vec4<f32>(position, 0.0, 1.0); 957} 958 959fn filterTextureCoord(aPosition: vec2<f32>) -> vec2<f32> { 960 return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw); 961} 962 963@vertex 964fn mainVertex(@location(0) aPosition: vec2<f32>) -> VSOutput { 965 var output: VSOutput; 966 output.position = filterVertexPosition(aPosition); 967 output.uv = filterTextureCoord(aPosition); 968 return output; 969} 970 971@fragment 972fn mainFragment(input: VSOutput) -> @location(0) vec4<f32> { 973 let sigma = abu.uStrength; 974 975 // If sigma is negligible, pass through the alpha unchanged 976 if (sigma < 0.001) { 977 let a = textureSample(uTexture, uSampler, input.uv).a; 978 return vec4<f32>(0.0, 0.0, 0.0, a); 979 } 980 981 let radiusF = min(ceil(sigma * abu.uSigmaExtent), abu.uMaxRadius); 982 let radius = i32(radiusF); 983 984 // Pixel step in texture coordinates for the blur direction 985 let pixelStep = abu.uDirection * gfu.uInputSize.zw; 986 987 // Compute Gaussian weights and accumulate blurred alpha 988 let invTwoSigmaSq = 1.0 / (2.0 * sigma * sigma); 989 990 // Center sample (weight = 1.0) 991 var totalWeight: f32 = 1.0; 992 var totalAlpha: f32 = textureSample(uTexture, uSampler, input.uv).a; 993 994 var off = abu.uSampleStride; 995 loop { 996 if (off > f32(radius)) { break; } 997 998 let weight = exp(-off * off * invTwoSigmaSq); 999 1000 let uv1 = input.uv + pixelStep * off; 1001 let uv2 = input.uv - pixelStep * off; 1002 1003 totalAlpha += textureSample(uTexture, uSampler, uv1).a * weight; 1004 totalAlpha += textureSample(uTexture, uSampler, uv2).a * weight; 1005 totalWeight += 2.0 * weight; 1006 1007 off += abu.uSampleStride; 1008 } 1009 1010 let blurredAlpha = totalAlpha / totalWeight; 1011 return vec4<f32>(0.0, 0.0, 0.0, blurredAlpha); 1012} 1013`,A="__pixiBoxShadowFilter",O="__pixiBoxShadowLocalBoundsPatch",k=0,I=new WeakMap,D=class e extends d.Filter{constructor(t={}){let a;!function(){let e=x.FilterEffect.prototype;if(e[O])return;let t=e.addLocalBounds;e.addLocalBounds=function(e,a){if(null==t||t.call(this,e,a),k>0)return;let r=this.filters;if(!(null!=r&&r.length))return;let i=0;for(let e of r)!0===e[A]&&(i+=Math.max(0,e.padding));i>0&&(I.set(a,{x:e.x,y:e.y,width:e.width,height:e.height}),e.pad(i))},e[O]=!0}();const r={...e.DEFAULT_OPTIONS,...t};(a=r.boxShadow?g(r.boxShadow):r.shadows?r.shadows.map(e=>"string"==typeof e?g(e)[0]:e):[]).length>8&&(console.warn("BoxShadowFilter: Max 8 shadows supported. Extra shadows will be ignored."),a=a.slice(0,8));const i=S(r.borderRadius),o=b(a),l=r.shapeMode??"box",s=Math.max(1,Math.min(5,Math.round(r.quality??3))),u="texture"===l,n=new Float32Array(32),d=new Float32Array(32),m=new Float32Array(8),v=new Float32Array([1,1,0,0]),w=new Float32Array([1,0,0,1]),y=new Float32Array([0,0,0,0]),P=new Float32Array([0,0]),_=new Float32Array([0,0]),B=f.GlProgram.from({vertex:R,fragment:u?T:C,name:u?"box-shadow-texture":"box-shadow-sdf"}),D=p.GpuProgram.from({vertex:{source:u?F:z,entryPoint:"mainVertex"},fragment:{source:u?F:z,entryPoint:"mainFragment"}}
1013),E=u?{uElementSize:{value:new Float32Array([0,0]),type:"vec2<f32>"},uPaddingOffset:{value:new Float32Array([o,o]),type:"vec2<f32>"},uBorderRadius:{value:new Float32Array(i),type:"vec4<f32>"},uShadowCount:{value:a.length,type:"i32"},uShapeMode:{value:1,type:"i32"},uQuality:{value:s,type:"i32"},_pad0:{value:0,type:"i32"},uShadowOffsetBlurSpread:{value:n,type:"vec4<f32>",size:8},uShadowColor:{value:d,type:"vec4<f32>",size:8},uShadowInset:{value:m,type:"f32",size:8},uMaxSigma:{value:0,type:"f32"},uRenderElement:{value:1,type:"i32"},uWorldAlpha:{value:1,type:"f32"}}:{uElementSize:{value:new Float32Array([0,0]),type:"vec2<f32>"},uPaddingOffset:{value:new Float32Array([o,o]),type:"vec2<f32>"},uBorderRadius:{value:new Float32Array(i),type:"vec4<f32>"},uShadowCount:{value:a.length,type:"i32"},_pad0:{value:0,type:"i32"},_pad1:{value:0,type:"i32"},_pad2:{value:0,type:"i32"},uFilterToWorld:{value:v,type:"vec4<f32>"},uWLinear:{value:w,type:"vec4<f32>"},uWTrans:{value:y,type:"vec4<f32>"},uLocalRectCenter:{value:P,type:"vec2<f32>"},_padShape:{value:_,type:"vec2<f32>"},uShadowOffsetBlurSpread:{value:n,type:"vec4<f32>",size:8},uShadowColor:{value:d,type:"vec4<f32>",size:8},uShadowInset:{value:m,type:"f32",size:8},uWorldAlpha:{value:1,type:"f32"}};super({gpuProgram:D,glProgram:B,resources:u?{boxShadowUniforms:E,uBlurredAlpha:h.Texture.EMPTY.source,uBlurredAlphaSampler:h.Texture.EMPTY.source.style}:{boxShadowUniforms:E},padding:o,resolution:"inherit"}),this._shadows=[],this._borderRadius=[0,0,0,0],this._width=0,this._height=0,this._blurFilter=null,this._invWorld=new c.Matrix,this._invFilterFrame=new c.Matrix,this._filterFrameToLocal=new c.Matrix,this.uniforms=this.resources.boxShadowUniforms.uniforms,this._borderRadius=i,this._shadows=a,this._shapeMode=l,this._quality=s,this[A]=!0,this._updateShadowUniforms()}_ensureBlurFilter(){if(this._blurFilter)return this._blurFilter;let e=f.GlProgram.from({vertex:P,fragment:_,name:"alpha-blur-filter"}),t=p.GpuProgram.from({vertex:{source:B,entryPoint:"mainVertex"},fragment:{source:B,entryPoint:"mainFragment"}});return this._blurFilter=new d.Filter({glProgram:e,gpuProgram:t,resources:{alphaBlurUniforms:{uDirection:{value:new Float32Array([1,0]),type:"vec2<f32>"},uStrength:{value:0,type:"f32"},uSigmaExtent:{value:3,type:"f32"},uSampleStride:{value:1,type:"f32"},uMaxRadius:{value:64,type:"f32"},uPad:{value:0,type:"f32"}}},padding:0,resolution:"inherit"}),this._blurFilter}_resolveFilterTargetWorldAlpha(e){return e?e.renderGroup?e.renderGroup.worldAlpha:e.parentRenderGroup?e.parentRenderGroup.worldAlpha*e.alpha:e.alpha:1}_syncWorldAlpha(e){let t=e._activeFilterData;this.uniforms.uWorldAlpha=this._resolveFilterTargetWorldAlpha((null==t?void 0:t.container)??null)}_updateBoxShapeSpace(e,t,a){let r=e._activeFilterData,i=(null==r?void 0:r.container)??null,o=null==r?void 0:r.boun
1013ds,l=this.uniforms.uFilterToWorld,s=this.uniforms.uWLinear,u=this.uniforms.uWTrans,n=this.uniforms.uLocalRectCenter,d=t.frame.width,f=t.frame.height,p=()=>{u[2]=0;let e=t.frame.width-2*a,r=t.frame.height-2*a;e===this._width&&r===this._height||(this._width=e,this._height=r,this.uniforms.uElementSize[0]=e,this.uniforms.uElementSize[1]=r)};if(!i||!o||d<=0||f<=0)return void p();let h=i.renderGroup,c=(null!=h&&h.isCachedAsTexture?I.get(i):void 0)??function(e){k++;try{return e.getLocalBounds()}finally{k--}}(i),m=c.width,x=c.height;if(m<1e-4||x<1e-4)return void p();this._invWorld.copyFrom(i.worldTransform).invert();let v=this._invWorld,g=i.renderGroup??i.parentRenderGroup,w=(null==g?void 0:g.cacheToLocalTransform)??null;w&&(this._invFilterFrame.copyFrom(w).invert(),this._filterFrameToLocal.appendFrom(this._invWorld,this._invFilterFrame),v=this._filterFrameToLocal),l[0]=o.width/d,l[1]=o.height/f,l[2]=o.minX,l[3]=o.minY,s[0]=v.a,s[1]=v.c,s[2]=v.b,s[3]=v.d,u[0]=v.tx,u[1]=v.ty,u[2]=1,n[0]=c.x+.5*m,n[1]=c.y+.5*x,(m!==this._width||x!==this._height)&&(this._width=m,this._height=x),this.uniforms.uElementSize[0]=m,this.uniforms.uElementSize[1]=x}apply(e,t,a,r){let i=this.padding;if(this._syncWorldAlpha(e),"texture"!==this._shapeMode){this._updateBoxShapeSpace(e,t,i),e.applyFilter(this,t,a,r);return}let o=t.frame.width-2*i,l=t.frame.height-2*i;(o!==this._width||l!==this._height)&&(this._width=o,this._height=l,this.uniforms.uElementSize[0]=o,this.uniforms.uElementSize[1]=l),this._applyTextureMode(e,t,a,r)}_applyTextureMode(e,t,a,r){let i=this._shadows;if(0===i.length){this.uniforms.uRenderElement=1,e.applyFilter(this,t,a,r);return}let o=new Set;for(let e of i)o.add(.5*e.blur);let l=Array.from(o).sort((e,t)=>e-t);if(1===l.length){let i=l[0];if(this.uniforms.uRenderElement=1,this.uniforms.uMaxSigma=i,i<.5){this.resources.uBlurredAlpha=h.Texture.EMPTY.source,this.resources.uBlurredAlphaSampler=h.Texture.EMPTY.source.style,e.applyFilter(this,t,a,r);return}let o=this._blurAlpha(e,t,i);this.resources.uBlurredAlpha=o.source,this.resources.uBlurredAlphaSampler=o.source.style,e.applyFilter(this,t,a,r),m.TexturePool.returnTexture(o);return}let s=[];for(let e=0;e<i.length;e++)s.push(this.uniforms.uShadowColor[4*e+3]);for(let o=0;o<l.length;o++){let u=l[o],n=o===l.length-1;for(let e=0;e<i.length;e++){let t=.01>Math.abs(.5*i[e].blur-u);this.uniforms.uShadowColor[4*e+3]=t?s[e]:0}if(this.uniforms.uMaxSigma=u,u>=.5){let i=this._blurAlpha(e,t,u);this.resources.uBlurredAlpha=i.source,this.resources.uBlurredAlphaSampler=i.source.style,this.uniforms.uRenderElement=+!!n,e.applyFilter(this,t,a,0===o&&r),m.TexturePool.returnTexture(i)}else this.resources.uBlurredAlpha=h.Texture.EMPTY.source,this.resources.uBlurredAlphaSampler=h.Texture.EMPTY.source.style,this.uniforms.uRenderElement=+!!n,e.applyFilter(this,t,a,0===o&&r)}for(let e=0;e<i.length;e++)this.uniforms.uShadowColor[4*e+3]=s[e];this.uniforms.uRenderElement=1}_blurAlpha(e,t,a){let r=this._ensureBlurFilter(),i=r.resources.alphaBlurUniforms.uniforms,o=w(this._quality);i.uSigmaExtent=o.sigmaExtent,i.uSampleStride=o.sampleStride,i.uMaxRadius=o.maxRadius;let l=m.TexturePool.getSameSizeTexture(t);i.uDirection[0]=1,i.uDirection[1]=0,i.uStrength=a,e.applyFilter(r,t,l,!0);let s=m.TexturePool.getSameSizeTexture(t);return i.uDirection[0]=0,i.uDirection[1]=1,e.applyFilter(r,l,s,!0),m.TexturePool.returnTexture(l),s}get shadows(){return this._shadows}set shadows(e){let t=e.map(e=>"string"==typeof e?g(e)[0]:e);t.length>8&&(console.warn("BoxShadowFilter: Max 8 shadows supported."),t=t.slice(0,8)),this._shadows=t,this._updateShadowUniforms(),this._updatePadding()}set boxShadow(e){this.shadows=g(e)}get boxShadow(){return this._shadows.map(e=>{let t=[];e.inset&&t.push("inset"),t.push(`${e.offsetX}px`),t.push(`${e.offsetY}px`),t.push(`${e.blur}px`),t.push(`${e.spread}px`);let a=y(e);return t.push(`rgba(${Math.round(255*a[0])}, ${Math.round(255*a[1])}, ${Math.round(255*a[2])}, ${a[3]})`),t.join(" ")}).join(", ")}get elementWidth(){return this._width}get elementHeight(){return this._height}get borderRadius(){let e=this._borderRadius;return e[0]===e[1]&&e[1]===e[2]&&e[2]===e[3]?e[0]:[...e]}set borderRadius(e){this._borderRadius=S(e),this.uniforms.uBorderRadius[0]=this._borderRadius[0],this.uniforms.uBorderRadius[1]=this._borderRadius[1],this.uniforms.uBorderRadius[2]=this._borderRadius[2],this.uniforms.uBorderRadius[3]=this._borderRadius[3]}get shapeMode(){return this._shapeMode}set shapeMode(e){this._shapeMode=e,void 0!==this.uniforms.uShapeMode&&(this.uniforms.uShapeMode=+("texture"===e))}get quality(){return this._quality}set quality(e){if(this._quality=Math.max(1,Math.min(5,Math.round(e))),void 0!==this.uniforms.uQuality&&(this.uniforms.uQuality=this._quality),this._blurFilter){let e=w(this._quality),t=this._blurFilter.resources.alph
1013aBlurUniforms.uniforms;t.uSigmaExtent=e.sigmaExtent,t.uSampleStride=e.sampleStride,t.uMaxRadius=e.maxRadius}}_updateShadowUniforms(){let e=this._shadows.length;this.uniforms.uShadowCount=e;let t=this.uniforms.uShadowOffsetBlurSpread,a=this.uniforms.uShadowColor,r=this.uniforms.uShadowInset;for(let i=0;i<8;i++){let o=4*i;if(i<e){let e=this._shadows[i],[l,s,u,n]=y(e);t[o+0]=e.offsetX,t[o+1]=e.offsetY,t[o+2]=e.blur,t[o+3]=e.spread,a[o+0]=l,a[o+1]=s,a[o+2]=u,a[o+3]=n,r[i]=+!!e.inset}else t[o+0]=0,t[o+1]=0,t[o+2]=0,t[o+3]=0,a[o+0]=0,a[o+1]=0,a[o+2]=0,a[o+3]=0,r[i]=0}}_updatePadding(){let e=b(this._shadows);this.padding=e,this.uniforms.uPaddingOffset[0]=e,this.uniforms.uPaddingOffset[1]=e}};D.MAX_SHADOWS=8,D.DEFAULT_OPTIONS={shadows:[],borderRadius:0,shapeMode:"box",quality:3};var E=e.i(724368),V=e.i(77769);e.s(["default",0,function(e){let n,d,f,p,h,c=(0,a.c)(9),{activateOnGroupHover:m,index:x}=e;if(c[0]!==m||c[1]!==x)n=({app:e,cleanup:t})=>{let a=(({app:e,disabled:t,index:a})=>{let r=new i.Container;r.pivot.set(120,16),r.position.set(236,42);let n=new i.Container;n.pivot.set(120,16),n.position.set(120,16),n.alpha=0;let d=new o.Graphics().roundRect(0,0,136,36,18).fill((0,E.getColorVariable)("background-solid-base")),f=(0,l.createThemedTint)({app:e,element:new o.Graphics().roundRect(16,16,20,4,2).fill("#fff").roundRect(66,16,10,4,2).fill("#fff"),colorKey:t?"background-solid-loud":"primary-3"}),p=(0,E.getColorVariable)("background-opaque-default"),h=new o.Graphics().roundRect(41,16,20,4,2).fill(p).roundRect(81,16,39,4,2).fill(p);return n.addChild(d,f,h),r.addChild(n),n.filters=[new D({boxShadow:"0 16px 32px 0 rgba(0, 0, 0, 0.02), 0 8px 16px 0 rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02), 0 1px 2px 0 rgba(0, 0, 0, 0.02), 0 0 0 1px rgba(0, 0, 0, 0.04)",borderRadius:18})],{container:r,enable:()=>{f.themedTint.key="primary-3"},disable:()=>{f.themedTint.key="background-solid-loud"},reveal:()=>{e.animate(0,1,{type:"spring",stiffness:300,damping:20,delay:.1,onUpdate:e=>{let t=1-e;n.alpha=e,n.x=120+12*t,n.y=16-4*t,n.rotation=(0,s.degreesToRadians)(15*t)}})},wiggle:(t=!0)=>{let i={duration:.5,ease:"easeInOut",...t?{repeat:1/0,repeatDelay:1,repeatType:"loop",delay:(0,u.getBaseDelay)(a)}:{}};e.animate(0,[0,4,-1,0],{...i,onUpdate:e=>{r.rotation=(0,s.degreesToRadians)(e)}}),e.animate(0,[0,2,-1,0],{...i,onUpdate:e=>{r.x=236+e}})}}})({app:e,disabled:m,index:x}),r=(({app:e,x:t,disabled:a,index:r})=>{let n=new i.Container;n.pivot.set(16,16),n.position.set(t+16,110);let d=new i.Container;d.pivot.set(16,16),d.position.set(16,16),d.alpha=0;let f=(0,l.createThemedTint)({app:e,element:new o.Graphics().roundRect(4,0,156,40,20).fill("#fff").circle(12,32,8).fill("#fff").circle(3,41,3).fill("#fff"),colorKey:a?"background-solid-muted":"primary-accent"});return d.addChild(f),n.addChild(d),{container:n,inner:d,enable:()=>{f.themedTint.key="primary-accent"},disable:()=>{f.themedTint.key="background-solid-muted"},reveal:()=>{e.animate(0,1,{type:"spring",stiffness:300,damping:20,delay:.15,onUpdate:e=>{let t=1-e;d.alpha=e,d.x=16-12*t,d.y=16-4*t,d.rotation=(0,s.degreesToRadians)(-15*t)}})},wiggle:(a=!0)=>{let i={duration:.5,ease:"easeInOut",...a?{repeat:1/0,repeatDelay:1,repeatType:"loop",delay:(0,u.getBaseDelay)(r)+.1}:{}};e.animate(0,[0,-4,1,0],{...i,onUpdate:e=>{n.rotation=(0,s.degreesToRadians)(e)}}),e.animate(0,[0,-2,1,0],{...i,onUpdate:e=>{n.x=t+16+e}})}}})({app:e,x:e.screen.width-92-160,disabled:m,index:x}),n=(0,V.createStars)({app:e,container:r.inner,disabled:m});if(e.stage.addChild(a.container,r.container),a.reveal(),r.reveal(),!m){a.wiggle(),r.wiggle();return}let d=e.canvas.closest(".group");if(!d)return;let f=()=>{a.enable(),r.enable(),n.enable(),a.wiggle(!1),r.wiggle(!1)},p=()=>{a.disable(),r.disable(),n.disable()};d.addEventListener("mouseenter",f),d.addEventListener("mouseleave",p),t(()=>{d.removeEventListener("mouseenter",f),d.removeEventListener("mouseleave",p)})},c[0]=m,c[1]=x,c[2]=n;else n=c[2];c[3]!==n?(d=[n],c[3]=n,c[4]=d):d=c[4];let v=d;return c[5]===Symbol.for("react.memo_cache_sentinel")?(f={className:"pointer-events-none absolute inset-0 size-full"},p={antialias:!0},c[5]=f,c[6]=p):(f=c[5],p=c[6]),c[7]!==v?(h=(0,t.jsx)(r.default,{canvasAttrs:f,initOptions:p,tickers:v}),c[7]=v,c[8]=h):h=c[8],h}],16082)},77769,e=>{"use strict";e.i(459510);var t=e.i(571629),a=e.i(598203),r=e.i(368928);let i=9.5,o=-12,l=[0,.154,.846,1],s=[0,-8.4,-46.4,-54.9],u=[0,1,1,0],n=[{x:55,startY:60,r:5.1,colorKey:"primary-1"},{x:122,startY:59,r:3.8,colorKey:"primary-1"},{x:92,startY:60,r:5.1,colorKey:"primary-8"},{x:39,startY:59,r:3.8,colorKey:"primary-4"},{x:112,startY:57,r:2.5,colorKey:"primary-4"},{x:63,startY:58,r:3.4,colorKey:"primary-3"},{x:27,startY:58,r:3,colorKey:"primary-3"},{x:18,startY:58,r:3.4,colorKey:"primary-3"},{x:103,startY:57,r:2.1,colorKey:"primary-8"},{x:83,startY:58,r:3.4,colorKey:"primary-3"}];function d(e,t,a){for(let r=0;r<t.length-1;r++)if(e<=t[r+1]){let i=(e-t[r])/(t[r+1]-t[r]);return a[r]+i*(a[r+1]-a[r])}return a[a.length-1]}let f={"primary-8":"neutral-4","primary-3":"neutral-6","primary-4":"neutral-6","primary-1":"neutral-10"};e.s(["createStars",0,({app:e,container:p,disabled:h,offsetX:c=i,offsetY:m=o})=>{let x=new t.Container;x.position.set(c,m);let v=n.map(t=>{var i;let o,l,s=new a.Graphics;o=.108*(i=t.r),l=.568*i,s.moveTo(0,-i).bezierCurveTo(o,-i+l,i-l,-o,i,0).bezierCurveTo(i-l,o,o,i-l,0,i).bezierCurveTo(-o,i-l,-i+l,o,-i,0).bezierCurveTo(-i+l,-o,-o,-i+l,0,-i).fill("#fff").stroke({color:"#fff",width:1,cap:"round",join:"round"});let u=(0,r.createThemedTint)({app:e,element:s,colorKey:h?f[t.colorKey]??t.colorKey:t.colorKey});return u.x=t.x,u.y=t.startY,u.scale.set(0),x.addChild(u),{graphic:u,colorKey:t.colorKey,startY:t.startY,duration:1+2*Math.random(),progress:Math.random()}});return p.addChild(x),e.ticker.add(e=>{let t=e.deltaMS/1e3;for(let e of v){e.progress=(e.progress+t/e.duration)%1;let a=d(e.progress,l,s),r=d(e.progress,l,u);e.graphic.y=e.startY+a,e.graphic.scale.set(r)}}),{enable:()=>{for(let e of v)e.graphic.themedTint.key=e.colorKey},disable:()=>{for(let e of v)e.graphic.themedTint.key=f[e.colorKey]??e.colorKey}}}])},689263,e=>{"use strict";var t=e.i(213429),a=e.i(161871),r=e.i(14947),i=e.i(97776),o=e.i(913140),l=e.i(420851),s=e.i(402666),u=e.i(62415);let n={duration:.5,ease:"easeInOut"};e.s(["default",0,function(e){let d,f,p,h,c,m,x,v=(0,a.c)(15),{className:g,activateOnGroupHover:w,index:b}=e,y=(0,o.useRef)(null),[S,R]=(0,o.useState)(!1),C=(0,o.useRef)(null),z=(0,o.useRef)(null),T=(0,o.useRef)(null),F=(0,o.useRef)(null),P=(0,o.useRef)(null);return v[0]===Symbol.for("react.memo_cache_sentinel")?(d=()=>(0,s.default)({element:y.current,callback:()=>R(!0),timeout:1}),f=[],v[0]=d,v[1]=f):(d=v[0],f=v[1]),(0,o.useEffect)(d,f),v[2]!==w||v[3]!==b||v[4]!==S?(p=()=>
1013{if(!S)return;let e=[],t=()=>{for(let t of e)t.stop();e.length=0},a=a=>{if(!(C.current&&z.current&&T.current&&F.current&&P.current))return;t();let i=a?{repeat:1/0,repeatType:"loop",repeatDelay:1}:{},o=a?(0,u.getBaseDelay)(b):0;e.push((0,r.animate)(C.current,{marginLeft:[0,3,-1,0]},{...n,delay:o,...i}),(0,r.animate)(z.current,{width:[92,90,93,92]},{...n,delay:o+.05,...i}),(0,r.animate)(T.current,{marginLeft:[0,3,-1,0]},{...n,delay:o+.15,...i}),(0,r.animate)(F.current,{y:[0,3,-1,0]},{...n,delay:o+.1,...i}),(0,r.animate)(P.current,{y:[0,-1,.5,0]},{...n,delay:o,...i}))};if(!w)return a(!0),t;let i=y.current?.closest(".group");if(!i)return;let o=()=>a(!1);return i.addEventListener("mouseenter",o),()=>{i.removeEventListener("mouseenter",o),t()}},h=[S,w,b],v[2]=w,v[3]=b,v[4]=S,v[5]=p,v[6]=h):(p=v[5],h=v[6]),(0,o.useEffect)(p,h),v[7]!==g?(c=(0,l.cn)("relative h-160 overflow-clip",g),v[7]=g,v[8]=c):c=v[8],v[9]!==w||v[10]!==S?(m=S&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"absolute top-0 left-156 flex w-96 items-center gap-6",children:[(0,t.jsx)("div",{className:"before:inside-border relative size-48 rounded-[12px] before:border-border-solid-faint",ref:C}),(0,t.jsx)("div",{className:"h-1 flex-1 bg-border-solid-faint"}),(0,t.jsx)("div",{className:"before:inside-border relative size-9 rounded-full before:border-border-solid-faint"})]}),(0,t.jsxs)("div",{className:"absolute top-60 left-28 flex w-92 items-center gap-6",ref:z,children:[(0,t.jsx)("div",{className:"before:inside-border relative size-9 rounded-full before:border-border-solid-faint"}),(0,t.jsx)("div",{className:"h-1 flex-1 bg-border-solid-faint"}),(0,t.jsx)("div",{className:"before:inside-border relative size-40 rounded-[10px] before:border-border-solid-faint"})]}),(0,t.jsxs)("div",{className:"absolute top-92 left-164 flex w-88 items-center gap-6",children:[(0,t.jsx)("div",{className:"before:inside-border relative size-32 rounded-[8px] before:border-border-solid-faint",ref:T}),(0,t.jsx)("div",{className:"h-1 flex-1 bg-border-solid-faint"}),(0,t.jsx)("div",{className:"before:inside-border relative size-9 rounded-full before:border-border-solid-faint"})]}),(0,t.jsx)(i.motion.div,{animate:{opacity:1,y:0,filter:"blur(0px)"},className:"centering-w-80 pointer-events-none absolute top-24",initial:{opacity:0,y:12,filter:"blur(2px)"},transition:{type:"spring",stiffness:300,damping:23,delay:.2},children:(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"z-10 h-112 rounded-r-[6px] rounded-l-[12px] bg-background-solid-base p-12 shadow-medium",ref:F,children:(0,t.jsxs)("svg",{fill:"none",height:"84",viewBox:"0 0 57 84",width:"57",xmlns:"http://www.w3.org/2000/svg",children:[(0,t.jsx)("rect",{fill:"var(--color-background-opaque-default)",height:"10",rx:"2",width:"18"}),(0,t.jsx)("rect",{fill:"var(--color-background-opaque-default)",height:"18",rx:"4",width:"57",y:"38"}),(0,t.jsx)("rect",{className:(0,l.cn)("transition-colors duration-300",w?"fill-neutral-5 group-hover:fill-primary-5":"fill-primary-5"),height:"4",rx:"2",width:"27",y:"64"}),(0,t.jsx)("rect",{fill:"var(--color-background-opaque-default)",height:"4",rx:"2",width:"38",y:"80"}),(0,t.jsx)("rect",{fill:"var(--color-background-opaque-default)",height:"4",rx:"2",width:"46",y:"72"}),(0,t.jsx)("rect",{className:(0,l.cn)("transition-colors duration-300",w?"fill-neutral-6 group-hover:fill-primary-4":"fill-primary-4"),height:"4",rx:"2",width:"52",y:"18"}),(0,t.jsx)("rect",{className:(0,l.cn)("transition-colors duration-300",w?"fill-neutral-6 group-hover:fill-primary-3":"fill-primary-3"),height:"4",rx:"2",width:"36",y:"26"})]})}),(0,t.jsx)("div",{className:"pointer-events-none absolute top-106 left-48 -z-10",ref:P,children:(0,t.jsx)(i.motion.svg,{animate:{opacity:1,y:0},fill:"none",height:"20",initial:{opacity:0,y:-24},transition:{type:"spring",stiffness:300,damping:23},viewBox:"0 0 20 20",width:"20",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{className:(0,l.cn)("transition-colors duration-300",w?"fill-background-solid-muted group-hover:fill-primary-accent":"fill-primary-accent"),d:"M0 0L20 0V18.523C20 19.2304 19.2855 19.7142 18.6286 19.4514L10.7428 16.2971C10.266 16.1064 9.73404 16.1064 9.25722 16.2971L1.37139 19.4514C0.714526 19.7142 0 19.2304 0 18.523V0Z"})})})]})})]}),v[9]=w,v[10]=S,v[11]=m):m=v[11],v[12]!==c||v[13]!==m?(x=(0,t.jsx)("div",{className:c,ref:y,
1013children:m}),v[12]=c,v[13]=m,v[14]=x):x=v[14],x}])},62415,e=>{"use strict";e.s(["getBaseDelay",0,(e=0)=>1+.1*e])},724368,e=>{"use strict";var t=e.i(701563);let a=/^color\(display-p3\s+(.+)\)$/i,r=e=>{var t;let a=e.trim();if(!a)return null;let r=a.endsWith("%"),i=Number.parseFloat(r?a.slice(0,-1):a);return Number.isNaN(i)?null:(t=r?i/100:i)<=0?0:t>=1?1:t},i=e=>{let t=e.trim(),i=a.exec(t);if(!i)return null;let[o,l]=i[1].split("/"),s=o?.trim().split(/\s+/).filter(Boolean)??[];if(3!==s.length)return null;let u=r(s[0]),n=r(s[1]),d=r(s[2]);if(null===u||null===n||null===d)return null;if(!l)return[u,n,d,1];let f=r(l);return null===f?null:[u,n,d,f]},o=(e,t,a=!0)=>{let r=getComputedStyle(t??document.documentElement).getPropertyValue(`--color-${e}`).trim();return a?i(r)??r:r};e.s(["getColorVariable",0,o,"getPrimaryColor",0,e=>{let a=e.canvas.closest(".primary-color");return{getColor:(e,t=!1)=>o(e,["primary","hero"].some(t=>e.includes(t))&&a?a:void 0,t),subscribe:e=>{let t=t=>e(t.detail);return a?.addEventListener("primary-color-change",t),()=>a?.removeEventListener("primary-color-change",t)},getValue:()=>a?.dataset.primaryColor||t.PrimaryColor.blue}},"parseDisplayP3Color",0,i])},368928,882688,e=>{"use strict";let t;var a,r=e.i(738196),i=e.i(270066),o=e.i(648004),l=e.i(238938);class s{constructor(){this.latest={},this.values=new Map}set(e,t,a,r,s=!0){let u=this.values.get(e);u&&u.onRemove();let n=()=>{let r=t.get();s?this.latest[e]=(0,l.getValueAsType)(r,o.numberValueTypes[e]):this.latest[e]=r,a&&i.frame.render(a)};n();let d=t.on("change",n);r&&t.addDependent(r);let f=()=>{d(),a&&(0,i.cancelFrame)(a),this.values.delete(e),r&&t.removeDependent(r)};return this.values.set(e,{value:t,onRemove:f}),f}get(e){return this.values.get(e)?.value}}let u=(a=(e,t,a,r)=>t.set(a,r,()=>{e[a]=t.latest[a]},void 0,!1),t=new WeakMap,(e,r)=>{let i=t.get(e)??new s;t.set(e,i);let o=[];for(let t in r){let l=r[t],s=a(e,i,t,l);o.push(s)}return()=>{for(let e of o)e()}});function n(e){let t,a,o,l=[];r.collectMotionValues.current=l;let s=e();r.collectMotionValues.current=void 0;let u=(0,r.motionValue)(s);return t=()=>u.set(e()),a=()=>i.frame.preRender(t,!1,!0),o=l.map(e=>e.on("change",a)),u.on("destroy",()=>{o.forEach(e=>e()),(0,i.cancelFrame)(t)}),u}e.s(["transformValue",0,n],882688);var d=e.i(989903),f=e.i(724368);e.s(["createThemedTint",0,({app:e,element:t,colorKey:a})=>{let i=(0,f.getPrimaryColor)(e),o=e=>"function"==typeof a?a(e):a,l=(0,r.motionValue)(i.getColor(o(i.getValue()),!1));t.tint=(0,f.parseDisplayP3Color)(l.get()),u(t,{tint:n(()=>(0,f.parseDisplayP3Color)(l.get()))});let s=()=>{e.animate(l,i.getColor(o(i.getValue()),!1),d.colorTransitions[i.getValue()].motion)},p=i.subscribe(s);return e.stage.on("destroyed",p),t.themedTint={set key(value){o=()=>"function"==typeof value?value(i.getValue()):value,s()}},t}],368928)},886242,505195,e=>{"use strict";let t;var a=e.i(213429),r=((t=r||{})[t.Low=-1]="Low",t[t.Normal=0]="Normal",t[t.High=1]="High",t);async function i(t){var a;let r={importPixi:!1,...t};r.app&&(r.renderer=r.app.renderer,r.stage=r.app.stage),r.importPixi&&!r.pixi&&(r.pixi=await e.A(23013)),window.__PIXI_DEVTOOLS__={...window.__PIXI_DEVTOOLS__||{},app:r.app,stage:r.stage,renderer:r.renderer,extensions:[...(null==(a=window.__PIXI_DEVTOOLS__)?void 0:a.extensions)||[],...r.extensions||[]],plugins:{}}}e.i(459510);var o=e.i(927255),l=e.i(913140),s=e.i(420851);e.i(914819);var u=e.i(476342);e.i(360674),e.i(382827);var n=e.i(472344),d=e.i(678099);let f=e=>!e.ticker||!e.renderer||!e.stage||(e.renderer instanceof n.WebGLRenderer?e.renderer.gl.isContextLost():e.renderer instanceof u.CanvasRenderer?e.renderer.canvasContext.activeContext.isContextLost():e.renderer instanceof d.WebGPURenderer&&e.renderer.gpu.device.lost),p=e=>{if(!(!(!window.matchMedia("(color-gamut: p3)").matches||"u"<typeof CSS)&&CSS.supports("color","color(display-p3 1 0 0)")&&1))return;let t=e.renderer.gl;if(t&&"drawingBufferColorSpace"in t)try{t.drawingBufferColorSpace="display-p3"}catch{return}};e.s(["degreesToRadians",0,e=>Math.PI/180*e,"enableDisplayP3IfSupported",0,p,"isDestroyed",0,f],505195);var h=e.i(571629),c=e.i(14947);let m=({state:e,cleanup:t})=>{let a=()=>{e.documentVisible="visible"===document.visibilityState};document.addEventListener("visibilitychange",a),t(()=>document.removeEventListener("visibilitychange",a))},x=({state:e,cleanup:t,app:a})=>{let r=new IntersectionObserver(([t])=>{e.isIntersecting=t.isIntersecting});r.observe(a.canvas),t(()=>r.disconnect())},v=({app:e,cleanup:t})=>{let a=new ResizeObserver(()=>{e.renderer.resize(e.canvas.clientWidth,e.canvas.clientHeight),e.renderer.render(e.stage)});a.observe(e.canvas),t(()=>a.disconnect())},g=({app:e,cleanup:t})=>{let a=()=>e.ticker.stop();window.addEventListener("beforeunload",a),t(()=>window.removeEventListener("beforeunload",a))};e.s(["default",0,function({tickers:e,onInitialized:t,onPreload:r,canvasAttrs:u,initOptions:n,fps:d=60,resolution:w=1,onBeforeTickers:b}){let y=(0,l.useRef)(null);return(0,l.useEffect)(()=>{let a=y.current;if(!a)return;let l=!1,s=[];a.style.opacity="0";let u=window.devicePixelRatio||1,S=new o.Application;return i({app:S}),s.push(()=>{f(S)||S.destroy({},{children:!0,texture:!0,context:!0,style:!0}),a.style.opacity="0"}),(async()=>{var i;let o,y,R,C;if((()=>{let e=Object.getOwnPropertyDescriptor(h.Container.prototype,"alpha");if(!e||!e.set||!e.get)return;let t=e.set;Object.defineProperty(h.Container.prototype,"alpha",{get:e.get,set(e){t.call(this,e),this.visible=this.alpha>0}
1013,configurable:!0,enumerable:!0})})(),await new Promise(e=>{let t=new IntersectionObserver(([a])=>{a.isIntersecting&&(t.disconnect(),e())});t.observe(a),s.push(()=>{t.disconnect(),e()})}),l||(await S.init({canvas:a,resolution:u*w,width:a.clientWidth,height:a.clientHeight,antialias:!1,hello:!1,autoStart:!0,sharedTicker:!1,clearBeforeRender:!0,backgroundAlpha:0,preference:"webgl",eventMode:"passive",...n}),l))return;p(S),S.ticker.wait=(e,t)=>new Promise(a=>{let r=0,i=()=>{(r+=S.ticker.deltaMS)>=e&&(S.ticker.remove(i),a(),t?.())};S.ticker.add(i)}),S.ticker.interval=(e,t)=>{let a=0,r=()=>{(a+=S.ticker.deltaMS)>=e&&(t?.(),a=0)};return S.ticker.add(r),()=>{S.ticker.remove(r)}};let z=(o=[],S.animate=(...e)=>{if(e[2]?.onUpdate){let t=e[2].onUpdate.bind(e[2]);e[2].onUpdate=e=>{f(S)||t(e)}}let t=(0,c.animate)(...e);return S.ticker.started||t.pause(),o.push(t),t.finished.then(()=>{o=o.filter(e=>e!==t)}),t},{onTickerStart:()=>{for(let e of o)"paused"===e.state&&e.play()},onTickerStop:()=>{for(let e of o)e.pause()},cleanup:()=>{o=[]}});s.push(z.cleanup),d!==1/0&&(S.ticker.maxFPS=d);let T=(i={onStart:()=>{z.onTickerStart(),S.ticker.start()},onStop:()=>{z.onTickerStop(),S.ticker.stop()}},y=new Proxy({tickerCount:0,documentVisible:!0,isIntersecting:!0},{set:(e,t,a)=>(e[t]=a,e.tickerCount>0&&e.documentVisible&&e.isIntersecting?i.onStart():i.onStop(),!0)}),R=S.ticker.add.bind(S.ticker),C=S.ticker.remove.bind(S.ticker),S.ticker.add=(...e)=>{if(S.ticker)return y.tickerCount+=1,R.apply(S.ticker,e)},S.ticker.remove=(...e)=>{if(S.ticker)return y.tickerCount-=1,C.apply(S.ticker,e)},y);if(await r?.(S),await b?.(S),!l){for(let t of e)t({app:S,cleanup:e=>s.push(e)});for(let e of(S.render(),t?.(S),a.style.opacity="1",a.style.touchAction="auto",[v,g,x,m]))e({state:T,app:S,cleanup:e=>s.push(e)})}})(),()=>{for(let e of(l=!0,s))e()}},[]),(0,a.jsx)("canvas",{...u,className:(0,s.cn)(u?.className),ref:y,style:{...u?.style,opacity:0}})}],886242)},66979,e=>{"use strict";e.i(744731),e.s(["dashHost",0,"https://dash.readme.com"])}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.