PageSourceSearch

https://readme-lue.vercel.app/_next/static/immutable/chunks/17me39k1pws-a.js

js readme-lue.vercel.app collected 2026-10-03 07:36:14 UTC 64,253 bytes, 1,013 lines download raw bytes

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.