AT-based link agregator. Mirror of https://github.com/likeandscribe/frontpage

Remove unravel package (#324)

* Remove unravel package

* Update pnpm lock with removal

authored by

Timothy and committed by
GitHub
0070e0db fc7a6ab4

-1150
-36
packages/unravel/README.md
··· 1 - This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 - 3 - ## Getting Started 4 - 5 - First, run the development server: 6 - 7 - ```bash 8 - npm run dev 9 - # or 10 - yarn dev 11 - # or 12 - pnpm dev 13 - # or 14 - bun dev 15 - ``` 16 - 17 - Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 18 - 19 - You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. 20 - 21 - This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. 22 - 23 - ## Learn More 24 - 25 - To learn more about Next.js, take a look at the following resources: 26 - 27 - - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 28 - - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 29 - 30 - You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 31 - 32 - ## Deploy on Vercel 33 - 34 - The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 35 - 36 - Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
-10
packages/unravel/app/_theme-provider.tsx
··· 1 - "use client"; 2 - 3 - import { 4 - ThemeProvider as NextThemesProvider, 5 - type ThemeProviderProps, 6 - } from "next-themes"; 7 - 8 - export function ThemeProvider({ children, ...props }: ThemeProviderProps) { 9 - return <NextThemesProvider {...props}>{children}</NextThemesProvider>; 10 - }
-11
packages/unravel/app/blog/[slug]/route.ts
··· 1 - export async function GET( 2 - _request: Request, 3 - { params }: { params: Promise<{ slug: string }> }, 4 - ) { 5 - return new Response(null, { 6 - status: 308, 7 - headers: { 8 - Location: `https://frontpage.fyi/blog/${(await params).slug}`, 9 - }, 10 - }); 11 - }
-10
packages/unravel/app/blog/route.ts
··· 1 - export const dynamic = "force-static"; 2 - 3 - export function GET() { 4 - return new Response(null, { 5 - status: 308, 6 - headers: { 7 - Location: "https://frontpage.fyi/blog", 8 - }, 9 - }); 10 - }
packages/unravel/app/favicon.ico

This is a binary file and will not be displayed.

-85
packages/unravel/app/globals.css
··· 1 - @tailwind base; 2 - @tailwind components; 3 - @tailwind utilities; 4 - 5 - @layer base { 6 - :root { 7 - --background: 0 0% 100%; 8 - --foreground: 222.2 84% 4.9%; 9 - 10 - --card: 0 0% 100%; 11 - --card-foreground: 222.2 84% 4.9%; 12 - 13 - --popover: 0 0% 100%; 14 - --popover-foreground: 222.2 84% 4.9%; 15 - 16 - --primary: 222.2 47.4% 11.2%; 17 - --primary-foreground: 210 40% 98%; 18 - 19 - --secondary: 210 40% 96.1%; 20 - --secondary-foreground: 222.2 47.4% 11.2%; 21 - 22 - --muted: 210 40% 96.1%; 23 - --muted-foreground: 215.4 16.3% 46.9%; 24 - 25 - --accent: 210 40% 96.1%; 26 - --accent-foreground: 222.2 47.4% 11.2%; 27 - 28 - --destructive: 0 84.2% 60.2%; 29 - --destructive-foreground: 210 40% 98%; 30 - 31 - --border: 214.3 31.8% 91.4%; 32 - --input: 214.3 31.8% 91.4%; 33 - --ring: 222.2 84% 4.9%; 34 - 35 - --radius: 0.5rem; 36 - } 37 - 38 - * { 39 - @apply border-border; 40 - } 41 - 42 - body { 43 - @apply bg-background text-foreground; 44 - font-family: var(--font-source_sans), sans-serif; 45 - } 46 - 47 - h1, 48 - h2, 49 - h3, 50 - h4, 51 - h5, 52 - h6 { 53 - font-family: var(--font-source_serif), serif; 54 - } 55 - } 56 - 57 - .dark { 58 - --background: 222.2 84% 4.9%; 59 - --foreground: 210 40% 98%; 60 - 61 - --card: 222.2 84% 4.9%; 62 - --card-foreground: 210 40% 98%; 63 - 64 - --popover: 222.2 84% 4.9%; 65 - --popover-foreground: 210 40% 98%; 66 - 67 - --primary: 210 40% 98%; 68 - --primary-foreground: 222.2 47.4% 11.2%; 69 - 70 - --secondary: 217.2 32.6% 17.5%; 71 - --secondary-foreground: 210 40% 98%; 72 - 73 - --muted: 217.2 32.6% 17.5%; 74 - --muted-foreground: 215 20.2% 65.1%; 75 - 76 - --accent: 217.2 32.6% 17.5%; 77 - --accent-foreground: 210 40% 98%; 78 - 79 - --destructive: 0 62.8% 30.6%; 80 - --destructive-foreground: 210 40% 98%; 81 - 82 - --border: 217.2 32.6% 17.5%; 83 - --input: 217.2 32.6% 17.5%; 84 - --ring: 215.4 16.3% 46.9%; 85 - }
-46
packages/unravel/app/layout.tsx
··· 1 - import { Source_Sans_3, Source_Serif_4 } from "next/font/google"; 2 - import "./globals.css"; 3 - import { cn } from "@/lib/utils"; 4 - import { ThemeProvider } from "./_theme-provider"; 5 - 6 - const sourceSerif = Source_Serif_4({ 7 - subsets: ["latin"], 8 - display: "swap", 9 - variable: "--font-source_serif", 10 - weight: ["400", "500"], 11 - }); 12 - 13 - const sourceSans = Source_Sans_3({ 14 - subsets: ["latin"], 15 - display: "swap", 16 - variable: "--font-source_sans", 17 - weight: ["400", "500"], 18 - }); 19 - 20 - export default function RootLayout({ 21 - children, 22 - }: Readonly<{ 23 - children: React.ReactNode; 24 - }>) { 25 - return ( 26 - <html lang="en" suppressHydrationWarning> 27 - <body 28 - className={cn( 29 - sourceSans.variable, 30 - sourceSerif.variable, 31 - "bg-slate-50/50 dark:bg-slate-950 min-h-screen", 32 - )} 33 - > 34 - {" "} 35 - <ThemeProvider 36 - attribute="class" 37 - defaultTheme="system" 38 - enableSystem 39 - disableTransitionOnChange 40 - > 41 - {children} 42 - </ThemeProvider> 43 - </body> 44 - </html> 45 - ); 46 - }
-28
packages/unravel/app/page.tsx
··· 1 - "use client"; 2 - import { useLayoutEffect } from "react"; 3 - 4 - export default function Home() { 5 - useLayoutEffect(() => { 6 - // @ts-expect-error UnicornStudio is on the window 7 - // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access 8 - UnicornStudio.init(); 9 - }, []); 10 - 11 - return ( 12 - <> 13 - {/* eslint-disable-next-line @next/next/no-sync-scripts */} 14 - <script 15 - src="https://cdn.unicorn.studio/v1.2.0/unicornStudio.umd.js" 16 - integrity="sha384-dLpfEqVDadil7TSM6fSnJrBnRCbfYeiQ6gbOvXQZ+3ER6h8ZmuNK4w1NFHWxygia" 17 - crossOrigin="anonymous" 18 - /> 19 - <div 20 - className="unicorn-embed w-screen h-screen" 21 - data-us-project-src="/unravel-unicorn/265fc7b676fe99a6ed6496834107f38b" 22 - data-us-scale="1" 23 - data-us-dpi="1.5" 24 - data-us-disablemobile="true" 25 - /> 26 - </> 27 - ); 28 - }
-28
packages/unravel/app/unravel-unicorn/[hash]/route.ts
··· 1 - import { notFound } from "next/navigation"; 2 - import unicorn from "./unravel-unicorn.json"; 3 - import crypto from "node:crypto"; 4 - 5 - const HASH = crypto 6 - .createHash("md5") 7 - .update(JSON.stringify(unicorn)) 8 - .digest("hex"); 9 - 10 - export const dynamic = "force-static"; 11 - 12 - type Params = { hash: string }; 13 - 14 - export function generateStaticParams(): Params[] { 15 - console.log("Generated unravel-unicorn hash:", HASH); 16 - 17 - return [{ hash: HASH }]; 18 - } 19 - 20 - export async function GET(_: Request, { params }: { params: Promise<Params> }) { 21 - const { hash } = await params; 22 - if (hash !== HASH) notFound(); 23 - return Response.json(unicorn, { 24 - headers: { 25 - "Cache-Control": "public, max-age=31536000, immutable", 26 - }, 27 - }); 28 - }
-244
packages/unravel/app/unravel-unicorn/[hash]/unravel-unicorn.json
··· 1 - { 2 - "history": [ 3 - { 4 - "visible": true, 5 - "aspectRatio": 1, 6 - "layerType": "effect", 7 - "type": "gradient", 8 - "speed": 0.52, 9 - "mouseMomentum": 0, 10 - "texture": false, 11 - "animating": false, 12 - "isMask": 0, 13 - "compiledFragmentShaders": [ 14 - "#version 300 es\nprecision highp float;in vec2 vTextureCoord;const vec3 uColors[1] = vec3[]( vec3(1.000000, 0.819608, 0.596078) );uniform float uTime;uniform sampler2D uMaskTexture; uniform float uAspectRatio; uniform vec2 uMousePos; uniform vec2 uResolution;vec2 rotate(vec2 coord, float angle) { float s = sin(angle); float c = cos(angle); return vec2( coord.x * c - coord.y * s, coord.x * s + coord.y * c ); }float rand(vec2 co) { return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453); }vec3 linear_from_srgb(vec3 rgb) { return pow(rgb, vec3(2.2)); }vec3 srgb_from_linear(vec3 lin) { return pow(lin, vec3(1.0/2.2)); }vec3 oklab_mix(vec3 lin1, vec3 lin2, float a) { const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, 0.5362752080, 0.6807189584, 0.2818474174, 0.0514575653, 0.1074065790, 0.6302613616); const mat3 kLMStoCONE = mat3( 4.0767245293, -1.2681437731, -0.0041119885, -3.3072168827, 2.6093323231, -0.7034763098, 0.2307590544, -0.3411344290, 1.7068625689); vec3 lms1 = pow( kCONEtoLMS*lin1, vec3(1.0/3.0) ); vec3 lms2 = pow( kCONEtoLMS*lin2, vec3(1.0/3.0) ); vec3 lms = mix( lms1, lms2, a ); lms *= 1.0+0.025*a*(1.0-a); return kLMStoCONE*(lms*lms*lms); }vec3 getGradientColor(float position) { for (int i = 0; i < 1; i++) { float colorPosition = float(i) / float(1); float nextColorPosition = float(i + 1) / float(1); if (position <= nextColorPosition) { float mixFactor = (position - colorPosition) / (nextColorPosition - colorPosition); vec3 linStart = linear_from_srgb(uColors[i]); vec3 linEnd = linear_from_srgb(uColors[i + 1]); vec3 mixedLin = oklab_mix(linStart, linEnd, mixFactor); return srgb_from_linear(mixedLin); } } return srgb_from_linear(uColors[1-1]); }vec3 Tonemap_ACES(vec3 x) { const float a = 2.51; const float b = 0.03; const float c = 2.43; const float d = 0.59; const float e = 0.14; return (x * (a * x + b)) / (x * (c * x + d) + e); }out vec4 fragColor;void main() { vec2 uv = vTextureCoord; vec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.00); uv -= pos; uv /= (0.52*2.); uv = rotate(uv, (0.20 - 0.5) * 2. * 3.14159265);vec4 color = vec4(0,0,0,1);float position; if(1 == 1) { color.rgb = uColors[0]; } else if (0 == 0) { position = (uv.x+0.5);} else if (0 == 1) { position = length(uv); } else if (0 == 2) { float angle = atan(uv.y, uv.x); float normalizedAngle = angle / (2.0 * 3.14159265359) + 0.5; float doubledAngle = 2.0 * normalizedAngle; doubledAngle = doubledAngle > 1. ? 2.0 - doubledAngle : doubledAngle; position = clamp(doubledAngle, 0.0, 1.0); } else if (0 == 3) { } if(1 > 1) { position -= (uTime*0.01 + 0.00); float cycle = floor(position); bool reverse = int(cycle) % 2 == 0; float animatedPos = reverse ? fract(-position) : fract(position); animatedPos = reverse ? animatedPos - 1./float(1) : animatedPos - 1./float(1);color.rgb = getGradientColor(animatedPos); float dither = rand(gl_FragCoord.xy) * 0.005; color.rgb += dither; }fragColor = color; }" 15 - ], 16 - "compiledVertexShaders": [ 17 - "#version 300 es\nprecision mediump float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat4 uTextureMatrix;out vec2 vTextureCoord; out vec3 vVertexPosition;void main() { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vTextureCoord = aTextureCoord; }" 18 - ], 19 - "data": { "depth": false } 20 - }, 21 - { 22 - "visible": true, 23 - "aspectRatio": 1, 24 - "layerType": "effect", 25 - "type": "mouse", 26 - "texture": false, 27 - "parentLayer": "0f00febc-947c-4b79-b122-33fb81bd772d", 28 - "animating": true, 29 - "mouseMomentum": 0, 30 - "isMask": 0, 31 - "compiledFragmentShaders": [ 32 - "#version 300 es\nprecision mediump float;in vec2 vTextureCoord; in vec3 vVertexPosition;uniform sampler2D uTexture; uniform sampler2D uPingPongTexture; uniform vec2 uResolution;uniform float uTime;const float PI = 3.1415926; const float ITERATIONS = 24.0; const float kernel[24] = float[]( 0.7978845608028654, 0.795118932516684, 0.7868794322038799, 0.7733362336056986, 0.7547664553859864, 0.7315447328280048, 0.704130653528599, 0.6730536454899063, 0.6388960110447045, 0.6022748643096089, 0.5638237508206051, 0.5241747061566029, 0.48394144903828673, 0.443704309411472, 0.40399737110811773, 0.36529817077804383, 0.3280201493519873, 0.29250790855907144, 0.2590351913317835, 0.2278053882403838, 0.19895427758549736, 0.17255463765302306, 0.1486223271179862, 0.12712341303392466 );out vec4 fragColor;vec4 permute(vec4 t) { return t * (t * 34.0 + 133.0); } vec3 grad(float hash) { vec3 cube = mod(floor(hash / vec3(1.0, 2.0, 4.0)), 2.0) * 2.0 - 1.0; vec3 cuboct = cube; cuboct[int(hash / 16.0)] = 0.0; float type = mod(floor(hash / 8.0), 2.0); vec3 rhomb = (1.0 - type) * cube + type * (cuboct + cross(cube, cuboct)); vec3 grad = cuboct * 1.22474487139 + rhomb; grad *= (1.0 - 0.042942436724648037 * type) * 3.5946317686139184; return grad; } vec4 bccNoiseDerivativesPart(vec3 X) { vec3 b = floor(X); vec4 i4 = vec4(X - b, 2.5); vec3 v1 = b + floor(dot(i4, vec4(.25))); vec3 v2 = b + vec3(1, 0, 0) + vec3(-1, 1, 1) * floor(dot(i4, vec4(-.25, .25, .25, .35))); vec3 v3 = b + vec3(0, 1, 0) + vec3(1, -1, 1) * floor(dot(i4, vec4(.25, -.25, .25, .35))); vec3 v4 = b + vec3(0, 0, 1) + vec3(1, 1, -1) * floor(dot(i4, vec4(.25, .25, -.25, .35))); vec4 hashes = permute(mod(vec4(v1.x, v2.x, v3.x, v4.x), 289.0)); hashes = permute(mod(hashes + vec4(v1.y, v2.y, v3.y, v4.y), 289.0)); hashes = mod(permute(mod(hashes + vec4(v1.z, v2.z, v3.z, v4.z), 289.0)), 48.0); vec3 d1 = X - v1; vec3 d2 = X - v2; vec3 d3 = X - v3; vec3 d4 = X - v4; vec4 a = max(0.75 - vec4(dot(d1, d1), dot(d2, d2), dot(d3, d3), dot(d4, d4)), 0.0); vec4 aa = a * a; vec4 aaaa = aa * aa; vec3 g1 = grad(hashes.x); vec3 g2 = grad(hashes.y); vec3 g3 = grad(hashes.z); vec3 g4 = grad(hashes.w); vec4 extrapolations = vec4(dot(d1, g1), dot(d2, g2), dot(d3, g3), dot(d4, g4)); vec3 derivative = -8.0 * mat4x3(d1, d2, d3, d4) * (aa * a * extrapolations) + mat4x3(g1, g2, g3, g4) * aaaa; return vec4(derivative, dot(aaaa, extrapolations)); } vec4 bccNoiseDerivatives_XYBeforeZ(vec3 X) { mat3 orthonormalMap = mat3( 0.788675134594813, -0.211324865405187, -0.577350269189626, -0.211324865405187, 0.788675134594813, -0.577350269189626, 0.577350269189626, 0.577350269189626, 0.577350269189626); X = orthonormalMap * X; vec4 result = bccNoiseDerivativesPart(X) + bccNoiseDerivativesPart(X + 144.5); return vec4(result.xyz * orthonormalMap, result.w); }vec2 random2(vec2 p) { return fract(sin(vec2(dot(p, vec2(127.1, 311.7)), dot(p, vec2(269.5, 183.3)))) * 43758.5453); }vec3 rgb2hsv(vec3 c) { vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));float d = q.x - min(q.w, q.y); float e = 1.0e-10; return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); }vec3 chromatic_aberration(vec3 color, vec2 uv, vec2 offset) { vec4 left = texture(uTexture, uv - offset); vec4 right = texture(uTexture, uv + offset);color.r = left.r; color.b = right.b;return color; }vec2 pixelate(vec2 uv) { float aspectRatio = uResolution.x / uResolution.y; float scale = 0.50 / 2.0; vec2 modulate = mod(vec2(uv.x * aspectRatio, uv.y) - 0.5, (scale + 0.01) / 12.0); return vec2( uv.x - modulate.x / aspectRatio + (0.08333 * scale) / 2.0, uv.y - modulate.y + (0.08333 * scale) / 2.0 ); }vec2 angleToDir(float angle) { float rad = angle * 2.0 * PI; return vec2(cos(rad), sin(rad)); }vec4 blurTrail(vec2 uv, vec2 mouseDir) { vec2 distorted = mouseDir * 0.4; float total_weight = 0.0; vec4 color = vec4(0);for (int i = 0; i <= 24; i++) { float scale = 0.0001 + 0.50 * 0.5; float weight = kernel[i]; vec2 offset = distorted * (1.5 + scale) * mix(1.0, float(i) / ITERATIONS, scale); vec4 samp = texture(uTexture, uv - offset); samp.rgb = chromatic_aberration(samp.rgb, uv - offset, offset * 0.43 * 0.12); color += weight * samp; total_weight += weight; } return color / total_weight; }vec4 noiseTrail(vec2 uv, vec2 mouseDir, float strength, float aspectRatio) { vec4 color = vec4(0); vec2 noise = bccNoiseDerivatives_XYBeforeZ(vec3((uv * vec2(aspectRatio, 1) - mouseDir / 8.0 - 0.5) * 250.0 * 0.50, strength)).xy * strength * 0.25; vec2 distorted = (mouseDir + noise) * 0.4; color = texture(uTexture, uv - distorted); color.rgb = chromatic_aberration(color.rgb, uv - distorted, distorted * 0.43 * 0.12); return color; }vec4 pixelTrail(vec2 uv, vec2 mouseDir, float strength) { vec4 color = vec4(0); vec2 distorted = mouseDir * 0.4; vec2 pixelated = uv - distorted; color = texture(uTexture, pixelated); color.rgb = chromatic_aberration(color.rgb, pixelated, distorted * 0.43 * 0.12); return color; }vec4 revealTrail(vec2 uv, vec2 mouseDir, float strength) { vec4 color = vec4(0); float zMix = strength; vec2 distorted = mouseDir * 0.4 * 0.50; color = texture(uTexture, uv - distorted); color.rgb = chromatic_aberration(color.rgb, uv - distorted, distorted * 0.43 * 0.12); color = mix(vec4(vec3(0, 0, 0), 1.00), color, zMix); return color; }vec4 inverTrail(vec2 uv, vec2 mouseDir, float strength) { vec4 color = vec4(0); vec2 distorted = mouseDir * 0.4 * 0.50; float sMix = step(0.3, strength); color = texture(uTexture, uv - distorted); color.rgb = chromatic_aberration(color.rgb, uv - distorted, distorted * 0.43 * 0.12); color.rgb = mix(color.rgb, 1.0 - color.rgb, sMix); return color; }vec4 defaultTrail(vec2 uv, vec2 mouseDir) { vec4 color = vec4(0); vec2 distorted = mouseDir * 0.4; color = texture(uTexture, uv - distorted); color.rgb = chromatic_aberration(color.rgb, uv - distorted, distorted * 0.43 * 0.12); return color; }vec4 shatterTrail(vec2 uv, vec2 mouseDir, float strength, float aspectRatio) { vec2 st = uv * vec2(aspectRatio, 1) * 80.0 * 0.50; vec2 i_st = floor(st); vec2 f_st = fract(st);float m_dist = 15.0; vec2 m_point; vec2 d;for (int j = -1; j <= 1; j++) { for (int i = -1; i <= 1; i++) { vec2 neighbor = vec2(float(i), float(j)); vec2 point = random2(i_st + neighbor);vec2 diff = neighbor + point - f_st; float dist = length(diff);if (dist < m_dist) { m_dist = dist; m_point = point; d = diff; } } }vec2 distorted = mouseDir * 0.4; vec2 offset = (m_point * 0.2 * 1.0 * 2.0) - (1.0 * 0.2) - distorted; return texture(uTexture, uv + offset * strength); }vec4 getTrailColor(vec2 uv, vec2 mouseDir, float strength) { vec4 color = vec4(0); float aspectRatio = uResolution.x / uResolution.y;switch (0) { case 1: return blurTrail(uv, mouseDir); case 2: return noiseTrail(uv, mouseDir, strength, aspectRatio); case 3: return pixelTrail(uv, mouseDir, strength); case 4: return revealTrail(uv, mouseDir, strength); case 5: return inverTrail(uv, mouseDir, strength); case 6: return shatterTrail(uv, mouseDir, strength, aspectRatio); default: return defaultTrail(uv, mouseDir); } }void main() { vec2 uv = vTextureCoord; vec2 pingpongUv = uv;if (0 == 3) { pingpongUv = pixelate(pingpongUv); }vec3 mouseRgb = texture(uPingPongTexture, pingpongUv).rgb; vec3 mouseTrail = rgb2hsv(mouseRgb);float angle = mouseTrail.x; float strength = mouseTrail.z * (0.03 * 2.0); vec2 direction = angleToDir(angle); vec2 mouseDir = direction * strength;vec4 color = getTrailColor(uv, mouseDir, strength);fragColor = color; }", 33 - "#version 300 es\nprecision lowp float;in vec3 vVertexPosition; in vec2 vTextureCoord;uniform sampler2D uTexture; uniform sampler2D uPingPongTexture; uniform vec2 uMousePos; uniform vec2 uPreviousMousePos; uniform vec2 uResolution; uniform float uTime;const float PI = 3.1415926; const float TWOPI = 6.2831852;out vec4 fragColor;vec3 hsv2rgb(vec3 c) { vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); }mat2 rot(float a) { return mat2(cos(a), -sin(a), sin(a), cos(a)); }vec2 liquify(vec2 st, float angle) { float aspectRatio = uResolution.x / uResolution.y; st.x *= aspectRatio; st = st * rot(angle * TWOPI); float amplitude = 0.003; for (float i = 1.0; i <= 5.0; i++) { st = st * rot(i / 5.0 * PI * 2.0); st += vec2( amplitude * cos(i * 5.0 * st.y + uTime * 0.02), amplitude * sin(i * 5.0 * st.x + uTime * 0.02) ); } st = st * rot(-angle * TWOPI); st.x /= aspectRatio; return st; }void main() { float aspectRatio = uResolution.x / uResolution.y; vec2 uv = vTextureCoord; vec2 correctedUv = uv * vec2(aspectRatio, 1.0);vec2 dir = (uMousePos - uPreviousMousePos) * vec2(aspectRatio, 1.0); float dist = length(dir); dir = normalize(dir);float rad = 0.41 * 0.4 * mix(aspectRatio, 1.0, 0.5); float angle = atan(dir.y, dir.x); if (angle < 0.0) angle += TWOPI;if(0.18 > 0.) { uv = mix(uv, liquify(uv, smoothstep(0.0, 1.0, angle)), 0.18); }float t = clamp(dot(correctedUv - uPreviousMousePos * vec2(aspectRatio, 1.0), dir) / dist, 0.0, 1.0); vec2 closestPoint = mix(uPreviousMousePos, uMousePos, t) * vec2(aspectRatio, 1.0); float distanceToLine = distance(correctedUv, closestPoint);float s = smoothstep(rad, rad * 0.41, distanceToLine);vec3 color = vec3(angle / TWOPI, 1.0, 1.0); vec3 mouseColor = hsv2rgb(color);vec3 lastFrameColor = texture(uPingPongTexture, mix(uv, uv / 1.03 + 0.015, 0.65)).rgb; vec3 draw = mix(lastFrameColor, mouseColor, min(1.0, dist * s));fragColor = vec4(draw * pow(0.44, 0.1), 1.0); }" 34 - ], 35 - "compiledVertexShaders": [ 36 - "#version 300 es\nprecision mediump float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix;uniform sampler2D uPingPongTexture;out vec3 vVertexPosition; out vec2 vTextureCoord;vec3 rgb2hsv(vec3 c) { vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));float d = q.x - min(q.w, q.y); float e = 1.0e-10; return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); }const float PI = 3.1415926;void main() {vec3 vertexPosition = aVertexPosition;gl_Position = uPMatrix * uMVMatrix * vec4(vertexPosition, 1.0); vTextureCoord = aTextureCoord; }", 37 - "#version 300 es\nprecision lowp float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix;out vec3 vVertexPosition; out vec2 vTextureCoord;void main() {vec3 vertexPosition = aVertexPosition;gl_Position = uPMatrix * uMVMatrix * vec4(vertexPosition, 1.0); vTextureCoord = aTextureCoord; vVertexPosition = vertexPosition; }" 38 - ], 39 - "data": { "depth": false } 40 - }, 41 - { 42 - "local": { 43 - "id": "d8f72fb5-849a-4c6d-ae50-37149aa273ef", 44 - "canvas": {}, 45 - "ctx": {} 46 - }, 47 - "visible": true, 48 - "locked": false, 49 - "aspectRatio": 1, 50 - "isElement": true, 51 - "opacity": 0.81, 52 - "displace": 0, 53 - "trackMouse": 0, 54 - "mouseMomentum": 0, 55 - "blendMode": "NORMAL", 56 - "bgDisplace": 0, 57 - "mask": 0, 58 - "maskBackground": { "type": "Vec3", "_x": 0, "_y": 0, "_z": 0 }, 59 - "maskAlpha": 0, 60 - "dispersion": 0, 61 - "axisTilt": 0, 62 - "layerType": "image", 63 - "imageLoaded": false, 64 - "effects": [], 65 - "size": 0.66, 66 - "rotation": 0, 67 - "height": 129, 68 - "repeat": 0, 69 - "fitToCanvas": 1, 70 - "scaleX": 1, 71 - "scaleY": 1, 72 - "src": "https://assets.unicorn.studio/images/nYceGF4tzMX8WjSRSNzpUt1o4812/papashrek-2x.png", 73 - "speed": 0.5, 74 - "thumb": "https://assets.unicorn.studio/images/nYceGF4tzMX8WjSRSNzpUt1o4812/papashrek-2x_@thumbnail.png?authuser=0", 75 - "translateX": -5, 76 - "translateY": -61, 77 - "width": 128, 78 - "compiledFragmentShaders": [ 79 - "#version 300 es\nprecision mediump float; in vec2 vTextureCoord; in vec3 vVertexPosition;uniform sampler2D uBgTexture; uniform sampler2D uTexture; uniform vec2 uMousePos; uniform vec2 uResolution; uniform int uSampleBg;vec2 perspectiveUV(vec2 uv) { float aspectRatio = uResolution.x/uResolution.y; vec2 centeredUV = uv - 0.5; centeredUV.x *= aspectRatio; float strength = 1.0 + (vVertexPosition.z * 0.00); vec2 perspectiveUV = centeredUV / strength; perspectiveUV.x /= aspectRatio; perspectiveUV += 0.5; return perspectiveUV; }out vec4 fragColor;void main() { vec2 uv = vTextureCoord; vec2 pos = mix(vec2(0), (uMousePos - 0.5), 0.00); uv = perspectiveUV(uv) - pos; vec4 color = texture(uTexture, uv); vec4 background = uSampleBg == 1 ? texture(uBgTexture, vTextureCoord) : vec4(0);color = mix(background, color/(color.a + 0.00000001), color.a * 0.81);fragColor = color; }" 80 - ], 81 - "compiledVertexShaders": [ 82 - "#version 300 es\nprecision mediump float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat4 uTextureMatrix; uniform vec2 uMousePos;out vec2 vTextureCoord; out vec3 vVertexPosition;void main() { float angleX = uMousePos.y * 0.5 - 0.25; float angleY = (1.-uMousePos.x) * 0.5 - 0.25; mat4 rotateX = mat4(1.0, 0.0, 0.0, 0.0, 0.0, cos(angleX), -sin(angleX), 0.0, 0.0, sin(angleX), cos(angleX), 0.0, 0.0, 0.0, 0.0, 1.0); mat4 rotateY = mat4(cos(angleY), 0.0, sin(angleY), 0.0, 0.0, 1.0, 0.0, 0.0, -sin(angleY), 0.0, cos(angleY), 0.0, 0.0, 0.0, 0.0, 1.0);mat4 rotationMatrix = rotateX * rotateY; gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vVertexPosition = (rotationMatrix * vec4(aVertexPosition, 1.0)).xyz; vTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy; }" 83 - ] 84 - }, 85 - { 86 - "visible": true, 87 - "aspectRatio": 1, 88 - "layerType": "effect", 89 - "type": "spotlight", 90 - "mouseMomentum": 0.47, 91 - "texture": false, 92 - "animating": false, 93 - "isMask": 0, 94 - "compiledFragmentShaders": [ 95 - "#version 300 es\nprecision mediump float;in vec2 vTextureCoord;uniform sampler2D uTexture; uniform sampler2D uBgTexture;uniform sampler2D uMaskTexture; uniform float uAspectRatio; uniform vec2 uMousePos; uniform vec2 uResolution;out vec4 fragColor;const int kernelSize = 36; const float gaussianWeights[kernelSize] = float[](0.00094768, 0.00151965, 0.00237008, 0.00359517, 0.0053041, 0.00761097, 0.01062197, 0.01441804, 0.01903459, 0.0244409, 0.03052299, 0.03707432, 0.04379813, 0.05032389, 0.05623791, 0.06112521, 0.06461716, 0.06643724, 0.06643724, 0.06461716, 0.06112521, 0.05623791, 0.05032389, 0.04379813, 0.03707432, 0.03052299, 0.0244409, 0.01903459, 0.01441804, 0.01062197, 0.00761097, 0.0053041, 0.00359517, 0.00237008, 0.00151965, 0.00094768);vec4 GaussianBlur(sampler2D tex, vec2 uv, vec2 direction) { vec4 color = vec4(0.0); float weightSum = 0.0;float amount = (0.53 + 0.1) * 2.; float aspectRatio = uResolution.x/uResolution.y;direction.x /= aspectRatio;color += texture(tex, uv) * gaussianWeights[0]; for (int i = 0; i < kernelSize; i++) { float x = float(i - kernelSize / 2) * amount; color += texture(tex, uv + vec2(x/1000.) * direction) * gaussianWeights[i]; } return color; }float getHeight(vec2 uv) { vec4 col = texture(uTexture, uv); return col.r; }vec4 computeNoise(vec2 uv) { vec2 ste = (1. / uResolution); float height = getHeight(uv); vec2 dxy = height - vec2(getHeight(uv + vec2(ste.x, 0.)), getHeight(uv + vec2(0., ste.y)));return vec4(normalize(vec3(dxy * (0.02 + 0.04 * 0.53) / ste, 2.)), height); }float random(vec2 seed) { return fract(sin(dot(seed.xy, vec2(12.9898, 78.233))) * 43758.5453); }vec3 Tonemap_tanh(vec3 x) { x = clamp(x, -40.0, 40.0); return (exp(x) - exp(-x)) / (exp(x) + exp(-x)); }float light(vec3 p, vec3 normal, vec3 lightPos) { vec3 direction = normalize(lightPos - p); float specular = 0.5 * pow(max(dot(direction, reflect(-direction, normal)), 0.0), 2.0); return max(0.1, dot(normal, direction) * 1.2 - specular); }void main() { vec2 uv = vTextureCoord; vec4 color;if(0.00 == 0.) { color = GaussianBlur(uTexture, uv, vec2(uResolution.y/uResolution.x, 0)); } else if(0.00 == 1.) { color = GaussianBlur(uTexture, uv, vec2(0, 1)); color.rgb += (random(gl_FragCoord.xy) - 0.1) / 255.0; } else { vec2 pos = vec2(-0.030507136338683048, 1.092850915271533) + mix(vec2(0), (uMousePos-0.5), 0.23); vec2 aspectRatio = vec2(uResolution.x/uResolution.y, 1); color = texture(uBgTexture, uv); float luma = color.r; float dist = distance(uv * aspectRatio, pos * aspectRatio) / (1.00 + 0.5); float hightlighDist = distance(uv * aspectRatio, pos * aspectRatio) / (1.00 + 0.5)/2.; float spot = max(0., max(0., (1.-dist)) * max(0., (1.-dist))); float highlightSpot = max(0., max(0., (1.-hightlighDist)) * max(0., (1.-hightlighDist))); vec3 normal = computeNoise(uv).rgb*luma; vec2 lightDir = pos * aspectRatio - uv * aspectRatio; float lightDistance = 1.-length(lightDir); lightDir = normalize(lightDir); vec3 diff = vec3(max(dot(normal, vec3(lightDir, 0.5)), 0.0));float specular = light(vec3(uv, 1.), normal, vec3(pos, 1.)); specular = smoothstep(0., 1., specular) * 2.; float intensity = 1.00 * 3.; vec3 base = color.rgb * vec3(0, 0.9803921568627451, 0.9333333333333333) * max(0., spot) * intensity; color.rgb = color.rgb * 0.48 + base * diff * vec3(0, 0.9803921568627451, 0.9333333333333333) * max(0., spot) * intensity; color.rgb += specular * vec3(0, 0.9803921568627451, 0.9333333333333333) * max(0., spot * 4.) * 0.53; color.rgb = Tonemap_tanh(color.rgb); float dither = (random(gl_FragCoord.xy) - 0.5) / 255.0; color.rgb += dither; } if(0 == 1) { vec2 pos = mix(vec2(0), (uMousePos - 0.5), 0.00); vec4 maskColor = texture(uMaskTexture, vTextureCoord - pos); fragColor = color * (maskColor.a * maskColor.a); } else { fragColor = color; }}", 96 - "#version 300 es\nprecision mediump float;in vec2 vTextureCoord;uniform sampler2D uTexture; uniform sampler2D uBgTexture;uniform sampler2D uMaskTexture; uniform float uAspectRatio; uniform vec2 uMousePos; uniform vec2 uResolution;out vec4 fragColor;const int kernelSize = 36; const float gaussianWeights[kernelSize] = float[](0.00094768, 0.00151965, 0.00237008, 0.00359517, 0.0053041, 0.00761097, 0.01062197, 0.01441804, 0.01903459, 0.0244409, 0.03052299, 0.03707432, 0.04379813, 0.05032389, 0.05623791, 0.06112521, 0.06461716, 0.06643724, 0.06643724, 0.06461716, 0.06112521, 0.05623791, 0.05032389, 0.04379813, 0.03707432, 0.03052299, 0.0244409, 0.01903459, 0.01441804, 0.01062197, 0.00761097, 0.0053041, 0.00359517, 0.00237008, 0.00151965, 0.00094768);vec4 GaussianBlur(sampler2D tex, vec2 uv, vec2 direction) { vec4 color = vec4(0.0); float weightSum = 0.0;float amount = (0.53 + 0.1) * 2.; float aspectRatio = uResolution.x/uResolution.y;direction.x /= aspectRatio;color += texture(tex, uv) * gaussianWeights[0]; for (int i = 0; i < kernelSize; i++) { float x = float(i - kernelSize / 2) * amount; color += texture(tex, uv + vec2(x/1000.) * direction) * gaussianWeights[i]; } return color; }float getHeight(vec2 uv) { vec4 col = texture(uTexture, uv); return col.r; }vec4 computeNoise(vec2 uv) { vec2 ste = (1. / uResolution); float height = getHeight(uv); vec2 dxy = height - vec2(getHeight(uv + vec2(ste.x, 0.)), getHeight(uv + vec2(0., ste.y)));return vec4(normalize(vec3(dxy * (0.02 + 0.04 * 0.53) / ste, 2.)), height); }float random(vec2 seed) { return fract(sin(dot(seed.xy, vec2(12.9898, 78.233))) * 43758.5453); }vec3 Tonemap_tanh(vec3 x) { x = clamp(x, -40.0, 40.0); return (exp(x) - exp(-x)) / (exp(x) + exp(-x)); }float light(vec3 p, vec3 normal, vec3 lightPos) { vec3 direction = normalize(lightPos - p); float specular = 0.5 * pow(max(dot(direction, reflect(-direction, normal)), 0.0), 2.0); return max(0.1, dot(normal, direction) * 1.2 - specular); }void main() { vec2 uv = vTextureCoord; vec4 color;if(1.00 == 0.) { color = GaussianBlur(uTexture, uv, vec2(uResolution.y/uResolution.x, 0)); } else if(1.00 == 1.) { color = GaussianBlur(uTexture, uv, vec2(0, 1)); color.rgb += (random(gl_FragCoord.xy) - 0.1) / 255.0; } else { vec2 pos = vec2(-0.030507136338683048, 1.092850915271533) + mix(vec2(0), (uMousePos-0.5), 0.23); vec2 aspectRatio = vec2(uResolution.x/uResolution.y, 1); color = texture(uBgTexture, uv); float luma = color.r; float dist = distance(uv * aspectRatio, pos * aspectRatio) / (1.00 + 0.5); float hightlighDist = distance(uv * aspectRatio, pos * aspectRatio) / (1.00 + 0.5)/2.; float spot = max(0., max(0., (1.-dist)) * max(0., (1.-dist))); float highlightSpot = max(0., max(0., (1.-hightlighDist)) * max(0., (1.-hightlighDist))); vec3 normal = computeNoise(uv).rgb*luma; vec2 lightDir = pos * aspectRatio - uv * aspectRatio; float lightDistance = 1.-length(lightDir); lightDir = normalize(lightDir); vec3 diff = vec3(max(dot(normal, vec3(lightDir, 0.5)), 0.0));float specular = light(vec3(uv, 1.), normal, vec3(pos, 1.)); specular = smoothstep(0., 1., specular) * 2.; float intensity = 1.00 * 3.; vec3 base = color.rgb * vec3(0, 0.9803921568627451, 0.9333333333333333) * max(0., spot) * intensity; color.rgb = color.rgb * 0.48 + base * diff * vec3(0, 0.9803921568627451, 0.9333333333333333) * max(0., spot) * intensity; color.rgb += specular * vec3(0, 0.9803921568627451, 0.9333333333333333) * max(0., spot * 4.) * 0.53; color.rgb = Tonemap_tanh(color.rgb); float dither = (random(gl_FragCoord.xy) - 0.5) / 255.0; color.rgb += dither; } if(0 == 1) { vec2 pos = mix(vec2(0), (uMousePos - 0.5), 0.00); vec4 maskColor = texture(uMaskTexture, vTextureCoord - pos); fragColor = color * (maskColor.a * maskColor.a); } else { fragColor = color; }}", 97 - "#version 300 es\nprecision mediump float;in vec2 vTextureCoord;uniform sampler2D uTexture; uniform sampler2D uBgTexture;uniform sampler2D uMaskTexture; uniform float uAspectRatio; uniform vec2 uMousePos; uniform vec2 uResolution;out vec4 fragColor;const int kernelSize = 36; const float gaussianWeights[kernelSize] = float[](0.00094768, 0.00151965, 0.00237008, 0.00359517, 0.0053041, 0.00761097, 0.01062197, 0.01441804, 0.01903459, 0.0244409, 0.03052299, 0.03707432, 0.04379813, 0.05032389, 0.05623791, 0.06112521, 0.06461716, 0.06643724, 0.06643724, 0.06461716, 0.06112521, 0.05623791, 0.05032389, 0.04379813, 0.03707432, 0.03052299, 0.0244409, 0.01903459, 0.01441804, 0.01062197, 0.00761097, 0.0053041, 0.00359517, 0.00237008, 0.00151965, 0.00094768);vec4 GaussianBlur(sampler2D tex, vec2 uv, vec2 direction) { vec4 color = vec4(0.0); float weightSum = 0.0;float amount = (0.53 + 0.1) * 2.; float aspectRatio = uResolution.x/uResolution.y;direction.x /= aspectRatio;color += texture(tex, uv) * gaussianWeights[0]; for (int i = 0; i < kernelSize; i++) { float x = float(i - kernelSize / 2) * amount; color += texture(tex, uv + vec2(x/1000.) * direction) * gaussianWeights[i]; } return color; }float getHeight(vec2 uv) { vec4 col = texture(uTexture, uv); return col.r; }vec4 computeNoise(vec2 uv) { vec2 ste = (1. / uResolution); float height = getHeight(uv); vec2 dxy = height - vec2(getHeight(uv + vec2(ste.x, 0.)), getHeight(uv + vec2(0., ste.y)));return vec4(normalize(vec3(dxy * (0.02 + 0.04 * 0.53) / ste, 2.)), height); }float random(vec2 seed) { return fract(sin(dot(seed.xy, vec2(12.9898, 78.233))) * 43758.5453); }vec3 Tonemap_tanh(vec3 x) { x = clamp(x, -40.0, 40.0); return (exp(x) - exp(-x)) / (exp(x) + exp(-x)); }float light(vec3 p, vec3 normal, vec3 lightPos) { vec3 direction = normalize(lightPos - p); float specular = 0.5 * pow(max(dot(direction, reflect(-direction, normal)), 0.0), 2.0); return max(0.1, dot(normal, direction) * 1.2 - specular); }void main() { vec2 uv = vTextureCoord; vec4 color;if(2.00 == 0.) { color = GaussianBlur(uTexture, uv, vec2(uResolution.y/uResolution.x, 0)); } else if(2.00 == 1.) { color = GaussianBlur(uTexture, uv, vec2(0, 1)); color.rgb += (random(gl_FragCoord.xy) - 0.1) / 255.0; } else { vec2 pos = vec2(-0.030507136338683048, 1.092850915271533) + mix(vec2(0), (uMousePos-0.5), 0.23); vec2 aspectRatio = vec2(uResolution.x/uResolution.y, 1); color = texture(uBgTexture, uv); float luma = color.r; float dist = distance(uv * aspectRatio, pos * aspectRatio) / (1.00 + 0.5); float hightlighDist = distance(uv * aspectRatio, pos * aspectRatio) / (1.00 + 0.5)/2.; float spot = max(0., max(0., (1.-dist)) * max(0., (1.-dist))); float highlightSpot = max(0., max(0., (1.-hightlighDist)) * max(0., (1.-hightlighDist))); vec3 normal = computeNoise(uv).rgb*luma; vec2 lightDir = pos * aspectRatio - uv * aspectRatio; float lightDistance = 1.-length(lightDir); lightDir = normalize(lightDir); vec3 diff = vec3(max(dot(normal, vec3(lightDir, 0.5)), 0.0));float specular = light(vec3(uv, 1.), normal, vec3(pos, 1.)); specular = smoothstep(0., 1., specular) * 2.; float intensity = 1.00 * 3.; vec3 base = color.rgb * vec3(0, 0.9803921568627451, 0.9333333333333333) * max(0., spot) * intensity; color.rgb = color.rgb * 0.48 + base * diff * vec3(0, 0.9803921568627451, 0.9333333333333333) * max(0., spot) * intensity; color.rgb += specular * vec3(0, 0.9803921568627451, 0.9333333333333333) * max(0., spot * 4.) * 0.53; color.rgb = Tonemap_tanh(color.rgb); float dither = (random(gl_FragCoord.xy) - 0.5) / 255.0; color.rgb += dither; } if(0 == 1) { vec2 pos = mix(vec2(0), (uMousePos - 0.5), 0.00); vec4 maskColor = texture(uMaskTexture, vTextureCoord - pos); fragColor = color * (maskColor.a * maskColor.a); } else { fragColor = color; }}" 98 - ], 99 - "compiledVertexShaders": [ 100 - "#version 300 es\nprecision mediump float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat4 uTextureMatrix;out vec2 vTextureCoord; out vec3 vVertexPosition;void main() { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy; }" 101 - ], 102 - "data": { 103 - "depth": false, 104 - "passes": [ 105 - { "prop": "pass", "value": 1 }, 106 - { "prop": "pass", "value": 2, "includeBg": true } 107 - ] 108 - } 109 - }, 110 - { 111 - "local": { 112 - "id": "20e575d8-3ec1-4358-bafb-80f41e61c84f", 113 - "canvas": {}, 114 - "ctx": {} 115 - }, 116 - "visible": true, 117 - "locked": false, 118 - "aspectRatio": 1, 119 - "isElement": true, 120 - "opacity": 1, 121 - "displace": 0, 122 - "trackMouse": 0, 123 - "mouseMomentum": 0, 124 - "blendMode": "NORMAL", 125 - "bgDisplace": 0, 126 - "mask": 0, 127 - "maskBackground": { "type": "Vec3", "_x": 0, "_y": 0, "_z": 0 }, 128 - "maskAlpha": 0, 129 - "dispersion": 0, 130 - "axisTilt": 0, 131 - "layerType": "text", 132 - "justCreated": false, 133 - "effects": [ 134 - "3c344a98-bd2f-46e2-ae2a-855724224722", 135 - "0f00febc-947c-4b79-b122-33fb81bd772d" 136 - ], 137 - "fill": ["#FFFFFF"], 138 - "highlight": ["transparent"], 139 - "fontSize": 100, 140 - "fontCSS": { 141 - "family": "DM Serif Display", 142 - "src": "https://assets.unicorn.studio/fonts/google_fonts/-nFnOHM81r4j6k0gjAW3mujVU2B2K_d709jy92k.ttf" 143 - }, 144 - "lineHeight": 153.63267957308966, 145 - "letterSpacing": 3, 146 - "fontFamily": "DM Serif Display", 147 - "fontStyle": "regular", 148 - "fontWeight": "400", 149 - "textAlign": "center", 150 - "textContent": "UNRAVEL", 151 - "gradientAngle": 0, 152 - "gradientType": "linear", 153 - "coords": [ 154 - [0, 0], 155 - [680, 0], 156 - [680, 153.63267957308966], 157 - [0, 153.63267957308966] 158 - ], 159 - "rotation": 0, 160 - "translateX": -65.73883917348076, 161 - "translateY": 169, 162 - "width": 680, 163 - "height": 153.63267957308966, 164 - "isSafari": false, 165 - "compiledFragmentShaders": [ 166 - "#version 300 es\nprecision mediump float; in vec2 vTextureCoord; in vec3 vVertexPosition;uniform sampler2D uBgTexture; uniform sampler2D uTexture; uniform vec2 uMousePos; uniform vec2 uResolution; uniform int uSampleBg;vec2 perspectiveUV(vec2 uv) { float aspectRatio = uResolution.x/uResolution.y; vec2 centeredUV = uv - 0.5; centeredUV.x *= aspectRatio; float strength = 1.0 + (vVertexPosition.z * 0.00); vec2 perspectiveUV = centeredUV / strength; perspectiveUV.x /= aspectRatio; perspectiveUV += 0.5; return perspectiveUV; }out vec4 fragColor;void main() { vec2 uv = vTextureCoord; vec2 pos = mix(vec2(0), (uMousePos - 0.5), 0.00); uv = perspectiveUV(uv) - pos; vec4 color = texture(uTexture, uv); vec4 background = uSampleBg == 1 ? texture(uBgTexture, vTextureCoord) : vec4(0);color = mix(background, color/(color.a + 0.00000001), color.a * 1.00);fragColor = color; }" 167 - ], 168 - "compiledVertexShaders": [ 169 - "#version 300 es\nprecision mediump float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat4 uTextureMatrix; uniform vec2 uMousePos;out vec2 vTextureCoord; out vec3 vVertexPosition;void main() { float angleX = uMousePos.y * 0.5 - 0.25; float angleY = (1.-uMousePos.x) * 0.5 - 0.25; mat4 rotateX = mat4(1.0, 0.0, 0.0, 0.0, 0.0, cos(angleX), -sin(angleX), 0.0, 0.0, sin(angleX), cos(angleX), 0.0, 0.0, 0.0, 0.0, 1.0); mat4 rotateY = mat4(cos(angleY), 0.0, sin(angleY), 0.0, 0.0, 1.0, 0.0, 0.0, -sin(angleY), 0.0, cos(angleY), 0.0, 0.0, 0.0, 0.0, 1.0);mat4 rotationMatrix = rotateX * rotateY; gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vVertexPosition = (rotationMatrix * vec4(aVertexPosition, 1.0)).xyz; vTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy; }" 170 - ] 171 - }, 172 - { 173 - "visible": true, 174 - "aspectRatio": 1, 175 - "layerType": "effect", 176 - "type": "blinds", 177 - "speed": 0.26, 178 - "mouseMomentum": 0, 179 - "texture": false, 180 - "animating": true, 181 - "isMask": 0, 182 - "compiledFragmentShaders": [ 183 - "#version 300 es\nprecision mediump float; in vec2 vTextureCoord;uniform sampler2D uTexture; uniform float uTime;uniform sampler2D uMaskTexture; uniform float uAspectRatio; uniform vec2 uMousePos; uniform vec2 uResolution;float ease (int easingFunc, float t) { return t; }const float STEPS = 10.0;const float PI = 3.14159265359;mat2 rot(float a) { return mat2(cos(a), -sin(a), sin(a), cos(a)); }vec3 chromatic_abberation(vec2 st, vec2 aberrated) { vec4 red = vec4(0); vec4 blue = vec4(0); vec4 green = vec4(0);float invSteps = 1.0 / STEPS; float invStepsHalf = invSteps * 0.5;for(float i = 1.0; i <= STEPS; i++) { vec2 offset = aberrated * (i * invSteps); red += texture(uTexture, st - offset) * invSteps; blue += texture(uTexture, st + offset) * invSteps; green += texture(uTexture, st - offset * 0.5) * invStepsHalf; green += texture(uTexture, st + offset * 0.5) * invStepsHalf; }return vec3(red.r, green.g, blue.b); }vec2 scaleAspect(vec2 st, float aspectRatio) { return st * vec2(aspectRatio, 1.0); }vec2 unscaleAspect(vec2 st, float aspectRatio) { return st * vec2(1.0/aspectRatio, 1.0); }vec2 rotate(vec2 st, float angle) { float s = sin(angle); float c = cos(angle); mat2 rot = mat2(c, -s, s, c); return rot * st; }vec4 blinds(vec2 st, float mDist) { float aspectRatio = uResolution.x/uResolution.y; vec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.00) * floor(1.00); pos = scaleAspect(pos, aspectRatio); st = scaleAspect(st, aspectRatio); st = rotate(st - pos, -0.00 * 2.0 * PI) + pos;vec3 distort = vec3(0); float divisions = 2. + 0.09 * 30.; float dist = 0.50 * 4. + 1.; float segment = 0.;float amount = 0.32 * mDist;vec3 first = vec3(1,0,0); vec3 second = vec3(0,1,0); vec3 third = vec3(0,0,1); if(0 == 0) { segment = fract((st.y + 1. - pos.y - 1. + uTime*0.01) * divisions); distort = mix(mix(first, second, segment*2.), mix(second, third, (segment - 0.5)/(1. - 0.5)), step(0.5, segment)); st.y -= pow(distort.r, dist)/10. * amount; st.y += pow(distort.b, dist)/10. * amount; } else if(0 == 1) { segment = fract((st.x + 1. - pos.x - 1. + uTime*0.01) * divisions); distort = mix(mix(first, second, segment*2.), mix(second, third, (segment - 0.5)/(1. - 0.5)), step(0.5, segment)); st.x -= pow(distort.r, dist)/10. * amount; st.x += pow(distort.b, dist)/10. * amount; } else if(0 == 2) { segment = fract((st.x + 1. - pos.x - 1. + uTime*0.01) * divisions); distort = mix(mix(first, second, segment*2.), mix(second, third, (segment - 0.5)/(1. - 0.5)), step(0.5, segment)); st.x -= pow(distort.r, dist)/10. * amount; st.x += pow(distort.b, dist)/10. * amount;segment = fract((st.y + 1. - pos.y - 1. + uTime*0.01) * divisions); distort = mix(mix(first, second, segment*2.), mix(second, third, (segment - 0.5)/(1. - 0.5)), step(0.5, segment)); st.y -= pow(distort.r, dist)/10. * amount; st.y += pow(distort.b, dist)/10. * amount; } else if(0 == 3) { vec2 diff = st - pos; float angle = atan(diff.y, diff.x); segment = fract((angle + uTime*0.01 + PI) / (2. * PI) * divisions);distort = mix(mix(first, second, segment*2.), mix(second, third, (segment - 0.5)/(1. - 0.5)), step(0.5, segment)); st -= pow(distort.r, dist)/10. * amount * normalize(diff); st += pow(distort.b, dist)/10. * amount * normalize(diff); } else if(0 == 4) { vec2 diff = st - pos; float radius = length(diff); segment = fract(radius * divisions - uTime*0.01);distort = mix(mix(first, second, segment*2.), mix(second, third, (segment - 0.5)/(1. - 0.5)), step(0.5, segment)); st -= pow(distort.r, dist)/10. * amount * normalize(diff); st += pow(distort.b, dist)/10. * amount * normalize(diff); } else if(0 == 5) { vec2 diff = st - pos; float angle = -PI/4.; vec2 rotatedDiff = vec2( diff.x * cos(angle) - diff.y * sin(angle), diff.x * sin(angle) + diff.y * cos(angle) );float manhattanDist = abs(rotatedDiff.x) + abs(rotatedDiff.y); segment = fract(manhattanDist * divisions - uTime*0.01); distort = mix(mix(first, second, segment*2.), mix(second, third, (segment - 0.5)/(1. - 0.5)), step(0.5, segment)); st -= pow(distort.r, dist)/10. * amount * normalize(diff); st += pow(distort.b, dist)/10. * amount * normalize(diff); }st = rot(0.00 * 2. * PI) * (st - pos) + pos; st = unscaleAspect(st, aspectRatio); vec4 col = texture(uTexture, st);if(0.00 > 0.) { vec2 offset = vec2(pow(distort.r, dist), pow(distort.b, dist)) * vec2(0.1) * amount * 0.50; col.rgb = chromatic_abberation(st, offset * 0.00); } return col; }out vec4 fragColor;void main() { vec2 uv = vTextureCoord; float aspectRatio = uResolution.x/uResolution.y;vec2 mPos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.00); vec2 pos = mPos; float mDist = ease(0, max(0.,1.-distance(uv * vec2(aspectRatio, 1), mPos * vec2(aspectRatio, 1)) * 4. * (1. - 1.00)));if(0 == 1) { mDist = max(0., (0.5 - mDist)); } else if(mDist < distance(uv, mPos)) { discard; }vec4 col = blinds(uv, mDist); if(0 == 1) { vec2 pos = mix(vec2(0), (uMousePos - 0.5), 0.00); vec4 maskColor = texture(uMaskTexture, vTextureCoord - pos); fragColor = col * (maskColor.a * maskColor.a); } else { fragColor = col; }}" 184 - ], 185 - "compiledVertexShaders": [ 186 - "#version 300 es\nprecision mediump float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat4 uTextureMatrix;out vec2 vTextureCoord; out vec3 vVertexPosition;void main() { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy; }" 187 - ], 188 - "data": { "depth": false } 189 - }, 190 - { 191 - "visible": true, 192 - "aspectRatio": 1, 193 - "layerType": "effect", 194 - "type": "ascii", 195 - "scale": 0.24, 196 - "texture": false, 197 - "animating": false, 198 - "mouseMomentum": 0, 199 - "isMask": 0, 200 - "states": { 201 - "appear": [ 202 - { 203 - "type": "appear", 204 - "id": "237cf198-155e-47ed-88d0-9ca6d65ded33", 205 - "prop": "scale", 206 - "value": 0, 207 - "transition": { 208 - "ease": "easeInOutQuart", 209 - "duration": 1000, 210 - "delay": 0 211 - }, 212 - "complete": false, 213 - "progress": 0, 214 - "initialStateSet": false, 215 - "uniformData": { "type": "1f", "name": "uScale" } 216 - } 217 - ], 218 - "scroll": [] 219 - }, 220 - "compiledFragmentShaders": [ 221 - "#version 300 es\nprecision mediump float;in vec3 vVertexPosition; in vec2 vTextureCoord; uniform sampler2D uTexture; uniform sampler2D uSprite; uniform float uScale; uniform int uShowBg; uniform sampler2D uMaskTexture; uniform float uAspectRatio; uniform vec2 uMousePos; uniform vec2 uResolution;out vec4 fragColor; void main() { vec2 uv = vTextureCoord; float aspectRatio = uResolution.x / uResolution.y;float gridSize = (uScale + 0.01) * 0.05;vec2 pixelatedCoord = vec2( floor(uv.x * aspectRatio / gridSize) * gridSize, floor(uv.y / gridSize) * gridSize ); pixelatedCoord.x /= aspectRatio;vec4 color = texture(uTexture, pixelatedCoord);float luminance = dot(color.rgb, vec3(0.2126, 0.7152, 0.0722)); luminance = mix(luminance, 1. - luminance, float(0));float scaleFactor = gridSize * 1./40.;float numSprites = 10.; float numGlyphRows = 6.; float spriteIndex = floor(luminance * numSprites); float glyphIndex = 5. - float(0);float normalizedSpriteSizeX = 1. / numSprites; float normalizedSpriteSizeY = 1. / numGlyphRows;vec2 spriteSheetUV = vec2( mod(min(9., spriteIndex), numSprites) * normalizedSpriteSizeX, glyphIndex / numGlyphRows );vec2 spriteSize = vec2(40. / aspectRatio, 40.) * scaleFactor; vec2 localOffset = mod(uv, spriteSize) / spriteSize;spriteSheetUV += vec2( localOffset.x * normalizedSpriteSizeX, localOffset.y * normalizedSpriteSizeY );vec4 spriteColor = texture(uSprite, spriteSheetUV);vec3 cc = (color.rgb - spriteIndex * 0.04) * 1.4; vec3 col = mix(cc, vec3(0, 1, 1), float(0)); vec3 dithered = mix(mix(vec3(0), vec3(1), float(0)), col, step(0.5, spriteColor.r)); color.rgb = dithered; if(0 == 1) { vec2 pos = mix(vec2(0), (uMousePos - 0.5), 0.00); vec4 maskColor = texture(uMaskTexture, vTextureCoord - pos); fragColor = color * (maskColor.a * maskColor.a); } else { fragColor = color; }}" 222 - ], 223 - "compiledVertexShaders": [ 224 - "#version 300 es\nprecision mediump float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat4 uTextureMatrix;out vec2 vTextureCoord; out vec3 vVertexPosition;void main() { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy; }" 225 - ], 226 - "data": { 227 - "depth": false, 228 - "texture": { 229 - "src": "https://assets.unicorn.studio/media/ascii_spritesheet_larger.png", 230 - "sampler": "uSprite" 231 - } 232 - } 233 - } 234 - ], 235 - "options": { 236 - "name": "Hero section", 237 - "fps": 60, 238 - "dpi": 2, 239 - "scale": 1, 240 - "includeLogo": false, 241 - "version": "1.2.6" 242 - }, 243 - "version": "1.2.6" 244 - }
-3
packages/unravel/eslint.config.mjs
··· 1 - import base from "@repo/eslint-config/next.js"; 2 - 3 - export default base;
-6
packages/unravel/lib/utils.ts
··· 1 - import { type ClassValue, clsx } from "clsx"; 2 - import { twMerge } from "tailwind-merge"; 3 - 4 - export function cn(...inputs: ClassValue[]) { 5 - return twMerge(clsx(inputs)); 6 - }
-4
packages/unravel/next.config.mjs
··· 1 - /** @type {import('next').NextConfig} */ 2 - const nextConfig = {}; 3 - 4 - export default nextConfig;
-33
packages/unravel/package.json
··· 1 - { 2 - "name": "unravel", 3 - "version": "0.1.0", 4 - "private": true, 5 - "scripts": { 6 - "dev": "next dev --turbo", 7 - "build": "next build", 8 - "start": "next start", 9 - "lint": "eslint .", 10 - "type-check": "tsc --noEmit" 11 - }, 12 - "dependencies": { 13 - "clsx": "^2.1.1", 14 - "next": "catalog:", 15 - "next-themes": "^0.4.6", 16 - "react": "catalog:", 17 - "react-dom": "catalog:", 18 - "server-only": "^0.0.1", 19 - "tailwind-merge": "^2.6.0", 20 - "tailwindcss-animate": "^1.0.7" 21 - }, 22 - "devDependencies": { 23 - "@repo/eslint-config": "workspace:*", 24 - "@repo/typescript-config": "workspace:*", 25 - "@types/node": "catalog:", 26 - "@types/react": "catalog:", 27 - "@types/react-dom": "catalog:", 28 - "eslint": "catalog:", 29 - "postcss": "^8.5.6", 30 - "tailwindcss": "^3.4.17", 31 - "typescript": "catalog:" 32 - } 33 - }
-8
packages/unravel/postcss.config.mjs
··· 1 - /** @type {import('postcss-load-config').Config} */ 2 - const config = { 3 - plugins: { 4 - tailwindcss: {}, 5 - }, 6 - }; 7 - 8 - export default config;
-85
packages/unravel/tailwind.config.ts
··· 1 - import type { Config } from "tailwindcss"; 2 - import defaultTheme from "tailwindcss/defaultTheme"; 3 - 4 - const config = { 5 - darkMode: ["class"], 6 - content: [ 7 - "./pages/**/*.{ts,tsx}", 8 - "./components/**/*.{ts,tsx}", 9 - "./app/**/*.{ts,tsx}", 10 - "./lib/**/*.{ts,tsx}", 11 - ], 12 - prefix: "", 13 - theme: { 14 - container: { 15 - center: true, 16 - padding: "2rem", 17 - screens: { 18 - "2xl": "1400px", 19 - }, 20 - }, 21 - extend: { 22 - colors: { 23 - border: "hsl(var(--border))", 24 - input: "hsl(var(--input))", 25 - ring: "hsl(var(--ring))", 26 - background: "hsl(var(--background))", 27 - foreground: "hsl(var(--foreground))", 28 - primary: { 29 - DEFAULT: "hsl(var(--primary))", 30 - foreground: "hsl(var(--primary-foreground))", 31 - }, 32 - secondary: { 33 - DEFAULT: "hsl(var(--secondary))", 34 - foreground: "hsl(var(--secondary-foreground))", 35 - }, 36 - destructive: { 37 - DEFAULT: "hsl(var(--destructive))", 38 - foreground: "hsl(var(--destructive-foreground))", 39 - }, 40 - muted: { 41 - DEFAULT: "hsl(var(--muted))", 42 - foreground: "hsl(var(--muted-foreground))", 43 - }, 44 - accent: { 45 - DEFAULT: "hsl(var(--accent))", 46 - foreground: "hsl(var(--accent-foreground))", 47 - }, 48 - popover: { 49 - DEFAULT: "hsl(var(--popover))", 50 - foreground: "hsl(var(--popover-foreground))", 51 - }, 52 - card: { 53 - DEFAULT: "hsl(var(--card))", 54 - foreground: "hsl(var(--card-foreground))", 55 - }, 56 - }, 57 - borderRadius: { 58 - lg: "var(--radius)", 59 - md: "calc(var(--radius) - 2px)", 60 - sm: "calc(var(--radius) - 4px)", 61 - }, 62 - keyframes: { 63 - "accordion-down": { 64 - from: { height: "0" }, 65 - to: { height: "var(--radix-accordion-content-height)" }, 66 - }, 67 - "accordion-up": { 68 - from: { height: "var(--radix-accordion-content-height)" }, 69 - to: { height: "0" }, 70 - }, 71 - }, 72 - animation: { 73 - "accordion-down": "accordion-down 0.2s ease-out", 74 - "accordion-up": "accordion-up 0.2s ease-out", 75 - }, 76 - fontFamily: { 77 - serif: ["var(--font-source_serif)", ...defaultTheme.fontFamily.serif], 78 - }, 79 - }, 80 - }, 81 - // eslint-disable-next-line @typescript-eslint/no-require-imports 82 - plugins: [require("tailwindcss-animate")], 83 - } satisfies Config; 84 - 85 - export default config;
-19
packages/unravel/tsconfig.json
··· 1 - { 2 - "extends": "@repo/typescript-config/nextjs.json", 3 - "compilerOptions": { 4 - "paths": { 5 - // TODO: Move this to subpath imports once https://github.com/microsoft/TypeScript/issues/52460 is resolved 6 - "@/*": ["./*"] 7 - } 8 - }, 9 - "include": [ 10 - "next-env.d.ts", 11 - "**/*.ts", 12 - "**/*.js", 13 - "**/*.tsx", 14 - "**/*.mjs", 15 - "**/*.mts", 16 - ".next/types/**/*.ts" 17 - ], 18 - "exclude": ["node_modules"] 19 - }
-494
pnpm-lock.yaml
··· 490 490 491 491 packages/typescript-config: {} 492 492 493 - packages/unravel: 494 - dependencies: 495 - clsx: 496 - specifier: ^2.1.1 497 - version: 2.1.1 498 - next: 499 - specifier: 'catalog:' 500 - version: 16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) 501 - next-themes: 502 - specifier: ^0.4.6 503 - version: 0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) 504 - react: 505 - specifier: 'catalog:' 506 - version: 19.2.3 507 - react-dom: 508 - specifier: 'catalog:' 509 - version: 19.2.3(react@19.2.3) 510 - server-only: 511 - specifier: ^0.0.1 512 - version: 0.0.1 513 - tailwind-merge: 514 - specifier: ^2.6.0 515 - version: 2.6.0 516 - tailwindcss-animate: 517 - specifier: ^1.0.7 518 - version: 1.0.7(tailwindcss@3.4.18(yaml@2.8.0)) 519 - devDependencies: 520 - '@repo/eslint-config': 521 - specifier: workspace:* 522 - version: link:../eslint-config 523 - '@repo/typescript-config': 524 - specifier: workspace:* 525 - version: link:../typescript-config 526 - '@types/node': 527 - specifier: 'catalog:' 528 - version: 22.19.3 529 - '@types/react': 530 - specifier: 'catalog:' 531 - version: 19.2.7 532 - '@types/react-dom': 533 - specifier: 'catalog:' 534 - version: 19.2.3(@types/react@19.2.7) 535 - eslint: 536 - specifier: 'catalog:' 537 - version: 9.39.2(jiti@1.21.7) 538 - postcss: 539 - specifier: ^8.5.6 540 - version: 8.5.6 541 - tailwindcss: 542 - specifier: ^3.4.17 543 - version: 3.4.18(yaml@2.8.0) 544 - typescript: 545 - specifier: 'catalog:' 546 - version: 5.9.3 547 - 548 493 packages: 549 494 550 495 '@alloc/quick-lru@5.2.0': ··· 1270 1215 '@ipld/dag-cbor@7.0.3': 1271 1216 resolution: {integrity: sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==} 1272 1217 1273 - '@isaacs/cliui@8.0.2': 1274 - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 1275 - engines: {node: '>=12'} 1276 - 1277 1218 '@jridgewell/gen-mapping@0.3.13': 1278 1219 resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 1279 1220 ··· 1463 1404 resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} 1464 1405 engines: {node: '>=8.0.0'} 1465 1406 1466 - '@pkgjs/parseargs@0.11.0': 1467 - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 1468 - engines: {node: '>=14'} 1469 - 1470 1407 '@radix-ui/number@1.1.1': 1471 1408 resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} 1472 1409 ··· 2851 2788 resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 2852 2789 engines: {node: '>=8'} 2853 2790 2854 - ansi-regex@6.2.2: 2855 - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} 2856 - engines: {node: '>=12'} 2857 - 2858 2791 ansi-styles@4.3.0: 2859 2792 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 2860 2793 engines: {node: '>=8'} ··· 2863 2796 resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 2864 2797 engines: {node: '>=10'} 2865 2798 2866 - ansi-styles@6.2.3: 2867 - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} 2868 - engines: {node: '>=12'} 2869 - 2870 - any-promise@1.3.0: 2871 - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 2872 - 2873 2799 anymatch@3.1.3: 2874 2800 resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 2875 2801 engines: {node: '>= 8'} 2876 - 2877 - arg@5.0.2: 2878 - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 2879 2802 2880 2803 argparse@2.0.1: 2881 2804 resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} ··· 3017 2940 resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 3018 2941 engines: {node: '>=6'} 3019 2942 3020 - camelcase-css@2.0.1: 3021 - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 3022 - engines: {node: '>= 6'} 3023 - 3024 2943 caniuse-lite@1.0.30001749: 3025 2944 resolution: {integrity: sha512-0rw2fJOmLfnzCRbkm8EyHL8SvI2Apu5UbnQuTsJ0ClgrH8hcwFooJ1s5R0EP8o8aVrFu8++ae29Kt9/gZAZp/Q==} 3026 2945 ··· 3070 2989 3071 2990 commander@2.20.3: 3072 2991 resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 3073 - 3074 - commander@4.1.1: 3075 - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 3076 - engines: {node: '>= 6'} 3077 2992 3078 2993 commander@9.5.0: 3079 2994 resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} ··· 3188 3103 detect-node-es@1.1.0: 3189 3104 resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} 3190 3105 3191 - didyoumean@1.2.2: 3192 - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 3193 - 3194 - dlv@1.1.3: 3195 - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 3196 - 3197 3106 doctrine@2.1.0: 3198 3107 resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 3199 3108 engines: {node: '>=0.10.0'} ··· 3317 3226 dunder-proto@1.0.1: 3318 3227 resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 3319 3228 engines: {node: '>= 0.4'} 3320 - 3321 - eastasianwidth@0.2.0: 3322 - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 3323 3229 3324 3230 electron-to-chromium@1.5.234: 3325 3231 resolution: {integrity: sha512-RXfEp2x+VRYn8jbKfQlRImzoJU01kyDvVPBmG39eU2iuRVhuS6vQNocB8J0/8GrIMLnPzgz4eW6WiRnJkTuNWg==} 3326 3232 3327 - emoji-regex@8.0.0: 3328 - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 3329 - 3330 3233 emoji-regex@9.2.2: 3331 3234 resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 3332 3235 ··· 3650 3553 resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} 3651 3554 engines: {node: '>= 0.4'} 3652 3555 3653 - foreground-child@3.3.1: 3654 - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 3655 - engines: {node: '>=14'} 3656 - 3657 3556 form-data@4.0.4: 3658 3557 resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} 3659 3558 engines: {node: '>= 6'} ··· 3715 3614 glob-parent@6.0.2: 3716 3615 resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 3717 3616 engines: {node: '>=10.13.0'} 3718 - 3719 - glob@10.4.5: 3720 - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 3721 - hasBin: true 3722 3617 3723 3618 globals@14.0.0: 3724 3619 resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} ··· 3886 3781 is-finalizationregistry@1.1.1: 3887 3782 resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} 3888 3783 engines: {node: '>= 0.4'} 3889 - 3890 - is-fullwidth-code-point@3.0.0: 3891 - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 3892 - engines: {node: '>=8'} 3893 3784 3894 3785 is-generator-function@1.1.0: 3895 3786 resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} ··· 3971 3862 resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} 3972 3863 engines: {node: '>= 0.4'} 3973 3864 3974 - jackspeak@3.4.3: 3975 - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 3976 - 3977 - jiti@1.21.7: 3978 - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} 3979 - hasBin: true 3980 - 3981 3865 jiti@2.6.1: 3982 3866 resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 3983 3867 hasBin: true ··· 4126 4010 resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} 4127 4011 engines: {node: '>= 12.0.0'} 4128 4012 4129 - lilconfig@3.1.3: 4130 - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 4131 - engines: {node: '>=14'} 4132 - 4133 - lines-and-columns@1.2.4: 4134 - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 4135 - 4136 4013 locate-path@6.0.0: 4137 4014 resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 4138 4015 engines: {node: '>=10'} ··· 4198 4075 minimist@1.2.8: 4199 4076 resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 4200 4077 4201 - minipass@7.1.2: 4202 - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 4203 - engines: {node: '>=16 || 14 >=14.17'} 4204 - 4205 4078 ms@2.1.3: 4206 4079 resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 4207 4080 ··· 4210 4083 4211 4084 multiformats@9.9.0: 4212 4085 resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} 4213 - 4214 - mz@2.7.0: 4215 - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 4216 4086 4217 4087 nanoid@3.3.11: 4218 4088 resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} ··· 4298 4168 resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 4299 4169 engines: {node: '>=0.10.0'} 4300 4170 4301 - object-hash@3.0.0: 4302 - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 4303 - engines: {node: '>= 6'} 4304 - 4305 4171 object-inspect@1.13.4: 4306 4172 resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 4307 4173 engines: {node: '>= 0.4'} ··· 4354 4220 resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 4355 4221 engines: {node: '>=10'} 4356 4222 4357 - package-json-from-dist@1.0.1: 4358 - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 4359 - 4360 4223 parent-module@1.0.1: 4361 4224 resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 4362 4225 engines: {node: '>=6'} ··· 4381 4244 path-parse@1.0.7: 4382 4245 resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 4383 4246 4384 - path-scurry@1.11.1: 4385 - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 4386 - engines: {node: '>=16 || 14 >=14.18'} 4387 - 4388 4247 path-to-regexp@6.2.1: 4389 4248 resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} 4390 4249 ··· 4402 4261 resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 4403 4262 engines: {node: '>=12'} 4404 4263 4405 - pify@2.3.0: 4406 - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 4407 - engines: {node: '>=0.10.0'} 4408 - 4409 4264 pino-abstract-transport@1.2.0: 4410 4265 resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} 4411 4266 ··· 4416 4271 resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==} 4417 4272 hasBin: true 4418 4273 4419 - pirates@4.0.7: 4420 - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} 4421 - engines: {node: '>= 6'} 4422 - 4423 4274 possible-typed-array-names@1.1.0: 4424 4275 resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} 4425 4276 engines: {node: '>= 0.4'} 4426 4277 4427 - postcss-import@15.1.0: 4428 - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 4429 - engines: {node: '>=14.0.0'} 4430 - peerDependencies: 4431 - postcss: ^8.0.0 4432 - 4433 - postcss-js@4.1.0: 4434 - resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} 4435 - engines: {node: ^12 || ^14 || >= 16} 4436 - peerDependencies: 4437 - postcss: ^8.4.21 4438 - 4439 - postcss-load-config@6.0.1: 4440 - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} 4441 - engines: {node: '>= 18'} 4442 - peerDependencies: 4443 - jiti: '>=1.21.0' 4444 - postcss: '>=8.0.9' 4445 - tsx: ^4.8.1 4446 - yaml: ^2.4.2 4447 - peerDependenciesMeta: 4448 - jiti: 4449 - optional: true 4450 - postcss: 4451 - optional: true 4452 - tsx: 4453 - optional: true 4454 - yaml: 4455 - optional: true 4456 - 4457 - postcss-nested@6.2.0: 4458 - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} 4459 - engines: {node: '>=12.0'} 4460 - peerDependencies: 4461 - postcss: ^8.2.14 4462 - 4463 4278 postcss-selector-parser@6.0.10: 4464 4279 resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} 4465 4280 engines: {node: '>=4'} 4466 4281 4467 - postcss-selector-parser@6.1.2: 4468 - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} 4469 - engines: {node: '>=4'} 4470 - 4471 - postcss-value-parser@4.2.0: 4472 - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 4473 - 4474 4282 postcss@8.4.31: 4475 4283 resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 4476 4284 engines: {node: ^10 || ^12 || >=14} ··· 4601 4409 resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} 4602 4410 engines: {node: '>=0.10.0'} 4603 4411 4604 - read-cache@1.0.0: 4605 - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 4606 - 4607 4412 readable-stream@4.7.0: 4608 4413 resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} 4609 4414 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} ··· 4756 4561 signal-exit@3.0.7: 4757 4562 resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 4758 4563 4759 - signal-exit@4.1.0: 4760 - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 4761 - engines: {node: '>=14'} 4762 - 4763 4564 slugify@1.6.6: 4764 4565 resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} 4765 4566 engines: {node: '>=8.0.0'} ··· 4801 4602 resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} 4802 4603 engines: {node: '>= 0.4'} 4803 4604 4804 - string-width@4.2.3: 4805 - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 4806 - engines: {node: '>=8'} 4807 - 4808 - string-width@5.1.2: 4809 - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 4810 - engines: {node: '>=12'} 4811 - 4812 4605 string.prototype.includes@2.0.1: 4813 4606 resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} 4814 4607 engines: {node: '>= 0.4'} ··· 4839 4632 resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 4840 4633 engines: {node: '>=8'} 4841 4634 4842 - strip-ansi@7.1.2: 4843 - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} 4844 - engines: {node: '>=12'} 4845 - 4846 4635 strip-bom@3.0.0: 4847 4636 resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 4848 4637 engines: {node: '>=4'} ··· 4868 4657 babel-plugin-macros: 4869 4658 optional: true 4870 4659 4871 - sucrase@3.35.0: 4872 - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 4873 - engines: {node: '>=16 || 14 >=14.17'} 4874 - hasBin: true 4875 - 4876 4660 supports-color@7.2.0: 4877 4661 resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 4878 4662 engines: {node: '>=8'} ··· 4889 4673 symbol-tree@3.2.4: 4890 4674 resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} 4891 4675 4892 - tailwind-merge@2.6.0: 4893 - resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} 4894 - 4895 4676 tailwind-merge@3.4.0: 4896 4677 resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} 4897 4678 4898 - tailwindcss-animate@1.0.7: 4899 - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} 4900 - peerDependencies: 4901 - tailwindcss: '>=3.0.0 || insiders' 4902 - 4903 - tailwindcss@3.4.18: 4904 - resolution: {integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==} 4905 - engines: {node: '>=14.0.0'} 4906 - hasBin: true 4907 - 4908 4679 tailwindcss@4.1.18: 4909 4680 resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} 4910 4681 ··· 4916 4687 resolution: {integrity: sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==} 4917 4688 engines: {node: '>=10'} 4918 4689 hasBin: true 4919 - 4920 - thenify-all@1.6.0: 4921 - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 4922 - engines: {node: '>=0.8'} 4923 - 4924 - thenify@3.3.1: 4925 - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 4926 4690 4927 4691 thread-stream@2.7.0: 4928 4692 resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} ··· 4962 4726 engines: {node: '>=18.12'} 4963 4727 peerDependencies: 4964 4728 typescript: '>=4.8.4' 4965 - 4966 - ts-interface-checker@0.1.13: 4967 - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 4968 4729 4969 4730 ts-morph@24.0.0: 4970 4731 resolution: {integrity: sha512-2OAOg/Ob5yx9Et7ZX4CvTCc0UFoZHwLEJ+dpDPSUi5TgwwlTlX47w+iFRrEwzUZwYACjq83cgjS/Da50Ga37uw==} ··· 5263 5024 word-wrap@1.2.5: 5264 5025 resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 5265 5026 engines: {node: '>=0.10.0'} 5266 - 5267 - wrap-ansi@7.0.0: 5268 - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 5269 - engines: {node: '>=10'} 5270 - 5271 - wrap-ansi@8.1.0: 5272 - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 5273 - engines: {node: '>=12'} 5274 5027 5275 5028 ws@8.18.3: 5276 5029 resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} ··· 5789 5542 eslint: 9.39.2(jiti@2.6.1) 5790 5543 eslint-visitor-keys: 3.4.3 5791 5544 5792 - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2(jiti@1.21.7))': 5793 - dependencies: 5794 - eslint: 9.39.2(jiti@1.21.7) 5795 - eslint-visitor-keys: 3.4.3 5796 - 5797 5545 '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2(jiti@2.6.1))': 5798 5546 dependencies: 5799 5547 eslint: 9.39.2(jiti@2.6.1) ··· 5966 5714 cborg: 1.10.2 5967 5715 multiformats: 9.9.0 5968 5716 5969 - '@isaacs/cliui@8.0.2': 5970 - dependencies: 5971 - string-width: 5.1.2 5972 - string-width-cjs: string-width@4.2.3 5973 - strip-ansi: 7.1.2 5974 - strip-ansi-cjs: strip-ansi@6.0.1 5975 - wrap-ansi: 8.1.0 5976 - wrap-ansi-cjs: wrap-ansi@7.0.0 5977 - 5978 5717 '@jridgewell/gen-mapping@0.3.13': 5979 5718 dependencies: 5980 5719 '@jridgewell/sourcemap-codec': 1.5.5 ··· 6140 5879 '@nolyfill/is-core-module@1.0.39': {} 6141 5880 6142 5881 '@opentelemetry/api@1.9.0': 6143 - optional: true 6144 - 6145 - '@pkgjs/parseargs@0.11.0': 6146 5882 optional: true 6147 5883 6148 5884 '@radix-ui/number@1.1.1': {} ··· 7516 7252 7517 7253 ansi-regex@5.0.1: {} 7518 7254 7519 - ansi-regex@6.2.2: {} 7520 - 7521 7255 ansi-styles@4.3.0: 7522 7256 dependencies: 7523 7257 color-convert: 2.0.1 7524 7258 7525 7259 ansi-styles@5.2.0: {} 7526 7260 7527 - ansi-styles@6.2.3: {} 7528 - 7529 - any-promise@1.3.0: {} 7530 - 7531 7261 anymatch@3.1.3: 7532 7262 dependencies: 7533 7263 normalize-path: 3.0.0 7534 7264 picomatch: 2.3.1 7535 - 7536 - arg@5.0.2: {} 7537 7265 7538 7266 argparse@2.0.1: {} 7539 7267 ··· 7700 7428 7701 7429 callsites@3.1.0: {} 7702 7430 7703 - camelcase-css@2.0.1: {} 7704 - 7705 7431 caniuse-lite@1.0.30001749: {} 7706 7432 7707 7433 cborg@1.10.2: {} ··· 7749 7475 7750 7476 commander@2.20.3: 7751 7477 optional: true 7752 - 7753 - commander@4.1.1: {} 7754 7478 7755 7479 commander@9.5.0: {} 7756 7480 ··· 7848 7572 7849 7573 detect-node-es@1.1.0: {} 7850 7574 7851 - didyoumean@1.2.2: {} 7852 - 7853 - dlv@1.1.3: {} 7854 - 7855 7575 doctrine@2.1.0: 7856 7576 dependencies: 7857 7577 esutils: 2.0.3 ··· 7898 7618 es-errors: 1.3.0 7899 7619 gopd: 1.2.0 7900 7620 7901 - eastasianwidth@0.2.0: {} 7902 - 7903 7621 electron-to-chromium@1.5.234: {} 7904 - 7905 - emoji-regex@8.0.0: {} 7906 7622 7907 7623 emoji-regex@9.2.2: {} 7908 7624 ··· 8261 7977 8262 7978 eslint-visitor-keys@4.2.1: {} 8263 7979 8264 - eslint@9.39.2(jiti@1.21.7): 8265 - dependencies: 8266 - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.7)) 8267 - '@eslint-community/regexpp': 4.12.1 8268 - '@eslint/config-array': 0.21.1 8269 - '@eslint/config-helpers': 0.4.2 8270 - '@eslint/core': 0.17.0 8271 - '@eslint/eslintrc': 3.3.1 8272 - '@eslint/js': 9.39.2 8273 - '@eslint/plugin-kit': 0.4.1 8274 - '@humanfs/node': 0.16.6 8275 - '@humanwhocodes/module-importer': 1.0.1 8276 - '@humanwhocodes/retry': 0.4.3 8277 - '@types/estree': 1.0.8 8278 - ajv: 6.12.6 8279 - chalk: 4.1.2 8280 - cross-spawn: 7.0.6 8281 - debug: 4.4.3 8282 - escape-string-regexp: 4.0.0 8283 - eslint-scope: 8.4.0 8284 - eslint-visitor-keys: 4.2.1 8285 - espree: 10.4.0 8286 - esquery: 1.6.0 8287 - esutils: 2.0.3 8288 - fast-deep-equal: 3.1.3 8289 - file-entry-cache: 8.0.0 8290 - find-up: 5.0.0 8291 - glob-parent: 6.0.2 8292 - ignore: 5.3.2 8293 - imurmurhash: 0.1.4 8294 - is-glob: 4.0.3 8295 - json-stable-stringify-without-jsonify: 1.0.1 8296 - lodash.merge: 4.6.2 8297 - minimatch: 3.1.2 8298 - natural-compare: 1.4.0 8299 - optionator: 0.9.4 8300 - optionalDependencies: 8301 - jiti: 1.21.7 8302 - transitivePeerDependencies: 8303 - - supports-color 8304 - 8305 7980 eslint@9.39.2(jiti@2.6.1): 8306 7981 dependencies: 8307 7982 '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) ··· 8452 8127 dependencies: 8453 8128 is-callable: 1.2.7 8454 8129 8455 - foreground-child@3.3.1: 8456 - dependencies: 8457 - cross-spawn: 7.0.6 8458 - signal-exit: 4.1.0 8459 - 8460 8130 form-data@4.0.4: 8461 8131 dependencies: 8462 8132 asynckit: 0.4.0 ··· 8528 8198 glob-parent@6.0.2: 8529 8199 dependencies: 8530 8200 is-glob: 4.0.3 8531 - 8532 - glob@10.4.5: 8533 - dependencies: 8534 - foreground-child: 3.3.1 8535 - jackspeak: 3.4.3 8536 - minimatch: 9.0.5 8537 - minipass: 7.1.2 8538 - package-json-from-dist: 1.0.1 8539 - path-scurry: 1.11.1 8540 8201 8541 8202 globals@14.0.0: {} 8542 8203 ··· 8696 8357 dependencies: 8697 8358 call-bound: 1.0.4 8698 8359 8699 - is-fullwidth-code-point@3.0.0: {} 8700 - 8701 8360 is-generator-function@1.1.0: 8702 8361 dependencies: 8703 8362 call-bound: 1.0.4 ··· 8778 8437 has-symbols: 1.1.0 8779 8438 set-function-name: 2.0.2 8780 8439 8781 - jackspeak@3.4.3: 8782 - dependencies: 8783 - '@isaacs/cliui': 8.0.2 8784 - optionalDependencies: 8785 - '@pkgjs/parseargs': 0.11.0 8786 - 8787 - jiti@1.21.7: {} 8788 - 8789 8440 jiti@2.6.1: {} 8790 8441 8791 8442 jose@5.10.0: {} ··· 8930 8581 lightningcss-win32-arm64-msvc: 1.30.2 8931 8582 lightningcss-win32-x64-msvc: 1.30.2 8932 8583 8933 - lilconfig@3.1.3: {} 8934 - 8935 - lines-and-columns@1.2.4: {} 8936 - 8937 8584 locate-path@6.0.0: 8938 8585 dependencies: 8939 8586 p-locate: 5.0.0 ··· 8987 8634 8988 8635 minimist@1.2.8: {} 8989 8636 8990 - minipass@7.1.2: {} 8991 - 8992 8637 ms@2.1.3: {} 8993 8638 8994 8639 multiformats@13.3.7: {} 8995 8640 8996 8641 multiformats@9.9.0: {} 8997 8642 8998 - mz@2.7.0: 8999 - dependencies: 9000 - any-promise: 1.3.0 9001 - object-assign: 4.1.1 9002 - thenify-all: 1.6.0 9003 - 9004 8643 nanoid@3.3.11: {} 9005 8644 9006 8645 napi-postinstall@0.3.0: {} ··· 9074 8713 9075 8714 object-assign@4.1.1: {} 9076 8715 9077 - object-hash@3.0.0: {} 9078 - 9079 8716 object-inspect@1.13.4: {} 9080 8717 9081 8718 object-keys@1.1.1: {} ··· 9145 8782 dependencies: 9146 8783 p-limit: 3.1.0 9147 8784 9148 - package-json-from-dist@1.0.1: {} 9149 - 9150 8785 parent-module@1.0.1: 9151 8786 dependencies: 9152 8787 callsites: 3.1.0 ··· 9165 8800 9166 8801 path-parse@1.0.7: {} 9167 8802 9168 - path-scurry@1.11.1: 9169 - dependencies: 9170 - lru-cache: 10.4.3 9171 - minipass: 7.1.2 9172 - 9173 8803 path-to-regexp@6.2.1: {} 9174 8804 9175 8805 pathe@2.0.3: {} ··· 9180 8810 9181 8811 picomatch@4.0.3: {} 9182 8812 9183 - pify@2.3.0: {} 9184 - 9185 8813 pino-abstract-transport@1.2.0: 9186 8814 dependencies: 9187 8815 readable-stream: 4.7.0 ··· 9203 8831 sonic-boom: 3.8.1 9204 8832 thread-stream: 2.7.0 9205 8833 9206 - pirates@4.0.7: {} 9207 - 9208 8834 possible-typed-array-names@1.1.0: {} 9209 8835 9210 - postcss-import@15.1.0(postcss@8.5.6): 9211 - dependencies: 9212 - postcss: 8.5.6 9213 - postcss-value-parser: 4.2.0 9214 - read-cache: 1.0.0 9215 - resolve: 1.22.10 9216 - 9217 - postcss-js@4.1.0(postcss@8.5.6): 9218 - dependencies: 9219 - camelcase-css: 2.0.1 9220 - postcss: 8.5.6 9221 - 9222 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.0): 9223 - dependencies: 9224 - lilconfig: 3.1.3 9225 - optionalDependencies: 9226 - jiti: 1.21.7 9227 - postcss: 8.5.6 9228 - yaml: 2.8.0 9229 - 9230 - postcss-nested@6.2.0(postcss@8.5.6): 9231 - dependencies: 9232 - postcss: 8.5.6 9233 - postcss-selector-parser: 6.1.2 9234 - 9235 8836 postcss-selector-parser@6.0.10: 9236 8837 dependencies: 9237 8838 cssesc: 3.0.0 9238 8839 util-deprecate: 1.0.2 9239 8840 9240 - postcss-selector-parser@6.1.2: 9241 - dependencies: 9242 - cssesc: 3.0.0 9243 - util-deprecate: 1.0.2 9244 - 9245 - postcss-value-parser@4.2.0: {} 9246 - 9247 8841 postcss@8.4.31: 9248 8842 dependencies: 9249 8843 nanoid: 3.3.11 ··· 9405 8999 '@types/react': 19.2.7 9406 9000 9407 9001 react@19.2.3: {} 9408 - 9409 - read-cache@1.0.0: 9410 - dependencies: 9411 - pify: 2.3.0 9412 9002 9413 9003 readable-stream@4.7.0: 9414 9004 dependencies: ··· 9631 9221 9632 9222 signal-exit@3.0.7: {} 9633 9223 9634 - signal-exit@4.1.0: {} 9635 - 9636 9224 slugify@1.6.6: {} 9637 9225 9638 9226 sonic-boom@3.8.1: ··· 9666 9254 es-errors: 1.3.0 9667 9255 internal-slot: 1.1.0 9668 9256 9669 - string-width@4.2.3: 9670 - dependencies: 9671 - emoji-regex: 8.0.0 9672 - is-fullwidth-code-point: 3.0.0 9673 - strip-ansi: 6.0.1 9674 - 9675 - string-width@5.1.2: 9676 - dependencies: 9677 - eastasianwidth: 0.2.0 9678 - emoji-regex: 9.2.2 9679 - strip-ansi: 7.1.2 9680 - 9681 9257 string.prototype.includes@2.0.1: 9682 9258 dependencies: 9683 9259 call-bind: 1.0.8 ··· 9736 9312 dependencies: 9737 9313 ansi-regex: 5.0.1 9738 9314 9739 - strip-ansi@7.1.2: 9740 - dependencies: 9741 - ansi-regex: 6.2.2 9742 - 9743 9315 strip-bom@3.0.0: {} 9744 9316 9745 9317 strip-final-newline@2.0.0: {} ··· 9753 9325 optionalDependencies: 9754 9326 '@babel/core': 7.28.4 9755 9327 9756 - sucrase@3.35.0: 9757 - dependencies: 9758 - '@jridgewell/gen-mapping': 0.3.13 9759 - commander: 4.1.1 9760 - glob: 10.4.5 9761 - lines-and-columns: 1.2.4 9762 - mz: 2.7.0 9763 - pirates: 4.0.7 9764 - ts-interface-checker: 0.1.13 9765 - 9766 9328 supports-color@7.2.0: 9767 9329 dependencies: 9768 9330 has-flag: 4.0.0 ··· 9776 9338 use-sync-external-store: 1.6.0(react@19.2.3) 9777 9339 9778 9340 symbol-tree@3.2.4: {} 9779 - 9780 - tailwind-merge@2.6.0: {} 9781 9341 9782 9342 tailwind-merge@3.4.0: {} 9783 9343 9784 - tailwindcss-animate@1.0.7(tailwindcss@3.4.18(yaml@2.8.0)): 9785 - dependencies: 9786 - tailwindcss: 3.4.18(yaml@2.8.0) 9787 - 9788 - tailwindcss@3.4.18(yaml@2.8.0): 9789 - dependencies: 9790 - '@alloc/quick-lru': 5.2.0 9791 - arg: 5.0.2 9792 - chokidar: 3.6.0 9793 - didyoumean: 1.2.2 9794 - dlv: 1.1.3 9795 - fast-glob: 3.3.3 9796 - glob-parent: 6.0.2 9797 - is-glob: 4.0.3 9798 - jiti: 1.21.7 9799 - lilconfig: 3.1.3 9800 - micromatch: 4.0.8 9801 - normalize-path: 3.0.0 9802 - object-hash: 3.0.0 9803 - picocolors: 1.1.1 9804 - postcss: 8.5.6 9805 - postcss-import: 15.1.0(postcss@8.5.6) 9806 - postcss-js: 4.1.0(postcss@8.5.6) 9807 - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.0) 9808 - postcss-nested: 6.2.0(postcss@8.5.6) 9809 - postcss-selector-parser: 6.1.2 9810 - resolve: 1.22.10 9811 - sucrase: 3.35.0 9812 - transitivePeerDependencies: 9813 - - tsx 9814 - - yaml 9815 - 9816 9344 tailwindcss@4.1.18: {} 9817 9345 9818 9346 tapable@2.3.0: {} ··· 9824 9352 commander: 2.20.3 9825 9353 source-map-support: 0.5.21 9826 9354 optional: true 9827 - 9828 - thenify-all@1.6.0: 9829 - dependencies: 9830 - thenify: 3.3.1 9831 - 9832 - thenify@3.3.1: 9833 - dependencies: 9834 - any-promise: 1.3.0 9835 9355 9836 9356 thread-stream@2.7.0: 9837 9357 dependencies: ··· 9868 9388 ts-api-utils@2.1.0(typescript@5.9.3): 9869 9389 dependencies: 9870 9390 typescript: 5.9.3 9871 - 9872 - ts-interface-checker@0.1.13: {} 9873 9391 9874 9392 ts-morph@24.0.0: 9875 9393 dependencies: ··· 10197 9715 stackback: 0.0.2 10198 9716 10199 9717 word-wrap@1.2.5: {} 10200 - 10201 - wrap-ansi@7.0.0: 10202 - dependencies: 10203 - ansi-styles: 4.3.0 10204 - string-width: 4.2.3 10205 - strip-ansi: 6.0.1 10206 - 10207 - wrap-ansi@8.1.0: 10208 - dependencies: 10209 - ansi-styles: 6.2.3 10210 - string-width: 5.1.2 10211 - strip-ansi: 7.1.2 10212 9718 10213 9719 ws@8.18.3(bufferutil@4.0.8)(utf-8-validate@6.0.3): 10214 9720 optionalDependencies: