From f809102377f203f1ea5290a02e686b00a63f24a6 Mon Sep 17 00:00:00 2001 From: Owais Jamil Date: Tue, 25 Aug 2026 01:06:44 -0500 Subject: [PATCH] feat: pwa --- ROADMAP.md | 19 +- TODO.md | 16 +- apps/web/e2e/pwa.spec.ts | 81 ++ apps/web/package.json | 7 +- apps/web/playwright.config.ts | 1 + apps/web/playwright.pwa.config.ts | 23 + apps/web/pwa-assets.config.ts | 3 + apps/web/src/app.html | 7 + apps/web/src/lib/PwaStatus.svelte | 127 ++ apps/web/src/routes/+layout.svelte | 4 +- apps/web/src/service-worker.ts | 63 + apps/web/static/apple-touch-icon-180x180.png | Bin 0 -> 1080 bytes apps/web/static/favicon.ico | Bin 0 -> 736 bytes apps/web/static/inkfinite-icon.svg | 8 + apps/web/static/manifest.webmanifest | 28 + apps/web/static/maskable-icon-512x512.png | Bin 0 -> 3565 bytes apps/web/static/pwa-192x192.png | Bin 0 -> 1501 bytes apps/web/static/pwa-512x512.png | Bin 0 -> 4406 bytes apps/web/static/pwa-64x64.png | Bin 0 -> 588 bytes apps/web/wrangler.jsonc | 6 + packages/wasm/src/index.ts | 3 +- pnpm-lock.yaml | 1143 +++++++++++++++++- pnpm-workspace.yaml | 12 +- 23 files changed, 1523 insertions(+), 28 deletions(-) create mode 100644 apps/web/e2e/pwa.spec.ts create mode 100644 apps/web/playwright.pwa.config.ts create mode 100644 apps/web/pwa-assets.config.ts create mode 100644 apps/web/src/lib/PwaStatus.svelte create mode 100644 apps/web/src/service-worker.ts create mode 100644 apps/web/static/apple-touch-icon-180x180.png create mode 100644 apps/web/static/favicon.ico create mode 100644 apps/web/static/inkfinite-icon.svg create mode 100644 apps/web/static/manifest.webmanifest create mode 100644 apps/web/static/maskable-icon-512x512.png create mode 100644 apps/web/static/pwa-192x192.png create mode 100644 apps/web/static/pwa-512x512.png create mode 100644 apps/web/static/pwa-64x64.png create mode 100644 apps/web/wrangler.jsonc diff --git a/ROADMAP.md b/ROADMAP.md index 70859ae..d5c91e6 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -30,7 +30,7 @@ rectangular cards; unsupported directives and assets are omitted with a warning. The supported syntax and fallback rules are documented in [Interoperability](/docs/reference/interoperability/) and covered by fixtures. -## Next: web installation and export workflows +## Current: web installation and export workflows ### Clipboard interoperability @@ -43,16 +43,15 @@ unavailable, Inkfinite downloads the PNG instead. ### PWA and offline operation -Make the existing local-first web editor installable rather than creating a -separate offline product. +The web editor is installable and keeps using Inkfinite's normal local document +repository. Its service worker caches the application shell, WebAssembly +runtime, and required static assets. Creating, editing, reopening, and exporting +local documents works without a network connection. -The PWA should cache the application shell, WebAssembly runtime, and required -static assets while continuing to use Inkfinite's normal local document -repository. Creating, editing, reopening, and exporting local documents should -continue to work without a network connection. - -Application updates must be explicit enough that cached application code does -not become an invisible second deployment state. +The app requests persistent browser storage when the platform supports it. A +waiting service worker shows an update prompt and activates only when the user +chooses to reload, so cached application code does not become an invisible +second deployment state. ## Distribution diff --git a/TODO.md b/TODO.md index 75b3676..4088589 100644 --- a/TODO.md +++ b/TODO.md @@ -39,17 +39,17 @@ ## PWA and offline web app -- [ ] Add a web app manifest with name, icons, start URL, display mode, and +- [x] Add a web app manifest with name, icons, start URL, display mode, and light/dark theme metadata -- [ ] Add installable application icons at the required sizes -- [ ] Add a service worker for the application shell and versioned static assets -- [ ] Cache the WASM runtime and other editor-critical assets for offline startup -- [ ] Keep documents in the existing local persistence layer rather than +- [x] Add installable application icons at the required sizes +- [x] Add a service worker for the application shell and versioned static assets +- [x] Cache the WASM runtime and other editor-critical assets for offline startup +- [x] Keep documents in the existing local persistence layer rather than introducing a second PWA-specific store -- [ ] Verify create, edit, save, close, reopen, and export while offline -- [ ] Define service-worker update behavior so stale application code cannot +- [x] Verify create, edit, save, close, reopen, and export while offline +- [x] Define service-worker update behavior so stale application code cannot silently remain active indefinitely -- [ ] Add Playwright coverage for first load, installation eligibility, cached +- [x] Add Playwright coverage for first load, installation eligibility, cached reload, offline reload, and application updates ## Release and distribution diff --git a/apps/web/e2e/pwa.spec.ts b/apps/web/e2e/pwa.spec.ts new file mode 100644 index 0000000..dd03a27 --- /dev/null +++ b/apps/web/e2e/pwa.spec.ts @@ -0,0 +1,81 @@ +import { expect, test } from './fixtures/editor'; + +test.describe.configure({ mode: 'serial' }); + +test('installs the app shell and requests persistent storage', async ({ page }) => { + await page.addInitScript(() => { + Object.defineProperty(StorageManager.prototype, 'persist', { + configurable: true, + value: async () => { + Reflect.set(globalThis, '__inkfinitePersistRequested', true); + return true; + } + }); + }); + + await page.goto('/app'); + await expect(page.getByRole('button', { name: 'Shapes', exact: true })).toBeVisible(); + + const manifest = await page.locator('link[rel="manifest"]').getAttribute('href'); + expect(manifest).toBe('/manifest.webmanifest'); + const manifestResponse = await page.request.get('/manifest.webmanifest'); + expect(manifestResponse.ok()).toBe(true); + expect((await manifestResponse.json()).icons).toEqual( + expect.arrayContaining([ + expect.objectContaining({ sizes: '192x192' }), + expect.objectContaining({ sizes: '512x512' }) + ]) + ); + + await page.evaluate(() => navigator.serviceWorker.ready); + await page.reload(); + expect(await page.evaluate(() => Boolean(navigator.serviceWorker.controller))).toBe(true); + expect(await page.evaluate(() => Reflect.get(globalThis, '__inkfinitePersistRequested'))).toBe( + true + ); +}); + +test('creates, reopens, and exports a board while offline', async ({ editor, page, context }) => { + await editor.open(); + await page.evaluate(() => navigator.serviceWorker.ready); + await page.reload(); + await expect(page.getByRole('button', { name: 'Shapes', exact: true })).toBeVisible(); + + await editor.createSelectedRectangle(); + await context.setOffline(true); + await page.reload({ waitUntil: 'domcontentloaded' }); + await expect(page.getByRole('button', { name: 'Shapes', exact: true })).toBeVisible(); + + await editor.createSelectedRectangle({ x: 540, y: 520 }, { x: 700, y: 630 }); + const downloadPromise = page.waitForEvent('download'); + await page.getByRole('button', { name: 'Export drawing' }).click(); + await page.getByRole('menuitem', { name: 'Export all shapes as SVG' }).click(); + const download = await downloadPromise; + expect(download.suggestedFilename()).toMatch(/\.svg$/); + + await page.reload({ waitUntil: 'domcontentloaded' }); + await expect(page.getByRole('button', { name: 'Shapes', exact: true })).toBeVisible(); + await context.setOffline(false); +}); + +test('offers an explicit reload when a service worker update is waiting', async ({ page }) => { + await page.goto('/app'); + await page.evaluate(() => navigator.serviceWorker.ready); + await page.reload(); + await expect(page.getByRole('button', { name: 'Shapes', exact: true })).toBeVisible(); + + await page.evaluate(async () => { + await navigator.serviceWorker.register(`/service-worker.js?update=${Date.now()}`); + }); + await expect + .poll(() => + page.evaluate(async () => Boolean((await navigator.serviceWorker.ready).waiting)) + ) + .toBe(true); + + const reloadButton = page.getByRole('button', { name: 'Update and reload' }); + await expect(reloadButton).toBeVisible(); + await expect(page).toHaveScreenshot('update-notice.png'); + await Promise.all([page.waitForEvent('framenavigated'), reloadButton.click()]); + await expect(page.getByRole('button', { name: 'Shapes', exact: true })).toBeVisible(); +}); diff --git a/apps/web/package.json b/apps/web/package.json index 1e910ad..2311f78 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -5,11 +5,13 @@ "type": "module", "scripts": { "prebuild": "pnpm --filter @inkfinite/wasm build", + "pwa:assets": "pwa-assets-generator --config pwa-assets.config.ts", "dev": "pnpm pagefind:dev && vite dev", "dev:plain": "vite dev", "pagefind:dev": "vite build && pagefind --site build --output-path static/pagefind --quiet", "build": "vite build && pagefind --site build --output-subdir pagefind", "preview": "vite preview", + "deploy": "wrangler pages deploy", "prepare": "svelte-kit sync || echo ''", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", @@ -17,6 +19,7 @@ "test:unit": "vitest", "test": "pnpm run test:unit -- --run", "test:e2e": "playwright test", + "test:pwa": "pnpm build && playwright test --config playwright.pwa.config.ts", "test:e2e:headed": "playwright test --headed", "test:e2e:ui": "playwright test --ui", "test:visual": "playwright test --grep @visual", @@ -40,6 +43,7 @@ "@sveltejs/kit": "^2.49.1", "@sveltejs/vite-plugin-svelte": "^6.2.1", "@types/node": "^24", + "@vite-pwa/assets-generator": "^1.0.2", "@vitest/browser-playwright": "^4.0.15", "eslint": "^9.39.1", "eslint-config-prettier": "^10.1.8", @@ -59,6 +63,7 @@ "vite": "^7.2.6", "vite-plugin-devtools-json": "^1.0.0", "vitest": "^4.0.15", - "vitest-browser-svelte": "^2.0.1" + "vitest-browser-svelte": "^2.0.1", + "wrangler": "^4.125.0" } } diff --git a/apps/web/playwright.config.ts b/apps/web/playwright.config.ts index 7a03b91..9413b62 100644 --- a/apps/web/playwright.config.ts +++ b/apps/web/playwright.config.ts @@ -2,6 +2,7 @@ import { defineConfig, devices } from '@playwright/test'; export default defineConfig({ testDir: './e2e', + testIgnore: 'pwa.spec.ts', fullyParallel: false, workers: 1, forbidOnly: Boolean(process.env.CI), diff --git a/apps/web/playwright.pwa.config.ts b/apps/web/playwright.pwa.config.ts new file mode 100644 index 0000000..d6e5c0a --- /dev/null +++ b/apps/web/playwright.pwa.config.ts @@ -0,0 +1,23 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + testMatch: 'pwa.spec.ts', + fullyParallel: false, + workers: 1, + reporter: 'list', + snapshotPathTemplate: '{testDir}/{testFilePath}-snapshots/{arg}-{projectName}{ext}', + expect: { toHaveScreenshot: { animations: 'disabled', caret: 'hide' } }, + use: { + ...devices['Desktop Chrome'], + baseURL: 'http://127.0.0.1:4375', + channel: 'chrome', + trace: 'retain-on-failure' + }, + projects: [{ name: 'chromium' }], + webServer: { + command: 'pnpm preview --host 127.0.0.1 --port 4375', + port: 4375, + reuseExistingServer: false + } +}); diff --git a/apps/web/pwa-assets.config.ts b/apps/web/pwa-assets.config.ts new file mode 100644 index 0000000..53bcf9d --- /dev/null +++ b/apps/web/pwa-assets.config.ts @@ -0,0 +1,3 @@ +import { defineConfig, minimal2023Preset } from '@vite-pwa/assets-generator/config'; + +export default defineConfig({ preset: minimal2023Preset, images: ['static/inkfinite-icon.svg'] }); diff --git a/apps/web/src/app.html b/apps/web/src/app.html index 3621a4c..34be5de 100644 --- a/apps/web/src/app.html +++ b/apps/web/src/app.html @@ -3,6 +3,13 @@ + + + + + + + diff --git a/apps/web/src/lib/PwaStatus.svelte b/apps/web/src/lib/PwaStatus.svelte new file mode 100644 index 0000000..361c083 --- /dev/null +++ b/apps/web/src/lib/PwaStatus.svelte @@ -0,0 +1,127 @@ + + +{#if updateAvailable} +
+ A new version of Inkfinite is ready. + +
+{/if} + + diff --git a/apps/web/src/routes/+layout.svelte b/apps/web/src/routes/+layout.svelte index 70d9479..554efc4 100644 --- a/apps/web/src/routes/+layout.svelte +++ b/apps/web/src/routes/+layout.svelte @@ -1,5 +1,5 @@ - Inkfinite - Infinite Canvas {@render children()} + diff --git a/apps/web/src/service-worker.ts b/apps/web/src/service-worker.ts new file mode 100644 index 0000000..bc8f5a9 --- /dev/null +++ b/apps/web/src/service-worker.ts @@ -0,0 +1,63 @@ +/// +/// +/// +/// + +import { build, files, prerendered, version } from '$service-worker'; + +const worker = self as unknown as ServiceWorkerGlobalScope; +const cacheName = `inkfinite-${version}`; +const precache = [...new Set([...build, ...files, ...prerendered])]; + +worker.addEventListener('install', (event) => { + event.waitUntil(caches.open(cacheName).then((cache) => cache.addAll(precache))); +}); + +worker.addEventListener('activate', (event) => { + event.waitUntil( + (async () => { + const oldCaches = (await caches.keys()).filter( + (name) => name.startsWith('inkfinite-') && name !== cacheName + ); + await Promise.all(oldCaches.map((name) => caches.delete(name))); + await worker.clients.claim(); + })() + ); +}); + +worker.addEventListener('message', (event) => { + if (event.data?.type === 'SKIP_WAITING') void worker.skipWaiting(); +}); + +worker.addEventListener('fetch', (event) => { + if (event.request.method !== 'GET') return; + + const url = new URL(event.request.url); + if (url.origin !== worker.location.origin) return; + + event.respondWith( + (async () => { + const cache = await caches.open(cacheName); + if (precache.includes(url.pathname)) { + const cached = await cache.match(url.pathname); + if (cached) return cached; + } + + try { + const response = await fetch(event.request); + if (response.ok) await cache.put(event.request, response.clone()); + return response; + } catch (error) { + const cached = await cache.match(event.request); + if (cached) return cached; + + if (event.request.mode === 'navigate') { + const appShell = await cache.match('/app'); + if (appShell) return appShell; + } + + throw error; + } + })() + ); +}); diff --git a/apps/web/static/apple-touch-icon-180x180.png b/apps/web/static/apple-touch-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a198d107286e404b21daf6a1518263e967f868 GIT binary patch literal 1080 zcmeAS@N?(olHy`uVBq!ia0y~yVAuk}9Lx+13|zwB7#J8BgaUj*T)Q&AfB*6O|NsBT zcKll2|MUKh-|LtY5*Zj6I14-?iy0W0Uw|;<*6N^a1_tIco-U3d6}R5rxgEx=$io`& zVa}ib`m48QJ#TaN*sOv!5$pU8C7bwhK+E&~rQf_#7 zd~->kQ5FB>gkMIXkp1094c}DlZ`_pXy|VD2$lRH`w#=Se%dNXIT3EZp{j+W9tTQ#< zbJL9P2mbFox3c>5*^F=Qn?-v~7A)kQdwIgN*%xG*)3~E9El}gl=yMA0KbIMCI?LqP z!i8?dGP9ye!t8ArKV`_rUr@B0^!CQbpHr$b7ESCH>iu>6^69X*Z9=i%Ez@iFyv^Ud zV4IWj{S4E)Yh9%$%fI=(|FY!Sn2QFivnH*+b(f_}eb&xhg(gy8pUoD0)GlVeS^n0= zH?7N--{gLqRp#`2R_%pzY2sVb)~ufO+G>I5_bJZ))1Ui)%a~iaI_>AZjQ%hdlO4f} zW%QqAtol{4ep*ua?8Q?H8|VId9BOZ}W#ga4|8}uOO0lfH`0Mq1NyQ2_Hm=y*9=F3Y zKK_XOS-1Ym)nhM~U6fq^-cxZ^?!}DV<@;lLHSXTZy?Dv&{();XmSM9OWoGY_S?zn# zz%2e~yXLK1HKm$Si!$@}b?|$CQM0luzHs(g_m2%OrxinwtQL7c^XGHFAI~>8s{Wc& z^6c2p{~gD(cS=jutBMqeh99@TAbs`_d+v=D5}Gf2+zk0Rdw>4%Dsfmmr*zUP>!9>6 z&tKh+WLWr0?^W-#+=>r6zIyF3jcW3b8qUqWE^Vg2?1J!uozlJ=eu{;h-LPxnQv-2F ztGPFo&o}>*jM=$+LD}Cv8{w#P&uS~`m{+CUzm$2x`U&ek`~TIxKUa6!F~4d4xA%9} z<%!A{^o!YMN}cVV$rp9ujoJKrwKCFH)?Z!2`A#gpP_*`1T>qu-2g~f=3+#SuLXA4)xU3BZ{@mcl1Pst!s|NWL4$EzpIQxI3@X1;}X`hiLK!Q>t7|MbV`@JE;HIT<3qqZeYUT8vZu`APhWj!JL7zy!tXmB z&Nr^C_7Cl<*)CSJZqfVMUuRFAdj0oDq_`Lu7EaktG3RcSb$>=9*Y7dm zRoiC0E{)yVesxdoE3fkYj;l-czjW^V$`jGV@nHUi1B)51Hy0i>l2*AOdN=rd70ZIH zOO2{{d;FM^+2W0b!kEHu{;@xBOTX^v5gu!`v#%R7_*34+jFK zHUA%r-Qn^}aT@DHJtp%vFs6L2eD~%0+XKcGW^;Y26GS^^FEQ)Z{-AhaT}8ch?5&Q~ z4z~;VSU^RCw*u^6S&YN#=~5 zZ+355Rb|O&BlyX5hk0Yj+xDjGdr!J@%=ol0m0@kA!R&iV72JE?Elp}#E-`7MIHO$& z)0*s-L&a(xiXV2J-@G5q`kCNGe2h^OYZG!q#3m z=-?^*U~wOl`L z-?{R6%~FYIPyOX**UZ|iBfGjF`S`ngv#N75d;&rk=clW-pR;Oh(B!?Y7`kR+=mWL* zFA=Th_ZYH;395@Mw!CqR^~5o+1Sa?H+;{D}t-e1lo%@~jxY2j*Wk%n<_Z4wnU-MK% oZ`bKN^;rRaPmjx`x_xBUd~|w8>v!MH3=9kmp00i_>zopr0C2E9Q~&?~ literal 0 HcmV?d00001 diff --git a/apps/web/static/inkfinite-icon.svg b/apps/web/static/inkfinite-icon.svg new file mode 100644 index 0000000..463618c --- /dev/null +++ b/apps/web/static/inkfinite-icon.svg @@ -0,0 +1,8 @@ + + Inkfinite + + + + + + diff --git a/apps/web/static/manifest.webmanifest b/apps/web/static/manifest.webmanifest new file mode 100644 index 0000000..b59f90f --- /dev/null +++ b/apps/web/static/manifest.webmanifest @@ -0,0 +1,28 @@ +{ + "name": "Inkfinite", + "short_name": "Inkfinite", + "description": "A local-first infinite canvas for drawing, diagramming, and vector editing.", + "start_url": "/app", + "scope": "/", + "display": "standalone", + "background_color": "#f7f8fb", + "theme_color": "#8a69f7", + "icons": [ + { + "src": "/pwa-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/pwa-512x512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "/maskable-icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/apps/web/static/maskable-icon-512x512.png b/apps/web/static/maskable-icon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..c3488350e89e094182b1f0356f8015598c1e1dab GIT binary patch literal 3565 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 literal 0 HcmV?d00001 diff --git a/apps/web/static/pwa-512x512.png b/apps/web/static/pwa-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..00c047975ae7936f88b7bbe42cca4d599154e201 GIT binary patch literal 4406 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 p-*o?xW_pAxfB)ad&7Kis`amGQ zDlWQ=LGZ)ppNhG!H@#oBwl@BnuR;8oj%h+0X9cdE`8VmJoR~rwp@? zJzu!Ne+h%Zq4jFdUj7R!v{}LY=3{aKs^9yys=r zv~b;)$2}kH+_^UGWtd!Ix6SnGs|TwldnI3Z-LUzzyH>;O^2Qodp6i9uJKZjFVdQ&MBb@0GfXj5dZ)H literal 0 HcmV?d00001 diff --git a/apps/web/wrangler.jsonc b/apps/web/wrangler.jsonc new file mode 100644 index 0000000..d24f16e --- /dev/null +++ b/apps/web/wrangler.jsonc @@ -0,0 +1,6 @@ +{ + "$schema": "./node_modules/wrangler/config-schema.json", + "name": "inkfinite-app", + "pages_build_output_dir": "./build", + "compatibility_date": "2026-08-25" +} diff --git a/packages/wasm/src/index.ts b/packages/wasm/src/index.ts index f14a177..57e67e6 100644 --- a/packages/wasm/src/index.ts +++ b/packages/wasm/src/index.ts @@ -271,8 +271,9 @@ export function resetWasmModuleForTests() { async function loadModule(): Promise { modulePromise ??= (async () => { const generatedUrl = new URL('../dist/inkfinite_wasm.js', import.meta.url); + const wasmUrl = new URL('../dist/inkfinite_wasm_bg.wasm', import.meta.url); const generated = (await import(/* @vite-ignore */ generatedUrl.href)) as GeneratedWasmModule; - await generated.default(); + await generated.default(wasmUrl); return generated; })(); return modulePromise; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dd6cec5..15b7fc8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -115,6 +115,9 @@ importers: '@types/node': specifier: ^24 version: 24.10.4 + '@vite-pwa/assets-generator': + specifier: ^1.0.2 + version: 1.0.2 '@vitest/browser-playwright': specifier: ^4.0.15 version: 4.0.16(playwright@1.61.1)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.8.2))(vitest@4.0.16) @@ -175,6 +178,9 @@ importers: vitest-browser-svelte: specifier: ^2.0.1 version: 2.0.1(svelte@5.46.0)(vitest@4.0.16) + wrangler: + specifier: ^4.125.0 + version: 4.125.0 packages/bindings: {} @@ -461,12 +467,62 @@ packages: '@bomb.sh/args@0.3.1': resolution: {integrity: sha512-CwxKrfgcorUPP6KfYD59aRdBYWBTsfsxT+GmoLVnKo5Tmyoqbpo0UNcjngRMyU+6tiPbd18RuIYxhgAn44wU/Q==} + '@canvas/image-data@1.1.0': + resolution: {integrity: sha512-QdObRRjRbcXGmM1tmJ+MrHcaz1MftF2+W7YI+MsphnsCrmtyfS0d5qJbk0MeSbUeyM/jCb0hmnkXPsy026L7dA==} + '@clack/core@0.5.0': resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==} '@clack/prompts@0.11.0': resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} + '@cloudflare/kv-asset-handler@0.5.0': + resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==} + engines: {node: '>=22.0.0'} + + '@cloudflare/unenv-preset@2.16.1': + resolution: {integrity: sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==} + peerDependencies: + unenv: 2.0.0-rc.24 + workerd: '>1.20260305.0 <2.0.0-0' + peerDependenciesMeta: + workerd: + optional: true + + '@cloudflare/workerd-darwin-64@1.20260820.1': + resolution: {integrity: sha512-5F2/t7SVnugG3rscSe9da1LoHst+GiuVGPaE9BP6j5AonlFpiYi0eoJrl3wof9zDBIIgJZ87NjRj9TKjbbYgHg==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@cloudflare/workerd-darwin-arm64@1.20260820.1': + resolution: {integrity: sha512-jFnG7715+r9FXRZPpuWWe5Ayd9v/IJKDODARg56ffFJWWtte6bFNi5VY3GazBM04hEmxny6OjXQBh3j2E/wNZw==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@cloudflare/workerd-linux-64@1.20260820.1': + resolution: {integrity: sha512-TbTYaCBht0OaOWmnVpg43hXVYtIti/Kg6lvO819H2DwbxPpK1BH0z2C+Y7ySrVJLlxZQeic5eN7/noqbP80hJg==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@cloudflare/workerd-linux-arm64@1.20260820.1': + resolution: {integrity: sha512-FQmri1UF7hBnnpeyC5SZJCAnsSRs3+Ykn9wlO5zxmE2qIgKfbJZ+toJ6qrQyugWlxE65juT33HU6aYLtutLJHw==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@cloudflare/workerd-windows-64@1.20260820.1': + resolution: {integrity: sha512-BPvCuMxIQfA47wtYsGbBG6Bcar57Qs7yHqU2jWkT1+sRnL/741/ZbQGP9kVRMQ5fwBMuqNFmQRzAu8gSm7ri/w==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + '@csstools/color-helpers@5.1.0': resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} engines: {node: '>=18'} @@ -542,6 +598,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.28.2': resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} engines: {node: '>=18'} @@ -554,6 +616,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.28.2': resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==} engines: {node: '>=18'} @@ -566,6 +634,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.28.2': resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==} engines: {node: '>=18'} @@ -578,6 +652,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.28.2': resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==} engines: {node: '>=18'} @@ -590,6 +670,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.28.2': resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==} engines: {node: '>=18'} @@ -602,6 +688,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.28.2': resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==} engines: {node: '>=18'} @@ -614,6 +706,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.28.2': resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==} engines: {node: '>=18'} @@ -626,6 +724,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.28.2': resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==} engines: {node: '>=18'} @@ -638,6 +742,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.28.2': resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==} engines: {node: '>=18'} @@ -650,6 +760,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.28.2': resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==} engines: {node: '>=18'} @@ -662,6 +778,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.28.2': resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==} engines: {node: '>=18'} @@ -674,6 +796,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.28.2': resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==} engines: {node: '>=18'} @@ -686,6 +814,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.28.2': resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==} engines: {node: '>=18'} @@ -698,6 +832,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.28.2': resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==} engines: {node: '>=18'} @@ -710,6 +850,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.28.2': resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==} engines: {node: '>=18'} @@ -722,6 +868,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.28.2': resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==} engines: {node: '>=18'} @@ -734,6 +886,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.28.2': resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==} engines: {node: '>=18'} @@ -746,6 +904,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.28.2': resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==} engines: {node: '>=18'} @@ -758,6 +922,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.28.2': resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==} engines: {node: '>=18'} @@ -770,6 +940,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.28.2': resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==} engines: {node: '>=18'} @@ -782,6 +958,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.28.2': resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==} engines: {node: '>=18'} @@ -794,6 +976,12 @@ packages: cpu: [arm64] os: [openharmony] + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.28.2': resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==} engines: {node: '>=18'} @@ -806,6 +994,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.28.2': resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==} engines: {node: '>=18'} @@ -818,6 +1012,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.28.2': resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==} engines: {node: '>=18'} @@ -830,6 +1030,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.28.2': resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} engines: {node: '>=18'} @@ -842,6 +1048,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.28.2': resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} engines: {node: '>=18'} @@ -959,6 +1171,285 @@ packages: '@iconify/utils@3.1.4': resolution: {integrity: sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-arm64@0.35.2': + resolution: {integrity: sha512-eEieHsMksAW4IiO5NzauESRl2D2qz3J/kwUxUrSfV06A93eEaRfMpHXyUb1mAqrR7i8U9A0GRqE9pjn6u1Jjpg==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-darwin-x64@0.35.2': + resolution: {integrity: sha512-BaktuGPCeHJMARpodR8jK4uKiZrPAy9WrfQW0sdI37clracq8Bp01AYS3SZgi5FS/y5twa9t4+LIuuxQjqRrWw==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [darwin] + + '@img/sharp-freebsd-wasm32@0.35.2': + resolution: {integrity: sha512-YoAxdnd8hPUkvLHd3bWY+YA8nw3xM/RyRopYucNsWHVSan8NLVM3X2volsfoRDcXdUJPg6tXahSd7HXPK7lRnw==} + engines: {node: '>=20.9.0'} + os: [freebsd] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.3.1': + resolution: {integrity: sha512-4V/M3roRMTYjiwZY9IOVQOE8OyeCxFAkYmyZDrZl51uOKjibm3oeEJ4WAmLxutAfzFbC9jqUiPs2gbnGflH+7g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.3.1': + resolution: {integrity: sha512-c0/DxItpJv2+dGhgycJBBgotdqruGYDvA79drdh0MD1dFpy7JzJ/PlXwi1H4rFf0eTy8tgbI91aHDnZIceY3jQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm64@1.3.1': + resolution: {integrity: sha512-JznefmcK9j1JKPz8AkQDh89kjojubyfOasWBPKfzMIhPwsgDy9evpE/naJTXXXmghS1iFwR8u/kTwh/I2/+GCw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.3.1': + resolution: {integrity: sha512-aGGy9aWzXgHBG7HNyQPWorZthlp7+x6fDRoPAQbGO3ThcttuTyKIx3NuSHb6zb4gBNq6/yNn9f1cy9nFKS/Vmg==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.3.1': + resolution: {integrity: sha512-1EkwGNCZk6iWNCMWqrvdJ+r1j0PT1zIz60CNPhYnJlK/zyeWqlsPZIe+ocBVqPF8k/Ssee/NCk+tE9Ryrko6ng==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.3.1': + resolution: {integrity: sha512-Ilays+w2bXdnxzxtQdmXR62u8o8GYa3eL4+Gr+1KiE4xperMZUslRaVPJwwPkzlHEjGfXAfRVAa/7CYCtSqsBw==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.3.1': + resolution: {integrity: sha512-VfBwVHQTbRoj4XlpA/KLZ7ltgMpz+4WSejFzQ+GnoImjo1PtEJ59QB2qR1xQEeRPYIkNrPIm2L4cICMvz4C2ew==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.3.1': + resolution: {integrity: sha512-+c8ukgwU62DS54nCAjw7keOfHUkmr0B5QHEdcOqRnodF/MNXJbVI8Eopoj4B/0H8Asr65I+A4Amrn7a85/md6A==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-arm64@1.3.1': + resolution: {integrity: sha512-qlKb/pwbkAi1WMsJrYHk7CuDrd12s27U2QnRhFYUoJNrRCmkosMTttuRFat/DDB3IlDm5qE1TJgZ4JDnHX8Ldw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.3.1': + resolution: {integrity: sha512-yO21HwoUVLN8Qa+/SBjQLMYwBWAVJjeGPNe+hc0OUeMeifEtJqu5a1c4HayE1nNpDih9y3/KkoltfkDodmKAlg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm64@0.35.2': + resolution: {integrity: sha512-af12Pnd0ZGu2HfP8NayB0kk6eC/lrfbQE6HlR4jD+34wdJ1Vw9TF6TMn6ZvffT+WgqVsl0hRbmNvz2u/23VmwA==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.35.2': + resolution: {integrity: sha512-SE4kzF2mepn6z+6E7L6lsV8FzuLL6IPQdyX8ZiwROAG/G8td+hP/m7FsFPwidtrF19gvajuC9l6TxAVcsA4S7A==} + engines: {node: '>=20.9.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.35.2': + resolution: {integrity: sha512-hYSBm7zcNtDCozCxQHYZJiu63b/bXsgRZuOxCIBZsStMM9Vap47iFHdbX4kCvQsblPB/k+clhELpdQJHQLSHvg==} + engines: {node: '>=20.9.0'} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.35.2': + resolution: {integrity: sha512-qQt0Kc13+Hoan/Awq/qMSQw3L+RI1NCRPgD5cUJ/1WSSmIoysLOc72jlRM3E0OHN9Yr313jgeQ2T+zW+F03QFA==} + engines: {node: '>=20.9.0'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.35.2': + resolution: {integrity: sha512-E4fLLfRPzDLlEeDaTzI98OFLcv++WL5ChLLMwPoVd0CIoZQqupBSNbOisPL5am9XsbQ9T84+iiMpUvbFtkunbA==} + engines: {node: '>=20.9.0'} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.35.2': + resolution: {integrity: sha512-gi0zFJJRLswfCZmHtJdikXPOc5u7qamSOS3NHedLqLd4W8Q0NqjdBr6TTRIgsfFjqfTsHFgdfvJ9LwqSgcHiAA==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-arm64@0.35.2': + resolution: {integrity: sha512-siWbOW1u6HFnFLrp0waKyW7VEf7jYvcDWdrXEFa8AkdAQgEvuu5Fz8/Y70w9EeqAdwDtfU012BhEHHaDqvQNzg==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.35.2': + resolution: {integrity: sha512-YBqMMcjDi4QGYiSn4vNOYBhmlC4z5AXqkOUUqI2e0AFA4urNv4ESgOgwNl3K+4etQhha0twXlzeF20bbULm9Yg==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-wasm32@0.35.2': + resolution: {integrity: sha512-Mrv4JQNYVQ94xH+jzZ9r+gowleN8mv2FTgKT+PI6bx5C0G8TdNYndu161pg2i7uoBwxy2ImPMHrJOM2LZef7Bw==} + engines: {node: '>=20.9.0'} + + '@img/sharp-webcontainers-wasm32@0.35.2': + resolution: {integrity: sha512-QNV27pxs9wpApEiCfvHM1RDoP1w1+2KrUWWDPEhEwg+latvOrfuhWrHWZKwdSFwU6jh3myjw/yOCRsUIuOft3g==} + engines: {node: '>=20.9.0'} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.35.2': + resolution: {integrity: sha512-BiVRYc/t6/Vl3e1hBx0hugG4oN9Pydf4fgMSpxTQJmwGUg/YoXTWHiFeRymHfCZzifxu4F4rpk/I67D0LQ20wQ==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-ia32@0.35.2': + resolution: {integrity: sha512-YYEhx9PImCC7T0tI8JDMi4DB9LwLCXCU5OWNYEXAxh5Q1ShKkyC6byxzoBJ3gEFDnH2lQckWuDe70G7mB2XJog==} + engines: {node: ^20.9.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@img/sharp-win32-x64@0.35.2': + resolution: {integrity: sha512-imoOyBcoM/iiUr4J6VPpCNjPnjvP/Gks95898yB8YqoGGYmHYbOyCuNv9FMhFgtaiHFGbHW8bxKqRV6VjtXThQ==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [win32] + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -975,6 +1466,9 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@mdx-js/react@3.1.1': resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} peerDependencies: @@ -1399,6 +1893,15 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@poppinss/colors@4.1.6': + resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} + + '@poppinss/dumper@0.6.5': + resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==} + + '@poppinss/exception@1.2.3': + resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} + '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} @@ -1607,6 +2110,13 @@ packages: cpu: [x64] os: [win32] + '@sindresorhus/is@7.2.0': + resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} + engines: {node: '>=18'} + + '@speed-highlight/core@1.2.24': + resolution: {integrity: sha512-qeW2e1l78afw8VhRPfPQ1Gjj+KU5XFQ/OFV5ti6eTa9bruO7mJyZtA4vw0ofqmA3tKCkROE9xLk3VZoeRc98nw==} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -2075,6 +2585,11 @@ packages: peerDependencies: vite: ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0-0 + '@vite-pwa/assets-generator@1.0.2': + resolution: {integrity: sha512-MCbrb508JZHqe7bUibmZj/lyojdhLRnfkmyXnkrCM2zVrjTgL89U8UEfInpKTvPeTnxsw2hmyZxnhsdNR6yhwg==} + engines: {node: '>=16.14.0'} + hasBin: true + '@vitest/browser-playwright@4.0.16': resolution: {integrity: sha512-I2Fy/ANdphi1yI46d15o0M1M4M0UJrUiVKkH5oKeRZZCdPg0fw/cfTKZzv9Ge9eobtJYp4BGblMzXdXH0vcl5g==} peerDependencies: @@ -2217,6 +2732,9 @@ packages: birpc@4.0.0: resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} + blake3-wasm@2.1.5: + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -2294,6 +2812,13 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -2314,6 +2839,10 @@ packages: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -2357,6 +2886,14 @@ packages: decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + decode-bmp@0.2.1: + resolution: {integrity: sha512-NiOaGe+GN0KJqi2STf24hfMkFitDUaIoUU3eKvP/wAbLe8o6FuW5n/x7MHPR0HKvBokp6MQY/j7w8lewEeVCIA==} + engines: {node: '>=8.6.0'} + + decode-ico@0.4.1: + resolution: {integrity: sha512-69NZfbKIzux1vBOd31al3XnMnH+2mqDhEgLdpygErm4d60N+UwA5Sq5WFjmEDQzumgB9fElojGwWG0vybVfFmA==} + engines: {node: '>=8.6'} + dedent-js@1.0.1: resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} @@ -2393,6 +2930,10 @@ packages: destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + devalue@5.6.1: resolution: {integrity: sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A==} @@ -2433,6 +2974,9 @@ packages: resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} engines: {node: '>=20.19.0'} + error-stack-parser-es@1.0.5: + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} + es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} @@ -2441,6 +2985,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.28.2: resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} engines: {node: '>=18'} @@ -2626,6 +3175,9 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} + ico-endec@0.1.6: + resolution: {integrity: sha512-ZdLU38ZoED3g1j3iEyzcQj+wAkY2xfWNkymszfJPoxucIUhK7NayQ+/C4Kv0nDFMIsbtbEHldv3V8PU494/ueQ==} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -2657,6 +3209,9 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + is-arrayish@0.3.4: + resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} + is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2808,6 +3363,10 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + miniflare@5.20260820.0-alpha: + resolution: {integrity: sha512-Bv1j2kcKKNwXLWuCx+j0xGt7z318mqQkJmEN6ellM9sCESbPBDTM9ofZMbKqx47jSnoGA3CiaUkAmzGVXUa/wQ==} + engines: {node: '>=22.0.0'} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2911,6 +3470,9 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -3134,9 +3696,25 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + set-cookie-parser@2.7.2: resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + sharp-ico@0.1.5: + resolution: {integrity: sha512-a3jODQl82NPp1d5OYb0wY+oFaPk7AvyxipIowCHk7pBsZCWgbe0yAkU2OOXdoH0ENyANhyOQbs9xkAiRHcF02Q==} + + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + sharp@0.35.2: + resolution: {integrity: sha512-FVtFjtBCMiJS6yb5CX7Sop45WFMpeGw6oRKuJnXYgf/f1ms/D7LE/ZUSNxnW7rZ/dbslQWYkoqFHGPaDBtaK4w==} + engines: {node: '>=20.9.0'} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -3148,6 +3726,9 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + simple-swizzle@0.2.4: + resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} + sirv@3.0.2: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} @@ -3196,6 +3777,10 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -3271,6 +3856,9 @@ packages: resolution: {integrity: sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==} hasBin: true + to-data-view@1.1.0: + resolution: {integrity: sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -3375,6 +3963,13 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici@7.29.0: + resolution: {integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==} + engines: {node: '>=20.18.1'} + + unenv@2.0.0-rc.24: + resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} + unist-util-is@4.1.0: resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} @@ -3572,6 +4167,21 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + workerd@1.20260820.1: + resolution: {integrity: sha512-/wk4rFNHH6IVMXFe6aPEZsT5YWpWtfKTUMt7+rFkyeGbXcGCy4yxODmJatbqYj0jmqHETdz0+m2mT+vNjXnF7w==} + engines: {node: '>=16'} + hasBin: true + + wrangler@4.125.0: + resolution: {integrity: sha512-yFpvggu+xk1Hdm/Uxwaqa19bb7GArME4CrCS3Vov68a2TZq2MPO+wLocKbbnIC9K0oLowcdau7/ycxbbNHKCEg==} + engines: {node: '>=22.0.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^5.20260820.1 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + ws@8.18.3: resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} @@ -3584,6 +4194,18 @@ packages: utf-8-validate: optional: true + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + wsl-utils@0.1.0: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} @@ -3608,6 +4230,12 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + youch-core@0.3.3: + resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} + + youch@4.1.0-beta.10: + resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} + zimmerframe@1.1.4: resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} @@ -3673,6 +4301,8 @@ snapshots: '@bomb.sh/args@0.3.1': {} + '@canvas/image-data@1.1.0': {} + '@clack/core@0.5.0': dependencies: picocolors: 1.1.1 @@ -3684,6 +4314,33 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 + '@cloudflare/kv-asset-handler@0.5.0': {} + + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260820.1)': + dependencies: + unenv: 2.0.0-rc.24 + optionalDependencies: + workerd: 1.20260820.1 + + '@cloudflare/workerd-darwin-64@1.20260820.1': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20260820.1': + optional: true + + '@cloudflare/workerd-linux-64@1.20260820.1': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20260820.1': + optional: true + + '@cloudflare/workerd-windows-64@1.20260820.1': + optional: true + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + '@csstools/color-helpers@5.1.0': {} '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': @@ -3770,156 +4427,234 @@ snapshots: '@esbuild/aix-ppc64@0.27.2': optional: true + '@esbuild/aix-ppc64@0.28.1': + optional: true + '@esbuild/aix-ppc64@0.28.2': optional: true '@esbuild/android-arm64@0.27.2': optional: true + '@esbuild/android-arm64@0.28.1': + optional: true + '@esbuild/android-arm64@0.28.2': optional: true '@esbuild/android-arm@0.27.2': optional: true + '@esbuild/android-arm@0.28.1': + optional: true + '@esbuild/android-arm@0.28.2': optional: true '@esbuild/android-x64@0.27.2': optional: true + '@esbuild/android-x64@0.28.1': + optional: true + '@esbuild/android-x64@0.28.2': optional: true '@esbuild/darwin-arm64@0.27.2': optional: true + '@esbuild/darwin-arm64@0.28.1': + optional: true + '@esbuild/darwin-arm64@0.28.2': optional: true '@esbuild/darwin-x64@0.27.2': optional: true + '@esbuild/darwin-x64@0.28.1': + optional: true + '@esbuild/darwin-x64@0.28.2': optional: true '@esbuild/freebsd-arm64@0.27.2': optional: true + '@esbuild/freebsd-arm64@0.28.1': + optional: true + '@esbuild/freebsd-arm64@0.28.2': optional: true '@esbuild/freebsd-x64@0.27.2': optional: true + '@esbuild/freebsd-x64@0.28.1': + optional: true + '@esbuild/freebsd-x64@0.28.2': optional: true '@esbuild/linux-arm64@0.27.2': optional: true + '@esbuild/linux-arm64@0.28.1': + optional: true + '@esbuild/linux-arm64@0.28.2': optional: true '@esbuild/linux-arm@0.27.2': optional: true + '@esbuild/linux-arm@0.28.1': + optional: true + '@esbuild/linux-arm@0.28.2': optional: true '@esbuild/linux-ia32@0.27.2': optional: true + '@esbuild/linux-ia32@0.28.1': + optional: true + '@esbuild/linux-ia32@0.28.2': optional: true '@esbuild/linux-loong64@0.27.2': optional: true + '@esbuild/linux-loong64@0.28.1': + optional: true + '@esbuild/linux-loong64@0.28.2': optional: true '@esbuild/linux-mips64el@0.27.2': optional: true + '@esbuild/linux-mips64el@0.28.1': + optional: true + '@esbuild/linux-mips64el@0.28.2': optional: true '@esbuild/linux-ppc64@0.27.2': optional: true + '@esbuild/linux-ppc64@0.28.1': + optional: true + '@esbuild/linux-ppc64@0.28.2': optional: true '@esbuild/linux-riscv64@0.27.2': optional: true + '@esbuild/linux-riscv64@0.28.1': + optional: true + '@esbuild/linux-riscv64@0.28.2': optional: true '@esbuild/linux-s390x@0.27.2': optional: true + '@esbuild/linux-s390x@0.28.1': + optional: true + '@esbuild/linux-s390x@0.28.2': optional: true '@esbuild/linux-x64@0.27.2': optional: true + '@esbuild/linux-x64@0.28.1': + optional: true + '@esbuild/linux-x64@0.28.2': optional: true '@esbuild/netbsd-arm64@0.27.2': optional: true + '@esbuild/netbsd-arm64@0.28.1': + optional: true + '@esbuild/netbsd-arm64@0.28.2': optional: true '@esbuild/netbsd-x64@0.27.2': optional: true + '@esbuild/netbsd-x64@0.28.1': + optional: true + '@esbuild/netbsd-x64@0.28.2': optional: true '@esbuild/openbsd-arm64@0.27.2': optional: true + '@esbuild/openbsd-arm64@0.28.1': + optional: true + '@esbuild/openbsd-arm64@0.28.2': optional: true '@esbuild/openbsd-x64@0.27.2': optional: true + '@esbuild/openbsd-x64@0.28.1': + optional: true + '@esbuild/openbsd-x64@0.28.2': optional: true '@esbuild/openharmony-arm64@0.27.2': optional: true + '@esbuild/openharmony-arm64@0.28.1': + optional: true + '@esbuild/openharmony-arm64@0.28.2': optional: true '@esbuild/sunos-x64@0.27.2': optional: true + '@esbuild/sunos-x64@0.28.1': + optional: true + '@esbuild/sunos-x64@0.28.2': optional: true '@esbuild/win32-arm64@0.27.2': optional: true + '@esbuild/win32-arm64@0.28.1': + optional: true + '@esbuild/win32-arm64@0.28.2': optional: true '@esbuild/win32-ia32@0.27.2': optional: true + '@esbuild/win32-ia32@0.28.1': + optional: true + '@esbuild/win32-ia32@0.28.2': optional: true '@esbuild/win32-x64@0.27.2': optional: true + '@esbuild/win32-x64@0.28.1': + optional: true + '@esbuild/win32-x64@0.28.2': optional: true @@ -4028,6 +4763,187 @@ snapshots: '@iconify/types': 2.0.0 import-meta-resolve: 4.2.0 + '@img/colour@1.1.0': {} + + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-arm64@0.35.2': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.3.1 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.35.2': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.3.1 + optional: true + + '@img/sharp-freebsd-wasm32@0.35.2': + dependencies: + '@img/sharp-wasm32': 0.35.2 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-arm64@1.3.1': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.3.1': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.3.1': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-arm@1.3.1': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.3.1': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.3.1': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.3.1': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.3.1': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.3.1': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.3.1': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm64@0.35.2': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.3.1 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-arm@0.35.2': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.3.1 + optional: true + + '@img/sharp-linux-ppc64@0.35.2': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.3.1 + optional: true + + '@img/sharp-linux-riscv64@0.35.2': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.3.1 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-s390x@0.35.2': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.3.1 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.35.2': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.3.1 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.35.2': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.3.1 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.35.2': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.3.1 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.11.2 + optional: true + + '@img/sharp-wasm32@0.35.2': + dependencies: + '@emnapi/runtime': 1.11.2 + optional: true + + '@img/sharp-webcontainers-wasm32@0.35.2': + dependencies: + '@img/sharp-wasm32': 0.35.2 + optional: true + + '@img/sharp-win32-arm64@0.35.2': + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-ia32@0.35.2': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.35.2': + optional: true + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -4047,6 +4963,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7)': dependencies: '@types/mdx': 2.0.14 @@ -4303,6 +5224,18 @@ snapshots: '@polka/url@1.0.0-next.29': {} + '@poppinss/colors@4.1.6': + dependencies: + kleur: 4.1.5 + + '@poppinss/dumper@0.6.5': + dependencies: + '@poppinss/colors': 4.1.6 + '@sindresorhus/is': 7.2.0 + supports-color: 10.2.2 + + '@poppinss/exception@1.2.3': {} + '@quansync/fs@1.0.0': dependencies: quansync: 1.0.0 @@ -4416,6 +5349,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.54.0': optional: true + '@sindresorhus/is@7.2.0': {} + + '@speed-highlight/core@1.2.24': {} + '@standard-schema/spec@1.1.0': {} '@storybook/addon-a11y@10.5.2(storybook@10.5.2(@types/react@19.2.17)(prettier@3.7.4)(react@19.2.7))': @@ -5073,6 +6010,15 @@ snapshots: unplugin-utils: 0.3.2 vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.8.2) + '@vite-pwa/assets-generator@1.0.2': + dependencies: + cac: 6.7.14 + colorette: 2.0.20 + consola: 3.4.2 + sharp: 0.33.5 + sharp-ico: 0.1.5 + unconfig: 7.5.0 + '@vitest/browser-playwright@4.0.16(playwright@1.61.1)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.8.2))(vitest@4.0.16)': dependencies: '@vitest/browser': 4.0.16(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.8.2))(vitest@4.0.16) @@ -5287,6 +6233,8 @@ snapshots: birpc@4.0.0: {} + blake3-wasm@2.1.5: {} + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -5378,6 +6326,16 @@ snapshots: color-name@1.1.4: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.4 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + colorette@2.0.20: {} concat-map@0.0.1: {} @@ -5390,6 +6348,8 @@ snapshots: cookie@0.6.0: {} + cookie@1.1.1: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -5426,6 +6386,17 @@ snapshots: decimal.js@10.6.0: {} + decode-bmp@0.2.1: + dependencies: + '@canvas/image-data': 1.1.0 + to-data-view: 1.1.0 + + decode-ico@0.4.1: + dependencies: + '@canvas/image-data': 1.1.0 + decode-bmp: 0.2.1 + to-data-view: 1.1.0 + dedent-js@1.0.1: {} deep-eql@5.0.2: {} @@ -5449,6 +6420,8 @@ snapshots: destr@2.0.5: {} + detect-libc@2.1.2: {} + devalue@5.6.1: {} dexie@4.2.1: {} @@ -5471,6 +6444,8 @@ snapshots: entities@8.0.0: {} + error-stack-parser-es@1.0.5: {} + es-module-lexer@1.7.0: {} esbuild@0.27.2: @@ -5502,6 +6477,35 @@ snapshots: '@esbuild/win32-ia32': 0.27.2 '@esbuild/win32-x64': 0.27.2 + esbuild@0.28.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 + esbuild@0.28.2: optionalDependencies: '@esbuild/aix-ppc64': 0.28.2 @@ -5724,6 +6728,8 @@ snapshots: transitivePeerDependencies: - supports-color + ico-endec@0.1.6: {} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -5745,6 +6751,8 @@ snapshots: indent-string@4.0.0: {} + is-arrayish@0.3.4: {} + is-docker@3.0.0: {} is-extglob@2.1.1: {} @@ -5904,6 +6912,18 @@ snapshots: min-indent@1.0.1: {} + miniflare@5.20260820.0-alpha: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + sharp: 0.35.2 + undici: 7.29.0 + workerd: 1.20260820.1 + ws: 8.21.0 + youch: 4.1.0-beta.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -6078,6 +7098,8 @@ snapshots: path-key@3.1.1: {} + path-to-regexp@6.3.0: {} + pathe@2.0.3: {} pathval@2.0.1: {} @@ -6296,8 +7318,74 @@ snapshots: semver@7.7.3: {} + semver@7.8.5: {} + set-cookie-parser@2.7.2: {} + sharp-ico@0.1.5: + dependencies: + decode-ico: 0.4.1 + ico-endec: 0.1.6 + sharp: 0.33.5 + + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.1.2 + semver: 7.7.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + + sharp@0.35.2: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.35.2 + '@img/sharp-darwin-x64': 0.35.2 + '@img/sharp-freebsd-wasm32': 0.35.2 + '@img/sharp-libvips-darwin-arm64': 1.3.1 + '@img/sharp-libvips-darwin-x64': 1.3.1 + '@img/sharp-libvips-linux-arm': 1.3.1 + '@img/sharp-libvips-linux-arm64': 1.3.1 + '@img/sharp-libvips-linux-ppc64': 1.3.1 + '@img/sharp-libvips-linux-riscv64': 1.3.1 + '@img/sharp-libvips-linux-s390x': 1.3.1 + '@img/sharp-libvips-linux-x64': 1.3.1 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.1 + '@img/sharp-libvips-linuxmusl-x64': 1.3.1 + '@img/sharp-linux-arm': 0.35.2 + '@img/sharp-linux-arm64': 0.35.2 + '@img/sharp-linux-ppc64': 0.35.2 + '@img/sharp-linux-riscv64': 0.35.2 + '@img/sharp-linux-s390x': 0.35.2 + '@img/sharp-linux-x64': 0.35.2 + '@img/sharp-linuxmusl-arm64': 0.35.2 + '@img/sharp-linuxmusl-x64': 0.35.2 + '@img/sharp-webcontainers-wasm32': 0.35.2 + '@img/sharp-win32-arm64': 0.35.2 + '@img/sharp-win32-ia32': 0.35.2 + '@img/sharp-win32-x64': 0.35.2 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -6306,6 +7394,10 @@ snapshots: siginfo@2.0.0: {} + simple-swizzle@0.2.4: + dependencies: + is-arrayish: 0.3.4 + sirv@3.0.2: dependencies: '@polka/url': 1.0.0-next.29 @@ -6357,6 +7449,8 @@ snapshots: strip-json-comments@3.1.1: {} + supports-color@10.2.2: {} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -6441,6 +7535,8 @@ snapshots: dependencies: tldts-core: 7.0.19 + to-data-view@1.1.0: {} + totalist@3.0.1: {} tough-cookie@6.0.2: @@ -6550,6 +7646,12 @@ snapshots: undici-types@7.16.0: {} + undici@7.29.0: {} + + unenv@2.0.0-rc.24: + dependencies: + pathe: 2.0.3 + unist-util-is@4.1.0: {} unist-util-stringify-position@2.0.3: @@ -6670,7 +7772,7 @@ snapshots: vitest-browser-svelte@2.0.1(svelte@5.46.0)(vitest@4.0.16): dependencies: svelte: 5.46.0 - vitest: 4.0.16(@types/node@25.0.3)(@vitest/browser-playwright@4.0.16)(jiti@2.6.1)(jsdom@27.3.0)(tsx@4.23.12)(yaml@2.8.2) + vitest: 4.0.16(@types/node@24.10.4)(@vitest/browser-playwright@4.0.16)(jiti@2.6.1)(jsdom@27.3.0)(tsx@4.23.12)(yaml@2.8.2) vitest@4.0.16(@types/node@24.10.4)(@vitest/browser-playwright@4.0.16)(jiti@2.6.1)(jsdom@27.3.0)(tsx@4.23.12)(yaml@2.8.2): dependencies: @@ -6780,8 +7882,34 @@ snapshots: word-wrap@1.2.5: {} + workerd@1.20260820.1: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20260820.1 + '@cloudflare/workerd-darwin-arm64': 1.20260820.1 + '@cloudflare/workerd-linux-64': 1.20260820.1 + '@cloudflare/workerd-linux-arm64': 1.20260820.1 + '@cloudflare/workerd-windows-64': 1.20260820.1 + + wrangler@4.125.0: + dependencies: + '@cloudflare/kv-asset-handler': 0.5.0 + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260820.1) + blake3-wasm: 2.1.5 + esbuild: 0.28.1 + miniflare: 5.20260820.0-alpha + path-to-regexp: 6.3.0 + unenv: 2.0.0-rc.24 + workerd: 1.20260820.1 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + ws@8.18.3: {} + ws@8.21.0: {} + wsl-utils@0.1.0: dependencies: is-wsl: 3.1.1 @@ -6796,4 +7924,17 @@ snapshots: yocto-queue@0.1.0: {} + youch-core@0.3.3: + dependencies: + '@poppinss/exception': 1.2.3 + error-stack-parser-es: 1.0.5 + + youch@4.1.0-beta.10: + dependencies: + '@poppinss/colors': 4.1.6 + '@poppinss/dumper': 0.6.5 + '@speed-highlight/core': 1.2.24 + cookie: 1.1.1 + youch-core: 0.3.3 + zimmerframe@1.1.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 747ead8..ffc0201 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,12 +1,14 @@ packages: - - packages/* - - apps/* + - packages/* + - apps/* overrides: - jsdom: 27.3.0 + jsdom: 27.3.0 allowBuilds: - esbuild: true + esbuild: true + sharp: true + workerd: true onlyBuiltDependencies: - - esbuild + - esbuild -- 2.51.2