diff --git a/README.md b/README.md index 1e9dd3c..23cfdd3 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ The web user-interface for the BTClock, based on Svelte-kit. It uses Bootstrap for the lay-out. -![Screenshot](doc/screenshot.webp) +![Screenshot](doc/screenshot-light.webp) ![Screenshot Dark](doc/screenshot-dark.webp) ## Developing diff --git a/doc/screenshot-dark.webp b/doc/screenshot-dark.webp index a225afe..f003bb7 100644 Binary files a/doc/screenshot-dark.webp and b/doc/screenshot-dark.webp differ diff --git a/doc/screenshot-light.webp b/doc/screenshot-light.webp new file mode 100644 index 0000000..cf87152 Binary files /dev/null and b/doc/screenshot-light.webp differ diff --git a/doc/screenshot.webp b/doc/screenshot.webp deleted file mode 100644 index 0a5d87e..0000000 Binary files a/doc/screenshot.webp and /dev/null differ diff --git a/package.json b/package.json index 305f1db..f8893ae 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,10 @@ "lint": "prettier --check . && eslint .", "format": "prettier --write .", "postinstall": "patch-package", - "test": "npm run test:integration && npm run test:unit", + "test": "prettier --write . && eslint . && npm run test:integration && npm run test:unit", "test:integration": "playwright test", "test:screenshots": "playwright test -c playwright.screenshot.config.ts", + "doc:update-screenshots": "playwright test -c playwright.doc-screenshot.config.ts", "test:unit": "vitest" }, "devDependencies": { @@ -35,6 +36,7 @@ "prettier-plugin-svelte": "^3.2.6", "rollup-plugin-visualizer": "^5.12.0", "sass": "^1.79.3", + "sharp": "^0.33.5", "svelte": "^4.2.19", "svelte-check": "^4.0.2", "svelte-preprocess": "^6.0.2", diff --git a/playwright.doc-screenshot.config.ts b/playwright.doc-screenshot.config.ts new file mode 100644 index 0000000..f052338 --- /dev/null +++ b/playwright.doc-screenshot.config.ts @@ -0,0 +1,27 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + use: { + locale: 'en-GB', + timezoneId: 'Europe/Amsterdam' + }, + webServer: { + command: 'yarn build && yarn preview', + port: 4173 + }, + testDir: './tests/doc-screenshots', + outputDir: './test-results/screenshots', + projects: [ + { + name: 'Light Mode', + use: { + viewport: { width: 1440, height: 900 }, + colorScheme: 'light' + } + }, + { + name: 'Dark Mode', + use: { viewport: { width: 1440, height: 900 }, colorScheme: 'dark' } + } + ] +}); diff --git a/playwright.screenshot.config.ts b/playwright.screenshot.config.ts index 985069a..f4272ff 100644 --- a/playwright.screenshot.config.ts +++ b/playwright.screenshot.config.ts @@ -54,6 +54,14 @@ export default defineConfig({ { name: 'MacBook Pro 14 inch Safari', use: { ...devices['Desktop Safari'], viewport: { width: 1512, height: 982 } } + }, + { + name: 'MacBook Pro 14 inch Safari Dark Mode', + use: { + ...devices['Desktop Safari'], + viewport: { width: 1512, height: 982 }, + colorScheme: 'dark' + } } ] }); diff --git a/src/routes/Status.svelte b/src/routes/Status.svelte index 0f7d259..c2ce212 100644 --- a/src/routes/Status.svelte +++ b/src/routes/Status.svelte @@ -158,7 +158,7 @@
{#if $status.data}
- {#if $status.isUpdating === false} + {#if $status.isUpdating === false && $status.isFake === false}
diff --git a/tests/doc-screenshots/viewport-screenshots.spec.ts b/tests/doc-screenshots/viewport-screenshots.spec.ts new file mode 100644 index 0000000..f9e8e25 --- /dev/null +++ b/tests/doc-screenshots/viewport-screenshots.spec.ts @@ -0,0 +1,70 @@ +import { test, expect } from '@playwright/test'; + +import { initMock, settingsJson, statusJson } from '../shared'; +import sharp from 'sharp'; + +test.beforeEach(initMock); + +// Define the translations for the headings +const headings = { + en: { + control: 'Control', + status: 'Status', + settings: 'Settings', + language: 'English' + }, + de: { + control: 'Steuerung', + status: 'Status', + settings: 'Einstellungen', + language: 'Deutsch' + }, + nl: { + control: 'Besturing', + status: 'Status', + settings: 'Instellingen', + language: 'Nederlands' + }, + es: { + control: 'Control', + status: 'Estado', + settings: 'Ajustes', + language: 'EspaƱol' + } +}; + +test('capture screenshots across devices', async ({ page }, testInfo) => { + // Get the locale from the browser or default to 'en' + const locale = testInfo.project.use?.locale?.split('-')[0].toLowerCase() || 'en'; + const translations = headings[locale] || headings.en; + + statusJson.isUpdating = true; + // Set the color scheme + if (testInfo.project.use?.colorScheme === 'dark') { + settingsJson.invertedColor = true; + } else { + settingsJson.invertedColor = false; + } + + await page.goto('/'); + await expect(page.getByRole('heading', { name: translations.control })).toBeVisible(); + await expect(page.getByRole('heading', { name: translations.status })).toBeVisible(); + await expect(page.getByRole('heading', { name: translations.settings })).toBeVisible(); + + if (await page.locator('#nav-language-dropdown').isVisible()) { + await expect(page.getByRole('link', { name: translations.language })).toBeVisible(); + } + + const screenshot = await page.screenshot({ + fullPage: true + }); + + await sharp(screenshot) + .toFormat('webp', { + quality: 95, + nearLossless: true + }) + .toFile( + `./doc/screenshot-${test.info().project.use.colorScheme?.toLowerCase().replace(' ', '_')}.webp` + ); +}); diff --git a/tests/playwright/test.ts b/tests/playwright/test.ts index b069c0a..a63b7c4 100644 --- a/tests/playwright/test.ts +++ b/tests/playwright/test.ts @@ -132,7 +132,7 @@ test('screens should be able to change', async ({ page }) => { await page.getByRole('button', { name: 'Sats per Dollar' }).click(); const response = await responsePromise; - expect(response.url()).toContain('api/show/screen/1'); + expect(response.url()).toContain('api/show/screen/10'); }); test('parse all types of EPD content correctly', async ({ page }) => { diff --git a/tests/shared.ts b/tests/shared.ts index 716ff1b..9239f2e 100644 --- a/tests/shared.ts +++ b/tests/shared.ts @@ -1,33 +1,39 @@ export const statusJson = { - currentScreen: 0, + currentScreen: 20, numScreens: 7, timerRunning: true, + isOTAUpdating: false, espUptime: 4479, espFreeHeap: 58508, espHeapSize: 342108, - connectionStatus: { price: true, blocks: true }, + connectionStatus: { + price: false, + blocks: false, + V2: true, + nostr: true + }, rssi: -66, - data: ['BLOCK/HEIGHT', '8', '1', '8', '0', '2', '6'], - rendered: ['BLOCK/HEIGHT', '8', '1', '8', '0', '2', '6'], + data: ['BLOCK/HEIGHT', '8', '7', '6', '5', '4', '3'], + currency: 'USD', leds: [ { red: 0, green: 0, blue: 0, hex: '#000000' }, { red: 0, green: 0, blue: 0, hex: '#000000' }, { red: 0, green: 0, blue: 0, hex: '#000000' }, { red: 0, green: 0, blue: 0, hex: '#000000' } - ] + ], + isUpdating: true, + isFake: true }; export const settingsJson = { numScreens: 7, - fgColor: 415029, - bgColor: 0, timerSeconds: 1800, timerRunning: true, minSecPriceUpd: 30, fullRefreshMin: 60, wpTimeout: 600, tzOffset: 0, - useBitcoinNode: false, + dataSource: 0, mempoolInstance: 'mempool.space', ledTestOnPower: true, ledFlashOnUpd: true, @@ -42,7 +48,7 @@ export const settingsJson = { ip: '192.168.20.231', txPower: 78, gitRev: '25d8b92bcbc8938417c140355ea3ba99ff9eb4b7', - gitTag: '3.1.9', + gitTag: '3.2.23', bitaxeEnabled: false, bitaxeHostname: 'bitaxe1', miningPoolStats: false, @@ -50,9 +56,9 @@ export const settingsJson = { miningPoolUser: '38Qkkei3SuF1Eo45BaYmRHUneRD54yyTFy', nostrZapNotify: true, hwRev: 'REV_A_EPD_2_13', - fsRev: '4c5d9616212b27e3f05c35370f0befcf2c5a04b2', + fsRev: '64e518bf58f89749753167a8b6826e10bb6455c5', nostrZapPubkey: 'b5127a08cf33616274800a4387881a9f98e04b9c37116e92de5250498635c422', - lastBuildTime: '1700666677', + lastBuildTime: Math.round(new Date().getTime() / 1000), screens: [ { id: 0, @@ -62,17 +68,17 @@ export const settingsJson = { { id: 3, name: 'Time', - enabled: true + enabled: false }, { id: 4, name: 'Halving countdown', - enabled: true + enabled: false }, { id: 6, name: 'Block Fee Rate', - enabled: true + enabled: false }, { id: 10, @@ -87,11 +93,47 @@ export const settingsJson = { { id: 30, name: 'Market Cap', - enabled: true + enabled: false } ], actCurrencies: ['USD', 'EUR'], - availableCurrencies: ['USD', 'EUR', 'GBP', 'JPY', 'AUD', 'CAD'] + availableCurrencies: ['USD', 'EUR', 'GBP', 'JPY', 'AUD', 'CAD'], + availablePools: [ + 'ocean', + 'noderunners', + 'satoshi_radio', + 'braiins', + 'public_pool', + 'gobrrr_pool', + 'ckpool', + 'eu_ckpool' + ], + invertedColor: false, + isLoaded: true +}; + +export const latestReleaseFake = { + id: 782, + tag_name: '3.2.24', + target_commitish: '', + name: '3.2.24', + body: '', + url: 'https://git.btclock.dev/api/v1/repos/btclock/btclock_v3/releases/782', + html_url: 'https://git.btclock.dev/btclock/btclock_v3/releases/tag/3.2.24', + tarball_url: 'https://git.btclock.dev/btclock/btclock_v3/archive/3.2.24.tar.gz', + zipball_url: 'https://git.btclock.dev/btclock/btclock_v3/archive/3.2.24.zip', + hide_archive_links: false, + upload_url: 'https://git.btclock.dev/api/v1/repos/btclock/btclock_v3/releases/782/assets', + draft: false, + prerelease: false, + created_at: '2024-12-28T17:48:05Z', + published_at: '2024-12-28T17:48:05Z', + author: {}, + assets: [], + archive_download_count: { + zip: 0, + tar_gz: 0 + } }; export const initMock = async ({ page }) => { @@ -99,20 +141,17 @@ export const initMock = async ({ page }) => { await route.fulfill({ json: statusJson }); }); - await page.route('*/**/api/show/screen/1', async (route) => { + await page.route('*/**/api/show/screen/10', async (route) => { //if (route.request().url().includes('*/**/api/show/screen/1')) { statusJson.currentScreen = 1; statusJson.data = ['MSCW/TIME', ' ', ' ', '2', '6', '4', '4']; - statusJson.rendered = statusJson.data; - //} await route.fulfill({ json: statusJson }); }); - await page.route('*/**/api/show/screen/2', async (route) => { + await page.route('*/**/api/show/screen/20', async (route) => { statusJson.currentScreen = 2; statusJson.data = ['BTC/USD', '$', '3', '7', '8', '2', '4']; - statusJson.rendered = statusJson.data; await route.fulfill({ json: statusJson }); }); @@ -120,7 +159,6 @@ export const initMock = async ({ page }) => { await page.route('*/**/api/show/screen/4', async (route) => { statusJson.currentScreen = 4; statusJson.data = ['BIT/COIN', 'HALV/ING', '0/YRS', '149/DAYS', '8/HRS', '30/MINS', 'TO/GO']; - statusJson.rendered = statusJson.data; await route.fulfill({ json: statusJson }); }); @@ -132,6 +170,7 @@ export const initMock = async ({ page }) => { await page.route('**/events', (route) => { const newStatus = statusJson; newStatus.data = ['BLOCK/HEIGHT', '8', '0', '0', '8', '1', '5']; + newStatus.isUpdating = true; // Respond with a custom SSE message route.fulfill({ @@ -140,4 +179,8 @@ export const initMock = async ({ page }) => { json: `${JSON.stringify(newStatus)}\n\n` }); }); + + await page.route('**/api/v1/repos/btclock/btclock_v3/releases/latest', async (route) => { + await route.fulfill({ json: latestReleaseFake }); + }); }; diff --git a/yarn.lock b/yarn.lock index 4bc50db..185197e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -36,6 +36,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@emnapi/runtime@^1.2.0": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60" + integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw== + dependencies: + tslib "^2.4.0" + "@esbuild/aix-ppc64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" @@ -409,6 +416,119 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b" integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== +"@img/sharp-darwin-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz#ef5b5a07862805f1e8145a377c8ba6e98813ca08" + integrity sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ== + optionalDependencies: + "@img/sharp-libvips-darwin-arm64" "1.0.4" + +"@img/sharp-darwin-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz#e03d3451cd9e664faa72948cc70a403ea4063d61" + integrity sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q== + optionalDependencies: + "@img/sharp-libvips-darwin-x64" "1.0.4" + +"@img/sharp-libvips-darwin-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz#447c5026700c01a993c7804eb8af5f6e9868c07f" + integrity sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg== + +"@img/sharp-libvips-darwin-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz#e0456f8f7c623f9dbfbdc77383caa72281d86062" + integrity sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ== + +"@img/sharp-libvips-linux-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz#979b1c66c9a91f7ff2893556ef267f90ebe51704" + integrity sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA== + +"@img/sharp-libvips-linux-arm@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz#99f922d4e15216ec205dcb6891b721bfd2884197" + integrity sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g== + +"@img/sharp-libvips-linux-s390x@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz#f8a5eb1f374a082f72b3f45e2fb25b8118a8a5ce" + integrity sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA== + +"@img/sharp-libvips-linux-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz#d4c4619cdd157774906e15770ee119931c7ef5e0" + integrity sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw== + +"@img/sharp-libvips-linuxmusl-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz#166778da0f48dd2bded1fa3033cee6b588f0d5d5" + integrity sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA== + +"@img/sharp-libvips-linuxmusl-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz#93794e4d7720b077fcad3e02982f2f1c246751ff" + integrity sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw== + +"@img/sharp-linux-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz#edb0697e7a8279c9fc829a60fc35644c4839bb22" + integrity sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA== + optionalDependencies: + "@img/sharp-libvips-linux-arm64" "1.0.4" + +"@img/sharp-linux-arm@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz#422c1a352e7b5832842577dc51602bcd5b6f5eff" + integrity sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ== + optionalDependencies: + "@img/sharp-libvips-linux-arm" "1.0.5" + +"@img/sharp-linux-s390x@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz#f5c077926b48e97e4a04d004dfaf175972059667" + integrity sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q== + optionalDependencies: + "@img/sharp-libvips-linux-s390x" "1.0.4" + +"@img/sharp-linux-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz#d806e0afd71ae6775cc87f0da8f2d03a7c2209cb" + integrity sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA== + optionalDependencies: + "@img/sharp-libvips-linux-x64" "1.0.4" + +"@img/sharp-linuxmusl-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz#252975b915894fb315af5deea174651e208d3d6b" + integrity sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" + +"@img/sharp-linuxmusl-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz#3f4609ac5d8ef8ec7dadee80b560961a60fd4f48" + integrity sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64" "1.0.4" + +"@img/sharp-wasm32@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz#6f44f3283069d935bb5ca5813153572f3e6f61a1" + integrity sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg== + dependencies: + "@emnapi/runtime" "^1.2.0" + +"@img/sharp-win32-ia32@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz#1a0c839a40c5351e9885628c85f2e5dfd02b52a9" + integrity sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ== + +"@img/sharp-win32-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz#56f00962ff0c4e0eb93d34a047d29fa995e3e342" + integrity sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg== + "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" @@ -753,9 +873,9 @@ integrity sha512-YaDrquRpZwfcXbnlDsSrBQNCChVOT9MGuSg+dMAyfsAa1SmiAhrA5jUYUiIMC59G92kIbY/AaQOWcBdq+lh+zg== "@sveltejs/kit@^2.0.0": - version "2.15.0" - resolved "https://registry.yarnpkg.com/@sveltejs/kit/-/kit-2.15.0.tgz#9903e212a309a18ce9082ff6fe2cb64c3f4f79c1" - integrity sha512-FI1bhfhFNGI2sKg+BhiRyM4eaOvX+KZqRYSQqL5PK3ZZREX2xufZ6MzZAw79N846OnIxYNqcz/3VOUq+FPDd3w== + version "2.15.1" + resolved "https://registry.yarnpkg.com/@sveltejs/kit/-/kit-2.15.1.tgz#66260c6175c5783138f4e43c5f14bd9cec28b914" + integrity sha512-8t7D3hQHbUDMiaQ2RVnjJJ/+Ur4Fn/tkeySJCsHtX346Q9cp3LAnav8xXdfuqYNJwpUGX0x3BqF1uvbmXQw93A== dependencies: "@types/cookie" "^0.6.0" cookie "^0.6.0" @@ -1100,15 +1220,6 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -axios@>=1.7.7: - version "1.7.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" - integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - axobject-query@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" @@ -1261,11 +1372,27 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -1405,6 +1532,11 @@ detect-libc@^1.0.3: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== +detect-libc@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + devalue@^5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/devalue/-/devalue-5.1.1.tgz#a71887ac0f354652851752654e4bd435a53891ae" @@ -1821,11 +1953,6 @@ flatted@^3.2.9, flatted@^3.3.1: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== -follow-redirects@^1.15.6: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -2054,6 +2181,11 @@ intl-messageformat@^10.5.3: "@formatjs/icu-messageformat-parser" "2.8.0" tslib "^2.7.0" +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" @@ -2639,11 +2771,6 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - punycode@^2.1.0, punycode@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -2700,12 +2827,12 @@ rimraf@^2.6.3: glob "^7.1.3" rollup-plugin-visualizer@^5.12.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz#661542191ce78ee4f378995297260d0c1efb1302" - integrity sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ== + version "5.13.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.13.1.tgz#fa49320cd23c8642f856f8bd45ddaf3e10a5b023" + integrity sha512-vMg8i6BprL8aFm9DKvL2c8AwS8324EgymYQo9o6E26wgVvwMhsJxS37aNL6ZsU7X9iAcMYwdME7gItLfG5fwJg== dependencies: open "^8.4.0" - picomatch "^2.3.1" + picomatch "^4.0.2" source-map "^0.7.4" yargs "^17.5.1" @@ -2783,7 +2910,7 @@ semver@^7.5.3: resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== -semver@^7.5.4, semver@^7.6.0, semver@^7.6.2: +semver@^7.5.4, semver@^7.6.0, semver@^7.6.2, semver@^7.6.3: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -2805,6 +2932,35 @@ set-function-length@^1.2.1: gopd "^1.0.1" has-property-descriptors "^1.0.2" +sharp@^0.33.5: + version "0.33.5" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.33.5.tgz#13e0e4130cc309d6a9497596715240b2ec0c594e" + integrity sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw== + dependencies: + color "^4.2.3" + detect-libc "^2.0.3" + semver "^7.6.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" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -2822,6 +2978,13 @@ siginfo@^2.0.0: resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + sirv@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/sirv/-/sirv-3.0.0.tgz#f8d90fc528f65dff04cb597a88609d4e8a4361ce" @@ -3070,7 +3233,7 @@ ts-api-utils@^1.3.0: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== -tslib@^2.7.0: +tslib@^2.4.0, tslib@^2.7.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==