diff --git a/.github/workflows/ci-superdoc.yml b/.github/workflows/ci-superdoc.yml index c5e5f5fb73..bcc1c94ef2 100644 --- a/.github/workflows/ci-superdoc.yml +++ b/.github/workflows/ci-superdoc.yml @@ -83,3 +83,28 @@ jobs: - name: Run UMD smoke test working-directory: packages/superdoc/tests/umd-smoke run: pnpm test + + cli-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - uses: pnpm/action-setup@v4 + + - uses: actions/setup-node@v6 + with: + node-version-file: .nvmrc + cache: pnpm + + - uses: oven-sh/setup-bun@v2 + with: + bun-version: 1.3.8 + + - name: Install dependencies + run: pnpm install + + - name: Build superdoc (CLI runtime dependency) + run: pnpm run build:superdoc + + - name: Run CLI tests + run: pnpm run test:cli diff --git a/apps/cli/src/__tests__/cli.test.ts b/apps/cli/src/__tests__/cli.test.ts index df173bf8ad..358bb6ae04 100644 --- a/apps/cli/src/__tests__/cli.test.ts +++ b/apps/cli/src/__tests__/cli.test.ts @@ -2,6 +2,7 @@ import { afterAll, beforeAll, beforeEach, describe, expect, test } from 'bun:tes import { access, copyFile, mkdir, readFile, rm, writeFile } from 'node:fs/promises'; import { join } from 'node:path'; import { run } from '../index'; +import { resolveListDocFixture, resolveSourceDocFixture } from './fixtures'; type RunResult = { code: number; @@ -43,27 +44,9 @@ type ErrorEnvelope = { const TEST_DIR = join(import.meta.dir, 'fixtures-cli'); const STATE_DIR = join(TEST_DIR, 'state'); -const SOURCE_DOC = join(import.meta.dir, '../../../../e2e-tests/test-data/basic-documents/advanced-text.docx'); -const LIST_SOURCE_DOC_CANDIDATES = [ - join(import.meta.dir, '../../../../devtools/document-api-tests/fixtures/matrix-list.input.docx'), - join(import.meta.dir, '../../../../e2e-tests/test-data/basic-documents/lists-complex-items.docx'), -]; const SAMPLE_DOC = join(TEST_DIR, 'sample.docx'); const LIST_SAMPLE_DOC = join(TEST_DIR, 'lists-sample.docx'); -async function resolveListSourceDoc(): Promise { - for (const candidate of LIST_SOURCE_DOC_CANDIDATES) { - try { - await access(candidate); - return candidate; - } catch { - // try next candidate - } - } - - throw new Error(`No list fixture found. Tried: ${LIST_SOURCE_DOC_CANDIDATES.join(', ')}`); -} - async function runCli(args: string[], stdinBytes?: Uint8Array): Promise { let stdout = ''; let stderr = ''; @@ -164,8 +147,8 @@ describe('superdoc CLI', () => { beforeAll(async () => { process.env.SUPERDOC_CLI_STATE_DIR = STATE_DIR; await mkdir(TEST_DIR, { recursive: true }); - await copyFile(SOURCE_DOC, SAMPLE_DOC); - await copyFile(await resolveListSourceDoc(), LIST_SAMPLE_DOC); + await copyFile(await resolveSourceDocFixture(), SAMPLE_DOC); + await copyFile(await resolveListDocFixture(), LIST_SAMPLE_DOC); }); beforeEach(async () => { diff --git a/apps/cli/src/__tests__/conformance/harness.ts b/apps/cli/src/__tests__/conformance/harness.ts index c28b351168..646aa4b6e9 100644 --- a/apps/cli/src/__tests__/conformance/harness.ts +++ b/apps/cli/src/__tests__/conformance/harness.ts @@ -1,7 +1,8 @@ -import { access, copyFile, mkdtemp, mkdir, rm } from 'node:fs/promises'; +import { copyFile, mkdtemp, mkdir, rm } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import path from 'node:path'; import { run } from '../../index'; +import { resolveListDocFixture, resolveSourceDocFixture } from '../fixtures'; type RunResult = { code: number; @@ -47,31 +48,6 @@ export type ListItemAddress = { nodeId: string; }; -const REPO_ROOT = path.resolve(import.meta.dir, '../../../../../'); -const SOURCE_DOC = path.join(REPO_ROOT, 'e2e-tests/test-data/basic-documents/advanced-text.docx'); -const LIST_SOURCE_DOC_CANDIDATES = [ - path.join(REPO_ROOT, 'devtools/document-api-tests/fixtures/matrix-list.input.docx'), - path.join(REPO_ROOT, 'e2e-tests/test-data/basic-documents/lists-complex-items.docx'), -]; - -let resolvedListSourceDoc: string | null = null; - -async function resolveListSourceDoc(): Promise { - if (resolvedListSourceDoc != null) return resolvedListSourceDoc; - - for (const candidate of LIST_SOURCE_DOC_CANDIDATES) { - try { - await access(candidate); - resolvedListSourceDoc = candidate; - return candidate; - } catch { - // try next candidate - } - } - - throw new Error(`No list fixture found. Tried: ${LIST_SOURCE_DOC_CANDIDATES.join(', ')}`); -} - function parseEnvelope(raw: RunResult): CommandEnvelope { const source = raw.stdout.trim() || raw.stderr.trim(); if (!source) { @@ -133,13 +109,13 @@ export class ConformanceHarness { async copyFixtureDoc(label: string): Promise { const filePath = path.join(this.docsDir, `${this.nextId()}-${label}.docx`); - await copyFile(SOURCE_DOC, filePath); + await copyFile(await resolveSourceDocFixture(), filePath); return filePath; } async copyListFixtureDoc(label: string): Promise { const filePath = path.join(this.docsDir, `${this.nextId()}-${label}.docx`); - await copyFile(await resolveListSourceDoc(), filePath); + await copyFile(await resolveListDocFixture(), filePath); return filePath; } diff --git a/apps/cli/src/__tests__/fixtures.ts b/apps/cli/src/__tests__/fixtures.ts new file mode 100644 index 0000000000..b5bdd7b4b1 --- /dev/null +++ b/apps/cli/src/__tests__/fixtures.ts @@ -0,0 +1,44 @@ +import { access } from 'node:fs/promises'; +import path from 'node:path'; + +const REPO_ROOT = path.resolve(import.meta.dir, '../../../..'); + +const SOURCE_DOC_CANDIDATES = [ + path.join(REPO_ROOT, 'packages/super-editor/src/tests/data/advanced-text.docx'), + path.join(REPO_ROOT, 'e2e-tests/test-data/basic-documents/advanced-text.docx'), +]; + +const LIST_SOURCE_DOC_CANDIDATES = [ + path.join(REPO_ROOT, 'packages/super-editor/src/tests/data/basic-list.docx'), + path.join(REPO_ROOT, 'packages/super-editor/src/tests/data/list_with_indents.docx'), + path.join(REPO_ROOT, 'devtools/document-api-tests/fixtures/matrix-list.input.docx'), + path.join(REPO_ROOT, 'e2e-tests/test-data/basic-documents/lists-complex-items.docx'), +]; + +let resolvedSourceDoc: string | null = null; +let resolvedListSourceDoc: string | null = null; + +async function resolveFixture(candidates: string[], fixtureLabel: string): Promise { + for (const candidate of candidates) { + try { + await access(candidate); + return candidate; + } catch { + // Try next candidate. + } + } + + throw new Error(`No ${fixtureLabel} fixture found. Tried: ${candidates.join(', ')}`); +} + +export async function resolveSourceDocFixture(): Promise { + if (resolvedSourceDoc != null) return resolvedSourceDoc; + resolvedSourceDoc = await resolveFixture(SOURCE_DOC_CANDIDATES, 'source document'); + return resolvedSourceDoc; +} + +export async function resolveListDocFixture(): Promise { + if (resolvedListSourceDoc != null) return resolvedListSourceDoc; + resolvedListSourceDoc = await resolveFixture(LIST_SOURCE_DOC_CANDIDATES, 'list'); + return resolvedListSourceDoc; +} diff --git a/apps/cli/src/__tests__/host.test.ts b/apps/cli/src/__tests__/host.test.ts index 97a8be3b72..11f3845110 100644 --- a/apps/cli/src/__tests__/host.test.ts +++ b/apps/cli/src/__tests__/host.test.ts @@ -5,10 +5,10 @@ import { tmpdir } from 'node:os'; import path from 'node:path'; import type { CliOperationId } from '../cli'; import { validateOperationResponseData } from '../lib/operation-args'; +import { resolveSourceDocFixture } from './fixtures'; const REPO_ROOT = path.resolve(import.meta.dir, '../../../..'); const CLI_BIN = path.join(REPO_ROOT, 'apps/cli/src/index.ts'); -const SOURCE_DOC = path.join(REPO_ROOT, 'e2e-tests/test-data/basic-documents/advanced-text.docx'); type JsonRpcMessage = { jsonrpc: '2.0'; @@ -230,7 +230,7 @@ describe('CLI host mode', () => { await mkdir(stateDir, { recursive: true }); const docPath = path.join(stateDir, 'host-conformance.docx'); - await copyFile(SOURCE_DOC, docPath); + await copyFile(await resolveSourceDocFixture(), docPath); const host = launchHost(stateDir); diff --git a/apps/cli/src/__tests__/legacy-compat.test.ts b/apps/cli/src/__tests__/legacy-compat.test.ts index 6e882f0189..399c26fe65 100644 --- a/apps/cli/src/__tests__/legacy-compat.test.ts +++ b/apps/cli/src/__tests__/legacy-compat.test.ts @@ -2,6 +2,7 @@ import { beforeAll, beforeEach, describe, expect, test } from 'bun:test'; import { copyFile, mkdir } from 'node:fs/promises'; import { join } from 'node:path'; import { run } from '../index'; +import { resolveSourceDocFixture } from './fixtures'; type RunResult = { code: number; @@ -10,7 +11,6 @@ type RunResult = { }; const TEST_DIR = join(import.meta.dir, 'fixtures-cli-legacy'); -const SOURCE_DOC = join(import.meta.dir, '../../../../e2e-tests/test-data/basic-documents/advanced-text.docx'); const SAMPLE_DOC = join(TEST_DIR, 'sample.docx'); const REPLACE_DOC = join(TEST_DIR, 'replace-test.docx'); @@ -36,7 +36,7 @@ async function runCli(args: string[]): Promise { describe('legacy command compatibility', () => { beforeAll(async () => { await mkdir(TEST_DIR, { recursive: true }); - await copyFile(SOURCE_DOC, SAMPLE_DOC); + await copyFile(await resolveSourceDocFixture(), SAMPLE_DOC); }); test('search supports legacy pretty output by default', async () => { @@ -96,7 +96,7 @@ describe('legacy command compatibility', () => { describe('replace-legacy', () => { beforeEach(async () => { - await copyFile(SOURCE_DOC, REPLACE_DOC); + await copyFile(await resolveSourceDocFixture(), REPLACE_DOC); }); test('replace-legacy supports legacy pretty output by default', async () => { diff --git a/e2e-tests/Dockerfile b/e2e-tests/Dockerfile deleted file mode 100644 index 59692d627c..0000000000 --- a/e2e-tests/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -# syntax=docker/dockerfile:1 -FROM mcr.microsoft.com/playwright:v1.57.0-jammy -WORKDIR /app - -# Install a minimal set of fonts so UI typography matches local dev closer -RUN apt-get update && \ - apt-get install -y --no-install-recommends fonts-liberation fonts-dejavu-core fonts-noto-core && \ - rm -rf /var/lib/apt/lists/* - -ENV CI="true" -ENV PNPM_HOME="/pnpm" -ENV PATH="$PNPM_HOME:$PATH" -RUN corepack enable - -COPY --exclude=examples . . -RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install -RUN pnpm run --prefix packages/superdoc build - -CMD ["bash", "-c", "pnpm run --prefix e2e-tests test $PLAYWRIGHT_ARGS --workers=4"] diff --git a/e2e-tests/README.md b/e2e-tests/README.md deleted file mode 100644 index f977b5e740..0000000000 --- a/e2e-tests/README.md +++ /dev/null @@ -1,162 +0,0 @@ -# ๐Ÿงช SuperDoc E2E Tests - -This repository contains multiple e2e tests for SuperDoc. The test suite here is triggered every time someone opens a pull request in the SuperDoc repo. - -## ๐Ÿ“‹ Table of Contents - -- [๐Ÿ“‹ Requirements to run locally](#-requirements-to-run-locally) -- [๐Ÿƒโ€โ™‚๏ธ Running locally](#%E2%80%8D%EF%B8%8F-running-locally) -- [๐Ÿ“ท Visual diffing](#-visual-diffing) - - [๐Ÿ“„ Adding extra documents](#-adding-extra-documents) - - [๐Ÿ”„ Updating Reference Screenshots](#-updating-reference-screenshots) - - [New document](#new-document) - - [After intentional UI changes](#after-intentional-ui-changes) -- [๐ŸŽ๏ธ Performance](#%EF%B8%8F-performance) - - [Load time](#load-time) - - [Keyboard interaction response time](#keyboard-interaction-response-time) -- [โ›๏ธ Toolbar](#%EF%B8%8F-toolbar) -- [๐Ÿ”ค Fonts](#-fonts) -- [๐Ÿณ Why we use Docker](#-why-we-use-docker) - -## ๐Ÿ“‹ Requirements to run locally - -At this point, you should probably have them installed, but it's good to know we will need: - -- Docker -- NodeJS -- NPM - -> [!IMPORTANT] -> Set some minimum resources on Docker, otherwise the tests might take too long to execute and might even produce wrong results. -> _RAM_: >= 8GB -> _CPUs_ >= 4 - -![docker settings](./docker-settings.png) - -## ๐Ÿƒโ€โ™‚๏ธ Running locally - -To run the tests locally you have to first build the docker image, and then run the tests. - -### Quick Start (Recommended) - -If you've made changes to SuperDoc code and want to rebuild everything: - -```bash -npm run rebuild -npm run test:local -``` - -The `rebuild` command will: - -- Build and pack SuperDoc (including super-editor) -- Copy the package to e2e-tests -- Install it in the test template -- Rebuild the Docker image with no cache - -If you only need to refresh the Vue test app with the latest SuperDoc build (no Docker rebuild), run: - -```bash -npm run reinstall -``` - -### Step-by-Step - -Alternatively, you can run each step individually: - -1. `npm run build:superdoc` - this will build SuperDoc and use it on the test app -2. `npm run build` - this will build the Docker image where the tests are executed -3. `npm run test:local` - this executes the tests on docker - -### Layout-engine-only visuals - -- Run locally (uses your current OS snapshots): `npm run test:layout` -- Update layout-engine snapshots locally: `npm run update-screenshots:layout` -- Update layout-engine snapshots in Docker: `npm run update-screenshots:layout:docker` - -> **Note:** If tests fail after making code changes, use `npm run rebuild` instead of just `npm run build` to ensure Docker doesn't use cached layers with old code. - -## ๐Ÿ“ท Visual diffing - -Visual diffing is, in short, screenshot-based testing. We have a set of reference screenshots taken from documents to compare against new changes to SuperDoc. The comparison is made pixel-by-pixel between the reference screenshot and the screenshot taken of the same document using the code in the pull request that triggered the test execution. - -More details [here](https://playwright.dev/docs/test-snapshots). - -### ๐Ÿ“„ Adding extra documents - -If you want to add a new document to the existing visual diffing test suite, simply drag and drop in a folder under `test-data/basic-documents`. - -When the test suite runs after this, it will not have a reference screenshot, so you need to follow the steps below. - -#### ๐Ÿ”„ Updating Reference Screenshots - -You might need to update the reference screenshot in 2 situations: - -1. Adding a new document to be tested -2. After intentional UI changes to existing documents - -##### New document - -1. Drag and drop a document into the folder: `test-data/basic-documents`. Make sure to follow the same naming standard. -2. From this folder (`e2e-tests`), run `npm run update-screenshots` -3. Ensure the screenshot was generated properly under `tests/visuals/basic-documents.spec.js-snapshots`. -4. Double-check that no other screenshot was updated by mistake since `npm run update-screenshots` updates all screenshots (if they are different from the current ones). -5. Open a PR with the changes. - -##### After intentional UI changes - -1. Run `npm run update-screenshots` from this folder (`e2e-tests`). Make sure that you're on the correct branch (ie, the branch that is introducing the UI change) -2. Double-check that no other screenshot was updated by mistake since `npm run update-screenshots` updates all screenshots (if they are different from the current ones). -3. Open a PR with the changes. - -## ๐ŸŽ๏ธ Performance - -We currently have 2 types of performance tests: - -### Load time - -Ensures that documents of different sizes load within a reasonable time. - -**Example**: loads a document with 100 pages in less than 3 seconds. - -### Keyboard interaction response time - -Ensures that keyboard interactions respond in a timely manner. - -**Example**: if the user types "a" in a document with 300 pages, it should take effect almost immediately; otherwise, it creates a bad typing experience. - -## โ›๏ธ Toolbar - -Toolbar-related tests simulate user interactions with the editor and the toolbar, expecting them to produce the correct output. - -**Examples**: - -1. clicks the "bold" toolbar button, types "a", and expects "a" to be bold -2. selects existing text, clicks the "italic" toolbar button, and expects the selected text to be italic -3. selects existing text, presses "cmd + B", and expects the selected text to be bold -4. tests that custom buttons added by the developer work as expected - -## ๐Ÿ”ค Fonts - -Fonts-related tests simulates real-word scenarios where developers provide the `onFontsResolved` callback to SuperDoc. We expect it to work as expected, providing all the document fonts as well as unsupported fonts. - -**Examples**: - -1. loads a document with only unsupported fonts and expects `unsupportedFonts` to have them -2. loads a document with embedded fonts and expects `unsupportedFonts` to not have them since they should have been imported -3. loads a document with only supported fonts and expects `unsupportedFonts` to be empty - -## ๐Ÿณ Why we use Docker - -You might be asking yourself... why do we need Docker to run the tests locally? And that's a great question. There are a few reasons why: - -### Consistency - -When someone opens a PR, we will trigger a GitHub Action to execute the tests. They will run on a Linux VM, and it will almost always be different than our local machines. By running the tests on a Docker environment, we can control exactly what environment the test will be executed on, and it should always be consistent with the executions on CI-CD. This is especially important for visual diffing as screenshots taken on different OS's will always look different. This doesn't mean they look better or worse, only that for a pixel-by-pixel comparison algorithm (like ours), this is is definitely not a good thing. - -### Ease of debugging - -Since we have consistency between CI-CD executions and our local machine's executions, the debugging process should be a lot simpler as the outputs should always be the same. - -### Simpler process to update screenshots - -From time to time, you might need to update the reference screenshots, or add new ones. Since we have consistency between CI-CD and local executions, we can simply update the screenshots on our local environments, open a PR and that's it! If we didn't have this consistency, this means we would have to maintain different sets of screenshots due to the fact that each environment might produce different screenshots. In fact, that's how we started - and we noticed it wouldn't be sustainable. diff --git a/e2e-tests/commands.md b/e2e-tests/commands.md deleted file mode 100644 index dce435197d..0000000000 --- a/e2e-tests/commands.md +++ /dev/null @@ -1,34 +0,0 @@ -# Handy commands - -## Layout compare (layout=1 vs existing baseline) -```bash -# Single file -npm run layout-compare -- test-data/basic-documents/longer-header.docx - -# All docs -npm run layout-compare - -# Update baseline -npm run layout-compare -- --update-snapshots test-data/basic-documents/longer-header.docx -``` - -## Layout engine suite -```bash -# All docs -npm run test:layout - -# All docs in Docker -npm run test:layout:docker - -# Single doc -npm run test:layout -- --grep longer-header - -# Update baseline -npm run test:layout -- --grep longer-header --update-snapshots - -# Update baseline (all) in Docker -npm run update-screenshots:layout:docker - -# Update baseline (all) locally -npm run update-screenshots:layout -``` diff --git a/e2e-tests/docker-settings.png b/e2e-tests/docker-settings.png deleted file mode 100644 index f901ab578f..0000000000 Binary files a/e2e-tests/docker-settings.png and /dev/null differ diff --git a/e2e-tests/helpers/extract-performance-results.js b/e2e-tests/helpers/extract-performance-results.js deleted file mode 100644 index 780a599653..0000000000 --- a/e2e-tests/helpers/extract-performance-results.js +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env node - -import fs from 'fs'; -import path from 'path'; - -// Function to recursively find all test results in the nested structure -function extractTestResults(suites) { - const results = []; - - suites.forEach((suite) => { - if (suite.file.toLowerCase() !== 'performance/performance.spec.js') { - return; - } - if (suite.specs) { - suite.specs.forEach((spec) => { - if (spec.tests) { - spec.tests.forEach((test) => { - if (test.results) { - test.results.forEach((result) => { - if (result.status === 'failed') { - let expectedValue = 'N/A'; - let receivedValue = 'N/A'; - - if (result.error) { - const cleanMessage = result.error.message.replace(/\u001b\[[0-9;]*m/g, ''); - // Be tolerant to extra spaces - const match = cleanMessage.match(/Expected:\s*<\s*(\d+)\s*\nReceived:\s*(\d+)/); - if (match) { - expectedValue = `< ${match[1]}ms`; - receivedValue = `${match[2]}ms`; - } - } - - results.push({ - testName: spec.title, - specFile: spec.file, - expectedValue, - receivedValue, - testDuration: result.duration || 0, - }); - } - }); - } - }); - } - }); - } - - if (suite.suites) { - results.push(...extractTestResults(suite.suites)); - } - }); - - return results; -} - -// Function to extract performance test results -function extractPerformanceResults(jsonPath) { - const data = JSON.parse(fs.readFileSync(jsonPath, 'utf8')); - const allResults = extractTestResults(data.suites); - - // Keep only results from the performance specs folder - return allResults.filter((result) => result.specFile && result.specFile.includes('performance/')); -} - -// Function to format results as plain text -function formatResultsAsText(results) { - if (results.length === 0) { - return 'No failed performance tests found.\n'; - } - - let output = `Failed Performance Tests: ${results.length}\n\n`; - - results.forEach((result, index) => { - output += `${index + 1}. ${result.testName}\n`; - output += ` Expected: ${result.expectedValue}\n`; - output += ` Received: ${result.receivedValue}\n`; - output += ` Test Duration: ${result.testDuration}ms\n\n`; - }); - - return output; -} - -// Main execution -function main() { - // Fixed path to the Playwright JSON report (matches playwright.config.js) - const jsonPath = path.join(process.cwd(), '../test-results', 'playwright-report.json'); - - if (!fs.existsSync(jsonPath)) { - console.error(`Playwright JSON report not found at: ${jsonPath}`); - process.exit(1); - } - - const results = extractPerformanceResults(jsonPath); - const formattedOutput = formatResultsAsText(results); - - // Write results to STDOUT only - process.stdout.write(formattedOutput); -} - -main(); diff --git a/e2e-tests/helpers/extract-toolbar-results.js b/e2e-tests/helpers/extract-toolbar-results.js deleted file mode 100644 index 94fd30fa34..0000000000 --- a/e2e-tests/helpers/extract-toolbar-results.js +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env node - -import fs from 'fs'; -import path from 'path'; - -// Function to recursively find toolbar test results -function extractTestResults(suites) { - const results = []; - - suites.forEach((suite) => { - if (suite.file && suite.file.includes('toolbar')) { - if (suite.specs) { - suite.specs.forEach((spec) => { - if (!spec.ok) { - results.push(`- ${spec.title} โŒ`); - } - }); - } - } - - if (suite.suites) { - results.push(...extractTestResults(suite.suites)); - } - }); - - return results; -} - -// Main execution -function main() { - try { - const reportPath = path.join(process.cwd(), '../test-results/playwright-report.json'); - - if (!fs.existsSync(reportPath)) { - console.error(`Playwright JSON report not found at: ${reportPath}`); - process.exit(1); - } - - const reportData = JSON.parse(fs.readFileSync(reportPath, 'utf8')); - const results = extractTestResults(reportData.suites); - - process.stdout.write(results.join('\n')); - } catch (error) { - process.stderr.write(`Error reading or parsing the report: ${error.message}`); - process.exit(1); - } -} - -main(); diff --git a/e2e-tests/helpers/run-layout-compare.js b/e2e-tests/helpers/run-layout-compare.js deleted file mode 100644 index 92cc1be9e4..0000000000 --- a/e2e-tests/helpers/run-layout-compare.js +++ /dev/null @@ -1,33 +0,0 @@ -import { spawnSync } from 'child_process'; -import path from 'path'; - -const args = process.argv.slice(2); -const fileArg = args.find((arg) => !arg.startsWith('-')); -const playwrightArgs = args.filter((arg) => arg !== fileArg); - -const env = { - ...process.env, - LAYOUT_COMPARE: '1', - ...(fileArg ? { VISUAL_FILE: path.normalize(fileArg) } : {}), -}; - -const result = spawnSync('npx', ['playwright', 'test', 'tests/visuals/layout-compare.spec.js', ...playwrightArgs], { - stdio: 'inherit', - env, -}); - -if (result.error) { - if (result.error.code === 'ENOENT') { - console.error('Error: npx command not found. Please ensure Node.js and npm are installed.'); - process.exit(1); - } - console.error('Error executing npx:', result.error.message); - process.exit(1); -} - -if (result.signal) { - console.error(`Process terminated by signal: ${result.signal}`); - process.exit(1); -} - -process.exit(result.status ?? 1); diff --git a/e2e-tests/package.json b/e2e-tests/package.json deleted file mode 100644 index 2e3999058d..0000000000 --- a/e2e-tests/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "superdoc-tests", - "version": "1.0.0", - "main": "index.js", - "type": "module", - "scripts": { - "build": "docker build -t playwright -f Dockerfile ..", - "build:nocache": "docker build --pull --no-cache -t playwright -f Dockerfile ..", - "update-screenshots": "pnpm run build && docker run -e PLAYWRIGHT_ARGS='--update-snapshots' --rm -v ./test-results:/app/e2e-tests/test-results -v ./tests/visuals:/app/e2e-tests/tests/visuals -ti playwright", - "update-screenshots:layout": "LAYOUT_ENGINE=1 playwright test tests/visuals/layout-engine.spec.js --update-snapshots=all", - "update-screenshots:layout:docker": "pnpm run build && docker run --rm --cpus=4 --memory=8gb -e LAYOUT_ENGINE=1 -e PLAYWRIGHT_ARGS='tests/visuals/layout-engine.spec.js --update-snapshots=all' -v ./test-results:/app/e2e-tests/test-results -v ./tests:/app/e2e-tests/tests -ti playwright", - "layout-compare": "node ./helpers/run-layout-compare.js", - "test:local": "docker run --rm --cpus=4 --memory=8gb -v ./test-results:/app/e2e-tests/test-results -v ./tests:/app/e2e-tests/tests -ti playwright", - "test": "playwright test", - "test:ui": "playwright test --ui -g", - "test:layout:docker": "docker run --rm --cpus=4 --memory=8gb -e LAYOUT_ENGINE=1 -e PLAYWRIGHT_ARGS='tests/visuals/layout-engine.spec.js' -v ./test-results:/app/e2e-tests/test-results -v ./tests:/app/e2e-tests/tests -ti playwright", - "test:layout": "LAYOUT_ENGINE=1 playwright test tests/visuals/layout-engine.spec.js --reporter=list", - "template": "pnpm run --prefix templates/vue dev" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/superdoc-dev/superdoc.git" - }, - "keywords": [], - "author": "gabriel@superdoc.dev", - "license": "ISC", - "description": "", - "dependencies": { - "@fontsource/inter": "catalog:", - "@linear/sdk": "catalog:", - "@playwright/test": "catalog:", - "jszip": "catalog:", - "patch-package": "catalog:", - "playwright": "catalog:", - "vue": "catalog:" - }, - "devDependencies": { - "@types/node": "catalog:", - "@vitejs/plugin-vue": "catalog:", - "jimp": "catalog:", - "nodemon": "catalog:", - "pixelmatch": "catalog:", - "vite": "catalog:" - }, - "workspaces": [ - "templates/vue" - ] -} diff --git a/e2e-tests/playwright.config.js b/e2e-tests/playwright.config.js deleted file mode 100644 index 8e73975c1a..0000000000 --- a/e2e-tests/playwright.config.js +++ /dev/null @@ -1,35 +0,0 @@ -// @ts-check -import { defineConfig, devices } from '@playwright/test'; - -const baseURL = 'http://localhost:4173'; -/** - * @see https://playwright.dev/docs/test-configuration - */ -export default defineConfig({ - testDir: './tests', - fullyParallel: true, - /* Fail the build on CI if you accidentally left test.only in the source code. */ - forbidOnly: !!process.env.CI, - retries: process.env.CI ? 2 : 0, - workers: process.env.CI ? 4 : undefined, - captureGitInfo: { commit: false, diff: false }, - reporter: [['json', { outputFile: 'test-results/playwright-report.json' }]], - expect: { - toHaveScreenshot: { maxDiffPixels: 2500 }, - }, - use: { - trace: 'off', - baseURL, - }, - projects: [ - { - name: 'chromium', - use: { ...devices['Desktop Chrome'] }, - }, - ], - webServer: { - command: 'pnpm run --prefix templates/vue build && pnpm run --prefix templates/vue preview', - url: baseURL, - reuseExistingServer: !process.env.CI, - }, -}); diff --git a/e2e-tests/reporters/layout-engine-reporter.js b/e2e-tests/reporters/layout-engine-reporter.js deleted file mode 100644 index fb8b698dcd..0000000000 --- a/e2e-tests/reporters/layout-engine-reporter.js +++ /dev/null @@ -1,77 +0,0 @@ -import fs from 'fs'; -import path from 'path'; -import crypto from 'crypto'; - -/** - * Custom Playwright reporter that reorganizes layout engine test results - * into a cleaner folder structure: - * test-results/visuals-layout-engine/-/ - */ -class LayoutEngineReporter { - constructor(options = {}) { - this.outputDir = options.outputDir || 'test-results'; - this.layoutEngineDir = path.join(this.outputDir, 'visuals-layout-engine'); - } - - onTestEnd(test, result) { - // Only process layout engine tests - if (!test.title || !test.parent?.title?.includes('layout engine')) { - return; - } - - // Only process failed tests with attachments - if (result.status === 'passed' || !result.attachments?.length) { - return; - } - - // Extract the document filename from the test title (e.g., "basic-documents-list-style.docx") - const testId = test.title; - const hash = crypto.createHash('md5').update(testId).digest('hex').slice(0, 6); - const cleanName = `${testId.replace(/\.[^.]+$/, '')}-${hash}`; - - const targetDir = path.join(this.layoutEngineDir, cleanName); - - // Ensure target directory exists - if (!fs.existsSync(targetDir)) { - fs.mkdirSync(targetDir, { recursive: true }); - } - - // Copy attachments to the new location - for (const attachment of result.attachments) { - if (attachment.path && fs.existsSync(attachment.path)) { - const fileName = path.basename(attachment.path); - const targetPath = path.join(targetDir, fileName); - - try { - fs.copyFileSync(attachment.path, targetPath); - } catch (err) { - console.error(`Failed to copy ${attachment.path} to ${targetPath}:`, err.message); - } - } - } - } - - onEnd(result) { - // Clean up original truncated folders for layout engine tests - if (!fs.existsSync(this.outputDir)) return; - - const entries = fs.readdirSync(this.outputDir, { withFileTypes: true }); - - for (const entry of entries) { - if (!entry.isDirectory()) continue; - - // Match the truncated Playwright folder pattern for layout engine tests - // Pattern: visuals-layout-engine-layo-XXXXX-... - if (entry.name.startsWith('visuals-layout-engine-layo-')) { - const folderPath = path.join(this.outputDir, entry.name); - try { - fs.rmSync(folderPath, { recursive: true, force: true }); - } catch (err) { - console.error(`Failed to remove ${folderPath}:`, err.message); - } - } - } - } -} - -export default LayoutEngineReporter; diff --git a/e2e-tests/templates/vue/.gitignore b/e2e-tests/templates/vue/.gitignore deleted file mode 100644 index a547bf36d8..0000000000 --- a/e2e-tests/templates/vue/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/e2e-tests/templates/vue/index.html b/e2e-tests/templates/vue/index.html deleted file mode 100644 index 7487f534cd..0000000000 --- a/e2e-tests/templates/vue/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - SuperDoc: Main template - - -
- - - diff --git a/e2e-tests/templates/vue/package.json b/e2e-tests/templates/vue/package.json deleted file mode 100644 index cc03fbb89c..0000000000 --- a/e2e-tests/templates/vue/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "vue-html-editor", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "prebuild": "pnpm --filter superdoc build", - "build": "vite build", - "preview": "vite preview" - }, - "dependencies": { - "@fontsource/inter": "catalog:", - "superdoc": "workspace:*", - "vue": "catalog:" - }, - "devDependencies": { - "@vitejs/plugin-vue": "catalog:", - "vite": "catalog:" - } -} diff --git a/e2e-tests/templates/vue/public/logo.webp b/e2e-tests/templates/vue/public/logo.webp deleted file mode 100644 index f36a71b86d..0000000000 Binary files a/e2e-tests/templates/vue/public/logo.webp and /dev/null differ diff --git a/e2e-tests/templates/vue/public/sample-document.docx b/e2e-tests/templates/vue/public/sample-document.docx deleted file mode 100644 index 8ec8fb94b9..0000000000 Binary files a/e2e-tests/templates/vue/public/sample-document.docx and /dev/null differ diff --git a/e2e-tests/templates/vue/public/superdoc-logo.png b/e2e-tests/templates/vue/public/superdoc-logo.png deleted file mode 100644 index 0e1a8349a3..0000000000 Binary files a/e2e-tests/templates/vue/public/superdoc-logo.png and /dev/null differ diff --git a/e2e-tests/templates/vue/src/App.vue b/e2e-tests/templates/vue/src/App.vue deleted file mode 100644 index 07a10e6117..0000000000 --- a/e2e-tests/templates/vue/src/App.vue +++ /dev/null @@ -1,197 +0,0 @@ - - - - - diff --git a/e2e-tests/templates/vue/src/custom-mark.js b/e2e-tests/templates/vue/src/custom-mark.js deleted file mode 100644 index a1c36965e9..0000000000 --- a/e2e-tests/templates/vue/src/custom-mark.js +++ /dev/null @@ -1,46 +0,0 @@ -import { Extensions } from 'superdoc/super-editor'; - -const { Attribute } = Extensions; -export const CustomMark = Extensions.Mark.create({ - name: 'customMark', - - addOptions() { - return { - 'data-id': this.name, - htmlAttributes: { - class: 'my-custom-mark-class', // This style is defined in your main app. See style.css - }, - }; - }, - - parseDOM() { - return false; - }, - - addAttributes() { - return { - 'data-custom-id': { - default: null, - parseHTML: (element) => { - return element.getAttribute('data-custom-id') || this.options['data-id']; - }, - }, - }; - }, - - renderDOM({ htmlAttributes }) { - return ['span', Attribute.mergeAttributes(this.options.htmlAttributes, htmlAttributes), 0]; - }, - - addCommands() { - return { - setMyCustomMark: - (id) => - ({ commands, tr }) => { - if (!id) id = Math.random().toString(36).substring(2, 7); - // set Mark accepts the attributes that are defined in the addAttributes method - commands.setMark(this.name, { 'data-custom-id': id }); - }, - }; - }, -}); diff --git a/e2e-tests/templates/vue/src/data/blank.docx b/e2e-tests/templates/vue/src/data/blank.docx deleted file mode 100644 index 17ffa6783c..0000000000 Binary files a/e2e-tests/templates/vue/src/data/blank.docx and /dev/null differ diff --git a/e2e-tests/templates/vue/src/main.js b/e2e-tests/templates/vue/src/main.js deleted file mode 100644 index 96855e5103..0000000000 --- a/e2e-tests/templates/vue/src/main.js +++ /dev/null @@ -1,7 +0,0 @@ -import { createApp } from 'vue'; -import '@fontsource/inter/400.css'; -import '@fontsource/inter/600.css'; -import './style.css'; -import App from './App.vue'; - -createApp(App).mount('#app'); diff --git a/e2e-tests/templates/vue/src/style.css b/e2e-tests/templates/vue/src/style.css deleted file mode 100644 index b57603f889..0000000000 --- a/e2e-tests/templates/vue/src/style.css +++ /dev/null @@ -1,71 +0,0 @@ -:root { - font-family: - 'InterVariable', - 'Inter', - -apple-system, - BlinkMacSystemFont, - 'Segoe UI', - system-ui, - sans-serif; - line-height: 1.5; - font-weight: 400; - - color: rgba(0, 0, 0, 0.87); - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 2.2em; - line-height: 1.1; -} - -#app { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; -} - -.example-container { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; -} -.editor-and-button { - display: flex; - flex-direction: row; - align-items: flex-start; - justify-content: center; -} -.editor-buttons button { - margin-bottom: 10px; -} -.insert-mark { - padding: 8px 12px; - border-radius: 8px; - margin-left: 10px; - outline: none; - border: none; - background-color: #aecee6; -} diff --git a/e2e-tests/templates/vue/vite.config.js b/e2e-tests/templates/vue/vite.config.js deleted file mode 100644 index 5d25b7a58d..0000000000 --- a/e2e-tests/templates/vue/vite.config.js +++ /dev/null @@ -1,10 +0,0 @@ -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' - -// https://vite.dev/config/ -export default defineConfig({ - plugins: [vue()], - optimizeDeps: { - exclude: ['superdoc'], - }, -}) diff --git a/e2e-tests/test-config.js b/e2e-tests/test-config.js deleted file mode 100644 index 8e015e81cd..0000000000 --- a/e2e-tests/test-config.js +++ /dev/null @@ -1,5 +0,0 @@ -export default { - basicDocumentsFolder: './test-data/basic-documents', - commentsDocumentsFolder: './test-data/comments-documents', - ignoreDocuments: ['calibra.docx'], -}; diff --git a/e2e-tests/test-data/basic-documents/advanced-tables.docx b/e2e-tests/test-data/basic-documents/advanced-tables.docx deleted file mode 100644 index 815ac36453..0000000000 Binary files a/e2e-tests/test-data/basic-documents/advanced-tables.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/advanced-text.docx b/e2e-tests/test-data/basic-documents/advanced-text.docx deleted file mode 100644 index cf9ef53479..0000000000 Binary files a/e2e-tests/test-data/basic-documents/advanced-text.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/base-custom.docx b/e2e-tests/test-data/basic-documents/base-custom.docx deleted file mode 100644 index b72f4b70de..0000000000 Binary files a/e2e-tests/test-data/basic-documents/base-custom.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/base-list-style-indent.docx b/e2e-tests/test-data/basic-documents/base-list-style-indent.docx deleted file mode 100644 index be5681dc69..0000000000 Binary files a/e2e-tests/test-data/basic-documents/base-list-style-indent.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/base-ordered.docx b/e2e-tests/test-data/basic-documents/base-ordered.docx deleted file mode 100644 index 4ce454e09b..0000000000 Binary files a/e2e-tests/test-data/basic-documents/base-ordered.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/broken-list-missing-items.docx b/e2e-tests/test-data/basic-documents/broken-list-missing-items.docx deleted file mode 100644 index d431bc499f..0000000000 Binary files a/e2e-tests/test-data/basic-documents/broken-list-missing-items.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/contextual-spacing.docx b/e2e-tests/test-data/basic-documents/contextual-spacing.docx deleted file mode 100644 index a8893da7bd..0000000000 Binary files a/e2e-tests/test-data/basic-documents/contextual-spacing.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/contract-acc.docx b/e2e-tests/test-data/basic-documents/contract-acc.docx deleted file mode 100644 index 678c849b6d..0000000000 Binary files a/e2e-tests/test-data/basic-documents/contract-acc.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/custom-list-numbering.docx b/e2e-tests/test-data/basic-documents/custom-list-numbering.docx deleted file mode 100644 index ec623eb1ee..0000000000 Binary files a/e2e-tests/test-data/basic-documents/custom-list-numbering.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/custom-list1.docx b/e2e-tests/test-data/basic-documents/custom-list1.docx deleted file mode 100644 index e018ff7533..0000000000 Binary files a/e2e-tests/test-data/basic-documents/custom-list1.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/exported-list-font.docx b/e2e-tests/test-data/basic-documents/exported-list-font.docx deleted file mode 100644 index 6949e3f676..0000000000 Binary files a/e2e-tests/test-data/basic-documents/exported-list-font.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/extensions-structured-content.docx b/e2e-tests/test-data/basic-documents/extensions-structured-content.docx deleted file mode 100644 index 08d0d8c82e..0000000000 Binary files a/e2e-tests/test-data/basic-documents/extensions-structured-content.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/features-lists.docx b/e2e-tests/test-data/basic-documents/features-lists.docx deleted file mode 100644 index 6ddcda7284..0000000000 Binary files a/e2e-tests/test-data/basic-documents/features-lists.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/features-redlines-comments-annotations-and-more.docx b/e2e-tests/test-data/basic-documents/features-redlines-comments-annotations-and-more.docx deleted file mode 100644 index fe87537ca2..0000000000 Binary files a/e2e-tests/test-data/basic-documents/features-redlines-comments-annotations-and-more.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/gdocs-comments-export.docx b/e2e-tests/test-data/basic-documents/gdocs-comments-export.docx deleted file mode 100644 index 99efc2db5e..0000000000 Binary files a/e2e-tests/test-data/basic-documents/gdocs-comments-export.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/gdocs-tracked-changes.docx b/e2e-tests/test-data/basic-documents/gdocs-tracked-changes.docx deleted file mode 100644 index 7113fe646d..0000000000 Binary files a/e2e-tests/test-data/basic-documents/gdocs-tracked-changes.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/header-footer-anchored-images.docx b/e2e-tests/test-data/basic-documents/header-footer-anchored-images.docx deleted file mode 100644 index 1c6343aa3b..0000000000 Binary files a/e2e-tests/test-data/basic-documents/header-footer-anchored-images.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/hyperlink-font-size.docx b/e2e-tests/test-data/basic-documents/hyperlink-font-size.docx deleted file mode 100644 index 01b939490a..0000000000 Binary files a/e2e-tests/test-data/basic-documents/hyperlink-font-size.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/image-center-tab.docx b/e2e-tests/test-data/basic-documents/image-center-tab.docx deleted file mode 100644 index 429ed7aee5..0000000000 Binary files a/e2e-tests/test-data/basic-documents/image-center-tab.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/image-wrapping.docx b/e2e-tests/test-data/basic-documents/image-wrapping.docx deleted file mode 100644 index 99d0485935..0000000000 Binary files a/e2e-tests/test-data/basic-documents/image-wrapping.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/invalid-list-def-fallback.docx b/e2e-tests/test-data/basic-documents/invalid-list-def-fallback.docx deleted file mode 100644 index 09d5b118a9..0000000000 Binary files a/e2e-tests/test-data/basic-documents/invalid-list-def-fallback.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/list-abs-ids.docx b/e2e-tests/test-data/basic-documents/list-abs-ids.docx deleted file mode 100644 index e431eeccbb..0000000000 Binary files a/e2e-tests/test-data/basic-documents/list-abs-ids.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/list-formatting-indents.docx b/e2e-tests/test-data/basic-documents/list-formatting-indents.docx deleted file mode 100644 index b03a78fda1..0000000000 Binary files a/e2e-tests/test-data/basic-documents/list-formatting-indents.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/list-markers.docx b/e2e-tests/test-data/basic-documents/list-markers.docx deleted file mode 100644 index 5a048bb354..0000000000 Binary files a/e2e-tests/test-data/basic-documents/list-markers.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/list-mixed-abstract-ids.docx b/e2e-tests/test-data/basic-documents/list-mixed-abstract-ids.docx deleted file mode 100644 index fe8e3d621a..0000000000 Binary files a/e2e-tests/test-data/basic-documents/list-mixed-abstract-ids.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/list-restart.docx b/e2e-tests/test-data/basic-documents/list-restart.docx deleted file mode 100644 index b1f7f5416b..0000000000 Binary files a/e2e-tests/test-data/basic-documents/list-restart.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/list-style.docx b/e2e-tests/test-data/basic-documents/list-style.docx deleted file mode 100644 index a52613b25c..0000000000 Binary files a/e2e-tests/test-data/basic-documents/list-style.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/list-with-table-break.docx b/e2e-tests/test-data/basic-documents/list-with-table-break.docx deleted file mode 100644 index 1ed93d5003..0000000000 Binary files a/e2e-tests/test-data/basic-documents/list-with-table-break.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/lists-complex-items.docx b/e2e-tests/test-data/basic-documents/lists-complex-items.docx deleted file mode 100644 index e02cc1b914..0000000000 Binary files a/e2e-tests/test-data/basic-documents/lists-complex-items.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/longer-header.docx b/e2e-tests/test-data/basic-documents/longer-header.docx deleted file mode 100644 index f57f490fad..0000000000 Binary files a/e2e-tests/test-data/basic-documents/longer-header.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/msa-list-base-indent.docx b/e2e-tests/test-data/basic-documents/msa-list-base-indent.docx deleted file mode 100644 index 9ab72c3d82..0000000000 Binary files a/e2e-tests/test-data/basic-documents/msa-list-base-indent.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/msword-tracked-changes.docx b/e2e-tests/test-data/basic-documents/msword-tracked-changes.docx deleted file mode 100644 index 390f887e26..0000000000 Binary files a/e2e-tests/test-data/basic-documents/msword-tracked-changes.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/multiple-nodes-in-list.docx b/e2e-tests/test-data/basic-documents/multiple-nodes-in-list.docx deleted file mode 100644 index decd37e672..0000000000 Binary files a/e2e-tests/test-data/basic-documents/multiple-nodes-in-list.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/ooxml-bold-rstyle-linked-combos-demo.docx b/e2e-tests/test-data/basic-documents/ooxml-bold-rstyle-linked-combos-demo.docx deleted file mode 100644 index adbeb239e5..0000000000 Binary files a/e2e-tests/test-data/basic-documents/ooxml-bold-rstyle-linked-combos-demo.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/ooxml-color-rstyle-linked-combos-demo.docx b/e2e-tests/test-data/basic-documents/ooxml-color-rstyle-linked-combos-demo.docx deleted file mode 100644 index 99c3f636f0..0000000000 Binary files a/e2e-tests/test-data/basic-documents/ooxml-color-rstyle-linked-combos-demo.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/ooxml-highlight-rstyle-linked-combos-demo.docx b/e2e-tests/test-data/basic-documents/ooxml-highlight-rstyle-linked-combos-demo.docx deleted file mode 100644 index ae5d08ffdc..0000000000 Binary files a/e2e-tests/test-data/basic-documents/ooxml-highlight-rstyle-linked-combos-demo.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/ooxml-italic-rstyle-combos-demo.docx b/e2e-tests/test-data/basic-documents/ooxml-italic-rstyle-combos-demo.docx deleted file mode 100644 index 95213b4477..0000000000 Binary files a/e2e-tests/test-data/basic-documents/ooxml-italic-rstyle-combos-demo.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/ooxml-rFonts-rstyle-linked-combos-demo.docx b/e2e-tests/test-data/basic-documents/ooxml-rFonts-rstyle-linked-combos-demo.docx deleted file mode 100644 index 9982193178..0000000000 Binary files a/e2e-tests/test-data/basic-documents/ooxml-rFonts-rstyle-linked-combos-demo.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/ooxml-size-rstyle-linked-combos-demo.docx b/e2e-tests/test-data/basic-documents/ooxml-size-rstyle-linked-combos-demo.docx deleted file mode 100644 index 68d571fef0..0000000000 Binary files a/e2e-tests/test-data/basic-documents/ooxml-size-rstyle-linked-combos-demo.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/ooxml-strike-rstyle-linked-combos-demo.docx b/e2e-tests/test-data/basic-documents/ooxml-strike-rstyle-linked-combos-demo.docx deleted file mode 100644 index fccfb8471e..0000000000 Binary files a/e2e-tests/test-data/basic-documents/ooxml-strike-rstyle-linked-combos-demo.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/ooxml-underline-rstyle-linked-combos-demo.docx b/e2e-tests/test-data/basic-documents/ooxml-underline-rstyle-linked-combos-demo.docx deleted file mode 100644 index 2a64d4ce35..0000000000 Binary files a/e2e-tests/test-data/basic-documents/ooxml-underline-rstyle-linked-combos-demo.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/restart-numbering-sub-list.docx b/e2e-tests/test-data/basic-documents/restart-numbering-sub-list.docx deleted file mode 100644 index 43780de442..0000000000 Binary files a/e2e-tests/test-data/basic-documents/restart-numbering-sub-list.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/sdpr.docx b/e2e-tests/test-data/basic-documents/sdpr.docx deleted file mode 100644 index e31ad385a9..0000000000 Binary files a/e2e-tests/test-data/basic-documents/sdpr.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/sublist-issue.docx b/e2e-tests/test-data/basic-documents/sublist-issue.docx deleted file mode 100644 index 4fb91fbad6..0000000000 Binary files a/e2e-tests/test-data/basic-documents/sublist-issue.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/superdoc-hyperlink-cases.docx b/e2e-tests/test-data/basic-documents/superdoc-hyperlink-cases.docx deleted file mode 100644 index 1d0b02243f..0000000000 Binary files a/e2e-tests/test-data/basic-documents/superdoc-hyperlink-cases.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/tab-stops-basic-test.docx b/e2e-tests/test-data/basic-documents/tab-stops-basic-test.docx deleted file mode 100644 index e019414e73..0000000000 Binary files a/e2e-tests/test-data/basic-documents/tab-stops-basic-test.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/tab-stops-test-signer-area.docx b/e2e-tests/test-data/basic-documents/tab-stops-test-signer-area.docx deleted file mode 100644 index c3371535c5..0000000000 Binary files a/e2e-tests/test-data/basic-documents/tab-stops-test-signer-area.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/table-in-list.docx b/e2e-tests/test-data/basic-documents/table-in-list.docx deleted file mode 100644 index 09edf67ea0..0000000000 Binary files a/e2e-tests/test-data/basic-documents/table-in-list.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/table-of-contents-sdt.docx b/e2e-tests/test-data/basic-documents/table-of-contents-sdt.docx deleted file mode 100644 index ec9ff2cc0f..0000000000 Binary files a/e2e-tests/test-data/basic-documents/table-of-contents-sdt.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/table-of-contents.docx b/e2e-tests/test-data/basic-documents/table-of-contents.docx deleted file mode 100644 index 460d3439d0..0000000000 Binary files a/e2e-tests/test-data/basic-documents/table-of-contents.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/table-width-issue.docx b/e2e-tests/test-data/basic-documents/table-width-issue.docx deleted file mode 100644 index 14187c63dd..0000000000 Binary files a/e2e-tests/test-data/basic-documents/table-width-issue.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/table-widths-SD-732.docx b/e2e-tests/test-data/basic-documents/table-widths-SD-732.docx deleted file mode 100644 index ad85029674..0000000000 Binary files a/e2e-tests/test-data/basic-documents/table-widths-SD-732.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/table-with-block-bookmarks.docx b/e2e-tests/test-data/basic-documents/table-with-block-bookmarks.docx deleted file mode 100644 index 7dd059a887..0000000000 Binary files a/e2e-tests/test-data/basic-documents/table-with-block-bookmarks.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/tiny-spacing.docx b/e2e-tests/test-data/basic-documents/tiny-spacing.docx deleted file mode 100644 index 99a77595a5..0000000000 Binary files a/e2e-tests/test-data/basic-documents/tiny-spacing.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/vertical-merge.docx b/e2e-tests/test-data/basic-documents/vertical-merge.docx deleted file mode 100644 index d1159e37eb..0000000000 Binary files a/e2e-tests/test-data/basic-documents/vertical-merge.docx and /dev/null differ diff --git a/e2e-tests/test-data/basic-documents/wmf-emf.docx b/e2e-tests/test-data/basic-documents/wmf-emf.docx deleted file mode 100644 index a11116fded..0000000000 Binary files a/e2e-tests/test-data/basic-documents/wmf-emf.docx and /dev/null differ diff --git a/e2e-tests/test-data/comments-documents/basic-comments.docx b/e2e-tests/test-data/comments-documents/basic-comments.docx deleted file mode 100644 index 1c7795bdd6..0000000000 Binary files a/e2e-tests/test-data/comments-documents/basic-comments.docx and /dev/null differ diff --git a/e2e-tests/test-data/comments-documents/tracked-changes.docx b/e2e-tests/test-data/comments-documents/tracked-changes.docx deleted file mode 100644 index 18373bbe22..0000000000 Binary files a/e2e-tests/test-data/comments-documents/tracked-changes.docx and /dev/null differ diff --git a/e2e-tests/test-data/font-documents/600-pages-multiple-fonts.docx b/e2e-tests/test-data/font-documents/600-pages-multiple-fonts.docx deleted file mode 100644 index 2166215e5e..0000000000 Binary files a/e2e-tests/test-data/font-documents/600-pages-multiple-fonts.docx and /dev/null differ diff --git a/e2e-tests/test-data/font-documents/embedded-fonts.docx b/e2e-tests/test-data/font-documents/embedded-fonts.docx deleted file mode 100644 index a6be388b5f..0000000000 Binary files a/e2e-tests/test-data/font-documents/embedded-fonts.docx and /dev/null differ diff --git a/e2e-tests/test-data/font-documents/inline-fonts.docx b/e2e-tests/test-data/font-documents/inline-fonts.docx deleted file mode 100644 index 53e0050738..0000000000 Binary files a/e2e-tests/test-data/font-documents/inline-fonts.docx and /dev/null differ diff --git a/e2e-tests/test-data/font-documents/supported-fonts-ubuntu.docx b/e2e-tests/test-data/font-documents/supported-fonts-ubuntu.docx deleted file mode 100644 index ba9949909f..0000000000 Binary files a/e2e-tests/test-data/font-documents/supported-fonts-ubuntu.docx and /dev/null differ diff --git a/e2e-tests/test-data/image-documents/image-resizer.docx b/e2e-tests/test-data/image-documents/image-resizer.docx deleted file mode 100644 index 0fafe13a0b..0000000000 Binary files a/e2e-tests/test-data/image-documents/image-resizer.docx and /dev/null differ diff --git a/e2e-tests/test-data/performance-documents/300-pages.docx b/e2e-tests/test-data/performance-documents/300-pages.docx deleted file mode 100644 index d1160a4bde..0000000000 Binary files a/e2e-tests/test-data/performance-documents/300-pages.docx and /dev/null differ diff --git a/e2e-tests/test-data/performance-documents/40-pages.docx b/e2e-tests/test-data/performance-documents/40-pages.docx deleted file mode 100644 index d9fee55f26..0000000000 Binary files a/e2e-tests/test-data/performance-documents/40-pages.docx and /dev/null differ diff --git a/e2e-tests/test-data/performance-documents/600-pages.docx b/e2e-tests/test-data/performance-documents/600-pages.docx deleted file mode 100644 index 61a7d407dc..0000000000 Binary files a/e2e-tests/test-data/performance-documents/600-pages.docx and /dev/null differ diff --git a/e2e-tests/test-data/search-documents/regex-search.docx b/e2e-tests/test-data/search-documents/regex-search.docx deleted file mode 100644 index e338ab4e48..0000000000 Binary files a/e2e-tests/test-data/search-documents/regex-search.docx and /dev/null differ diff --git a/e2e-tests/test-data/structured-content/sdt-basic.docx b/e2e-tests/test-data/structured-content/sdt-basic.docx deleted file mode 100644 index cb164a8838..0000000000 Binary files a/e2e-tests/test-data/structured-content/sdt-basic.docx and /dev/null differ diff --git a/e2e-tests/tests/comments/comments.spec.js b/e2e-tests/tests/comments/comments.spec.js deleted file mode 100644 index febc96cb1d..0000000000 --- a/e2e-tests/tests/comments/comments.spec.js +++ /dev/null @@ -1,199 +0,0 @@ -import { test, expect } from '@playwright/test'; -import { goToPageAndWaitForEditor, sleep } from '../helpers.js'; -import { fileURLToPath } from 'url'; -import path from 'path'; - -test.describe('comments & tracked changes', () => { - const __filename = fileURLToPath(import.meta.url); - const testDataFolder = __filename.split('/tests/')[0] + '/test-data'; - - const comments = [ - { - author: 'Gabriel Chittolina (imported)', - text: 'Hey there', - date: new Date(1763038216000), - }, - { - author: 'Gabriel Chittolina (imported)', - text: 'Hi again', - date: new Date(1763038222000), - }, - ]; - - // This is now 4 tracked changes with 2 replacements , one addition and one deletion - const documentTrackedChanges = [ - { - author: 'SuperDoc 8083 (imported)', - text: ['Added: ', 'such as this one'], - date: new Date(1763743800000), - }, - { - author: 'SuperDoc 8083 (imported)', - text: ['Deleted: ', 'removed'], - date: new Date(1763743800000), - }, - { - author: 'SuperDoc 8083 (imported)', - text: ['Added: ', 'switched', 'Deleted: ', 'replaced'], - date: new Date(1763743800000), - }, - { - author: 'SuperDoc 8083 (imported)', - text: ['Added: ', 'add', 'Deleted: ', 'rem'], - date: new Date(1763743800000), - }, - ]; - - // Format date as "9:50AM Nov 13" for comments - const formatDate = (date) => { - let hours = date.getHours(); - const minutes = date.getMinutes().toString().padStart(2, '0'); - const ampm = hours >= 12 ? 'PM' : 'AM'; - hours = hours % 12 || 12; - - const month = date.toLocaleString('en-US', { month: 'short' }); - const day = date.getDate(); - - return `${hours}:${minutes}${ampm} ${month} ${day}`; - }; - - test('should import comments', async ({ page }) => { - await goToPageAndWaitForEditor(page, { includeComments: true }); - await page - .locator('input[type="file"]') - .setInputFiles(path.join(testDataFolder, 'comments-documents/basic-comments.docx')); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - // Wait for comments to be loaded - await sleep(1000); - - // Find all comments by "Gabriel Chittolina (imported)" - const commentsElements = page - .getByRole('dialog') - .filter({ hasText: 'Gabriel Chittolina (imported)', visible: true }); - const commentCount = await commentsElements.count(); - expect(commentCount).toBe(2); - }); - - test('should have correct comment text', async ({ page }) => { - await goToPageAndWaitForEditor(page, { includeComments: true }); - await page - .locator('input[type="file"]') - .setInputFiles(path.join(testDataFolder, 'comments-documents/basic-comments.docx')); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - await sleep(1000); - - const commentsElements = page - .getByRole('dialog') - .filter({ hasText: 'Gabriel Chittolina (imported)', visible: true }); - const commentCount = await commentsElements.count(); - - for (let i = 0; i < commentCount; i++) { - const comment = await commentsElements.nth(i); - await expect(comment).toBeVisible(); - await expect(comment).toContainText(comments[i].author); - await expect(comment).toContainText(comments[i].text); - await expect(comment).toContainText(formatDate(comments[i].date)); - } - }); - - test('should import all tracked changes', async ({ page }) => { - await goToPageAndWaitForEditor(page, { includeComments: true }); - await page - .locator('input[type="file"]') - .setInputFiles(path.join(testDataFolder, 'comments-documents/tracked-changes.docx')); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - await sleep(1000); - - const trackedChanges = page.getByRole('dialog').filter({ hasText: 'SuperDoc 8083 (imported)', visible: true }); - const trackedChangeCount = await trackedChanges.count(); - expect(trackedChangeCount).toBe(4); - }); - - test('should have correct tracked change text', async ({ page }) => { - await goToPageAndWaitForEditor(page, { includeComments: true }); - await page - .locator('input[type="file"]') - .setInputFiles(path.join(testDataFolder, 'comments-documents/tracked-changes.docx')); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - await sleep(1000); - - const trackedChanges = page.getByRole('dialog').filter({ hasText: 'SuperDoc 8083 (imported)', visible: true }); - const trackedChangeCount = await trackedChanges.count(); - - for (let i = 0; i < trackedChangeCount; i++) { - const trackedChange = await trackedChanges.nth(i); - await expect(trackedChange).toBeVisible(); - await expect(trackedChange).toContainText(documentTrackedChanges[i].author); - await expect(trackedChange).toContainText(formatDate(documentTrackedChanges[i].date)); - await expect(trackedChange).toContainText(documentTrackedChanges[i].text.join('')); - } - }); - - test('should hide comments in viewing mode by default', async ({ page }) => { - await goToPageAndWaitForEditor(page, { - includeComments: true, - layout: 1, - queryParams: { documentMode: 'viewing' }, - }); - await page - .locator('input[type="file"]') - .setInputFiles(path.join(testDataFolder, 'comments-documents/basic-comments.docx')); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - await sleep(1000); - - const commentsElements = page - .getByRole('dialog') - .filter({ hasText: 'Gabriel Chittolina (imported)', visible: true }); - const commentCount = await commentsElements.count(); - expect(commentCount).toBe(0); - }); - - test('should show comments in viewing mode when visible is true', async ({ page }) => { - await goToPageAndWaitForEditor(page, { - includeComments: true, - layout: 1, - queryParams: { documentMode: 'viewing', commentsVisible: true }, - }); - await page - .locator('input[type="file"]') - .setInputFiles(path.join(testDataFolder, 'comments-documents/basic-comments.docx')); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - await sleep(1000); - - const commentsElements = page - .getByRole('dialog') - .filter({ hasText: 'Gabriel Chittolina (imported)', visible: true }); - const commentCount = await commentsElements.count(); - expect(commentCount).toBe(2); - }); -}); diff --git a/e2e-tests/tests/fonts/fonts.spec.js b/e2e-tests/tests/fonts/fonts.spec.js deleted file mode 100644 index 7867a1a02c..0000000000 --- a/e2e-tests/tests/fonts/fonts.spec.js +++ /dev/null @@ -1,183 +0,0 @@ -import { test, expect } from '@playwright/test'; -import { goToPageAndWaitForEditor, sleep } from '../helpers.js'; - -test.describe('fonts', () => { - test('should resolve document fonts with blank doc', async ({ page, context }) => { - await context.grantPermissions(['local-fonts']); - - const resolvedFonts = {}; - - const onFontsResolved = new Promise((resolve) => { - page.exposeFunction('onFontsResolved', ({ documentFonts, unsupportedFonts }) => { - resolvedFonts.documentFonts = documentFonts.sort(); - resolvedFonts.unsupportedFonts = unsupportedFonts.sort(); - resolve(); - }); - }); - - await goToPageAndWaitForEditor(page, { includeFontsResolved: true }); - await onFontsResolved; - - expect(resolvedFonts).toEqual({ - documentFonts: ['Courier New', 'Arial', 'Times New Roman'].sort(), - unsupportedFonts: [], - }); - }); - - test('should resolve document fonts with only inline fonts', async ({ page, context }) => { - await context.grantPermissions(['local-fonts']); - - await goToPageAndWaitForEditor(page, { includeFontsResolved: true }); - - const resolvedFonts = {}; - const onFontsResolved = new Promise((resolve) => { - page.exposeFunction('onFontsResolved', ({ documentFonts, unsupportedFonts }) => { - resolvedFonts.documentFonts = documentFonts.sort(); - resolvedFonts.unsupportedFonts = unsupportedFonts.sort(); - resolve(); - }); - }); - - // This document doesn't have any fonts on the fontTable, but instead they are defined inline - await page.locator('input[type="file"]').setInputFiles(`./test-data/font-documents/inline-fonts.docx`); - - await onFontsResolved; - - // None of them are supported on the Ubuntu docker image but they must be here - expect(resolvedFonts).toEqual({ - documentFonts: ['Aptos', 'Arial', 'Comic Sans MS'].sort(), - unsupportedFonts: ['Aptos', 'Comic Sans MS'].sort(), - }); - }); - - test('should resolve fonts when all fonts are indeed supported', async ({ page, context }) => { - await context.grantPermissions(['local-fonts']); - - await goToPageAndWaitForEditor(page, { includeFontsResolved: true }); - - const resolvedFonts = {}; - const onFontsResolved = new Promise((resolve) => { - page.exposeFunction('onFontsResolved', ({ documentFonts, unsupportedFonts }) => { - resolvedFonts.documentFonts = documentFonts.sort(); - resolvedFonts.unsupportedFonts = unsupportedFonts.sort(); - resolve(); - }); - }); - - await page.locator('input[type="file"]').setInputFiles(`./test-data/font-documents/supported-fonts-ubuntu.docx`); - - await onFontsResolved; - await page.waitForSelector('div.super-editor'); - await expect(page.locator('div.super-editor').first()).toBeVisible(); - - expect(resolvedFonts).toEqual({ - // Arial is included because it's the document's default font in w:docDefaults - documentFonts: ['Arial', 'DejaVu Sans', 'Liberation Serif', 'Unifont Upper'].sort(), - unsupportedFonts: [], - }); - }); - - test('should resolve ~30 fonts with a very large document', async ({ page, context }) => { - test.setTimeout(15_000); - await context.grantPermissions(['local-fonts']); - - await goToPageAndWaitForEditor(page, { includeFontsResolved: true }); - - const resolvedFonts = {}; - const onFontsResolved = new Promise((resolve) => { - page.exposeFunction('onFontsResolved', ({ documentFonts, unsupportedFonts }) => { - resolvedFonts.documentFonts = documentFonts.sort(); - resolvedFonts.unsupportedFonts = unsupportedFonts.sort(); - resolve(); - }); - }); - - await page.locator('input[type="file"]').setInputFiles(`./test-data/font-documents/600-pages-multiple-fonts.docx`); - - await onFontsResolved; - - expect(resolvedFonts).toEqual({ - documentFonts: [ - 'Andale Mono', - 'AppleGothic', - 'BM DoHyeon OTF', - 'BM HANNA Air OTF', - 'BM YEONSUNG OTF', - 'Batang', - 'Calibri', - 'Calibri Light', - 'Cambria', - 'Cooper Black', - 'Didot', - 'Dotum', - 'Georgia', - 'Gulim', - 'HeadLineA', - 'Helvetica', - 'Malgun Gothic', - 'NANUMMYEONGJOEXTRABOLD', - 'Nanum Brush Script', - 'NanumMyeongjo', - 'October Compressed Devanagari', - 'Onest', - 'Open Sans', - 'PCMyungjo', - 'Papyrus', - 'Symbol', - 'Times New Roman', - 'Yu Gothic Medium', - ].sort(), - unsupportedFonts: [ - 'Andale Mono', - 'AppleGothic', - 'BM DoHyeon OTF', - 'BM HANNA Air OTF', - 'BM YEONSUNG OTF', - 'Batang', - 'Calibri', - 'Calibri Light', - 'Cambria', - 'Cooper Black', - 'Didot', - 'Dotum', - 'Georgia', - 'Gulim', - 'HeadLineA', - 'Malgun Gothic', - 'NANUMMYEONGJOEXTRABOLD', - 'Nanum Brush Script', - 'NanumMyeongjo', - 'October Compressed Devanagari', - 'Onest', - 'Open Sans', - 'PCMyungjo', - 'Papyrus', - 'Symbol', - 'Yu Gothic Medium', - ], - }); - }); - - test('should resolve embedded fonts', async ({ page, context }) => { - await context.grantPermissions(['local-fonts']); - await goToPageAndWaitForEditor(page, { includeFontsResolved: true }); - - const resolvedFonts = {}; - const onFontsResolved = new Promise((resolve) => { - page.exposeFunction('onFontsResolved', ({ documentFonts, unsupportedFonts }) => { - resolvedFonts.documentFonts = documentFonts.sort(); - resolvedFonts.unsupportedFonts = unsupportedFonts.sort(); - resolve(); - }); - }); - - await page.locator('input[type="file"]').setInputFiles(`./test-data/font-documents/embedded-fonts.docx`); - - await onFontsResolved; - - expect(resolvedFonts).toEqual({ - documentFonts: ['Aptos', 'Aptos Display', 'Times New Roman'].sort(), - unsupportedFonts: [], - }); - }); -}); diff --git a/e2e-tests/tests/helpers.js b/e2e-tests/tests/helpers.js deleted file mode 100644 index 0f15a00156..0000000000 --- a/e2e-tests/tests/helpers.js +++ /dev/null @@ -1,53 +0,0 @@ -import { expect } from '@playwright/test'; - -export const goToPageAndWaitForEditor = async ( - page, - { includeFontsResolved = false, includeComments = false, layout, queryParams = {} } = { - includeFontsResolved: false, - includeComments: false, - layout: undefined, - queryParams: {}, - }, -) => { - const params = new URLSearchParams(); - if (includeFontsResolved) { - params.set('includeFontsResolved', 'true'); - } - if (includeComments) { - params.set('includeComments', 'true'); - } - if (layout === 0 || layout === 1) { - params.set('layout', String(layout)); - } - Object.entries(queryParams).forEach(([key, value]) => { - if (value === undefined || value === null) return; - params.set(key, String(value)); - }); - - const url = params.toString() ? `http://localhost:4173/?${params.toString()}` : 'http://localhost:4173/'; - - // Block telemetry requests during tests - await page.route('**/ingest.superdoc.dev/**', (route) => route.abort()); - - await page.goto(url); - await page.waitForSelector('div.super-editor'); - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - return superEditor; -}; - -export function ptToPx(pt) { - return `${pt * 1.3333333333333333}px`; -} - -export function sleep(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - -export async function settleForScreenshot(page) { - // Collapse selection and allow layout to settle across frames. - await page.keyboard.press('ArrowRight'); - await page.evaluate(() => new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve)))); -} diff --git a/e2e-tests/tests/performance/performance.spec.js b/e2e-tests/tests/performance/performance.spec.js deleted file mode 100644 index 22464c1dfd..0000000000 --- a/e2e-tests/tests/performance/performance.spec.js +++ /dev/null @@ -1,232 +0,0 @@ -import { test, expect } from '@playwright/test'; -import { sleep } from '../helpers'; - -test.describe.skip('performance', () => { - test.describe('load time', () => { - test('should load a basic document in less than 3s', async ({ page }) => { - test.setTimeout(30_000); - - const baseDocumentPath = `./test-data/basic-documents/base-custom.docx`; - await page.goto('http://localhost:4173/'); - await page.waitForSelector('div.super-editor'); - const superEditor = page.locator('div.super-editor').first(); - - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - // This has to be here because `superdocReady` will be called once when the page is initially loaded - // But we want to measure the time it takes to load the document - await sleep(1_000); - - let start, end, duration; - start = Date.now(); - - // Create a Promise that resolves when superdocReady is called - const superdocReadyPromise = new Promise((resolve) => { - page.exposeFunction('superdocReady', () => { - end = Date.now(); - duration = end - start; - resolve(); - }); - }); - - await page.locator('input[type="file"]').setInputFiles(baseDocumentPath); - - // Wait for the superdocReady callback to be called - await superdocReadyPromise; - - expect(duration).toBeLessThan(3_000); - }); - - test('should load a medium sized document in less than 4s', async ({ page }) => { - test.setTimeout(30_000); - - const baseDocumentPath = `./test-data/performance-documents/40-pages.docx`; - await page.goto('http://localhost:4173/'); - await page.waitForSelector('div.super-editor'); - const superEditor = page.locator('div.super-editor').first(); - - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - // This has to be here because `superdocReady` will be called once when the page is initially loaded - // But we want to measure the time it takes to load the document - await sleep(1_000); - - let start, end, duration; - start = Date.now(); - - // Create a Promise that resolves when superdocReady is called - const superdocReadyPromise = new Promise((resolve) => { - page.exposeFunction('superdocReady', () => { - end = Date.now(); - duration = end - start; - resolve(); - }); - }); - - await page.locator('input[type="file"]').setInputFiles(baseDocumentPath); - - // Wait for the superdocReady callback to be called - await superdocReadyPromise; - - expect(duration).toBeLessThan(4_000); - }); - - test('should load a large sized document in less than 5s', async ({ page }) => { - test.setTimeout(30_000); - - const baseDocumentPath = `./test-data/performance-documents/300-pages.docx`; - await page.goto('http://localhost:4173/'); - await page.waitForSelector('div.super-editor'); - const superEditor = page.locator('div.super-editor').first(); - - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - // This has to be here because `superdocReady` will be called once when the page is initially loaded - // But we want to measure the time it takes to load the document - await sleep(1_000); - - let start, end, duration; - start = Date.now(); - - // Create a Promise that resolves when superdocReady is called - const superdocReadyPromise = new Promise((resolve) => { - page.exposeFunction('superdocReady', () => { - end = Date.now(); - duration = end - start; - resolve(); - }); - }); - - await page.locator('input[type="file"]').setInputFiles(baseDocumentPath); - - // Wait for the superdocReady callback to be called - await superdocReadyPromise; - - expect(duration).toBeLessThan(5_000); - }); - - test('should load a very large sized document in less than 7s', async ({ page }) => { - test.setTimeout(30_000); - - const baseDocumentPath = `./test-data/performance-documents/600-pages.docx`; - await page.goto('http://localhost:4173/'); - await page.waitForSelector('div.super-editor'); - const superEditor = page.locator('div.super-editor').first(); - - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - // This has to be here because `superdocReady` will be called once when the page is initially loaded - // But we want to measure the time it takes to load the document - await sleep(1_000); - - let start, end, duration; - start = Date.now(); - - // Create a Promise that resolves when superdocReady is called - const superdocReadyPromise = new Promise((resolve) => { - page.exposeFunction('superdocReady', () => { - end = Date.now(); - duration = end - start; - resolve(); - }); - }); - - await page.locator('input[type="file"]').setInputFiles(baseDocumentPath); - - // Wait for the superdocReady callback to be called - await superdocReadyPromise; - - expect(duration).toBeLessThan(7_000); - }); - }); - - test.describe('interactions', () => { - test('should insert a new letter in a basic document in less than 10ms', async ({ page }) => { - const baseDocumentPath = `./test-data/basic-documents/base-custom.docx`; - await page.goto('http://localhost:4173/'); - await page.locator('input[type="file"]').setInputFiles(baseDocumentPath); - - await page.waitForSelector('div.super-editor'); - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - let transactionDuration = 0; - await page.exposeFunction('onTransaction', ({ duration }) => { - transactionDuration = duration; - }); - await page.keyboard.type('a'); - await expect(transactionDuration).toBeLessThan(10); - }); - - // The 3 tests below are known issues that should be fixed in the future (in SuperDoc) - test.skip('should insert a new letter in a medium sized document in less than 10ms', async ({ page }) => { - const baseDocumentPath = `./test-data/performance-documents/40-pages.docx`; - await page.goto('http://localhost:4173/'); - await page.locator('input[type="file"]').setInputFiles(baseDocumentPath); - - await page.waitForSelector('div.super-editor'); - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - let transactionDuration = 0; - await page.exposeFunction('onTransaction', ({ duration }) => { - transactionDuration = duration; - }); - await page.keyboard.type('a'); - await expect(transactionDuration).toBeLessThan(10); - }); - - test.skip('should insert a new letter in a large sized document in less than 10ms', async ({ page }) => { - test.setTimeout(15_000); - const baseDocumentPath = `./test-data/performance-documents/300-pages.docx`; - await page.goto('http://localhost:4173/'); - await page.locator('input[type="file"]').setInputFiles(baseDocumentPath); - - await page.waitForSelector('div.super-editor'); - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - let transactionDuration = 0; - await page.exposeFunction('onTransaction', ({ duration }) => { - transactionDuration = duration; - }); - await page.keyboard.type('a'); - await expect(transactionDuration).toBeLessThan(10); - }); - - test.skip('should insert a new letter in a very large sized document in less than 10ms', async ({ page }) => { - test.setTimeout(15000); - const baseDocumentPath = `./test-data/performance-documents/600-pages.docx`; - await page.goto('http://localhost:4173/'); - await page.locator('input[type="file"]').setInputFiles(baseDocumentPath); - - await page.waitForSelector('div.super-editor'); - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - let transactionDuration = 0; - await page.exposeFunction('onTransaction', ({ duration }) => { - transactionDuration = duration; - }); - await page.keyboard.type('a'); - await expect(transactionDuration).toBeLessThan(10); - }); - }); -}); diff --git a/e2e-tests/tests/search/regex.spec.js b/e2e-tests/tests/search/regex.spec.js deleted file mode 100644 index 0f22916a41..0000000000 --- a/e2e-tests/tests/search/regex.spec.js +++ /dev/null @@ -1,82 +0,0 @@ -import { test, expect } from '@playwright/test'; - -test.describe('regex search', () => { - test('matches placeholder braces with regex', async ({ page }) => { - await page.goto('http://localhost:4173/'); - - const fileInput = page.locator('input[type="file"]'); - await fileInput.setInputFiles('./test-data/search-documents/regex-search.docx'); - - await page.waitForFunction( - () => { - try { - return Boolean(window.editor?.commands?.search); - } catch (err) { - return false; - } - }, - null, - { polling: 100, timeout: 10_000 }, - ); - - const { baselineMatch, matches } = await page.evaluate(() => { - const editor = window.editor; - if (!editor) throw new Error('Editor not ready'); - - const target = '{DATE}'; - let placeholderRange = null; - - editor.state.doc.descendants((node, pos) => { - if (placeholderRange || !node.isText) return undefined; - const idx = node.text.indexOf(target); - if (idx === -1) return undefined; - placeholderRange = { from: pos + idx, to: pos + idx + target.length }; - return false; - }); - - if (!placeholderRange) { - throw new Error('Could not find placeholder to wrap'); - } - - const baselineResults = editor.commands.search(/\{([^}]*)\}/gi); - const baselineMatch = baselineResults.find( - (match) => editor.state.doc.textBetween(match.from, match.to) === target, - ); - - const { state, view } = editor; - const SelectionCtor = state.selection.constructor; - const tr = state.tr.setSelection(SelectionCtor.create(state.doc, placeholderRange.from, placeholderRange.to)); - view.dispatch(tr); - - const toggled = editor.commands.toggleLink({ href: 'https://example.com', text: target }); - if (!toggled) { - throw new Error('toggleLink command failed'); - } - - const results = editor.commands.search(/\{([^}]*)\}/gi); - const mappedMatches = results.map((match) => ({ - text: editor.state.doc.textBetween(match.from, match.to), - from: match.from, - to: match.to, - })); - - return { - baselineMatch, - matches: mappedMatches, - }; - }); - - expect(matches).toHaveLength(3); - expect(matches[0].text).toBe('{DATE}'); - expect(baselineMatch?.from).toBeDefined(); - expect(baselineMatch?.to).toBeDefined(); - expect(matches[0].from).toBe(baselineMatch.from); - expect(matches[0].to).toBe(baselineMatch.to); - - expect(matches.slice(1).map((m) => m.text)).toEqual(['{MONTH}', '{MONTH}']); - - matches.forEach((match) => { - expect(match.from).toBeLessThan(match.to); - }); - }); -}); diff --git a/e2e-tests/tests/selection/right-click-selection.spec.js b/e2e-tests/tests/selection/right-click-selection.spec.js deleted file mode 100644 index c8f20731fc..0000000000 --- a/e2e-tests/tests/selection/right-click-selection.spec.js +++ /dev/null @@ -1,42 +0,0 @@ -import { test, expect } from '@playwright/test'; -import { goToPageAndWaitForEditor } from '../helpers.js'; - -// TODO: Add Firefox to playwright.config.js projects to catch Firefox-specific regressions. -// This test was added for SD-1623 where Firefox clears selection on right-click mousedown -// when preventDefault() is called, unlike Chrome/Safari. -test.describe('Right-click selection preservation', () => { - test('preserves text selection after right-click @SD-1623', async ({ page }) => { - await goToPageAndWaitForEditor(page); - - const editor = page.locator('div.super-editor').first(); - await editor.click(); - - // Type some text to select - const testText = 'Hello World'; - await page.keyboard.type(testText); - - // Select all the text we just typed - await page.keyboard.press('ControlOrMeta+a'); - - // Verify text is selected before right-click - const selectionBefore = await page.evaluate(() => window.getSelection()?.toString()); - expect(selectionBefore).toContain(testText); - - // Right-click on the selected text - const textElement = editor.getByText(testText); - await textElement.click({ button: 'right' }); - - // Wait a moment for the selection handlers to run - await page.waitForTimeout(100); - - // Verify selection is preserved - check for either: - // 1. Native selection still present, OR - // 2. Visual selection decoration applied (sd-custom-selection class) - const selectionAfter = await page.evaluate(() => window.getSelection()?.toString()); - const hasVisualSelection = await editor.locator('.sd-custom-selection').count(); - - // Either the native selection should be preserved OR the visual decoration should be shown - const isSelectionPreserved = selectionAfter.includes(testText) || hasVisualSelection > 0; - expect(isSelectionPreserved).toBe(true); - }); -}); diff --git a/e2e-tests/tests/toolbar/toolbar.spec.js b/e2e-tests/tests/toolbar/toolbar.spec.js deleted file mode 100644 index c97dd446cf..0000000000 --- a/e2e-tests/tests/toolbar/toolbar.spec.js +++ /dev/null @@ -1,1132 +0,0 @@ -import { test, expect } from '@playwright/test'; -import { ptToPx, sleep } from '../helpers.js'; - -test.describe('toolbar', () => { - test.describe('custom buttons', () => { - test('should work with custom buttons', async ({ page }) => { - await page.goto('http://localhost:4173/?includeCustomButton=true&layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - // Find toolbar button and click it. - // It should add a "data-custom-id" attribute to the "Hello" node. - const lastButton = await page.locator('div[role="button"]').last(); - - await lastButton.click(); - await page.keyboard.type('Hello'); - - const hello = await superEditor.getByText('Hello', { exact: true }); - const customAttribute = await hello.getAttribute('data-custom-id'); - expect(customAttribute).not.toBeNull(); - }); - }); - - test.describe('apply toolbar item and type', () => { - test('should add text with selected font', async ({ page }) => { - await page.goto('http://localhost:4173/'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - // Find button with data-item="btn-font" - const fontButton = await page.locator('div[data-item="btn-fontFamily"]'); - await fontButton.click(); - - // Select the font "Arial" - await page.locator('div[aria-label="Font family - Georgia"]').click(); - - // Click on the editor - await superEditor.click(); - - // Type "Hello" - await page.keyboard.type('Hello'); - - // Ensure the text is Arial - const hello = await superEditor.locator('.ProseMirror').getByText('Hello', { exact: true }); - expect(hello).toBeVisible(); - expect(await hello.evaluate((el) => window.getComputedStyle(el).fontFamily)).toBe('Georgia'); - }); - - test('should add text with selected font size', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - // Find button with data-item="btn-fontSize" - const fontSizeButton = await page.locator('div[data-item="btn-fontSize"]'); - await fontSizeButton.click(); - - // Select the font size "16px" - await page.locator('div[aria-label="Font size - 18"]').click(); - - // Click on the editor - await superEditor.click(); - - // Type "Hello" - await page.keyboard.type('Hello'); - - // Ensure the text is 16px - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('font-size', ptToPx(18)); - }); - - test('should add text with bold mark', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - // Find button with data-item="btn-bold" - const boldButton = await page.locator('div[data-item="btn-bold"]'); - await boldButton.click(); - - // Click on the editor - await superEditor.click(); - - // Type "Hello" - await page.keyboard.type('Hello'); - - // Ensure the text is bold - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('font-weight', '700'); - }); - - test('should add text with italic mark', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - // Find button with data-item="btn-italic" - const italicButton = await page.locator('div[data-item="btn-italic"]'); - await italicButton.click(); - - // Click on the editor - await superEditor.click(); - - // Type "Hello" - await page.keyboard.type('Hello'); - - // Ensure the text is italic - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('font-style', 'italic'); - }); - - test('should add text with underline mark', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - // Find button with data-item="btn-underline" - const underlineButton = await page.locator('div[data-item="btn-underline"]'); - await underlineButton.click(); - - // Click on the editor - await superEditor.click(); - - // Type "Hello" - await page.keyboard.type('Hello'); - - // Ensure the text is underlined - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('text-decoration-line', 'underline'); - await expect(hello).toHaveCSS('text-decoration-style', 'solid'); - }); - - test('should add text with strikethrough mark', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - // Find button with data-item="btn-strike" - const strikethroughButton = await page.locator('div[data-item="btn-strike"]'); - await strikethroughButton.click(); - - // Click on the editor - await superEditor.click(); - - // Type "Hello" - await page.keyboard.type('Hello'); - - // Ensure the text is underlined - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('text-decoration-line', 'line-through'); - await expect(hello).toHaveCSS('text-decoration-style', 'solid'); - }); - - test('should add text with selected color', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - // Find button with data-item="btn-color" - const colorButton = await page.locator('div[data-item="btn-color"]'); - await colorButton.click(); - - // Select the color "red" - await page.locator('div[aria-label="red"]').click(); - // Click on the editor - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Ensure the text is red - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('color', 'rgb(210, 0, 63)'); - }); - - test('should add text with selected highlight color', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - // Find button with data-item="btn-highlight" - const highlightButton = await page.locator('div[data-item="btn-highlight"]'); - await highlightButton.click(); - - // Select the color "yellow" - await page.locator('div[aria-label="red"]').click(); - - // Click on the editor - await superEditor.click(); - - // Type "Hello" - await page.keyboard.type('Hello'); - - // Ensure the text is highlighted - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('background-color', 'rgb(210, 0, 63)'); - }); - }); - - test.describe('select text and apply toolbar item', () => { - test('should add bold mark to selected text', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the bold mark - const boldButton = await page.locator('div[data-item="btn-bold"]'); - await boldButton.click(); - - // Ensure the text is bold - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('font-weight', '700'); - }); - - test('should add italic mark to selected text', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the italic mark - const italicButton = await page.locator('div[data-item="btn-italic"]'); - await italicButton.click(); - - // Ensure the text is italic - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('font-style', 'italic'); - }); - - test('should add underline mark to selected text', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - const helloText = await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await helloText.click({ - clickCount: 2, - }); - - // Apply the underline mark - const underlineButton = await page.locator('div[data-item="btn-underline"]'); - await underlineButton.click(); - - // Ensure the text is underlined - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('text-decoration-line', 'underline'); - await expect(hello).toHaveCSS('text-decoration-style', 'solid'); - }); - - test('should add strikethrough mark to selected text', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - const helloText = await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await helloText.click({ - clickCount: 2, - }); - - // Apply the strikethrough mark - const strikethroughButton = await page.locator('div[data-item="btn-strike"]'); - await strikethroughButton.click(); - - // Ensure the text is strikethrough - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('text-decoration-line', 'line-through'); - await expect(hello).toHaveCSS('text-decoration-style', 'solid'); - }); - - test('should add color to selected text', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the color mark - const colorButton = await page.locator('div[data-item="btn-color"]'); - await colorButton.click(); - - // Select the color "red" - await page.locator('div[aria-label="red"]').click(); - - // Click back on the editor - await superEditor.click(); - - // Ensure the text is red - const hello = await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }); - expect(hello).toBeVisible(); - expect(await hello.evaluate((el) => window.getComputedStyle(el).color)).toBe('rgb(210, 0, 63)'); - }); - - test('should add highlight color to selected text', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the color mark - const highlightButton = await page.locator('div[data-item="btn-highlight"]'); - await highlightButton.click(); - - // Select the color "red" - await page.locator('div[aria-label="red"]').click(); - - // Click back on the editor - await superEditor.click(); - - // Ensure the text is highlighted - const hello = await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }); - expect(hello).toBeVisible(); - - expect(await hello.evaluate((el) => window.getComputedStyle(el).backgroundColor)).toBe('rgb(210, 0, 63)'); - }); - - test('should add font size to selected text', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the font size mark - const fontSizeButton = await page.locator('div[data-item="btn-fontSize"]'); - await fontSizeButton.click(); - - // Select the font size "16px" - await page.locator('div[aria-label="Font size - 18"]').click(); - - // Ensure the text is 18px - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('font-size', ptToPx(18)); - }); - - test('should add .5 font size to selected text', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the font size mark - const fontSizeInput = await page.locator('div[data-item="btn-fontSize"] input'); - await fontSizeInput.click(); - await fontSizeInput.fill('18.5'); - await fontSizeInput.press('Enter'); - - // Ensure the text is 18px - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(async () => { - const value = await hello.evaluate((el) => parseFloat(window.getComputedStyle(el).fontSize)); - expect(value).toBeCloseTo(parseFloat(ptToPx(18.5)), 1); - }).toPass(); - }); - - test('should add font family to selected text', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the font family mark - const fontFamilyButton = await page.locator('div[data-item="btn-fontFamily"]'); - await fontFamilyButton.click(); - - // Select the font family "Arial" - await page.locator('div[aria-label="Font family - Arial"]').click(); - - // Ensure the text is Arial - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(async () => { - const family = await hello.evaluate((el) => window.getComputedStyle(el).fontFamily); - expect(family).toContain('Arial'); - }).toPass(); - }); - }); - - test.describe('shortcuts', () => { - test('should add bold mark to selected text with mod + b', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the bold mark - await page.keyboard.press('ControlOrMeta+B'); - - // Ensure the text is bold - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('font-weight', '700'); - }); - - test('should add italic mark to selected text with mod + i', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the italic mark - await page.keyboard.press('ControlOrMeta+I'); - - // Ensure the text is italic - await sleep(500); - expect( - await superEditor - .locator('.superdoc-layout') - .getByText('Hello', { exact: true }) - .evaluate((el) => { - return window.getComputedStyle(el).fontStyle; - }), - ).toBe('italic'); - }); - - test('should add underline mark to selected text with mod + u', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the underline mark - await page.keyboard.press('ControlOrMeta+U'); - - // Ensure the text is underlined - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('text-decoration-line', 'underline'); - await expect(hello).toHaveCSS('text-decoration-style', 'solid'); - }); - - test('should add strikethrough mark to selected text with mod + x', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the strikethrough mark - await page.keyboard.press('ControlOrMeta+Shift+X'); - - // Ensure the text is strikethrough (computed style) - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toHaveCSS('text-decoration-line', 'line-through'); - await expect(hello).toHaveCSS('text-decoration-style', 'solid'); - }); - }); - - test.describe('toolbar state', () => { - test('should show correct font family when font family is applied', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the font family mark - const fontFamilyButton = await page.locator('div[data-item="btn-fontFamily"]'); - await fontFamilyButton.click(); - - // Select the font family "Courier New" - await page.locator('div[aria-label="Font family - Courier New"]').click(); - - // Wait for the toolbar to update - await sleep(500); - - // Click back on the text - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click(); - - // Wait for the toolbar to update - await sleep(500); - const fontFamilyButtonText = await fontFamilyButton.getByText('Courier New'); - await expect(fontFamilyButtonText).toBeVisible(); - }); - - test('should show correct font size when font size is applied', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the font size mark - const fontSizeButton = await page.locator('div[data-item="btn-fontSize"]'); - await fontSizeButton.click(); - - // Select the font size "18" - await page.locator('div[aria-label="Font size - 18"]').click(); - - // Wait for the toolbar to update - await sleep(500); - - // Click back on the text - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Ensure toolbar shows 18 - const fontSizeButtonText = await fontSizeButton.locator('input').inputValue(); - expect(fontSizeButtonText).toBe('18'); - }); - - test('should be highlighted when bold mark is applied', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the bold mark - const boldButton = await page.locator('div[data-item="btn-bold"]'); - await boldButton.click(); - - // Click back on the bold text - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click(); - - // Wait for the toolbar to update - await sleep(500); - - // Evaluate bold button background color - const boldButtonBackgroundColor = await boldButton.evaluate((el) => window.getComputedStyle(el).backgroundColor); - - // Expect the bold button to be highlighted (#c8d0d8) - expect(boldButtonBackgroundColor).toBe('rgb(200, 208, 216)'); - }); - - test('should be highlighted when italic mark is applied', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the italic mark - const italicButton = await page.locator('div[data-item="btn-italic"]'); - await italicButton.click(); - - // Click back on the italic text - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click(); - - // Wait for the toolbar to update - await sleep(500); - - // Expect the italic button to be highlighted (#c8d0d8) - const italicButtonBackgroundColor = await italicButton.evaluate( - (el) => window.getComputedStyle(el).backgroundColor, - ); - - expect(italicButtonBackgroundColor).toBe('rgb(200, 208, 216)'); - }); - - test('should be highlighted when underline mark is applied', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the underline mark - const underlineButton = await page.locator('div[data-item="btn-underline"]'); - await underlineButton.click(); - - // Click back on the underline text - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click(); - - // Wait for the toolbar to update - await sleep(500); - - // Expect the underline button to be highlighted (#c8d0d8) - const underlineButtonBackgroundColor = await underlineButton.evaluate( - (el) => window.getComputedStyle(el).backgroundColor, - ); - - expect(underlineButtonBackgroundColor).toBe('rgb(200, 208, 216)'); - }); - - test('should be highlighted when strikethrough mark is applied', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the strikethrough mark - const strikethroughButton = await page.locator('div[data-item="btn-strike"]'); - await strikethroughButton.click(); - - // Click back on the strikethrough text - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click(); - - // Wait for the toolbar to update - await sleep(500); - - // Expect the strikethrough button to be highlighted (#c8d0d8) - const strikethroughButtonBackgroundColor = await strikethroughButton.evaluate( - (el) => window.getComputedStyle(el).backgroundColor, - ); - - expect(strikethroughButtonBackgroundColor).toBe('rgb(200, 208, 216)'); - }); - - test('should show the correct color when color is applied', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the color mark - const colorButton = await page.locator('div[data-item="btn-color"]'); - await colorButton.click(); - - // Select the color "red" - await page.locator('div[aria-label="red"]').click(); - - // Ensure the color bar is red - const colorBar = await colorButton.locator('div.color-bar'); - expect(await colorBar.evaluate((el) => window.getComputedStyle(el).backgroundColor)).toBe('rgb(210, 0, 63)'); - }); - - test('should show the correct color when highlight is applied', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply the highlight mark - const highlightButton = await page.locator('div[data-item="btn-highlight"]'); - await highlightButton.click(); - - // Select the color "red" - await page.locator('div[aria-label="red"]').click(); - - // Ensure the highlight bar is red - const highlightBar = await highlightButton.locator('div.color-bar'); - expect(await highlightBar.evaluate((el) => window.getComputedStyle(el).backgroundColor)).toBe('rgb(210, 0, 63)'); - }); - }); - - test.describe('linked styles button', () => { - test.use({ viewport: { width: 1920, height: 1080 } }); - - // Constants for Heading2 style properties - const HEADING2_STYLES = { - fontFamily: '"Aptos Display", sans-serif', - fontSize: '21.3333px', // equal to 16pt in computed styles - color: 'rgb(15, 71, 97)', - }; - - test('should add text with linked style', async ({ page }) => { - const heading2Styles = HEADING2_STYLES; - - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - // Find button with data-item="btn-linkedStyles" - const styleButton = await page.locator('div[data-item="btn-linkedStyles"]'); - await styleButton.click(); - - // Select "heading 2" - await page.locator('div[aria-label="Linked style - Heading2"]').click(); - - // Click on the editor - await superEditor.click(); - - // Type "Hello" - await page.keyboard.type('Hello'); - - // Wait for layout to render styled text - await page.waitForSelector('.superdoc-layout [styleid="Heading2"]', { timeout: 10000 }); - const hello = await page.locator('.superdoc-layout').getByText('Hello', { exact: true }); - await expect(hello).toBeVisible(); - - await expect(async () => { - const styles = await hello.evaluate((el) => { - const computed = window.getComputedStyle(el); - const nearestStyleNode = el.closest('[styleid]'); - return { - color: computed.color, - fontSize: computed.fontSize, - fontFamily: computed.fontFamily, - styleId: nearestStyleNode ? nearestStyleNode.getAttribute('styleid') : null, - }; - }); - - expect(styles.styleId).toBe('Heading2'); - expect(styles.color).toBe(heading2Styles.color); - expect(styles.fontFamily).toContain('Aptos Display'); - expect(styles.fontSize).toBe(heading2Styles.fontSize); - }).toPass(); - }); - - test('should show correct label when linked style is applied', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - // Type "Hello" - await page.keyboard.type('Hello'); - - // Double click on the text "Hello" to select it - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ - clickCount: 2, - }); - - // Apply linked style - const styleButton = await page.locator('div[data-item="btn-linkedStyles"]'); - await styleButton.click(); - - // Select "Heading2" style - await page.locator('div[aria-label="Linked style - Heading2"]').click(); - - // Click back on the text - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click(); - - // Wait for the toolbar button text to update and verify - const styleButtonText = styleButton.getByText('heading 2'); - await expect(styleButtonText).toBeVisible({ timeout: 2000 }); - }); - - test('should reset label to "format text" when style is deselected', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - await page.keyboard.type('Hello'); - - // Select the text and apply Heading2 style - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ clickCount: 2 }); - - const styleButton = page.locator('div[data-item="btn-linkedStyles"]'); - await styleButton.click(); - await page.locator('div[aria-label="Linked style - Heading2"]').click(); - - // Verify heading 2 label is shown - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click(); - await expect(styleButton.getByText('heading 2')).toBeVisible({ timeout: 2000 }); - - // Select the text again and remove the style by applying "Normal" - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click({ clickCount: 2 }); - await styleButton.click(); - await page.locator('div[aria-label="Linked style - Normal"]').click(); - - // Click on the text and verify label resets - await superEditor.locator('.superdoc-layout').getByText('Hello', { exact: true }).click(); - const formatTextLabel = styleButton.getByText('format text', { exact: false }); - await expect(formatTextLabel).toBeVisible({ timeout: 2000 }); - }); - - test('should navigate through styles with keyboard', async ({ page }) => { - await page.goto('http://localhost:4173/?layout=1'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - await superEditor.click(); - await page.keyboard.type('Test'); - - // Select text and open linked styles dropdown - await superEditor.locator('.superdoc-layout').getByText('Test', { exact: true }).click({ clickCount: 2 }); - - const styleButton = page.locator('div[data-item="btn-linkedStyles"]'); - await styleButton.click(); - - // Verify dropdown is open and first item is focused - const firstStyle = page.locator('div[aria-label="Linked style - Heading1"]'); - await expect(firstStyle).toBeVisible(); - await expect(firstStyle).toBeFocused({ timeout: 1000 }); - - // Navigate down again - await page.keyboard.press('ArrowDown'); - const secondStyle = page.locator('div[aria-label="Linked style - Heading2"]'); - await expect(secondStyle).toBeFocused({ timeout: 1000 }); - - // Navigate down again - await page.keyboard.press('ArrowDown'); - const thirdStyle = page.locator('div[aria-label="Linked style - Heading3"]'); - await expect(thirdStyle).toBeFocused({ timeout: 1000 }); - - // Navigate back up - await page.keyboard.press('ArrowUp'); - await expect(secondStyle).toBeFocused({ timeout: 1000 }); - - // Select with Enter key - await page.keyboard.press('Enter'); - - // Verify the style was applied - await superEditor.locator('.superdoc-layout').getByText('Test', { exact: true }).click(); - await page.waitForSelector('.superdoc-layout [styleid="Heading2"]', { timeout: 10000 }); - const styleButtonText = styleButton.getByText('heading 2'); - await expect(styleButtonText).toBeVisible({ timeout: 2000 }); - }); - }); - - test.describe('dropdown closing behavior', () => { - test('should close font family dropdown with Escape', async ({ page }) => { - await page.goto('http://localhost:4173/'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - // Open font family dropdown - const fontButton = await page.locator('div[data-item="btn-fontFamily"]'); - await fontButton.click(); - - // Verify dropdown is open - const dropdownItem = page.locator('div[aria-label="Font family - Georgia"]'); - await expect(dropdownItem).toBeVisible(); - - // Press Escape - await page.keyboard.press('Escape'); - - // Verify dropdown is closed - await expect(dropdownItem).not.toBeVisible(); - }); - - test('should close color dropdown when clicking outside', async ({ page }) => { - await page.goto('http://localhost:4173/'); - await page.waitForSelector('div.super-editor'); - - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - - // Open color dropdown - const colorButton = await page.locator('div[data-item="btn-color"]'); - await colorButton.click(); - - // Verify dropdown is open - const colorItem = page.locator('div[aria-label="red"]'); - await expect(colorItem).toBeVisible(); - - // Click outside the dropdown - await colorButton.click(); - - // Verify dropdown is closed - await expect(colorItem).not.toBeVisible(); - }); - }); -}); diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js b/e2e-tests/tests/visuals/basic-documents.spec.js deleted file mode 100644 index 809da92f16..0000000000 --- a/e2e-tests/tests/visuals/basic-documents.spec.js +++ /dev/null @@ -1,37 +0,0 @@ -import { test, expect } from '@playwright/test'; -import fs from 'fs'; -import config from '../../test-config'; -import { filterDocxFiles } from './doc-loader.js'; - -const testData = filterDocxFiles(fs.readdirSync(config.basicDocumentsFolder), new Set(config.ignoreDocuments || [])); - -// Run this test with each file on the test-data/basic-documents folder -// and compare the screenshot with the reference image -test.describe('basic documents', () => { - testData.forEach((fileName) => { - test(`${fileName}`, async ({ page }) => { - test.setTimeout(50_000); - - await page.goto('http://localhost:4173/'); - await page.locator('input[type="file"]').setInputFiles(`./test-data/basic-documents/${fileName}`); - await page.waitForSelector('div.super-editor'); - await expect(page.locator('div.super-editor').first()).toBeVisible(); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - await page.waitForFunction(() => { - const toolbar = document.querySelector('#toolbar'); - return toolbar && toolbar.children.length > 0; - }); - - await expect(page).toHaveScreenshot({ - path: `${fileName}.png`, - fullPage: true, - timeout: 30_000, - }); - }); - }); -}); diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-DS-Store-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-DS-Store-1-chromium-linux.png deleted file mode 100644 index d12c95831c..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-DS-Store-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-advanced-tables-docx-1-chromium-darwin.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-advanced-tables-docx-1-chromium-darwin.png deleted file mode 100644 index 734d53a525..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-advanced-tables-docx-1-chromium-darwin.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-advanced-tables-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-advanced-tables-docx-1-chromium-linux.png deleted file mode 100644 index d889308434..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-advanced-tables-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-advanced-text-docx-1-chromium-darwin.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-advanced-text-docx-1-chromium-darwin.png deleted file mode 100644 index 86f8a4c53e..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-advanced-text-docx-1-chromium-darwin.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-advanced-text-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-advanced-text-docx-1-chromium-linux.png deleted file mode 100644 index 49c5878b52..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-advanced-text-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-base-custom-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-base-custom-docx-1-chromium-linux.png deleted file mode 100644 index e2833c2974..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-base-custom-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-base-list-style-indent-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-base-list-style-indent-docx-1-chromium-linux.png deleted file mode 100644 index 2db713fbdf..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-base-list-style-indent-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-base-ordered-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-base-ordered-docx-1-chromium-linux.png deleted file mode 100644 index 68b5d31874..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-base-ordered-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-broken-list-missing-items-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-broken-list-missing-items-docx-1-chromium-linux.png deleted file mode 100644 index 0374f43cf5..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-broken-list-missing-items-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-contextual-spacing-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-contextual-spacing-docx-1-chromium-linux.png deleted file mode 100644 index c48dde2028..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-contextual-spacing-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-contract-acc-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-contract-acc-docx-1-chromium-linux.png deleted file mode 100644 index 210d11e6b0..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-contract-acc-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-custom-list-numbering-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-custom-list-numbering-docx-1-chromium-linux.png deleted file mode 100644 index 6bcbe99b2c..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-custom-list-numbering-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-custom-list1-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-custom-list1-docx-1-chromium-linux.png deleted file mode 100644 index 55d4df6add..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-custom-list1-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-exported-list-font-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-exported-list-font-docx-1-chromium-linux.png deleted file mode 100644 index 3879860e97..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-exported-list-font-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-extensions-structured-content-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-extensions-structured-content-docx-1-chromium-linux.png deleted file mode 100644 index 39ef948474..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-extensions-structured-content-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-features-lists-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-features-lists-docx-1-chromium-linux.png deleted file mode 100644 index 3e62554cb5..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-features-lists-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-features-redlines-comments-annotations-and-more-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-features-redlines-comments-annotations-and-more-docx-1-chromium-linux.png deleted file mode 100644 index 56e56889d8..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-features-redlines-comments-annotations-and-more-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-gdocs-comments-export-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-gdocs-comments-export-docx-1-chromium-linux.png deleted file mode 100644 index c31fd22252..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-gdocs-comments-export-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-gdocs-tracked-changes-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-gdocs-tracked-changes-docx-1-chromium-linux.png deleted file mode 100644 index 066302f4c6..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-gdocs-tracked-changes-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-header-footer-anchored-images-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-header-footer-anchored-images-docx-1-chromium-linux.png deleted file mode 100644 index 643606c7a8..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-header-footer-anchored-images-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-hyperlink-font-size-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-hyperlink-font-size-docx-1-chromium-linux.png deleted file mode 100644 index 4d4436a293..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-hyperlink-font-size-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-image-center-tab-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-image-center-tab-docx-1-chromium-linux.png deleted file mode 100644 index c14dec80d7..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-image-center-tab-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-image-wrapping-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-image-wrapping-docx-1-chromium-linux.png deleted file mode 100644 index 71154884b7..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-image-wrapping-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-invalid-list-def-fallback-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-invalid-list-def-fallback-docx-1-chromium-linux.png deleted file mode 100644 index 67a8fcaeb9..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-invalid-list-def-fallback-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-abs-ids-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-abs-ids-docx-1-chromium-linux.png deleted file mode 100644 index 1ad8d80622..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-abs-ids-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-formatting-indents-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-formatting-indents-docx-1-chromium-linux.png deleted file mode 100644 index dc2ddcb961..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-formatting-indents-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-markers-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-markers-docx-1-chromium-linux.png deleted file mode 100644 index d8325e1542..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-markers-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-mixed-abstract-ids-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-mixed-abstract-ids-docx-1-chromium-linux.png deleted file mode 100644 index 5edd1027e6..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-mixed-abstract-ids-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-restart-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-restart-docx-1-chromium-linux.png deleted file mode 100644 index 0343163bec..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-restart-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-style-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-style-docx-1-chromium-linux.png deleted file mode 100644 index 557512e08a..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-style-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-with-table-break-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-with-table-break-docx-1-chromium-linux.png deleted file mode 100644 index d48bf1bc17..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-list-with-table-break-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-lists-complex-items-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-lists-complex-items-docx-1-chromium-linux.png deleted file mode 100644 index 15d4074fd8..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-lists-complex-items-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-longer-header-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-longer-header-docx-1-chromium-linux.png deleted file mode 100644 index 7cc653f52c..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-longer-header-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-msa-list-base-indent-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-msa-list-base-indent-docx-1-chromium-linux.png deleted file mode 100644 index 8b55a25e21..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-msa-list-base-indent-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-msword-tracked-changes-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-msword-tracked-changes-docx-1-chromium-linux.png deleted file mode 100644 index a1ba2b2e77..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-msword-tracked-changes-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-multiple-nodes-in-list-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-multiple-nodes-in-list-docx-1-chromium-linux.png deleted file mode 100644 index 2cbc7c7d12..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-multiple-nodes-in-list-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-bold-rstyle-linked-combos-demo-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-bold-rstyle-linked-combos-demo-docx-1-chromium-linux.png deleted file mode 100644 index 1f3a4a25d4..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-bold-rstyle-linked-combos-demo-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-color-rstyle-linked-combos-demo-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-color-rstyle-linked-combos-demo-docx-1-chromium-linux.png deleted file mode 100644 index ef61915a49..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-color-rstyle-linked-combos-demo-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-highlight-rstyle-linked-combos-demo-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-highlight-rstyle-linked-combos-demo-docx-1-chromium-linux.png deleted file mode 100644 index d876ed5553..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-highlight-rstyle-linked-combos-demo-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-italic-rstyle-combos-demo-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-italic-rstyle-combos-demo-docx-1-chromium-linux.png deleted file mode 100644 index 0e3544ec1f..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-italic-rstyle-combos-demo-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-rFonts-rstyle-linked-combos-demo-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-rFonts-rstyle-linked-combos-demo-docx-1-chromium-linux.png deleted file mode 100644 index 320df3fc8e..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-rFonts-rstyle-linked-combos-demo-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-size-rstyle-linked-combos-demo-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-size-rstyle-linked-combos-demo-docx-1-chromium-linux.png deleted file mode 100644 index 1cfdc807c1..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-size-rstyle-linked-combos-demo-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-strike-rstyle-linked-combos-demo-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-strike-rstyle-linked-combos-demo-docx-1-chromium-linux.png deleted file mode 100644 index e6fce0c7b9..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-strike-rstyle-linked-combos-demo-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-underline-rstyle-linked-combos-demo-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-underline-rstyle-linked-combos-demo-docx-1-chromium-linux.png deleted file mode 100644 index b10183b3c9..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-ooxml-underline-rstyle-linked-combos-demo-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-restart-numbering-sub-list-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-restart-numbering-sub-list-docx-1-chromium-linux.png deleted file mode 100644 index 9d8983e2f3..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-restart-numbering-sub-list-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-sdpr-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-sdpr-docx-1-chromium-linux.png deleted file mode 100644 index 68b8893f00..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-sdpr-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-sublist-issue-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-sublist-issue-docx-1-chromium-linux.png deleted file mode 100644 index 34c930b50e..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-sublist-issue-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-superdoc-hyperlink-cases-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-superdoc-hyperlink-cases-docx-1-chromium-linux.png deleted file mode 100644 index d40877494e..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-superdoc-hyperlink-cases-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-tab-stops-basic-test-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-tab-stops-basic-test-docx-1-chromium-linux.png deleted file mode 100644 index e752441390..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-tab-stops-basic-test-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-tab-stops-test-signer-area-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-tab-stops-test-signer-area-docx-1-chromium-linux.png deleted file mode 100644 index 42d643a243..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-tab-stops-test-signer-area-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-in-list-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-in-list-docx-1-chromium-linux.png deleted file mode 100644 index 1814e2d504..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-in-list-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-of-contents-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-of-contents-docx-1-chromium-linux.png deleted file mode 100644 index bfde0079ba..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-of-contents-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-of-contents-sdt-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-of-contents-sdt-docx-1-chromium-linux.png deleted file mode 100644 index a5ee7b0afc..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-of-contents-sdt-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-width-issue-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-width-issue-docx-1-chromium-linux.png deleted file mode 100644 index eba3294a6e..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-width-issue-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-widths-SD-732-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-widths-SD-732-docx-1-chromium-linux.png deleted file mode 100644 index da337eeaf7..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-widths-SD-732-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-with-block-bookmarks-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-with-block-bookmarks-docx-1-chromium-linux.png deleted file mode 100644 index fb98cd27b7..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-table-with-block-bookmarks-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-tiny-spacing-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-tiny-spacing-docx-1-chromium-linux.png deleted file mode 100644 index b121a720c9..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-tiny-spacing-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-vanced-tables-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-vanced-tables-docx-1-chromium-linux.png deleted file mode 100644 index d5f63fcd28..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-vanced-tables-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-vanced-text-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-vanced-text-docx-1-chromium-linux.png deleted file mode 100644 index fe9d941942..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-vanced-text-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-vertical-merge-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-vertical-merge-docx-1-chromium-linux.png deleted file mode 100644 index 7aceb11f67..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-vertical-merge-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-wmf-emf-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-wmf-emf-docx-1-chromium-linux.png deleted file mode 100644 index a7686f0f44..0000000000 Binary files a/e2e-tests/tests/visuals/basic-documents.spec.js-snapshots/basic-documents-wmf-emf-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/comments.spec.js b/e2e-tests/tests/visuals/comments.spec.js deleted file mode 100644 index a0e43ab7c8..0000000000 --- a/e2e-tests/tests/visuals/comments.spec.js +++ /dev/null @@ -1,117 +0,0 @@ -import { test, expect } from '@playwright/test'; -import fs from 'fs'; -import { goToPageAndWaitForEditor, sleep } from '../helpers'; -import config from '../../test-config'; -import { filterDocxFiles } from './doc-loader.js'; - -// Run this test with each file on the test-data/comments-documents folder -// and compare the screenshot with the reference image -const testData = filterDocxFiles(fs.readdirSync(config.commentsDocumentsFolder), new Set(config.ignoreDocuments || [])); - -test.describe('documents with comments', () => { - testData.forEach((fileName) => { - test(`${fileName}`, async ({ page }) => { - await goToPageAndWaitForEditor(page, { includeComments: true }); - await page.locator('input[type="file"]').setInputFiles(`${config.commentsDocumentsFolder}/${fileName}`); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - await expect(page).toHaveScreenshot({ - path: `${fileName}.png`, - fullPage: true, - timeout: 30_000, - }); - }); - }); -}); - -test.describe('viewing mode comments visibility', () => { - const fileName = 'basic-comments.docx'; - - test('comments hidden by default in viewing mode', async ({ page }) => { - await goToPageAndWaitForEditor(page, { - includeComments: true, - layout: 1, - queryParams: { documentMode: 'viewing' }, - }); - await page.locator('input[type="file"]').setInputFiles(`${config.commentsDocumentsFolder}/${fileName}`); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - await sleep(1000); - - await expect(page).toHaveScreenshot({ - path: 'viewing-comments-hidden.png', - fullPage: true, - timeout: 30_000, - }); - }); - - test('comments visible when enabled in viewing mode', async ({ page }) => { - await goToPageAndWaitForEditor(page, { - includeComments: true, - layout: 1, - queryParams: { documentMode: 'viewing', commentsVisible: true }, - }); - await page.locator('input[type="file"]').setInputFiles(`${config.commentsDocumentsFolder}/${fileName}`); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - await sleep(1000); - - await expect(page).toHaveScreenshot({ - path: 'viewing-comments-visible.png', - fullPage: true, - timeout: 30_000, - }); - }); - - test('should show inserted and removed text in tracked change replacement bubble', async ({ page }) => { - await goToPageAndWaitForEditor(page, { includeComments: true }); - await page.locator('input[type="file"]').setInputFiles(`${config.commentsDocumentsFolder}/basic-comments.docx`); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - const superEditor = page.locator('div.super-editor').first(); - const targetText = 'replaced_token'; - const insertedText = 'inserted_token'; - - await superEditor.click(); - await page.keyboard.type(` ${targetText}`); - for (let i = 0; i < targetText.length; i += 1) { - await page.keyboard.press('Shift+ArrowLeft'); - } - - const trackChangesToggled = await page.evaluate(() => window.editor.commands.toggleTrackChanges()); - expect(trackChangesToggled).toBe(true); - await page.keyboard.type(insertedText); - await sleep(600); - - const replacementBubble = page - .getByRole('dialog') - .filter({ hasText: 'Added:' }) - .filter({ hasText: 'inserted_token' }) - .filter({ hasText: 'Deleted:' }) - .filter({ hasText: 'replaced_token' }) - .first(); - - await expect(replacementBubble).toBeVisible(); - await expect(replacementBubble).toContainText('Added:'); - await expect(replacementBubble).toContainText('inserted_token'); - await expect(replacementBubble).toContainText('Deleted:'); - await expect(replacementBubble).toContainText('replaced_token'); - await expect(replacementBubble).toHaveScreenshot('tracked-change-replacement-bubble.png'); - }); -}); diff --git a/e2e-tests/tests/visuals/comments.spec.js-snapshots/documents-with-comments-basic-comments-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/comments.spec.js-snapshots/documents-with-comments-basic-comments-docx-1-chromium-linux.png deleted file mode 100644 index d0a1a102a1..0000000000 Binary files a/e2e-tests/tests/visuals/comments.spec.js-snapshots/documents-with-comments-basic-comments-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/comments.spec.js-snapshots/documents-with-comments-tracked-changes-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/comments.spec.js-snapshots/documents-with-comments-tracked-changes-docx-1-chromium-linux.png deleted file mode 100644 index bde0f8a9b4..0000000000 Binary files a/e2e-tests/tests/visuals/comments.spec.js-snapshots/documents-with-comments-tracked-changes-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/comments.spec.js-snapshots/tracked-change-replacement-bubble-chromium-linux.png b/e2e-tests/tests/visuals/comments.spec.js-snapshots/tracked-change-replacement-bubble-chromium-linux.png deleted file mode 100644 index 1e6794ab1d..0000000000 Binary files a/e2e-tests/tests/visuals/comments.spec.js-snapshots/tracked-change-replacement-bubble-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/comments.spec.js-snapshots/viewing-mode-comments-visibility-comments-hidden-by-default-in-viewing-mode-1-chromium-linux.png b/e2e-tests/tests/visuals/comments.spec.js-snapshots/viewing-mode-comments-visibility-comments-hidden-by-default-in-viewing-mode-1-chromium-linux.png deleted file mode 100644 index 00de9497c8..0000000000 Binary files a/e2e-tests/tests/visuals/comments.spec.js-snapshots/viewing-mode-comments-visibility-comments-hidden-by-default-in-viewing-mode-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/comments.spec.js-snapshots/viewing-mode-comments-visibility-comments-visible-when-enabled-in-viewing-mode-1-chromium-linux.png b/e2e-tests/tests/visuals/comments.spec.js-snapshots/viewing-mode-comments-visibility-comments-visible-when-enabled-in-viewing-mode-1-chromium-linux.png deleted file mode 100644 index c5e382c355..0000000000 Binary files a/e2e-tests/tests/visuals/comments.spec.js-snapshots/viewing-mode-comments-visibility-comments-visible-when-enabled-in-viewing-mode-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/content-insertion.spec.js b/e2e-tests/tests/visuals/content-insertion.spec.js deleted file mode 100644 index 5680b85cd7..0000000000 --- a/e2e-tests/tests/visuals/content-insertion.spec.js +++ /dev/null @@ -1,38 +0,0 @@ -import { test, expect } from '@playwright/test'; - -test.describe('insert content', () => { - test('insert heading as HTML string', async ({ page }) => { - await page.goto('http://localhost:4173/'); - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - await page.waitForFunction(() => window.editor !== undefined && window.editor.commands !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - await page.evaluate(() => { - window.editor.commands.insertContent('

Heading 1

'); - }); - await expect(superEditor).toHaveScreenshot({ - name: `insert-html-heading.png`, - }); - }); - test('insert paragraph as HTML string', async ({ page }) => { - await page.goto('http://localhost:4173/'); - const superEditor = page.locator('div.super-editor').first(); - await expect(superEditor).toBeVisible({ - timeout: 1_000, - }); - await page.waitForFunction(() => window.editor !== undefined && window.editor.commands !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - await page.evaluate(() => { - window.editor.commands.insertContent('

This is a nice short paragraph.

'); - }); - await expect(superEditor).toHaveScreenshot({ - name: `insert-html-paragraph.png`, - }); - }); -}); diff --git a/e2e-tests/tests/visuals/content-insertion.spec.js-snapshots/insert-html-heading-chromium-linux.png b/e2e-tests/tests/visuals/content-insertion.spec.js-snapshots/insert-html-heading-chromium-linux.png deleted file mode 100644 index 4559029708..0000000000 Binary files a/e2e-tests/tests/visuals/content-insertion.spec.js-snapshots/insert-html-heading-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/content-insertion.spec.js-snapshots/insert-html-paragraph-chromium-linux.png b/e2e-tests/tests/visuals/content-insertion.spec.js-snapshots/insert-html-paragraph-chromium-linux.png deleted file mode 100644 index ae64cc3199..0000000000 Binary files a/e2e-tests/tests/visuals/content-insertion.spec.js-snapshots/insert-html-paragraph-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/doc-loader.js b/e2e-tests/tests/visuals/doc-loader.js deleted file mode 100644 index d6b7a65d53..0000000000 --- a/e2e-tests/tests/visuals/doc-loader.js +++ /dev/null @@ -1,33 +0,0 @@ -import fs from 'fs'; -import path from 'path'; - -const DOCX_EXTENSION = '.docx'; - -export function isValidDocxFilename(fileName, ignore = new Set()) { - if (!fileName || typeof fileName !== 'string') return false; - if (fileName.startsWith('.')) return false; - if (!fileName.toLowerCase().endsWith(DOCX_EXTENSION)) return false; - if (ignore.has(fileName)) return false; - return true; -} - -export function filterDocxFiles(files, ignore = new Set()) { - return files.filter((fileName) => isValidDocxFilename(fileName, ignore)); -} - -export function loadDocumentsFromFolders(folders, ignore = new Set()) { - return folders.flatMap(({ key, folder }) => { - const dir = path.resolve(process.cwd(), folder); - if (!fs.existsSync(dir)) return []; - - try { - return filterDocxFiles(fs.readdirSync(dir), ignore).map((file) => ({ - id: `${key}-${file}`, - filePath: path.join(folder, file), - })); - } catch (error) { - console.error(`Error reading directory ${dir}:`, error.message); - return []; - } - }); -} diff --git a/e2e-tests/tests/visuals/image-resizer.spec.js b/e2e-tests/tests/visuals/image-resizer.spec.js deleted file mode 100644 index 10a6692ec2..0000000000 --- a/e2e-tests/tests/visuals/image-resizer.spec.js +++ /dev/null @@ -1,37 +0,0 @@ -import { test, expect } from '@playwright/test'; - -test.describe('image resizer', () => { - test('resize handles align with image', async ({ page }) => { - test.setTimeout(30_000); - - await page.goto('http://localhost:4173/?layout=1'); - await page.locator('input[type="file"]').setInputFiles('./test-data/image-documents/image-resizer.docx'); - await page.waitForSelector('div.super-editor'); - await expect(page.locator('div.super-editor').first()).toBeVisible(); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - // Wait for image to load - await page.waitForTimeout(1_000); - - // Click on the image to select it - const image = page.locator('div.super-editor img').first(); - await expect(image).toBeVisible({ timeout: 5_000 }); - await image.click(); - - // Wait for resize handles - await page.waitForSelector('.sd-editor-resizable-wrapper', { state: 'attached', timeout: 5_000 }); - await page.waitForTimeout(500); - - // Verify resize container is present - await expect(page.locator('.sd-editor-resize-container')).toBeAttached({ timeout: 5_000 }); - - await expect(page).toHaveScreenshot({ - name: 'image-resizer.png', - fullPage: true, - }); - }); -}); diff --git a/e2e-tests/tests/visuals/image-resizer.spec.js-snapshots/image-resizer-chromium-linux.png b/e2e-tests/tests/visuals/image-resizer.spec.js-snapshots/image-resizer-chromium-linux.png deleted file mode 100644 index d2791644c4..0000000000 Binary files a/e2e-tests/tests/visuals/image-resizer.spec.js-snapshots/image-resizer-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-compare.spec.js b/e2e-tests/tests/visuals/layout-compare.spec.js deleted file mode 100644 index 47cf64c26e..0000000000 --- a/e2e-tests/tests/visuals/layout-compare.spec.js +++ /dev/null @@ -1,100 +0,0 @@ -import { test, expect } from '@playwright/test'; -import fs from 'fs'; -import path from 'path'; -import { fileURLToPath } from 'url'; -import config from '../../test-config.js'; -import { goToPageAndWaitForEditor } from '../helpers.js'; -import { isValidDocxFilename, loadDocumentsFromFolders } from './doc-loader.js'; - -const __dirname = path.dirname(fileURLToPath(import.meta.url)); - -const fileArg = process.env.VISUAL_FILE || process.env.LAYOUT_FILE || process.env.FILE; -const compareAll = process.env.LAYOUT_COMPARE === '1'; - -const ignore = new Set(config.ignoreDocuments || []); -const folders = [ - { key: 'basic-documents', folder: config.basicDocumentsFolder }, - { key: 'comments-documents', folder: config.commentsDocumentsFolder }, -]; - -const loadDocs = () => loadDocumentsFromFolders(folders, ignore); - -let docsToRun = []; - -if (fileArg) { - const fileBaseName = path.basename(fileArg); - if (!isValidDocxFilename(fileBaseName, ignore)) { - throw new Error(`Invalid document file "${fileArg}". Only .docx files that do not start with "." are supported.`); - } - docsToRun = [ - { - id: path.basename(fileArg, path.extname(fileArg)), - filePath: fileArg, - }, - ]; -} else if (compareAll) { - docsToRun = loadDocs(); -} - -if (!docsToRun.length) { - test.describe.skip('layout compare (layout=1)', () => { - test('skipped: set LAYOUT_COMPARE=1 or provide VISUAL_FILE', () => {}); - }); -} else { - test.describe('layout compare (layout=1)', () => { - docsToRun.forEach(({ id, filePath }) => { - const resolvedFilePath = path.resolve(process.cwd(), filePath); - const fileName = path.basename(resolvedFilePath); - const folderName = path.basename(path.dirname(resolvedFilePath)); - - if (!fs.existsSync(resolvedFilePath)) { - throw new Error(`File not found: ${resolvedFilePath}`); - } - - const specSnapshotMap = { - 'basic-documents': 'basic-documents.spec.js-snapshots', - 'comments-documents': 'comments.spec.js-snapshots', - }; - - const sourceSnapshotFolder = specSnapshotMap[folderName]; - if (!sourceSnapshotFolder) { - throw new Error( - `No snapshot mapping for folder "${folderName}". Add it to specSnapshotMap in layout-compare.spec.js.`, - ); - } - - const platform = process.platform === 'darwin' ? 'darwin' : 'linux'; - const baseName = `${folderName}-${fileName.replace(/\./g, '-')}-1`; - const sourceSnapshot = path.resolve(__dirname, sourceSnapshotFolder, `${baseName}-chromium-${platform}.png`); - const targetSnapshotDir = path.resolve(__dirname, 'layout-compare.spec.js-snapshots'); - const targetSnapshot = path.join(targetSnapshotDir, `${baseName}-chromium-${platform}.png`); - - if (!fs.existsSync(sourceSnapshot)) { - throw new Error(`Baseline snapshot not found at ${sourceSnapshot}. Run the main suite to generate it first.`); - } - - if (!fs.existsSync(targetSnapshot)) { - fs.mkdirSync(targetSnapshotDir, { recursive: true }); - fs.copyFileSync(sourceSnapshot, targetSnapshot); - } - - test(id || fileName, async ({ page }) => { - test.setTimeout(60_000); - - await goToPageAndWaitForEditor(page, { layout: 1 }); - await page.locator('input[type="file"]').setInputFiles(resolvedFilePath); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - await expect(page).toHaveScreenshot({ - name: `${baseName}.png`, - fullPage: true, - timeout: 30_000, - }); - }); - }); - }); -} diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js b/e2e-tests/tests/visuals/layout-engine.spec.js deleted file mode 100644 index c0876ee0a9..0000000000 --- a/e2e-tests/tests/visuals/layout-engine.spec.js +++ /dev/null @@ -1,111 +0,0 @@ -import { test, expect } from '@playwright/test'; -import config from '../../test-config.js'; -import { goToPageAndWaitForEditor } from '../helpers.js'; -import { loadDocumentsFromFolders } from './doc-loader.js'; - -// Layout-engine-only visual snapshots (pagination/layout on). -// Documents are auto-discovered from configured folders. - -const shouldRun = process.env.LAYOUT_ENGINE === '1'; - -if (!shouldRun) { - test.describe.skip('layout engine visuals (layout=1)', () => { - test('skipped: set LAYOUT_ENGINE=1 to run these tests', () => {}); - }); -} else { - const ignore = new Set(config.ignoreDocuments || []); - - const folders = [ - { key: 'basic-documents', folder: config.basicDocumentsFolder }, - { key: 'comments-documents', folder: config.commentsDocumentsFolder }, - ]; - - const layoutEngineDocs = loadDocumentsFromFolders(folders, ignore); - - test.describe('layout engine visuals (layout=1)', () => { - layoutEngineDocs.forEach(({ id, filePath }) => { - test(id, async ({ page }) => { - test.setTimeout(50_000); - - await goToPageAndWaitForEditor(page, { layout: 1 }); - await page.locator('input[type="file"]').setInputFiles(filePath); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - await expect(page).toHaveScreenshot({ - name: `${id}.png`, - fullPage: true, - timeout: 30_000, - }); - }); - }); - - const loadStructuredContentDocument = async (page) => { - const superEditor = await goToPageAndWaitForEditor(page, { layout: 1 }); - const fileInput = page.locator('input[type="file"]'); - - await fileInput.setInputFiles('./test-data/structured-content/sdt-basic.docx'); - - await page.waitForFunction(() => window.superdoc !== undefined && window.editor !== undefined, null, { - polling: 100, - timeout: 10_000, - }); - - await page.waitForFunction(() => { - const toolbar = document.querySelector('#toolbar'); - return toolbar && toolbar.children.length > 0; - }); - - return superEditor; - }; - - test('structured content: inline selection (sdt-basic.docx)', async ({ page }) => { - const superEditor = await loadStructuredContentDocument(page); - const inlineStructuredContent = page.locator('.superdoc-structured-content-inline').first(); - - await expect(inlineStructuredContent).toBeVisible(); - await inlineStructuredContent.scrollIntoViewIfNeeded(); - await inlineStructuredContent.hover(); - await inlineStructuredContent.click({ force: true }); - await expect(inlineStructuredContent).toHaveClass(/ProseMirror-selectednode/); - await page.waitForFunction(() => { - return document.querySelectorAll('.superdoc-structured-content-block.sdt-group-hover').length === 0; - }); - const inlineEditorBox = await superEditor.boundingBox(); - if (inlineEditorBox) { - await page.mouse.move(inlineEditorBox.x - 10, inlineEditorBox.y - 10); - } - - await expect(superEditor).toHaveScreenshot(); - }); - - test('structured content: block selection (sdt-basic.docx)', async ({ page }) => { - const superEditor = await loadStructuredContentDocument(page); - const blockStructuredContent = page.locator('.superdoc-structured-content-block').first(); - - await expect(blockStructuredContent).toBeVisible(); - await blockStructuredContent.scrollIntoViewIfNeeded(); - await blockStructuredContent.hover(); - await blockStructuredContent.click({ force: true }); - await expect(blockStructuredContent).toHaveClass(/ProseMirror-selectednode/); - const blockEditorBox = await superEditor.boundingBox(); - if (blockEditorBox) { - await page.mouse.move(blockEditorBox.x - 10, blockEditorBox.y - 10); - } - await page.waitForFunction( - () => { - const block = document.querySelector('.superdoc-structured-content-block'); - if (block?.matches(':hover')) return false; - return document.querySelectorAll('.superdoc-structured-content-block.sdt-group-hover').length === 0; - }, - null, - { timeout: 2_000 }, - ); - - await expect(superEditor).toHaveScreenshot(); - }); - }); -} diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-advanced-tables-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-advanced-tables-docx-chromium-linux.png deleted file mode 100644 index 924afac58f..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-advanced-tables-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-advanced-text-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-advanced-text-docx-chromium-linux.png deleted file mode 100644 index 049baed811..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-advanced-text-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-base-custom-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-base-custom-docx-chromium-linux.png deleted file mode 100644 index 7b32e7c0ee..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-base-custom-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-base-list-style-indent-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-base-list-style-indent-docx-chromium-linux.png deleted file mode 100644 index 3dedacbfc5..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-base-list-style-indent-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-base-ordered-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-base-ordered-docx-chromium-linux.png deleted file mode 100644 index 47e6c55ff3..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-base-ordered-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-broken-list-missing-items-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-broken-list-missing-items-docx-chromium-linux.png deleted file mode 100644 index 2e0c9cdfe5..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-broken-list-missing-items-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-contextual-spacing-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-contextual-spacing-docx-chromium-linux.png deleted file mode 100644 index a208a4bf73..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-contextual-spacing-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-contract-acc-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-contract-acc-docx-chromium-linux.png deleted file mode 100644 index 8e8c447dee..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-contract-acc-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-custom-list-numbering-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-custom-list-numbering-docx-chromium-linux.png deleted file mode 100644 index e8da108ad5..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-custom-list-numbering-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-custom-list1-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-custom-list1-docx-chromium-linux.png deleted file mode 100644 index 75613c56d0..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-custom-list1-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-exported-list-font-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-exported-list-font-docx-chromium-linux.png deleted file mode 100644 index 6e245339d5..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-exported-list-font-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-extensions-structured-content-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-extensions-structured-content-docx-chromium-linux.png deleted file mode 100644 index 74a1c3df3f..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-extensions-structured-content-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-features-lists-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-features-lists-docx-chromium-linux.png deleted file mode 100644 index 8138659d86..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-features-lists-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-features-redlines-comments-annotations-and-more-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-features-redlines-comments-annotations-and-more-docx-chromium-linux.png deleted file mode 100644 index acdb67e8f8..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-features-redlines-comments-annotations-and-more-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-gdocs-comments-export-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-gdocs-comments-export-docx-chromium-linux.png deleted file mode 100644 index e34f6ee172..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-gdocs-comments-export-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-gdocs-tracked-changes-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-gdocs-tracked-changes-docx-chromium-linux.png deleted file mode 100644 index 2954307582..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-gdocs-tracked-changes-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-header-footer-anchored-images-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-header-footer-anchored-images-docx-chromium-linux.png deleted file mode 100644 index 393210ad88..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-header-footer-anchored-images-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-image-wrapping-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-image-wrapping-docx-chromium-linux.png deleted file mode 100644 index 12ed3949a8..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-image-wrapping-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-invalid-list-def-fallback-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-invalid-list-def-fallback-docx-chromium-linux.png deleted file mode 100644 index 661aeb8f81..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-invalid-list-def-fallback-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-abs-ids-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-abs-ids-docx-chromium-linux.png deleted file mode 100644 index 004cae564c..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-abs-ids-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-formatting-indents-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-formatting-indents-docx-chromium-linux.png deleted file mode 100644 index bc570b1e32..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-formatting-indents-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-markers-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-markers-docx-chromium-linux.png deleted file mode 100644 index 090dcdc2a8..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-markers-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-mixed-abstract-ids-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-mixed-abstract-ids-docx-chromium-linux.png deleted file mode 100644 index 413d9a961c..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-mixed-abstract-ids-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-restart-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-restart-docx-chromium-linux.png deleted file mode 100644 index cda90f584f..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-restart-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-style-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-style-docx-chromium-linux.png deleted file mode 100644 index 93fcf6f222..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-style-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-with-table-break-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-with-table-break-docx-chromium-linux.png deleted file mode 100644 index 59c077c353..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-list-with-table-break-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-lists-complex-items-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-lists-complex-items-docx-chromium-linux.png deleted file mode 100644 index d46c0107e2..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-lists-complex-items-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-longer-header-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-longer-header-docx-chromium-linux.png deleted file mode 100644 index 50be55edb3..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-longer-header-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-msa-list-base-indent-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-msa-list-base-indent-docx-chromium-linux.png deleted file mode 100644 index 8218182807..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-msa-list-base-indent-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-msword-tracked-changes-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-msword-tracked-changes-docx-chromium-linux.png deleted file mode 100644 index aafff7e208..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-msword-tracked-changes-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-multiple-nodes-in-list-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-multiple-nodes-in-list-docx-chromium-linux.png deleted file mode 100644 index 69011ac2ae..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-multiple-nodes-in-list-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-bold-rstyle-linked-combos-demo-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-bold-rstyle-linked-combos-demo-docx-chromium-linux.png deleted file mode 100644 index 5a3376a278..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-bold-rstyle-linked-combos-demo-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-color-rstyle-linked-combos-demo-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-color-rstyle-linked-combos-demo-docx-chromium-linux.png deleted file mode 100644 index d1532b17f2..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-color-rstyle-linked-combos-demo-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-highlight-rstyle-linked-combos-demo-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-highlight-rstyle-linked-combos-demo-docx-chromium-linux.png deleted file mode 100644 index c2bb4861a0..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-highlight-rstyle-linked-combos-demo-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-italic-rstyle-combos-demo-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-italic-rstyle-combos-demo-docx-chromium-linux.png deleted file mode 100644 index 744c97395d..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-italic-rstyle-combos-demo-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-rFonts-rstyle-linked-combos-demo-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-rFonts-rstyle-linked-combos-demo-docx-chromium-linux.png deleted file mode 100644 index af6eb4da03..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-rFonts-rstyle-linked-combos-demo-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-size-rstyle-linked-combos-demo-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-size-rstyle-linked-combos-demo-docx-chromium-linux.png deleted file mode 100644 index 3451a1066c..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-size-rstyle-linked-combos-demo-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-strike-rstyle-linked-combos-demo-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-strike-rstyle-linked-combos-demo-docx-chromium-linux.png deleted file mode 100644 index 4939dc7a82..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-strike-rstyle-linked-combos-demo-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-underline-rstyle-linked-combos-demo-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-underline-rstyle-linked-combos-demo-docx-chromium-linux.png deleted file mode 100644 index 05d63f026a..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-ooxml-underline-rstyle-linked-combos-demo-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-restart-numbering-sub-list-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-restart-numbering-sub-list-docx-chromium-linux.png deleted file mode 100644 index b7f25cf6c8..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-restart-numbering-sub-list-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-sdpr-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-sdpr-docx-chromium-linux.png deleted file mode 100644 index 803e5a78df..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-sdpr-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-sublist-issue-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-sublist-issue-docx-chromium-linux.png deleted file mode 100644 index d73f2d7bc5..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-sublist-issue-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-superdoc-hyperlink-cases-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-superdoc-hyperlink-cases-docx-chromium-linux.png deleted file mode 100644 index 79eb29c5b5..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-superdoc-hyperlink-cases-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-tab-stops-basic-test-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-tab-stops-basic-test-docx-chromium-linux.png deleted file mode 100644 index 6c188d0f75..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-tab-stops-basic-test-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-tab-stops-test-signer-area-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-tab-stops-test-signer-area-docx-chromium-linux.png deleted file mode 100644 index 618999d2b2..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-tab-stops-test-signer-area-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-in-list-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-in-list-docx-chromium-linux.png deleted file mode 100644 index 19d6881b78..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-in-list-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-of-contents-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-of-contents-docx-chromium-linux.png deleted file mode 100644 index d8e011b7c8..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-of-contents-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-of-contents-sdt-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-of-contents-sdt-docx-chromium-linux.png deleted file mode 100644 index 590a5d7373..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-of-contents-sdt-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-width-issue-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-width-issue-docx-chromium-linux.png deleted file mode 100644 index 89be279e28..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-width-issue-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-widths-SD-732-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-widths-SD-732-docx-chromium-linux.png deleted file mode 100644 index 97115450d9..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-widths-SD-732-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-with-block-bookmarks-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-with-block-bookmarks-docx-chromium-linux.png deleted file mode 100644 index 54913a663c..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-table-with-block-bookmarks-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-tiny-spacing-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-tiny-spacing-docx-chromium-linux.png deleted file mode 100644 index ee6c7f4de2..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-tiny-spacing-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-vertical-merge-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-vertical-merge-docx-chromium-linux.png deleted file mode 100644 index 3cc42bee30..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/basic-documents-vertical-merge-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/comments-documents-basic-comments-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/comments-documents-basic-comments-docx-chromium-linux.png deleted file mode 100644 index 60823c39d7..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/comments-documents-basic-comments-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/comments-documents-tracked-changes-docx-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/comments-documents-tracked-changes-docx-chromium-linux.png deleted file mode 100644 index 9644b20f5a..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/comments-documents-tracked-changes-docx-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/layout-engine-visuals-layout-1-longer-header-1-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/layout-engine-visuals-layout-1-longer-header-1-chromium-linux.png deleted file mode 100644 index 50be55edb3..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/layout-engine-visuals-layout-1-longer-header-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/layout-engine-visuals-layout-1-structured-content-block-selection-sdt-basic-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/layout-engine-visuals-layout-1-structured-content-block-selection-sdt-basic-docx-1-chromium-linux.png deleted file mode 100644 index 5fdfeefa8d..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/layout-engine-visuals-layout-1-structured-content-block-selection-sdt-basic-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/layout-engine-visuals-layout-1-structured-content-inline-selection-sdt-basic-docx-1-chromium-linux.png b/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/layout-engine-visuals-layout-1-structured-content-inline-selection-sdt-basic-docx-1-chromium-linux.png deleted file mode 100644 index 7a28a2a954..0000000000 Binary files a/e2e-tests/tests/visuals/layout-engine.spec.js-snapshots/layout-engine-visuals-layout-1-structured-content-inline-selection-sdt-basic-docx-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js b/e2e-tests/tests/visuals/lists.spec.js deleted file mode 100644 index 5c0fd66b8e..0000000000 --- a/e2e-tests/tests/visuals/lists.spec.js +++ /dev/null @@ -1,360 +0,0 @@ -import { test, expect } from '@playwright/test'; -import { sleep, goToPageAndWaitForEditor } from '../helpers.js'; - -test.describe('lists', () => { - for (const listType of ['unordered', 'ordered']) { - test.describe(listType, () => { - test('should create a basic list', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} Hello`, { delay: 100 }); - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-basic-list.png`, - }); - }); - - test('should create a nested list', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} Hello`, { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.press('Tab'); - await page.keyboard.type('World', { delay: 100 }); - - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-nested-list.png`, - }); - }); - - test('should create a nested list with subslists', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} Hello`, { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.press('Tab'); - await page.keyboard.type('World', { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.press('Tab'); - await page.keyboard.type('Hello', { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.press('Tab'); - await page.keyboard.type('World', { delay: 100 }); - - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-nested-list-with-sublist.png`, - }); - }); - - test('should de-indent a list with shift tab', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} Hello`, { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.press('Tab'); - await page.keyboard.type('World', { delay: 100 }); - - await page.keyboard.press('Shift+Tab'); - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-shift-tab.png`, - }); - }); - - test('should indent a list with tab', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} Hello`, { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('World', { delay: 100 }); - await page.keyboard.press('Tab'); - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-indent-list.png`, - }); - }); - - test('should add a table to a list item', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} Hello`, { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.press('Tab'); - await page.keyboard.type('Table', { delay: 100 }); - - // Find data-item="btn-table" - const showTableButton = await page.locator('div[data-item="btn-table"]'); - await showTableButton.click(); - - // Find the 3x3 table - data-cols=3 and data-rows=3 - const tableToAdd = await page.locator('div[data-cols="3"][data-rows="3"]'); - await tableToAdd.click(); - - await page.keyboard.press('Enter'); - await page.keyboard.type('Content after table', { delay: 100 }); - - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-table-in-list.png`, - }); - }); - - test('should create a list and delete an item', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} Hello`, { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('World', { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('Delete this item', { delay: 100 }); - await page.getByText('Delete this item').click({ clickCount: 3 }); - await page.keyboard.press('Backspace'); - await page.keyboard.press('Backspace'); - - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-list-and-delete-item.png`, - }); - }); - - test('should press enter before a list and insert an empty list item', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} Hello`, { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('World', { delay: 100 }); - await page.keyboard.press('ControlOrMeta+A'); - await page.keyboard.press('ArrowUp'); - await page.keyboard.press('Enter'); - - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-enter-before-list.png`, - }); - }); - - test('should press enter inside a list and insert an empty list item', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} Hello`, { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('World', { delay: 100 }); - await page.keyboard.press('ControlOrMeta+ArrowLeft', { delay: 100 }); - await page.keyboard.press('Enter'); - - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-enter-inside-list.png`, - }); - }); - - test('should press enter after a list and insert an empty list item', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} Hello`, { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('World', { delay: 100 }); - await page.keyboard.press('Enter'); - - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-enter-after-list.png`, - }); - }); - - test('should change list type', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} Hello`, { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('World', { delay: 100 }); - await page.keyboard.press('ControlOrMeta+A'); // Select all - if (listType === 'ordered') { - await page.click('[data-item="btn-list"]'); - } else { - await page.click('[data-item="btn-numberedlist"]'); - } - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-change-list-type.png`, - }); - }); - - test('should create lists inside table cells', async ({ page }) => { - // Bug fixed in https://linear.app/harbour/issue/HAR-10437 - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - // Create a table - const showTableButton = await page.locator('div[data-item="btn-table"]'); - await showTableButton.click(); - const tableToAdd = await page.locator('div[data-cols="3"][data-rows="3"]'); - await tableToAdd.click(); - - // Click in the first cell and create a list - const firstCell = superEditor.locator('td').first(); - await firstCell.click(); - - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - - // Type the list prefix - await page.keyboard.type(`${listTypePrefix} `); - - await page.keyboard.type('Item in table cell', { delay: 100 }); - - await page.keyboard.press('Enter'); - await page.keyboard.type('Second item', { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('Another list item', { delay: 100 }); - - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-lists-in-table-cells.png`, - }); - }); - - test('should paste content into lists', async ({ page, context }) => { - // Grant clipboard permissions - await context.grantPermissions(['clipboard-read', 'clipboard-write']); - - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - // Create a basic list - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} First item`, { - delay: 100, - }); - await page.keyboard.press('Enter'); - await page.keyboard.type('Second item', { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('Third item', { delay: 100 }); - await page.keyboard.press('Enter'); - - // Set clipboard content and paste - await page.evaluate(() => navigator.clipboard.writeText('Pasted content here')); - await page.waitForTimeout(100); // Small delay to ensure clipboard is set - - // Paste using keyboard shortcut - await page.keyboard.press('ControlOrMeta+v'); - - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-paste-content-into-lists.png`, - }); - }); - - test('should add inline images within lists', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - // Create a basic list - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} Item with image below `, { - delay: 100, - }); - await page.keyboard.press('Enter'); - - // Click the toolbar image button and handle the native file chooser - const imageButton = page.locator('div[data-item="btn-image"]'); - const [fileChooser] = await Promise.all([ - page.waitForEvent('filechooser', { timeout: 5_000 }), - imageButton.click(), - ]); - const imagePath = './tests/visuals/test-files/test-image.jpg'; - await fileChooser.setFiles(imagePath); - - // Give the editor a moment to process the image - await page.waitForTimeout(1_000); - - await page.keyboard.press('Enter'); - await page.keyboard.type('Item after image', { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('Another item', { delay: 100 }); - - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-inline-images-within-lists.png`, - }); - }); - - test('should turn existing text into a list', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - // Add a few paragraphs of text - await page.keyboard.type('Item 1', { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('Item 2', { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('Item 3', { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('Item 4', { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('Item 5', { delay: 100 }); - await page.keyboard.press('Enter'); - await page.keyboard.type('Item 6', { delay: 100 }); - - await superEditor.press('ControlOrMeta+A'); - const listButton = - listType === 'unordered' - ? await page.locator('div[data-item="btn-list"]') - : await page.locator('div[data-item="btn-numberedlist"]'); - await listButton.click(); - await sleep(200); - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-turn-text-into-list.png`, - }); - }); - - test('should press enter twice and exit the list', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} Text inside list`, { - delay: 100, - }); - await page.keyboard.press('Enter'); - await page.keyboard.press('Enter'); - await page.keyboard.type('Text outside list', { delay: 100 }); - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-press-enter-twice-and-exit-the-list.png`, - }); - }); - - test('should change a sublist type', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - const listTypePrefix = listType === 'unordered' ? '-' : '1.'; - await page.keyboard.type(`${listTypePrefix} Item 1`, { - delay: 100, - }); - await page.keyboard.press('Enter'); - await page.keyboard.press('Tab'); - await page.keyboard.type('Sublist item 1', { delay: 100 }); - - if (listType === 'ordered') { - await page.click('[data-item="btn-list"]'); - } else { - await page.click('[data-item="btn-numberedlist"]'); - } - - await expect(superEditor).toHaveScreenshot({ - name: `${listType}-change-sublist-type.png`, - }); - }); - }); - } -}); diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-basic-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-basic-list-chromium-linux.png deleted file mode 100644 index 7d9755d4a1..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-basic-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-change-list-type-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-change-list-type-chromium-linux.png deleted file mode 100644 index 67ba7aeea1..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-change-list-type-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-change-sublist-type-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-change-sublist-type-chromium-linux.png deleted file mode 100644 index 474e5079a8..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-change-sublist-type-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-after-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-after-list-chromium-linux.png deleted file mode 100644 index 3dc40b9843..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-after-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-before-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-before-list-chromium-linux.png deleted file mode 100644 index 0b40a571c3..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-before-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-inside-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-inside-list-chromium-linux.png deleted file mode 100644 index 09b7759829..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-enter-inside-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-indent-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-indent-list-chromium-linux.png deleted file mode 100644 index cf67aaef49..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-indent-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-inline-images-within-lists-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-inline-images-within-lists-chromium-linux.png deleted file mode 100644 index c118317134..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-inline-images-within-lists-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-list-and-delete-item-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-list-and-delete-item-chromium-linux.png deleted file mode 100644 index 1336823589..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-list-and-delete-item-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-lists-in-table-cells-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-lists-in-table-cells-chromium-linux.png deleted file mode 100644 index 96aabf1317..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-lists-in-table-cells-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-nested-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-nested-list-chromium-linux.png deleted file mode 100644 index cf67aaef49..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-nested-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-nested-list-with-sublist-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-nested-list-with-sublist-chromium-linux.png deleted file mode 100644 index f86efc0488..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-nested-list-with-sublist-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-paste-content-into-lists-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-paste-content-into-lists-chromium-linux.png deleted file mode 100644 index bdbf8e2cf6..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-paste-content-into-lists-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-press-enter-twice-and-exit-the-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-press-enter-twice-and-exit-the-list-chromium-linux.png deleted file mode 100644 index 0bad3668ab..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-press-enter-twice-and-exit-the-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-shift-tab-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-shift-tab-chromium-linux.png deleted file mode 100644 index d23ad64ef5..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-shift-tab-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-table-in-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-table-in-list-chromium-linux.png deleted file mode 100644 index c69e0c63de..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-table-in-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-turn-text-into-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-turn-text-into-list-chromium-linux.png deleted file mode 100644 index 0d95e3e161..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/ordered-turn-text-into-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-basic-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-basic-list-chromium-linux.png deleted file mode 100644 index ad4cf4e6e4..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-basic-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-change-list-type-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-change-list-type-chromium-linux.png deleted file mode 100644 index 53acdcce75..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-change-list-type-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-change-sublist-type-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-change-sublist-type-chromium-linux.png deleted file mode 100644 index 4e1a1bb889..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-change-sublist-type-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-after-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-after-list-chromium-linux.png deleted file mode 100644 index 0a1acf98f7..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-after-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-before-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-before-list-chromium-linux.png deleted file mode 100644 index 2ba95bdf4d..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-before-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-inside-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-inside-list-chromium-linux.png deleted file mode 100644 index b6d23aea48..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-enter-inside-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-indent-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-indent-list-chromium-linux.png deleted file mode 100644 index 05db7743ae..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-indent-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-inline-images-within-lists-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-inline-images-within-lists-chromium-linux.png deleted file mode 100644 index de929de8f9..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-inline-images-within-lists-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-list-and-delete-item-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-list-and-delete-item-chromium-linux.png deleted file mode 100644 index 9387a230cf..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-list-and-delete-item-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-lists-in-table-cells-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-lists-in-table-cells-chromium-linux.png deleted file mode 100644 index 834354e53e..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-lists-in-table-cells-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-nested-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-nested-list-chromium-linux.png deleted file mode 100644 index 05db7743ae..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-nested-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-nested-list-with-sublist-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-nested-list-with-sublist-chromium-linux.png deleted file mode 100644 index 7b8ab3f854..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-nested-list-with-sublist-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-paste-content-into-lists-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-paste-content-into-lists-chromium-linux.png deleted file mode 100644 index 8c47001de3..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-paste-content-into-lists-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-press-enter-twice-and-exit-the-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-press-enter-twice-and-exit-the-list-chromium-linux.png deleted file mode 100644 index 3b98579ff3..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-press-enter-twice-and-exit-the-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-shift-tab-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-shift-tab-chromium-linux.png deleted file mode 100644 index b7142757be..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-shift-tab-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-table-in-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-table-in-list-chromium-linux.png deleted file mode 100644 index fc10a4803e..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-table-in-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-turn-text-into-list-chromium-linux.png b/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-turn-text-into-list-chromium-linux.png deleted file mode 100644 index 34db0e9b59..0000000000 Binary files a/e2e-tests/tests/visuals/lists.spec.js-snapshots/unordered-turn-text-into-list-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js b/e2e-tests/tests/visuals/structured-content-commands.spec.js deleted file mode 100644 index ad54bb08e1..0000000000 --- a/e2e-tests/tests/visuals/structured-content-commands.spec.js +++ /dev/null @@ -1,442 +0,0 @@ -import { test, expect } from '@playwright/test'; -import { goToPageAndWaitForEditor, sleep, settleForScreenshot } from '../helpers.js'; - -test.describe('structured content commands', () => { - const addStructuredContentInline = async (page, options) => { - await page.evaluate( - (options) => window.superdoc.activeEditor.commands.insertStructuredContentInline(options), - options, - ); - }; - - const addStructuredContentBlock = async (page, options) => { - await page.evaluate( - (options) => window.superdoc.activeEditor.commands.insertStructuredContentBlock(options), - options, - ); - }; - - const findStructuredContentOnDOMByAlias = async (page, alias) => { - return page.locator(`[data-alias=${alias}]`); - }; - - const findAllStructuredContents = async (page) => { - return page.evaluateHandle(() => { - return window.editor.helpers.structuredContentCommands.getStructuredContentTags(window.editor.state); - }); - }; - - const findStructuredContentIdByAlias = async (page, alias) => { - const domLocator = await page.locator(`[data-alias=${alias}]`); - if (!domLocator) { - throw new Exception(`DOM element not found by alias ${alias}`); - } - - return domLocator.getAttribute('data-id'); - }; - - const updateStructuredContentById = async (page, id, options) => { - await page.evaluate( - ([id, options]) => { - window.editor.commands.updateStructuredContentById(id, options); - }, - [id, options], - ); - }; - - const deleteStructuredContentById = async (page, id) => { - await page.evaluate((id) => window.editor.commands.deleteStructuredContentById(id), id); - }; - - const deleteStructuredContentAtSelection = async (page) => { - await page.evaluate(() => window.editor.commands.deleteStructuredContentAtSelection()); - }; - - const deleteStructuredContent = async (page, structuredContents) => { - await page.evaluate((structuredContents) => { - window.editor.commands.deleteStructuredContent(structuredContents); - }, structuredContents); - }; - - const insertTable = async (page, rowsXColumns) => { - const [rows, cols] = rowsXColumns.split('x'); - const showTableButton = await page.locator('div[data-item="btn-table"]'); - await showTableButton.click(); - - const tableToAdd = await page.locator(`div[data-cols="${cols}"][data-rows="${rows}"]`); - - await tableToAdd.click(); - }; - - const expectEditorScreenshot = async (page, superEditor) => { - await settleForScreenshot(page); - await expect(superEditor).toHaveScreenshot(); - }; - - test('should insert a structured content inline and type into it', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - - await addStructuredContentInline(page, { attrs: { alias: 'some-alias' } }); - const domLocator = await findStructuredContentOnDOMByAlias(page, 'some-alias'); - - await domLocator.click(); - await page.keyboard.type('Some content inside a structured content inline', { delay: 100 }); - - await expectEditorScreenshot(page, superEditor); - }); - - test('should turn selected text into a structured content inline', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await page.keyboard.type('Some content that will become a structured content inline'); - - await page.keyboard.press('Enter'); - - await page.keyboard.type('Some content that will not become structured content'); - - await page.getByText('Some content that will become a structured content inline').click({ clickCount: 3 }); - - await addStructuredContentInline(page, { attrs: { alias: 'some-alias' } }); - - // Click somewhere else just so the tag is not "selected" anymore - await page.getByText('Some content that will become a structured content inline').click(); - await expectEditorScreenshot(page, superEditor); - }); - - test('should insert structured content inline with given text', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await addStructuredContentInline(page, { - text: 'Some content that was inserted programatically', - }); - - await expectEditorScreenshot(page, superEditor); - }); - - // TODO: Check what's going on here, the visual seems weird - test.skip('should insert structured content inline with given json', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await addStructuredContentInline(page, { - json: { - type: 'paragraph', - content: [ - { - type: 'text', - text: 'Some paragraph here', - }, - ], - }, - }); - - await expectEditorScreenshot(page, superEditor); - }); - - test('should insert a structured content block and type into it', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await addStructuredContentBlock(page, { attrs: { alias: 'some-alias' } }); - const domLocator = await findStructuredContentOnDOMByAlias(page, 'some-alias'); - - await domLocator.click(); - await page.keyboard.type('Some content inside a structured content block', { - delay: 100, - }); - - await expectEditorScreenshot(page, superEditor); - }); - - test('should insert html as structured content block', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await addStructuredContentBlock(page, { - html: 'Some HTML content', - }); - - await expectEditorScreenshot(page, superEditor); - }); - - test('should insert image as structured content block', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await addStructuredContentBlock(page, { - json: { - type: 'image', - attrs: { - src: 'https://www.superdoc.dev/hs-fs/hubfs/logo-3.webp?width=100&height=100&name=logo-3.webp', - alt: 'image', - }, - }, - }); - // Wait for the image to be rendered - await sleep(2000); - - await page.keyboard.press('ArrowDown'); - - await expectEditorScreenshot(page, superEditor); - }); - - test('should insert a base64 image as structured content block', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await addStructuredContentBlock(page, { - json: { - type: 'image', - attrs: { - src: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAEsCAYAAAA1u0HIAAAgAElEQVR4Xu2df+w8x3nX3VKVpgoY0wAtDfF9lUhJRFtjqZBKTfH5D5QoQB1DpSYBkTNNoQIk1xAoCJWcI1WiSkTsP4gqEtqzEPmBKHZUSpO/eiah1EQoDlSoLUlzUUhRRWiSIlGr0Ibn7e8+eL7rvbv9MbM7M/saafS5z93uzDyvmd33PvNrv+o2AgQgAAEIQAACxRP4quItwAAIQAACEIAABG5D0GkEEIAABCAAgQoIIOgVVCImQAACEIAABBB02sDaCPwxM/g+ix+y+PTajMdeCECgXgIIer11i2XPJ7Czr36i+fq37e/XAAkCEIBALQQQ9FpqEjuuEXi9HfC4xS9bvL05+Ib9PV07kd8hAAEIlEAAQS+hlijjVALqZv/ZRsz1+YtNgrT/qWQ5HwIQyIYAN7RsqoKCJCLw+xoxlze+bfL4BIKeiDbJQgACixFA0BdDT8YzEXjC8tEkuHstHi161/sn7bO8dQIEIACBKggg6FVUI0acIfCD9v27LD5k8ZHmGP190OJjFneQgwAEIFALAQS9lprEjjYBed/qWm8Lt5aq3WXxAYsHsEEAAhCohQCCXktNYkdIQOPmEnPNaN9a/FLz48b+fqb5zAx32gwEIFAVAQS9qurEmIaAxs0l5Irh5jHeBc/4OU0FAhCojgCCXl2Vrt4gF+2uLnXvbn/UKOk4AgQgAIFqCCDo1VQlhhiBc+PmgrOx6N3td7c8d+BBAAIQKJ4Agl58FWJAQ+DcuLkDcs/9s424Aw4CEIBAVQQQ9Kqqc9XGHBsPXV76qYOEvrvT4sMW96smhfEQgECVBBD0Kqt1dUZ9wCz+Xov3W9SEuHbwzWT0PbPbV9c8MBgC6yCAoK+jnmu2cmfG6Q1q77f4pjOG+m5xemWqxJ0AAQhAoDoCCHp1Vboqg/ylKxJqCXtX2NiXPhnunAe/KmgYCwEI1EkAQa+zXtdglU+C0yS37QWDD/bbmy0yGW4NrQIbIbBiAgj6iiu/cNO1E5zar8Tcd4JrmyTR91elMhmu8Aqn+BCAwGUCCDotpEQCGjNX9/nmgpjLrr3FtzUGMhmuxJqmzBCAQG8CCHpvVByYCQGtJ5dQyzMPt3Xt8s41di4vnTerZVJ5FAMCEEhHAEFPx5aU4xOQiP+sxT47veGdx+dPihCAQMYEEPSMK4ei3ULAZ7Tr3eaHK2zkleOd04AgAIFVEUDQV1XdxRorgZZn/qTFPi9VCb3ze+2cY7GWU3AIQAACPQkg6D1BcdiiBB633PVu812PUmwa71yH6gFg2+McDoEABCBQPAEEvfgqrN4Aedva3U3CfG55WgjhYP9o3bkC3nn1zQMDIQABJ4Cg0xZyJiAR17at51640i67vz5V3+Od51yzlA0CEIhOAEGPjpQEIxHwiW1ab37smaaOuwfvvCctDoMABKoigKBXVZ1VGeOT4PY9rdrZcdpwRoF15z2hcRgEIFAPAQS9nrqsyRKJuLrP+74ZLVymJg7sCldTa8AWCECgFwEEvRcmDpqRwNbyOjSC3mcSnIr2iMUHmzI+an/7LG2b0SSyggAEIJCeAIKenjE59CcwZtw8nAinpW0bi30fBPqXjCMhAAEIZE4AQc+8glZWPK03/6TF/QC7tZ/7Xc3x2kVO3joBAhCAwOoIIOirq/JsDdZ4uYRcHnffoOP9bWq877wvNY6DAASqJICgV1mtxRmlrnZ52hL1S29QCw0Lu9r1PZvIFFftFBgCEIhJAEGPSZO0xhLQErUPWRzSXf7f7PhvbjLUuX1nxI8tI+dBAAIQyJoAgp519ayicJqR7lu79jU4nNX+jJ30SounvidzHAQgAIEaCSDoNdZqOTb5rHa937yvILe72t9v576pHJMpKQQgAIE0BBD0NFxJtR8BzWrXnutDuto/Ycf7xDnNiB8yia5fqTgKAhCAQIEEEPQCK62SIk+d1S4M8uz7TqKrBBtmQAACEOgmgKDTMpYi8BnL+AGLx54FaHe1P2zn7Xuey2EQgAAEqieAoFdfxVkaqC527ebWV5A11q6Z8HS1Z1mdFAoCEMiBAIKeQy2sqwwbM1fd5Prbd4vWcFa7tneVsJ/WhQ1rIQABCFwmgKDTQuYmIE9b3eXHnhlrrF2T5zywvWtPcBwGAQisiwCCvq76XtpaibPWnW97FsSXtemvAhvI9ATHYRCAwPoIIOjrq/OlLJYoa8nZ/Rb7zkyXN+/iz5vUlqo58oUABIoggKAXUU1VFHJvVmws7npao+P9xSs6hb3ae4LjMAhAYJ0EEPR11vvcVkvIj42g98lbXrm8cw8sUetDjWMgAIFVE0DQV139sxl/sJxOFvc9cmyPm2snOQk8AQIQgAAELhBA0GkeqQloidkTFvW3zzI1xs1T1wjpQwACVRJA0Kus1qyMkpgryku/FuTBM25+jRK/QwACEOgggKDTLFIS2FriEmn9vRZ0DOPm1yjxOwQgAIEzBBB0mkZKAlo3/k6LH72SCePmKWuBtCEAgVUQQNBXUc2LGLmzXLWRjOK1EL4S9bN2cN/x9mvp8jsEIACB1RBA0FdT1bMbKpHW29SubSLzE3aMxN8Dr0SdvarIEAIQqIEAgl5DLeZng2/ves07l5BL0D3oAeCQnzmUCAIQgED+BBD0/OuoxBLqXefa2e10ofDqVtckON+n/TH7LIEnQAACEIDACAII+ghonHKRwL4RaXnp54Lv675pDvik/fV3nYMXAhCAAARGEEDQR0DjlItCfbRf1dV+usCJzWNoRBCAAAQiE0DQIwNdeXLyyuVp7y5weMR+ezD4nUlwK280mA8BCMQhgKDH4UgqN8fCv2jxDovntniV0DMJjtYCAQhAIAEBBD0B1JUmuTe7Jernxs6ZBLfShoHZEIDAPAQQ9Hk4157LxgzUunN1n586jGUSXO0tAPsgAIHFCSDoi1dBFQXQuLjCOe/8cfvN16SzE1wVVY4REIBAbgQQ9NxqpLzyyDvXbnDqUu/yzvf2vb9B7cv2edscX56llBgCEIBAxgQQ9Iwrp5CiyTtXl/quo7zyyuWde7jfPuhVqgQIQAACEIhMAEGPDHRlyW3MXo2d37DYntnengT3sB2zXxkfzIUABCAwGwEEfTbUVWYk71yi3t6zXR67No/x3d/Y1rXK6scoCEAgJwIIek61UVZZJOTnxs7DSXBs61pWvVJaCECgUAIIeqEVl0Gxz42dh69DZUZ7BhVFESAAgXUQQNDXUc+xrVSXur9RTV66h5198J3gmNEemzrpQQACELhAAEGneYwhIO9c4+Pb4OT2JDhmtI8hyzkQgAAERhJA0EeCW/Fpvmd7+FKV9k5wDxkf32xmxagwHQIQgMB8BBD0+VjXktO+8cxD7zx8HSoz2mupaeyAAASKIoCgF1Vdixd2YyXQuvN7LfrYeTgJ7slG7BcvKAWAAAQgsDYCCPraanyavdqrfWfR15fr/3c1SWp5mrz29gYz03LkbAhAAAIQ6EUAQe+FiYOMgM9sf8A+a/tWibq8dQVmtNNEIAABCCxMAEFfuAIKyn7feODywl3c9Vdirp3ijgXZQlEhAAEIVEcAQa+uSpMY5LPYNXtdwh1u6yqP/ZAkVxKFAAQgAIHeBBD03qhWfeDOrJeHvrEYToLjhSurbhYYDwEI5EQAQc+pNvIti8bKtRxNwSfBsTwt3/qiZBCAwAoJIOgrrPSBJrt3/jfsvJ9qzuWFKwMhcjgEIACB1AQQ9NSEy09f3rnWl7/ZosbSeeFK+XWKBRCAQIUEEPQKKzWiSZq9rq71X7GoZWqa0a6/p4h5kBQEIAABCEQggKBHgFhxEvLOf5fFb21sDPdvr9hsTIMABCBQHgEEvbw6m6vE8sT/vcWvazLk7WlzkScfCEAAAiMIIOgjoK3klI+ana9ubOXtaSupdMyEAATKJYCgl1t3KUv+Okv8p5sMHrW/2rOdAAEIQAACGRNA0DOunIWKppns/9Xiiyzy9rSFKoFsIQABCAwlgKAPJVb/8R8yE7/b4i9bfJVF3p5Wf51jIQQgUAEBBL2CSoxows7S0tau/8fiH0TMI5IlKQhAAAKJCSDoiQEXlHz4OtQ3WLk/WFDZKSoEIACB1RNA0FffBJ4FEL4O9Zfs/1eABQIQgAAEyiKAoJdVX6lKq9ehbi1+weL3W3wiVUakCwEIQAACaQgg6Gm4lpTqI1bYBy1+3KLGzTclFZ6yQgACEIDATQII+rpbws7M1yQ4zWy/x6I2kDmsGwnWQwACECiTAIJeZr3FKLUmwamrXa9C/RcW/45FfccytRh0SQMCEIDAzAQQ9JmBZ5SdXrxyw+LG4mcsake4fUbloygQgAAEIDCAAII+AFZFh6qb/V6Lej2qBP1xi3fgnVdUw5gCAQisjgCCvroqv21nJr/b4pssaja7PHVt8cp+7etrC1gMAQhURABBr6gye5iytWM0bv6AxUPjoeOd9wDHIRCAAARyJ4Cg515D8cq3acRcM9rdG5eYf9niLl42pAQBCEAAAksQQNCXoD5/ntoJzj1xzWRX8K1e77bPT89fJHKEAAQgAIGYBBD0mDTzTUuT4O63uLHoy9IO9llCr4lxBAhAAAIQKJwAgl54BfYovrrX941HfmqOl7BrMpxmuuOd94DIIRC4QuC99vvLLb6weVDWhNOHgwdoAEIgOQEEPTniRTPwbnXtAKctXj3o87YR+UULSOYQKJzAzsr/Dosv6rDjMftOvxMgMAsBBH0WzItksrFc5YXrptJekvZF+04z3XkJyyJVQ6YVENAD8duaB+NL5nCPraCySzGBxlZKTQ0rp8bGtTxNM9h14wmDxH1n0SfHDUu5rKNl+30Wv93iN1r8lMU3WmR727LqMafSbhoh1zUUhs/ZPz9j8a+0vucem1PtVV4WGludFawudU12a+/N7u8919he2AVfGwUJ+Tnv6fP224trMxh7ZiGwt1z0ZkJdRx60KZO+PzZ/1e48fMU+fPUsJSMTCBgBBL2+ZrAzkzSrvWs5mn6TkIc3pJoIbBrbt1eM8o11arIdW9IRUHvSNaX25SEUcn2n3/ROhDB8xP55bbpikTIEbiWAoNfVInwS3DnB8pew1Oid760qQ+9INaubrmz9FYv/yuJLm+pmslJd7T6VNXrwlZCHSzs/a/+rrR1amR7tf72C2IOGuzYWGd5JVTuk+zwCCHo9jcK707smwcnKXSNuEv1TPWbf9gaz5UctviSwSUKuuQLhkjzdhF3w9fu2IgaYEp+A2o/aS9ib5UNVbZEO25aXRPs+MOk0fr2Q4gUCCHo9zUOT4FSf8ia6vIIaX8LyY2brXw2qUN6TbsRdN1Jx0W55Cgh6Pe0+tiWvswR/xGI4aVTtZWfx1JGZ94qFP9EDFLtWSK8XAQS9F6bsD9o3QnbO+3Yxu3HmppS9ga0CymuSOG+D7yXuf8/iuS5OCf27EPTSqnrW8r7dcvvhIMdLD4h+mHqB7grO+WTTLulqn7XqyEwEEPTy28HOTPD3mx/PmOMeazgWWKrlEnGJuXeF/rJ91sYe2qnrUtjbj3S5l1rracvd9YB4rns9LInmZ2jWuwdfJhoO9aQtOalDICCAoJfdHDZWfHWlaye4wxlTvEuwhpewtG+guulKqPsEBL0PpfUdo4dcPRD7A+JT9vmtFj92BcXWftcwVxhYPbG+9pOVxQh6VtUxqDC6AUnM1cV3yfOWCErUdQMqNaj8uun6uKZs3lkc4gkd7Pg3NwAY4yy1JcQrt66fcAa7utfVpo49svBrbxMcS5vqAY5D0hJA0NPyTZm6rzWXUJ8br9ONR9u83tvzRpWyvGPT1th3ONt4iFce5qkbtS8rGpvGWBs4Ly8CoVeubnI99O4HFFFDWNqB0APj5gPgcWg6Agh6OrYpU9bNR0InMb/kpR7sd3m17tmmLFPstDeWoB5aZKPCGK88LNPJ/rmz+YKu0di1VUZ6ba/8Q811pLbRN+hhwFdL6Bw9EOj6GpJG37w4DgKDCCDog3BlcbCPiV9b57qx0mqMT+Pr8ihKCrG88tBmbcPpoeQei5LqMaeyhm1qSPd6aIMeCDUJ82uDL69dhzkxoCyVE0DQy6pgeRja7e3c5jGhNXv7Z2dRwl5KUFljeuVu99Y+hBOYaPeltIjp5VTd+7atY7rXwxKc7B/v5dH3DN1Mrx9SiEiAG1tEmDMkdW3zmLAIGjv3pTczFG1SFnpQ0fKffZPK1BtvuzB/zb74x82XeitWuKvcpIJzcrYENlayn7P4TU0J9RCs9iVRHhPk4fs+Bjr/1yzqDX4ECGRDAEHPpiquFkQTd3YW+4zX6eajm5duaucmzF3NcKYDZI+WCnk35pONnWNvvF3F/rB9+Zrmh0/b35fNZBvZzE9AD4eaRKlrQEFv1/uLFo8TiuLDXJ7Eb9qHV1pU1z0BAtkQQNCzqYqLBdnZr9c2jwkTKGWb131z81XZn7God5WnGO//RUv35Q0g3oBVRpsfU0pdJ/KiJep6MFT7Oo5JKDhHaalnLJxYyhyMiVA5PQ0BBD0N15ipbiwxCXTf7nOfhZtz3erm6OvKvXtdPRCpehOU7u1NpTDDPWbrzCOtbdOedK3EEnK37GAffP8CffeoRff+87CeUkCgIZDzTZ9KuulpaImM6kk3rT5Bk+Z8OU6f4+c+Zm8Z+has/pCSSshlm27yYuKhhh3z5q6zXPNT3fokythCLpvbS9S0dLLEJaC51h/likwAQY8MNHJyPm6uG1cf0fMb0A07/hS5LFOTC73yMet/x+bfvinT5seSzOe8cJw8hZD7g6B6xpSXAuvN86l/SnKGADe3fJvGrvE+hniUPv4sEcsp7K0w8srHrv+dYovnrTR0899OSYxzFyeg7m61JQms6vaQqERHS9d3FlQWDNUkAk2y8Qgg6PFYxkzJZ9VqUxh56X2Cn5PThJ2NFdy7RJdasxvemBn/7NOS8jxGD2Ka8KbeJ10TEvNUQWn7sJDyUI9Sbg/JqWwn3YIJIOj5VZ7PqpU3OWTyjYRTNzvd+HIIugGqTPKkdhaPCxWKCXELgY+Ura4HCbna0GPNNdFn+Gls9v5g7OerV0nfpcxzbFk5DwK3EEDQ82sQmgSnbvYhN5GNHa+JX0O651NaLg9KG8XMcQO+ZIdz8WNy4ZOSfU1pe/e6RFWfj4mN08ODxs3VbmgziWGTfHwCCHp8plNSlFd7aMT8NCAhP2fpGbi6EeqBRD0FugGrXEuGcEKcegp8gtOSZSLv6wR8AqXa0d5i32Gn6ylfPkLtNVyittQw0VQ7OH+lBBD0fCp+zLi5Si8RlVeh8fYlBXTbiLlPfHs6A7QSAx8LZUJcBhVypQh64PJd3ubu3Qkf/lRM2kv+7YUStggg6Hk0CR8391eEDimVvBeJ6ZLe+Xss/7dY1OShncVcxhuPVhbegT6kNS13rARVY+XqSZmjez20dGP/tJeo6btc2vFytULORRFA0POoLu+mljAPuYnoQUAvYRkyGz6mxeGEpR+3hL8vZuIR0uKVqREgJk5CbUiTJyXoS3Vxhw9+MjenlSKJ8ZN8TQQQ9OVrU97I3qI87NPA4vi5S4wNy4PxBxHdjHVTzCn4EIaX6Q77MORhKSdbai2Lv2HPe6aGtv8YXHQNhW9RW+vSRt1D7rP45yz+KYu/bfEdFt8eAzJpzEMAQZ+H87lcto0oatOKJ0YURePV/3SBi05iqRdW5DRe3sYX3qjZsnNE40p4itqPRPSPW9xbfGfCvC4l3X7oW2M70cO4JgLqb1egt2KhxjkmWwR9DLU45+iJWON2Y/dd141QE4jm9jx3lqe6SHMbL2/XyqG5Uen7tXpdcVpq3FTklWvehyadqS2d4iY/KLWn7ei7mjPWtLXrnWbzj1n8kxa//gqxpYZBBlUkB98kgKAv1xK8u3rMZDY9DGjduc8EnssKeVXyfEu4yMOb9f1W5jE9IHNxXUM+WzNSD4J6AJWQL10feqjQw4WHNbQR3Tdk8w9ZfMGZRvd/7fuvCX4r4Vpfw/XTy0YEvRem6Af52LduchKeoWHKuPvQvHS8bgQSc930lPdhTCIznqPyarKgh7l7MWY0NfusVBe+FG3Ol/JcAqPrTkNGHmrvwXEh17Wrz+2g3hJd0y+z+PdbP/6o/f93s29lFPBZAgj6/A3Bx5/HjpurxBIr7/JObYFuALr5aZMP3QjHPICkLmM7fY0HqgdEYY3jonPzPpef2ot75bk8CHrvlgtbze3jkpDrHvIfLP6AxVNTgf/c/r6pVZnfb/+/N5cGRTkuE0DQ520hPm7u44djct/bSfJ45tjGVA8fEkaNL+rm/KUxBV7gHGekrGv3vhbAezVL79HZ2ZE5jJWHBVZXv2ZzK9Q6bn5JyN0bP3TU4sm+0/i6h9+yD7/7am1zQDYEEPR5q0LeioR4zLi5SuoPBJpdvk1cdHm5PvlN3lUpYi4sR4u+ocwaxkYTN4VByavdaHhGwxy5eOVuQNhzo+9qbBu7hn+7a109eo8010ZXhW7sS83LCYPm6Cg9QiEEEPT5KirGuLfS0M0y9VISn4lc6gUdbijD+Pk8bTz0ynMZKw8tl2CFu8HV1nPzkNn3Ny2+uEOU9/bd6UozkHDrAT4MNT7wzHM1LJQLgj4PeHnkuplMEWIf+1M3oW5OqYIual3cGuM/pMokYbpbS9snPNU8PpoQ4eCkvTdH95PcvHI35mgfvNempnah+8JPWXx1q9aGPlTpWg9fTKPkeBgefCksewKCnp6/d5PL291PyM6981RPzSqnxFwPHbpB6wZYYnBOKjtLbtLWoLcZtZfcxspDy8M2UdO4uezSfJqwe/0/2v9vHXH9fsHO+YYAmh4IVK+Egggg6OkrS5PK9KS7nZiVxrf8ZjQxqeedrhuCvFqVUxfx07EzmDG9Jywvn/Q0x8TBGU3LKqsSvHIBU++Y2raL3pReslwqYGMF0cN3eE+RkGuzmDEz0sUmXOYpO0vtoculjhYpB4KeFvvOkt83F95pQlZKQ0/iKS4yv+H5RLsvTShnDqeKs2bq6uGnPTEoh/KVXoZSvHLnrIdT3w2u9B4bsff9790+Xbe6PxwmNCw9nPkyT0+G7vYJQJc6FUFPRz7GuLlK5132qiulGVNwt82F7N2lMdNOR/Z8yhv7yWfqljqhbwluffMMvXKJyCN9T1zoOJVRD8IKpXchi70mxKqNK+iBVV3uhwhsQ05K7nMWXxIhXZKYmQCCnga4d2HrJqKLZUrw8T/NYo15A901NwiVUZ9rCLLDZ+qm6M2ogdEYG0rzymWjP1DrsybBbS2W+MC6adq0yu9BM/T3Ee05Wlo+YVB55LACQPaqZ0X1KAah/VzbZ65iBH3M7e36ObHGzXUjDcfOY92QfFlabReGHnh8f266DK+30z5H6Eaq9qy2WFJ78a52ebKyQf+XFMTbt8z1cqeaeKj7yu0BnNjOQ1/uEu5/ZvE7LV7SJpVX1zehRQBBj98kdpakhEVPlqeJybt3HnPsTx6sZsrH6q6baGLU0/+zpfYtFkvvXo0KZWRiJXrlbuq+EUP9n2pVyEisvU7TtfmPAlHTOLnuK8deZw8/KNy3QWfPPXFw09SXbOwb0K4OUkDp23z6HRdr3Nxz08xT1ZEa/FTv3G/Quli3FkvzWK7VgOzzmbp/3T6/+9oJ/H6WgNqHe+UxHybnQB52tZdW9vY4+e8YsL9lMeZQW7sOXmdf/HTryzfa/x+Yo7Isj71F9arp+u0bSuop6mtTlOMQ9CgYn03Ex83VLaYn7KnBvfMY41lethqWpZ3jurMffPx8Y5/l1RCGESjZK3dLvfu4pEmRWyu8utf110PscfJzLeHP2A/amCYMf9b++dfDms7go99iZ2iS3wvPnKleg49b/BmLcj7coTkOzmlFJyDo8So71ri5l0jepm6wU8eCN5aG1uH6WOJUTz8esbgpHSw57XSlB6pt3KRXkZqYleqVewX5HIpfty9eGohArhWoa1NCvgsKqAeRvcXTTIUOezQ8y5Rd7l1zA0JTZb/qsbYexFmqE0GPg1kXpC5C3RRjXIhKSxf6VC9DF6vEXLN81Z1Xq5irFt0zW2pCT5yWNH8qba9cPUMl3kzVvv3NgGr3Ma7DVLUh5u315HoQ1XV/TJXphXTnGkPX/VG9aJuOssz9ILMA5vRZIujTGbtoavJNrIvRvfMbE25Munh0g6tpWdq52vKbuX6fwmx6aygrBW8jEpjSxptD0n4Nyo7cJ8HtrIzqavYxYw0N6SHqiQWbTmpBl4DLZl2n7aCeQ21VO2aHuwWR5Zk1gj6tXnxsOsZ6cy/J3j5M9c5109CT8FQPfxqd+c4+WFbqbldPhG7uhMsE1G51g1U7ETP9LdErl5V+Darec34o2TbX5Kapmpgbw0xt76kEXXWingi1r66Qc31NZbrI+Qj6NOwa61Gj1cUaK0z1znXxSMzXNBP0ZPZqu9cYEwhj1WOu6chLUvuQEM418Soli4MlnvPcCd0f9PDk9wgJue4bijkMgX2blUMPdWGYMilOdn6vxTc0bayr7kt/iEzZnieljaCPx6cboy5KNeDT+GRuOXNv/03xznWu0si92zESrmeTEX/NE1C422KpnmZMJl1pScB9o5JabqjqqpZYqttawpmDQDr7TcN7F1RGjuPE/9LK9+dbDeZ/2f962cuxYerXlDjLLvfo9TmMuhYvhZx6JVJfb4ukj6CPw65GrDEv3VDU6GME3XC1K5z+jhEm3zBGF9WaRO1g9tLdfrkF1uaVy1rZ5C8UGXO9xLhmu9LQ9atuZt0b9FlBE952Fk+pMp2Q7qfsXK0ISBly65VIaeuiaSPow/HrItWNxGelDk+h+4y9fS0PauguZz4eKq98a3FNYh4+BDG7/fntytuGxEReecwH0Fjtfkw68sbVKyP7chpaEuf2hDd9dxxj5Ezn+O6KKbJTj8mPWNSEt5x6T1LYmkWaCPrwalA3+8aiPCwsMk4AABaUSURBVIRYIRSmIWtAdZ5ubDVvGHOJsW6WvpkMs9tvJaX26W/nqmlugbd5iXoukz63DWuVSaGkrmWNocsJiKUF6pZX7+WhSTfWPZJ0ehCIVYk9sqriEF24aqwbizGfOPeW3lDv3G9sqkOVK2Z5SqmsoxX0HovMbn+uxkKvXDfXnUVxqiVIfPQWrhzqXPeBcDlWqV3LmlAqR+WVFr/J4u/t2VhUB7rvqH2pXhRPPc/lsAQEEPT+UHXxfsJizPXmyn2Mdy5PwDfR2DYXVX9L6jhS9aE5Bwo5dbsuSVdtwTfuqMkrd6YH+6D5EhJOXQNLiYeu2fbGMDlOeJvSFtWW2uE4JUHOTU8AQe/PWF3bscfNlfveorxzpd11EbVL6OOHPtFmjZ65mMij4FWpN1uHBEZCrm72Gr1y2fh2iz/cXAxLreIQZz1Q6E1oX92Uxe8JiF3/eylHJiKAoPcDK9GV2PYR3H4pPncj9pntfcbOXcw1cW43JKPKjg17NXIZR10Ksdpk6JWrrdb2kBe+Eewps+87FoDtM9c3Td7/2/7qrX6HBcpClhDoJICgX28YumHqVYKvSHCjdC+zj3cu70s37rWLuWpMDzM+GW4pb+16y0l7hB5qfF25vPIftKj5HTWGnzejXtUY9qft77+Z0Uh55HuLmyDPGjbkmREhWc1FAEG/TNo9wdjj5sp1yNi5C9jDzc1lrvaRaz6/agXT5B2NpYrj2sLWDK7dK/c6la2+cdBP2ufvmamy9QDtqwQ8y1qHM2ZCSjapCSDolwmnGjdXrnuLfcbO9eKCd1hk4tfNutJ7lN/TVJve4/zdqS+SjNIPvXI9zEh0jhmVL0VRZJ9WMijMsTRx21yX+hsGvPIUtUuaUQkg6Odx7u0nXdTtCztGBWwsEZ+hfWnsXON26pb/2xbfGSPjCtIIt6rUftEfrMCmPiaoHcpj1DyKtYjLzmz1oZXUcyV0TXa9EaymDXn6tDOOKZgAgt5debp5SkjlAZ0S1G+fsXN573uLeOa3VoAmfN1u8fMWX5ygbnJLsu2VS+RqHStvs9e1pzXSCqm8864laF4Ohrhyuxooz0UCCPrz8egCP1rUJCP9jR36jJ3LK9GNGzG/lb4esHz/7hrXWbfb2raxV21mLV65M1D7T+2d+6TC9jwMXxJ6in3xkx4EUhJA0J9PN+W4uXI7WNTM2XM7XUmw1A2vBwodS3iOgLPTNzm9kCN2HUlg3m/xtRY1Vi5xW4tXLpbhQ6/+j+2dd014Uz4lbdkau82RXgUEEPRbK3Fv/+pi1zhlirCxRM+NnesmJjGXUK3tBt6XtXe3a7axWNYYfAcytYf3WdRaZ9m9pqDrUN6zQsyxc13X4bvJQ6bKRw/Ra2O9pnZVva0I+nNVrIv92AhFqov6YOnLO2+vO9fNWz0D8kS2Fp+uvuUNN7D27na1P3Ux6+8avXJvEbJfWyx7iOGd6/qSkO86mh1L0YZfi5yRKQEE/WbFeBdfivXmXvUb+9DlnSPm/S6Ogx2mhyGFmjaTUf37WK5s08OeHl5SPVT2o73cUZrs+Ieb7GN45+fGyf1FKvvlTCVnCMQlgKDf5Cnv2JenxCX8XGouSGF3sUReed9hcWsRz/w8/ZP95DOea2m3qnPfIEaWP2TxkVQNsIB0P2xlfE1Tzmfsr97+pXofE86NkystJr2NIco52ROo5cY4BbTGzXTx6+aaKmwsYffO3btU16LGzBHz69TDblhtfav6KjmoPYRrnvUwubO45ge6dlf7R4yHJgUODZfGyfUwrev9iaGJcjwESiCwdkGXiOvi1k3glLDCDpZ2OHau/OSZi7/KsOYbeR/s8lr9zWqle7HtLmDWOt8c8tK4+aZpDJ+zvy/p0zCCY3Su2O7OnCfOakdrHcoYiJPDSySwZkH3m4gEIuUTu2404di5biiI+bCr5WSHe3d7qcvV9OAWdq/LW1RPAw9zzy3l9FYxpI51Hfub0PS5HdSjI69cbYgAgaoJrFnQ1d2trs594ho+WPq+7nyHmA+mvbEz/IGoxJexSGTaM6zXtknMpUrXNeEbyOi4IT0Wuq50/aqNtAOz1wdfapxQOoG1Cvoc4+ZqG6EYqTtQvQF0sw+7avTg5WPmv2Cfv3XY6YseHa4pV0EQmVurw4ee3LNuL+c8V3n/wH7Q+w1e2HEAs9cXbfJkviSBNQr61oAfLOrvKTF85SMv4n9Y/APNDX2OfBObNWvyT1luf6LJsZQJcapjf5GKw8Irv7XZSMQ19CRRV5AQbyxeGuPe2e96MNZxXUHL3PSwzjj5rJcomeVCYG2CrpuIum8fsJhy3Fz1q5uOdxXrf3lnW4unXCq/kHKIl4+f32ufjxmXW+0rXFOuokqo1MOQc7mXQBpOdFT+5/YWEFM9FEuodU11BXn2+p35CEvUJHlmQ2Btgi6PQBf/foYaODQ3ImWFmI8Drht4+FCUc3ttd6/LYjzG7nr/Lvv63wY/qfdCguxhax/0EKcHIR9u6UpJD0s/YPED45oXZ0GgLgI53yBjk5aI60ahmDpsLAMXov9pn7/d4il1phWmr5u5v11NExi9ezYnU1Wm9v7gjJVfrqFP2c8vbQ75Hfv7cxZfZPEVPStWfHU9H3oez2EQWAWBtQi6RFxd7BLaOcbXPmb5fKfF37L4csR89LUUdsvK292NTin+iV2z15ULY+XXWf8XO0S7wA0NPuFN7WKO63ho+TgeAosSWIOg+7h5yn3aw0p8q/3zjuYLvSnr3YvWcNmZH6349zQmaN7DIRNzNKYrUfHZ2SoWXnn/yml3uV87U2xV9wj5NVL8vmoCaxB0jZtrdrRuBqnDzjLwNbVjdrtKXb7S0v9KUOAb9vm0sAFby789e11FehixGVwzGqrwiW7+0BYmoiEWTXJTz1rqCayDC88JEMiRQO2Cvjfougkrpg6hmCuvnDzK1LanSD8cP5eHtkmRSc80lXfXtqLswd4TIIdBAALpCdQs6BKEQyMEqcfbXMx/3fL7/RaXFqD0LSd9DjmMn6tLvWtbUY3l7i3O0euTnjQ5QAACVRCoVdDlUam7TqJ+TFxTLubaxeyPWLzdIt75dOiqv7uaZJbgeW5bUfYGn163pAABCCQgUKugz7Xe3MVcHrnG+eTN4Z1Pb6h6IAvXn885fr61vNW9rr9hYNLb9HolBQhAICGBGgVd3aCacNO+IcfG6GKucdS/ZFEb1qiLdglvMrZtS6fnbFWOuR6Q9BARvqPcGbA3+NKtgfwhAIFeBGoT9LnGzUMx14ODZuvKq+uzH3Wviln5QertuK9h0N5FLDYaCXnXhDflo+511XXqORixbSI9CEBghQRqEnTdmOcYN2+LuZrNr1n8WotavrRfYTuKafK3WWLq9fBwr304xsygSUvtxSe8tZNX/npIS5FvAlNIEgIQgMDNV3nWEj5hhsijSimoO0tf68zVDby1eGryk4enNdOa4Y43N61Fha9L/WLDdFqKt569sX/PeeSqV7WfQ8wMSQsCEIDAHARqEfQ5xs27xNx3odPfxyzqGMI0Al+w07+hSULzErbTkvv/Z2tehTzyrjryZWgSch7IIgEnGQhAYF4CNQi6xs1d0FPdjF3MdeOXMJyaapIAaHmTwt0W1eVPGE9A4q0VCh5iMFX9qP6UdjuwN/j4uuJMCEAgMwKlC7rEVROoJOqpxFRioG523fwlCp7Pxj770qq5ZmJn1nyiF2dvKao73MP77MNfGJGL9gp/u0W95e6FHecj5COgcgoEIJA3gZIFXd3c8ubU1Z1qx65zYq5aPVh07/yhhGXIuwXFLV1b0JX6yaK+1/yIcz0werDTJjRbi3q4U9voCgh53PoiNQhAICMCJQu6vOY7mht4CqQ7S7TLM1deG4tLbXySwtZc0mxzbZdL4q7oQccrXguata6HvsO1A/kdAhCAQKkEShX0nQHfW5RnlmLcXOmfE3PVtYTBvXN5jvIKCXEIvNeS+b4IST1jaTxlUcvPUg3HRCgmSUAAAhCIQ6BEQZeIa4lajAlTXRSvifnGTgq9c71nXeP4hHgEVMfyqLteq3ktFz1gqT4O1w7kdwhAAAI1EShN0DU2KjHXBi4pbtjXxFx1r3zdO9eY7Lnx2prayVK2bC1j1YmPkbfLIf7yvo/B3xQ9NkvZT74QgAAEehMoTdBTjpur21zpi4mEpKubdmPfh945a897N7UoB4q/ooJEnAABCEAAAg2BkgRdY6GKKcbNlaZmzIvHzuK5LvSD/ebeuRCm6vangUIAAhCAAAQGEShF0CW48si2FmNPcHIxV9f5pTel6XdtRepBM6d1LgECEIAABCCwOIESBD3luHlfMVdF7S2Gm56w9nzx5ksBIAABCEDACZQg6OoK105su8jVNkTM9VChsfNwAtwN+/8UuUwkBwEIQAACEBhFIHdB15i5hHxrMebs5SFiLrAqx7sCwqw9H9XcOAkCEIAABFIRyFnQJeKanKa/McfNvQt/Y+leGjMPmZ/snzuDL/qel6reSBcCEIAABCBwC4FcBV1iq/XmEs5zM87HVKXEXF348tAftSjP+1rY2QFazuaBtefXiPE7BCAAAQjMTiBXQZeY613YfQS3L7RQzIesHz9aBuGOZUPO7Vs2joMABCAAAQhMIpCjoD9iFm0txlwSNlbMVY7w/dyCzdrzSU2OkyEAAQhAIAWB3AT9LWakBP1bLJ4iGSwx/7jFl1kc6l0f7JxwIxnNtt9EKhfJQAACEIAABKIRyEnQfeb5D5l1/ySahTfH4pX2L1l8xYB02xvJ6FTtIb8fkAaHQgACEIAABGYhkJOgaya7JsDFFEx1l28talc3/R2y9K29VE0VwtrzWZolmUAAAhCAwFACuQj6wQouLzrWuLm8a81Mf71FdZMr3SFiLo4ni+FSNdaeD21dHA8BCEAAArMRyEHQd2atxs03I0T3HCiJudLVErOtxaHr2PUg8Hgrcdaez9YsyQgCEIAABIYSWFrQfdz8fiv4cWjhzxzvYq6fx85IV9f/fUH6ejCI+cARyVSSgQAEIAABCNwksKSg+1IydWXvI1VIKOZjPequyXBDZ8dHModkIAABCEAAAv0ILCno8oIlntt+Rb16VCjmU2ajd02GUw+CykuAAAQgAAEIZElgKUGXaMor31gcOlmtC2Qo5lO9aY233xVkwlavWTZdCgUBCEAAAiGBJQRd4+ZaG36vxWOE6gjFfOpMdC9bWKypDwgRTCQJCEAAAhCAwGUCcwu6utgl5hJJeehTg2bHP9gkMmateTv/MD3/LdaDx1RbOR8CEIAABCBwlsDcgq5x6I3FGOvN9UDwtsaysWvN22BO9kW49pytXrl4IAABCECgCAJzCrqPm0vMJZxTws5O9leajl1r3s6/q7u97ytWp9jCuRCAAAQgAIHJBOYSdBfLh6zE6taeElKIucrT1d0+dh37FPs4FwIQgAAEIDCYwByC7uPmGuPWDmxTQijmSmfsWvOuMvyGffl7gh/obp9SU5wLAQhAAAKzEphD0DVuvrU4tau9vR1rTDHXa1vf0yKvLv2/PGttkBkEIAABCEBgJIHUgu4e9dSudt8iVt6+QuylZP5WthDjG+yfD47kymkQgAAEIACBWQmkFPSNWaIlar4P+ljD2mI+da15uxwq52c6CpeSzVgWnAcBCEAAAhDoJJBStP675fiNFqes426LeYy15m0QXVu9Kp8YS+todhCAAAQgAIFZCKQS9J2VXmPQn7f44pGWyHPWK0xdWFOIuYp2tHhPq4xP2v/bkeXmNAhAAAIQgMDsBFIIusa51YWtv2O9c52rcW0X81hrzbsAf6XjSwR99qZIhhCAAAQgMIVACkHfW4G0g9vYiWtzirnYdQn6p+37l00By7kQgAAEIACBOQnEFvSNFV4T4STKNyyeRhijbvZwvXrM5Wl9PfRn7MAXjCg7p0AAAhCAAAQWIRBb0A9mxZstPmxxP8Ki8M1pOj21mCuP37T4da2y6ruvH1F+ToEABCAAAQgsQiCmoG/MAo2d+zK1Lw20qC3mc+2j/mEr52taZf2I/f/ageXncAhAAAIQgMBiBGIK+tGs0GzxMd55ex/1sePvY0GGov6UJfIdYxPiPAhAAAIQgMASBGIJ+tYKr1npY7zznZ3nb04Tg6XWgPvkuLEz85eoP/KEAAQgAAEIPEsglqCP9c67xFwPB0O762NUpwv62Ml8McpAGhCAAAQgAIFRBGIIuovyUO/cvXoveKqNY/qCcUGPwaRvnhwHAQhAAAIQiEIghnidrCR3Whwydt7e0jXlxjF9QT3dHMiWr32JcRwEIAABCGRDYKqg780SbSIzxDvPUcyzqRAKAgEIQAACEBhDYIqgh1u89vXOw3O8vPfbB70znQABCEAAAhCAwEgCUwT9xy1PbfyicIfFaxPZ2lu66rw5No4ZiYbTIAABCEAAAuUQGCvorzYTP9qY+ZP293uumIyYl9MmKCkEIAABCBRIYKygv89sfWNj73fZ349dsL1LzPt20ReIlCJDAAIQgAAE5icwRtA3Vkxt8apwbUc3ifnHLYZvLrt2zvwUyBECEIAABCBQOIExgn4wm/UCFoW7LfpyrzYKifkvWPzm4AfEvPAGQ/EhAAEIQCBPAkMFfWNmuHf+pH3enjGrq5v939mxGnsnQAACEIAABCAQmcBQQT9Y/u6dn9vzvEvMf9XO+6MWr82Ej2weyUEAAhCAAATWQWCIoPfxzrVpzOMWdayHpbd0XUdNYiUEIAABCKyawBBBD19x2rV+vL0DnMDmsKXrqisY4yEAAQhAYB0E+gp6uMPbZ1seuEi93qJegarjPCDm62hDWAkBCEAAAhkQ6Cvoeyur9mxXaK8h3zVi3jbn3Bh7BmZTBAhAAAIQgEBdBPoIurxuTWp7QWP6Dft7aj4f7K9PkgvJsKVrXe0EayAAAQhAIHMCfQRdk9zUpa4gYde68q6Z7G4qYp55pVM8CEAAAhCoj0AfQf9FM/vljekfsb//0KJEPhwvR8zraxtYBAEIQAACBRHoI+haO357Y5P2bD+3OQyeeUEVT1EhAAEIQKAuAn0E/StXTGY2e11tAmsgAAEIQKBAAlMFXZvG7Cye28+9QCQUGQIQgAAEIFAegT6C/vNm1qs6THvUvttbZDvX8uqdEkMAAhCAQGUE+gi6doD7sMU/1Nj+afv7FovHylhgDgQgAAEIQKBYAn0E3Y3TZLjfsPifirWWgkMAAhCAAAQqJTBE0CtFgFkQgAAEIACB8gkg6OXXIRZAAAIQgAAEbkPQaQQQgAAEIACBCggg6BVUIiZAAAIQgAAEEHTaAAQgAAEIQKACAgh6BZWICRCAAAQgAAEEnTYAAQhAAAIQqIAAgl5BJWICBCAAAQhAAEGnDUAAAhCAAAQqIICgV1CJmAABCEAAAhBA0GkDEIAABCAAgQoIIOgVVCImQAACEIAABBB02gAEIAABCECgAgIIegWViAkQgAAEIAABBJ02AAEIQAACEKiAAIJeQSViAgQgAAEIQABBpw1AAAIQgAAEKiCAoFdQiZgAAQhAAAIQQNBpAxCAAAQgAIEKCCDoFVQiJkAAAhCAAAQQdNoABCAAAQhAoAICCHoFlYgJEIAABCAAAQSdNgABCEAAAhCogACCXkElYgIEIAABCEAAQacNQAACEIAABCoggKBXUImYAAEIQAACEEDQaQMQgAAEIACBCggg6BVUIiZAAAIQgAAE/h8BAr6lbIUBMAAAAABJRU5ErkJggg==', - alt: 'image', - }, - }, - }); - // Wait for the image to be rendered - await sleep(2000); - - await page.keyboard.press('ArrowDown'); - - await expectEditorScreenshot(page, superEditor); - }); - - test('should update structured content block by id (html -> html)', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await addStructuredContentBlock(page, { - html: 'Some HTML content', - attrs: { alias: 'some-content' }, - }); - - const structuredContentBlockID = await findStructuredContentIdByAlias(page, 'some-content'); - await updateStructuredContentById(page, structuredContentBlockID, { - html: 'Updated HTML', - }); - - await expectEditorScreenshot(page, superEditor); - }); - - test('should update structured content block by id (html -> json)', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await addStructuredContentBlock(page, { - html: 'Some HTML content', - attrs: { alias: 'some-content' }, - }); - - const structuredContentBlockID = await findStructuredContentIdByAlias(page, 'some-content'); - - await updateStructuredContentById(page, structuredContentBlockID, { - json: { - type: 'paragraph', - content: [ - { - type: 'text', - text: 'Updated paragraph here', - }, - ], - }, - }); - - await expectEditorScreenshot(page, superEditor); - }); - - test('should update structured content block by id (json -> json)', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await addStructuredContentBlock(page, { - json: { - type: 'paragraph', - content: [ - { - type: 'text', - text: 'Some initial paragraph here', - }, - ], - }, - attrs: { alias: 'some-content' }, - }); - - const structuredContentBlockID = await findStructuredContentIdByAlias(page, 'some-content'); - await updateStructuredContentById(page, structuredContentBlockID, { - json: { - type: 'paragraph', - content: [ - { - type: 'text', - text: 'Some updated paragraph here', - }, - ], - }, - }); - - await expectEditorScreenshot(page, superEditor); - }); - - test('should update structured content block by id (json -> html)', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await addStructuredContentBlock(page, { - json: { - type: 'paragraph', - content: [ - { - type: 'text', - text: 'Some initial paragraph here', - }, - ], - }, - attrs: { alias: 'some-content' }, - }); - - const structuredContentBlockID = await findStructuredContentIdByAlias(page, 'some-content'); - await updateStructuredContentById(page, structuredContentBlockID, { - html: 'Some updated initial paragraph here', - }); - - await expectEditorScreenshot(page, superEditor); - }); - - test('should delete structured content inline by id', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await addStructuredContentInline(page, { - text: 'Some content that should be deleted', - attrs: { alias: 'some-content' }, - }); - - await expect(page.getByText('Some content that should be deleted')).toBeVisible(); - - const structuredContentId = await findStructuredContentIdByAlias(page, 'some-content'); - - await deleteStructuredContentById(page, structuredContentId); - - await expect(page.getByText('Some content that should be deleted')).not.toBeVisible(); - }); - - test('should delete structured content inline at selection but preserve its content', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await addStructuredContentInline(page, { - text: 'Some content that should be persisted', - attrs: { alias: 'some-content' }, - }); - - const textDom = await page.getByText('Some content that should be persisted'); - - expect(textDom).toBeVisible(); - - await textDom.click({ clickCount: 3 }); - - await deleteStructuredContentAtSelection(page); - - await expect(page.getByText('Some content that should be persisted')).toBeVisible(); - }); - - test('should delete multiple structured content inline at once', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await addStructuredContentInline(page, { - text: 'Some content that should be deleted 1', - attrs: { alias: 'some-content1' }, - }); - await addStructuredContentInline(page, { - text: 'Some content that should be deleted 2', - attrs: { alias: 'some-content2' }, - }); - await addStructuredContentInline(page, { - text: 'Some content that should be deleted 3', - attrs: { alias: 'some-content3' }, - }); - - const structuredContents = await findAllStructuredContents(page); - await deleteStructuredContent(page, structuredContents); - - await expect(page.getByText('Some content that should be deleted 1')).not.toBeVisible(); - await expect(page.getByText('Some content that should be deleted 2')).not.toBeVisible(); - await expect(page.getByText('Some content that should be deleted 3')).not.toBeVisible(); - }); - - test.describe('advanced use cases', () => { - test('should insert structured content inline inside a list', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await page.keyboard.type('- Item1'); - await page.keyboard.press('Enter'); - await page.keyboard.type('Item 2'); - await addStructuredContentInline(page, { - text: 'Some structured content inside a list item', - }); - await page.keyboard.press('Enter'); - await page.keyboard.type('Item 3'); - - await expectEditorScreenshot(page, superEditor); - }); - - test('should insert multiple structured content inline inside a nested list', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await page.keyboard.type('- Item1'); - await page.keyboard.press('Enter'); - await page.keyboard.press('Tab'); - await page.keyboard.type('Item2'); - await addStructuredContentInline(page, { - text: 'Some structured content inside a list item', - }); - await page.keyboard.press('Enter'); - await page.keyboard.type('Item3'); - await page.keyboard.press('Shift+Tab'); - await page.keyboard.press('Enter'); - await page.keyboard.type('Item4'); - await addStructuredContentInline(page, { - text: 'Some more content inside a list item', - }); - await page.keyboard.press('Enter'); - await page.keyboard.type('Item5'); - - await expectEditorScreenshot(page, superEditor); - }); - - test('should insert structured content inline inside a table cell', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await insertTable(page, '3x3'); - await addStructuredContentInline(page, { - text: 'Some structured content inside a table cell', - }); - - await expectEditorScreenshot(page, superEditor); - }); - - test('should insert an image structured content inside a table cell', async ({ page }) => { - const superEditor = await goToPageAndWaitForEditor(page); - await superEditor.click(); - - await insertTable(page, '3x3'); - await addStructuredContentBlock(page, { - json: { - type: 'image', - attrs: { - src: 'https://www.superdoc.dev/hs-fs/hubfs/logo-3.webp?width=100&height=100&name=logo-3.webp', - alt: 'image', - }, - }, - }); - await sleep(2000); - await expectEditorScreenshot(page, superEditor); - }); - }); -}); diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-04600-tructured-content-inline-inside-a-nested-list-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-04600-tructured-content-inline-inside-a-nested-list-1-chromium-linux.png deleted file mode 100644 index 3fa6b80d18..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-04600-tructured-content-inline-inside-a-nested-list-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-6a471-structured-content-inline-inside-a-table-cell-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-6a471-structured-content-inline-inside-a-table-cell-1-chromium-linux.png deleted file mode 100644 index d01c44ed9b..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-6a471-structured-content-inline-inside-a-table-cell-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-75398--image-structured-content-inside-a-table-cell-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-75398--image-structured-content-inside-a-table-cell-1-chromium-linux.png deleted file mode 100644 index 5970b62df8..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-75398--image-structured-content-inside-a-table-cell-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-a706e-nsert-structured-content-inline-inside-a-list-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-a706e-nsert-structured-content-inline-inside-a-list-1-chromium-linux.png deleted file mode 100644 index 591aa5b577..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-advanced-use-cases-a706e-nsert-structured-content-inline-inside-a-list-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-a-base64-image-as-structured-content-block-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-a-base64-image-as-structured-content-block-1-chromium-linux.png deleted file mode 100644 index 816b3c3afb..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-a-base64-image-as-structured-content-block-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-a-structured-content-block-and-type-into-it-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-a-structured-content-block-and-type-into-it-1-chromium-linux.png deleted file mode 100644 index 1bfd87d2a4..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-a-structured-content-block-and-type-into-it-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-a-structured-content-inline-and-type-into-it-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-a-structured-content-inline-and-type-into-it-1-chromium-linux.png deleted file mode 100644 index 7d5751cada..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-a-structured-content-inline-and-type-into-it-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-html-as-structured-content-block-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-html-as-structured-content-block-1-chromium-linux.png deleted file mode 100644 index 8d9828c690..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-html-as-structured-content-block-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-image-as-structured-content-block-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-image-as-structured-content-block-1-chromium-linux.png deleted file mode 100644 index 68d119b2bf..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-image-as-structured-content-block-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-structured-content-inline-with-given-text-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-structured-content-inline-with-given-text-1-chromium-linux.png deleted file mode 100644 index c7f4043371..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-insert-structured-content-inline-with-given-text-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-turn-selected-text-into-a-structured-content-inline-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-turn-selected-text-into-a-structured-content-inline-1-chromium-linux.png deleted file mode 100644 index 9eb3929c0c..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-turn-selected-text-into-a-structured-content-inline-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-alias-html---html-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-alias-html---html-1-chromium-linux.png deleted file mode 100644 index 1cbfdd20d6..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-alias-html---html-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-alias-html---json-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-alias-html---json-1-chromium-linux.png deleted file mode 100644 index 3efba05466..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-alias-html---json-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-alias-json---html-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-alias-json---html-1-chromium-linux.png deleted file mode 100644 index 4d85cfe62a..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-alias-json---html-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-alias-json---json-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-alias-json---json-1-chromium-linux.png deleted file mode 100644 index af8df0af42..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-alias-json---json-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-id-html---html-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-id-html---html-1-chromium-linux.png deleted file mode 100644 index 42dddbd48a..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-id-html---html-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-id-html---json-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-id-html---json-1-chromium-linux.png deleted file mode 100644 index 4954a26445..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-id-html---json-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-id-json---html-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-id-json---html-1-chromium-linux.png deleted file mode 100644 index 42f06c39ab..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-id-json---html-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-id-json---json-1-chromium-linux.png b/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-id-json---json-1-chromium-linux.png deleted file mode 100644 index 55f7d92a49..0000000000 Binary files a/e2e-tests/tests/visuals/structured-content-commands.spec.js-snapshots/structured-content-commands-should-update-structured-content-block-by-id-json---json-1-chromium-linux.png and /dev/null differ diff --git a/e2e-tests/tests/visuals/test-files/test-image.jpg b/e2e-tests/tests/visuals/test-files/test-image.jpg deleted file mode 100644 index 562356e436..0000000000 Binary files a/e2e-tests/tests/visuals/test-files/test-image.jpg and /dev/null differ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9390c74e53..634dfd83e4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,25 +14,19 @@ catalogs: version: 19.8.1 '@eslint/js': specifier: ^9.31.0 - version: 9.39.3 + version: 9.39.2 '@floating-ui/dom': specifier: ^1.7.0 version: 1.7.5 - '@fontsource/inter': - specifier: ^5.2.8 - version: 5.2.8 '@hocuspocus/provider': specifier: ^2.13.6 version: 2.15.3 '@hocuspocus/server': specifier: ^2.13.6 version: 2.15.3 - '@linear/sdk': - specifier: ^53.0.0 - version: 53.0.0 '@playwright/test': specifier: ^1.57.0 - version: 1.58.2 + version: 1.58.1 '@semantic-release/changelog': specifier: ^6.0.3 version: 6.0.3 @@ -50,25 +44,25 @@ catalogs: version: 14.6.1 '@types/bun': specifier: ^1.3.8 - version: 1.3.9 + version: 1.3.8 '@types/node': specifier: 22.19.2 version: 22.19.2 '@types/react': specifier: ^19.2.6 - version: 19.2.14 + version: 19.2.11 '@types/react-dom': specifier: ^19.2.3 version: 19.2.3 '@typescript-eslint/eslint-plugin': specifier: ^8.49.0 - version: 8.56.0 + version: 8.54.0 '@typescript-eslint/parser': specifier: ^8.49.0 - version: 8.56.0 + version: 8.54.0 '@vitejs/plugin-react': specifier: ^5.1.1 - version: 5.1.4 + version: 5.1.3 '@vitejs/plugin-vue': specifier: 6.0.2 version: 6.0.2 @@ -92,7 +86,7 @@ catalogs: version: 16.6.1 eslint: specifier: ^9.39.1 - version: 9.39.3 + version: 9.39.2 eslint-config-prettier: specifier: ^9.1.0 version: 9.1.2 @@ -120,9 +114,6 @@ catalogs: he: specifier: ^1.2.0 version: 1.2.0 - jimp: - specifier: ^1.6.0 - version: 1.6.0 jszip: specifier: 3.10.1 version: 3.10.1 @@ -143,22 +134,13 @@ catalogs: version: 2.43.2 nodemon: specifier: ^3.1.10 - version: 3.1.13 - patch-package: - specifier: ^8.0.1 - version: 8.0.1 + version: 3.1.11 pdfjs-dist: specifier: ^5.4.296 version: 5.4.624 pinia: specifier: ^2.1.7 version: 2.3.1 - pixelmatch: - specifier: ^7.1.0 - version: 7.1.0 - playwright: - specifier: ^1.56.0 - version: 1.58.2 postcss-nested: specifier: ^6.0.1 version: 6.2.0 @@ -212,7 +194,7 @@ catalogs: version: 1.11.0 prosemirror-view: specifier: ^1.33.8 - version: 1.41.6 + version: 1.41.5 react: specifier: 19.2.4 version: 19.2.4 @@ -260,7 +242,7 @@ catalogs: version: 5.9.3 typescript-eslint: specifier: ^8.49.0 - version: 8.56.0 + version: 8.54.0 unified: specifier: 11.0.5 version: 11.0.5 @@ -326,7 +308,7 @@ importers: version: 19.8.1 '@eslint/js': specifier: 'catalog:' - version: 9.39.3 + version: 9.39.2 '@semantic-release/changelog': specifier: 'catalog:' version: 6.0.3(semantic-release@24.2.9(typescript@5.9.3)) @@ -338,28 +320,28 @@ importers: version: 22.19.2 '@typescript-eslint/eslint-plugin': specifier: 'catalog:' - version: 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + version: 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/coverage-v8': specifier: 'catalog:' - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2)) eslint: specifier: 'catalog:' - version: 9.39.3(jiti@2.6.1) + version: 9.39.2(jiti@2.6.1) eslint-config-prettier: specifier: 'catalog:' - version: 9.1.2(eslint@9.39.3(jiti@2.6.1)) + version: 9.1.2(eslint@9.39.2(jiti@2.6.1)) eslint-import-resolver-typescript: specifier: 'catalog:' - version: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1)) + version: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-import-x: specifier: 'catalog:' - version: 4.16.1(@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1)) + version: 4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsdoc: specifier: 'catalog:' - version: 54.7.0(eslint@9.39.3(jiti@2.6.1)) + version: 54.7.0(eslint@9.39.2(jiti@2.6.1)) happy-dom: specifier: 20.4.0 version: 20.4.0 @@ -395,16 +377,16 @@ importers: version: 5.9.3 typescript-eslint: specifier: 'catalog:' - version: 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) verdaccio: specifier: 'catalog:' version: 6.2.5(typanion@3.14.0) vite-plugin-node-polyfills: specifier: 'catalog:' - version: 0.25.0(rollup@4.58.0)(vite@7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.25.0(rollup@4.57.1)(vite@7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: canvas: specifier: 3.2.0 @@ -433,7 +415,7 @@ importers: version: link:../../packages/super-editor '@types/bun': specifier: 'catalog:' - version: 1.3.9 + version: 1.3.8 '@types/node': specifier: 'catalog:' version: 22.19.2 @@ -451,7 +433,7 @@ importers: version: 14.0.3 mintlify: specifier: ^4.2.331 - version: 4.2.368(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@25.3.0)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) + version: 4.2.331(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@22.19.8)(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) remark-mdx: specifier: ^3.1.1 version: 3.1.1 @@ -479,7 +461,7 @@ importers: version: 22.19.2 '@types/vscode': specifier: ^1.107.0 - version: 1.109.0 + version: 1.108.1 '@vscode/vsce': specifier: ^2.32.0 version: 2.32.0 @@ -490,73 +472,11 @@ importers: specifier: 'catalog:' version: 5.9.3 - e2e-tests: - dependencies: - '@fontsource/inter': - specifier: 'catalog:' - version: 5.2.8 - '@linear/sdk': - specifier: 'catalog:' - version: 53.0.0 - '@playwright/test': - specifier: 'catalog:' - version: 1.58.2 - jszip: - specifier: 'catalog:' - version: 3.10.1 - patch-package: - specifier: 'catalog:' - version: 8.0.1 - playwright: - specifier: 'catalog:' - version: 1.58.2 - vue: - specifier: 3.5.25 - version: 3.5.25(typescript@5.9.3) - devDependencies: - '@types/node': - specifier: 'catalog:' - version: 22.19.2 - '@vitejs/plugin-vue': - specifier: 'catalog:' - version: 6.0.2(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) - jimp: - specifier: 'catalog:' - version: 1.6.0 - nodemon: - specifier: 'catalog:' - version: 3.1.13 - pixelmatch: - specifier: 'catalog:' - version: 7.1.0 - vite: - specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - - e2e-tests/templates/vue: - dependencies: - '@fontsource/inter': - specifier: 'catalog:' - version: 5.2.8 - superdoc: - specifier: workspace:* - version: link:../../../packages/superdoc - vue: - specifier: 3.5.25 - version: 3.5.25(typescript@5.9.3) - devDependencies: - '@vitejs/plugin-vue': - specifier: 'catalog:' - version: 6.0.2(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) - vite: - specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - examples/__tests__: devDependencies: '@playwright/test': specifier: ^1.50.0 - version: 1.58.2 + version: 1.58.1 serve: specifier: ^14.2.0 version: 14.2.5 @@ -568,16 +488,16 @@ importers: version: 22.19.2 '@typescript-eslint/eslint-plugin': specifier: 'catalog:' - version: 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + version: 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitejs/plugin-vue': specifier: 'catalog:' version: 6.0.2(vite@7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) eslint: specifier: 'catalog:' - version: 9.39.3(jiti@2.6.1) + version: 9.39.2(jiti@2.6.1) prosemirror-model: specifier: 'catalog:' version: 1.25.4 @@ -586,19 +506,19 @@ importers: version: 1.4.4 prosemirror-view: specifier: 'catalog:' - version: 1.41.6 + version: 1.41.5 superdoc: specifier: 'workspace:' version: link:../superdoc tsup: specifier: 'catalog:' - version: 8.5.1(@microsoft/api-extractor@7.57.2(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + version: 8.5.1(@microsoft/api-extractor@7.56.1(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) typescript: specifier: 'catalog:' version: 5.9.3 vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) vue: specifier: 3.5.25 version: 3.5.25(typescript@5.9.3) @@ -620,34 +540,34 @@ importers: version: 22.19.2 '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/coverage-v8': specifier: 'catalog:' - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2)) concurrently: specifier: 'catalog:' version: 9.2.1 eslint: specifier: 'catalog:' - version: 9.39.3(jiti@2.6.1) + version: 9.39.2(jiti@2.6.1) eslint-config-prettier: specifier: 'catalog:' - version: 9.1.2(eslint@9.39.3(jiti@2.6.1)) + version: 9.1.2(eslint@9.39.2(jiti@2.6.1)) nodemon: specifier: 'catalog:' - version: 3.1.13 + version: 3.1.11 prettier: specifier: ^3.5.3 version: 3.8.1 tsup: specifier: 'catalog:' - version: 8.5.1(@microsoft/api-extractor@7.57.2(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + version: 8.5.1(@microsoft/api-extractor@7.56.1(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) typescript: specifier: 'catalog:' version: 5.9.3 vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/document-api: {} @@ -658,25 +578,25 @@ importers: version: 6.9.1 '@testing-library/react': specifier: 'catalog:' - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@testing-library/user-event': specifier: 'catalog:' version: 14.6.1(@testing-library/dom@10.4.1) '@types/react': specifier: 'catalog:' - version: 19.2.14 + version: 19.2.11 '@types/react-dom': specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.14) + version: 19.2.3(@types/react@19.2.11) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.1.4(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.3(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) eslint-plugin-react: specifier: 'catalog:' - version: 7.37.5(eslint@9.39.3(jiti@2.6.1)) + version: 7.37.5(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: specifier: 'catalog:' - version: 7.0.1(eslint@9.39.3(jiti@2.6.1)) + version: 7.0.1(eslint@9.39.2(jiti@2.6.1)) jsdom: specifier: 27.3.0 version: 27.3.0(canvas@3.2.0) @@ -694,13 +614,13 @@ importers: version: 5.9.3 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.4(@types/node@25.3.0)(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0)(typescript@5.9.3) + version: 4.5.4(@types/node@22.19.8)(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1)(typescript@5.9.3) vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/esign/demo: dependencies: @@ -725,19 +645,19 @@ importers: devDependencies: '@types/react': specifier: 'catalog:' - version: 19.2.14 + version: 19.2.11 '@types/react-dom': specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.14) + version: 19.2.3(@types/react@19.2.11) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.1.4(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.3(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) typescript: specifier: 'catalog:' version: 5.9.3 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) packages/esign/demo/server: dependencies: @@ -762,7 +682,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/layout-engine/layout-bridge: dependencies: @@ -793,13 +713,13 @@ importers: version: 22.19.2 tsup: specifier: 'catalog:' - version: 8.5.1(@microsoft/api-extractor@7.57.2(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + version: 8.5.1(@microsoft/api-extractor@7.56.1(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) typescript: specifier: 'catalog:' version: 5.9.3 vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/layout-engine/layout-engine: dependencies: @@ -851,7 +771,7 @@ importers: devDependencies: vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/layout-engine/pm-adapter: dependencies: @@ -891,7 +811,7 @@ importers: version: link:../painters/dom vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/layout-engine/style-engine: dependencies: @@ -907,7 +827,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/layout-engine/tests: dependencies: @@ -943,32 +863,32 @@ importers: dependencies: superdoc: specifier: '>=1.0.0' - version: 1.15.0(@hocuspocus/provider@2.15.3(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(canvas@3.2.0)(pdfjs-dist@5.4.624)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19) + version: 1.11.0(@hocuspocus/provider@2.15.3(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(canvas@3.2.0)(pdfjs-dist@5.4.624)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19) devDependencies: '@testing-library/react': specifier: 'catalog:' - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@types/node': specifier: 'catalog:' version: 22.19.2 '@types/react': specifier: 'catalog:' - version: 19.2.14 + version: 19.2.11 '@types/react-dom': specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.14) + version: 19.2.3(@types/react@19.2.11) '@typescript-eslint/eslint-plugin': specifier: 'catalog:' - version: 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + version: 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.1.4(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.3(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) eslint: specifier: 'catalog:' - version: 9.39.3(jiti@2.6.1) + version: 9.39.2(jiti@2.6.1) happy-dom: specifier: 20.4.0 version: 20.4.0 @@ -983,13 +903,13 @@ importers: version: 5.9.3 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.4(@types/node@22.19.2)(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0)(typescript@5.9.3) + version: 4.5.4(@types/node@22.19.2)(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1)(typescript@5.9.3) vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/sdk: {} @@ -999,7 +919,7 @@ importers: devDependencies: '@types/bun': specifier: 'catalog:' - version: 1.3.9 + version: 1.3.8 '@types/node': specifier: 'catalog:' version: 22.19.2 @@ -1071,7 +991,7 @@ importers: version: 1.11.0 prosemirror-view: specifier: 'catalog:' - version: 1.41.6 + version: 1.41.5 rehype-parse: specifier: 'catalog:' version: 9.0.1 @@ -1098,7 +1018,7 @@ importers: version: 1.6.11 y-prosemirror: specifier: 'catalog:' - version: 1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19) + version: 1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19) yjs: specifier: 'catalog:' version: 13.6.19 @@ -1141,7 +1061,7 @@ importers: version: link:../word-layout '@vitejs/plugin-vue': specifier: 'catalog:' - version: 6.0.2(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) + version: 6.0.2(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) '@vue/test-utils': specifier: 'catalog:' version: 2.4.6 @@ -1168,13 +1088,13 @@ importers: version: 5.9.3 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-node-polyfills: specifier: 'catalog:' - version: 0.25.0(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0) + version: 0.25.0(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1) vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) y-protocols: specifier: 'catalog:' version: 1.0.7(yjs@13.6.19) @@ -1210,7 +1130,7 @@ importers: version: 3.5.25(typescript@5.9.3) y-prosemirror: specifier: 'catalog:' - version: 1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19) + version: 1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19) y-websocket: specifier: 'catalog:' version: 3.0.0(yjs@13.6.19) @@ -1232,7 +1152,7 @@ importers: version: link:../super-editor '@vitejs/plugin-vue': specifier: 'catalog:' - version: 6.0.2(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) + version: 6.0.2(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) '@vue/test-utils': specifier: 'catalog:' version: 2.4.6 @@ -1244,7 +1164,7 @@ importers: version: 3.10.1 nodemon: specifier: 'catalog:' - version: 3.1.13 + version: 3.1.11 pdfjs-dist: specifier: 'catalog:' version: 5.4.624 @@ -1262,22 +1182,22 @@ importers: version: 1.4.4 rollup-plugin-visualizer: specifier: 'catalog:' - version: 5.14.0(rollup@4.58.0) + version: 5.14.0(rollup@4.57.1) typescript: specifier: 'catalog:' version: 5.9.3 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.4(@types/node@25.3.0)(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0)(typescript@5.9.3) + version: 4.5.4(@types/node@22.19.8)(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1)(typescript@5.9.3) vite-plugin-node-polyfills: specifier: 'catalog:' - version: 0.25.0(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0) + version: 0.25.0(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1) vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) xml-js: specifier: 'catalog:' version: 1.6.11 @@ -1286,7 +1206,7 @@ importers: devDependencies: '@playwright/test': specifier: 'catalog:' - version: 1.58.2 + version: 1.58.1 serve: specifier: ^14.2.0 version: 14.2.5 @@ -1298,25 +1218,25 @@ importers: version: 6.9.1 '@testing-library/react': specifier: 'catalog:' - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@testing-library/user-event': specifier: 'catalog:' version: 14.6.1(@testing-library/dom@10.4.1) '@types/react': specifier: 'catalog:' - version: 19.2.14 + version: 19.2.11 '@types/react-dom': specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.14) + version: 19.2.3(@types/react@19.2.11) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.1.4(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.3(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) eslint-plugin-react: specifier: 'catalog:' - version: 7.37.5(eslint@9.39.3(jiti@2.6.1)) + version: 7.37.5(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: specifier: 'catalog:' - version: 7.0.1(eslint@9.39.3(jiti@2.6.1)) + version: 7.0.1(eslint@9.39.2(jiti@2.6.1)) jsdom: specifier: 27.3.0 version: 27.3.0(canvas@3.2.0) @@ -1334,13 +1254,13 @@ importers: version: 5.9.3 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.4(@types/node@25.3.0)(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0)(typescript@5.9.3) + version: 4.5.4(@types/node@22.19.8)(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1)(typescript@5.9.3) vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) packages/template-builder/demo: dependencies: @@ -1359,25 +1279,25 @@ importers: devDependencies: '@types/react': specifier: 'catalog:' - version: 19.2.14 + version: 19.2.11 '@types/react-dom': specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.14) + version: 19.2.3(@types/react@19.2.11) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.1.4(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.3(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) typescript: specifier: 'catalog:' version: 5.9.3 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) packages/word-layout: devDependencies: vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) shared/common: devDependencies: @@ -1392,7 +1312,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) vue: specifier: 3.5.25 version: 3.5.25(typescript@5.9.3) @@ -1414,10 +1334,10 @@ importers: devDependencies: '@playwright/test': specifier: 'catalog:' - version: 1.58.2 + version: 1.58.1 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) tests/visual: dependencies: @@ -1427,13 +1347,13 @@ importers: devDependencies: '@aws-sdk/client-s3': specifier: ^3.988.0 - version: 3.995.0 + version: 3.988.0 '@clack/prompts': specifier: ^1.0.0 - version: 1.0.1 + version: 1.0.0 '@playwright/test': specifier: 'catalog:' - version: 1.58.2 + version: 1.58.1 dotenv: specifier: 'catalog:' version: 16.6.1 @@ -1442,7 +1362,7 @@ importers: version: 4.21.0 vite: specifier: npm:rolldown-vite@7.3.1 - version: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + version: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) packages: @@ -1452,8 +1372,8 @@ packages: '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} - '@alcalzone/ansi-tokenize@0.2.5': - resolution: {integrity: sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw==} + '@alcalzone/ansi-tokenize@0.2.4': + resolution: {integrity: sha512-HTgrrTgZ9Jgeo6Z3oqbQ7lifOVvRR14vaDuBGPPUxk9Thm+vObaO4QfYYYWw4Zo5CWQDBEfsinFA6Gre+AqwNQ==} engines: {node: '>=18'} '@alloc/quick-lru@5.2.0': @@ -1467,14 +1387,20 @@ packages: '@ark/schema@0.55.0': resolution: {integrity: sha512-IlSIc0FmLKTDGr4I/FzNHauMn0MADA6bCjT1wauu4k6MyxhC1R9gz0olNpIRvK7lGGDwtc/VO0RUDNvVQW5WFg==} + '@ark/schema@0.56.0': + resolution: {integrity: sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==} + '@ark/util@0.55.0': resolution: {integrity: sha512-aWFNK7aqSvqFtVsl1xmbTjGbg91uqtJV7Za76YGNEwIO4qLjMfyY8flmmbhooYMuqPCO2jyxu8hve943D+w3bA==} - '@asamuzakjp/css-color@4.1.2': - resolution: {integrity: sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==} + '@ark/util@0.56.0': + resolution: {integrity: sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==} - '@asamuzakjp/dom-selector@6.8.1': - resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} + '@asamuzakjp/css-color@4.1.1': + resolution: {integrity: sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==} + + '@asamuzakjp/dom-selector@6.7.7': + resolution: {integrity: sha512-8CO/UQ4tzDd7ula+/CVimJIVWez99UJlbMyIgk8xOnhAVPKLnBZmUFYVgugS441v2ZqUq5EnSh6B0Ua0liSFAA==} '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} @@ -1482,6 +1408,9 @@ packages: '@asyncapi/parser@3.4.0': resolution: {integrity: sha512-Sxn74oHiZSU6+cVeZy62iPZMFMvKp4jupMFHelSICCMw1qELmUHPvuZSr+ZHDmNGgHcEpzJM5HN02kR7T4g+PQ==} + '@asyncapi/specs@6.11.1': + resolution: {integrity: sha512-A3WBLqAKGoJ2+6FWFtpjBlCQ1oFCcs4GxF7zsIGvNqp/klGUHjlA3aAcZ9XMMpLGE8zPeYDz2x9FmO6DSuKraQ==} + '@asyncapi/specs@6.8.1': resolution: {integrity: sha512-czHoAk3PeXTLR+X8IUaD+IpT+g+zUvkcgMDJVothBsan+oHN3jfcFcFUNdOPAAFoUCQN1hXF1dWuphWy05THlA==} @@ -1508,52 +1437,52 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-s3@3.995.0': - resolution: {integrity: sha512-r+t8qrQ0m9zoovYOH+wilp/glFRB/E+blsDyWzq2C+9qmyhCAQwaxjLaHM8T/uluAmhtZQIYqOH9ILRnvWtRNw==} + '@aws-sdk/client-s3@3.988.0': + resolution: {integrity: sha512-mt7AdkieJJ5hEKeCxH4sdTTd679shUjo/cUvNY0fUHgQIPZa1jRuekTXnRytRrEwdrZWJDx56n1S8ism2uX7jg==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-sso@3.993.0': - resolution: {integrity: sha512-VLUN+wIeNX24fg12SCbzTUBnBENlL014yMKZvRhPkcn4wHR6LKgNrjsG3fZ03Xs0XoKaGtNFi1VVrq666sGBoQ==} + '@aws-sdk/client-sso@3.988.0': + resolution: {integrity: sha512-ThqQ7aF1k0Zz4yJRwegHw+T1rM3a7ZPvvEUSEdvn5Z8zTeWgJAbtqW/6ejPsMLmFOlHgNcwDQN/e69OvtEOoIQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.973.11': - resolution: {integrity: sha512-wdQ8vrvHkKIV7yNUKXyjPWKCdYEUrZTHJ8Ojd5uJxXp9vqPCkUR1dpi1NtOLcrDgueJH7MUH5lQZxshjFPSbDA==} + '@aws-sdk/core@3.973.8': + resolution: {integrity: sha512-WeYJ2sfvRLbbUIrjGMUXcEHGu5SJk53jz3K9F8vFP42zWyROzPJ2NB6lMu9vWl5hnMwzwabX7pJc9Euh3JyMGw==} engines: {node: '>=20.0.0'} '@aws-sdk/crc64-nvme@3.972.0': resolution: {integrity: sha512-ThlLhTqX68jvoIVv+pryOdb5coP1cX1/MaTbB9xkGDCbWbsqQcLqzPxuSoW1DCnAAIacmXCWpzUNOB9pv+xXQw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.9': - resolution: {integrity: sha512-ZptrOwQynfupubvcngLkbdIq/aXvl/czdpEG8XJ8mN8Nb19BR0jaK0bR+tfuMU36Ez9q4xv7GGkHFqEEP2hUUQ==} + '@aws-sdk/credential-provider-env@3.972.6': + resolution: {integrity: sha512-+dYEBWgTqkQQHFUllvBL8SLyXyLKWdxLMD1LmKJRvmb0NMJuaJFG/qg78C+LE67eeGbipYcE+gJ48VlLBGHlMw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.11': - resolution: {integrity: sha512-hECWoOoH386bGr89NQc9vA/abkGf5TJrMREt+lhNcnSNmoBS04fK7vc3LrJBSQAUGGVj0Tz3f4dHB3w5veovig==} + '@aws-sdk/credential-provider-http@3.972.8': + resolution: {integrity: sha512-z3QkozMV8kOFisN2pgRag/f0zPDrw96mY+ejAM0xssV/+YQ2kklbylRNI/TcTQUDnGg0yPxNjyV6F2EM2zPTwg==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.972.9': - resolution: {integrity: sha512-zr1csEu9n4eDiHMTYJabX1mDGuGLgjgUnNckIivvk43DocJC9/f6DefFrnUPZXE+GHtbW50YuXb+JIxKykU74A==} + '@aws-sdk/credential-provider-ini@3.972.6': + resolution: {integrity: sha512-6tkIYFv3sZH1XsjQq+veOmx8XWRnyqTZ5zx/sMtdu/xFRIzrJM1Y2wAXeCJL1rhYSB7uJSZ1PgALI2WVTj78ow==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.9': - resolution: {integrity: sha512-m4RIpVgZChv0vWS/HKChg1xLgZPpx8Z+ly9Fv7FwA8SOfuC6I3htcSaBz2Ch4bneRIiBUhwP4ziUo0UZgtJStQ==} + '@aws-sdk/credential-provider-login@3.972.6': + resolution: {integrity: sha512-LXsoBoaTSGHdRCQXlWSA0CHHh05KWncb592h9ElklnPus++8kYn1Ic6acBR4LKFQ0RjjMVgwe5ypUpmTSUOjPA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.10': - resolution: {integrity: sha512-70nCESlvnzjo4LjJ8By8MYIiBogkYPSXl3WmMZfH9RZcB/Nt9qVWbFpYj6Fk1vLa4Vk8qagFVeXgxdieMxG1QA==} + '@aws-sdk/credential-provider-node@3.972.7': + resolution: {integrity: sha512-PuJ1IkISG7ZDpBFYpGotaay6dYtmriBYuHJ/Oko4VHxh8YN5vfoWnMNYFEWuzOfyLmP7o9kDVW0BlYIpb3skvw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.9': - resolution: {integrity: sha512-gOWl0Fe2gETj5Bk151+LYKpeGi2lBDLNu+NMNpHRlIrKHdBmVun8/AalwMK8ci4uRfG5a3/+zvZBMpuen1SZ0A==} + '@aws-sdk/credential-provider-process@3.972.6': + resolution: {integrity: sha512-Yf34cjIZJHVnD92jnVYy3tNjM+Q4WJtffLK2Ehn0nKpZfqd1m7SI0ra22Lym4C53ED76oZENVSS2wimoXJtChQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.972.9': - resolution: {integrity: sha512-ey7S686foGTArvFhi3ifQXmgptKYvLSGE2250BAQceMSXZddz7sUSNERGJT2S7u5KIe/kgugxrt01hntXVln6w==} + '@aws-sdk/credential-provider-sso@3.972.6': + resolution: {integrity: sha512-2+5UVwUYdD4BBOkLpKJ11MQ8wQeyJGDVMDRH5eWOULAh9d6HJq07R69M/mNNMC9NTjr3mB1T0KGDn4qyQh5jzg==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.9': - resolution: {integrity: sha512-8LnfS76nHXoEc9aRRiMMpxZxJeDG0yusdyo3NvPhCgESmBUgpMa4luhGbClW5NoX/qRcGxxM6Z/esqANSNMTow==} + '@aws-sdk/credential-provider-web-identity@3.972.6': + resolution: {integrity: sha512-pdJzwKtlDxBnvZ04pWMqttijmkUIlwOsS0GcxCjzEVyUMpARysl0S0ks74+gs2Pdev3Ujz+BTAjOc1tQgAxGqA==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-bucket-endpoint@3.972.3': @@ -1564,8 +1493,8 @@ packages: resolution: {integrity: sha512-4msC33RZsXQpUKR5QR4HnvBSNCPLGHmB55oDiROqqgyOc+TOfVu2xgi5goA7ms6MdZLeEh2905UfWMnMMF4mRg==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-flexible-checksums@3.972.9': - resolution: {integrity: sha512-E663+r/UQpvF3aJkD40p5ZANVQFsUcbE39jifMtN7wc0t1M0+2gJJp3i75R49aY9OiSX5lfVyPUNjN/BNRCCZA==} + '@aws-sdk/middleware-flexible-checksums@3.972.6': + resolution: {integrity: sha512-g5DadWO58IgQKuq+uLL3pLohOwLiA67gB49xj8694BW+LpHLNu/tjCqwLfIaWvZyABbv0LXeNiiTuTnjdgkZWw==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-host-header@3.972.3': @@ -1584,32 +1513,32 @@ packages: resolution: {integrity: sha512-PY57QhzNuXHnwbJgbWYTrqIDHYSeOlhfYERTAuc16LKZpTZRJUjzBFokp9hF7u1fuGeE3D70ERXzdbMBOqQz7Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-sdk-s3@3.972.11': - resolution: {integrity: sha512-Qr0T7ZQTRMOuR6ahxEoJR1thPVovfWrKB2a6KBGR+a8/ELrFodrgHwhq50n+5VMaGuLtGhHiISU3XGsZmtmVXQ==} + '@aws-sdk/middleware-sdk-s3@3.972.8': + resolution: {integrity: sha512-/yJdahpN/q3Dc88qXBTQVZfnXryLnxfCoP4hGClbKjuF0VCMxrz3il7sj0GhIkEQt5OM5+lA88XrvbjjuwSxIg==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-ssec@3.972.3': resolution: {integrity: sha512-dU6kDuULN3o3jEHcjm0c4zWJlY1zWVkjG9NPe9qxYLLpcbdj5kRYBS2DdWYD+1B9f910DezRuws7xDEqKkHQIg==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-user-agent@3.972.11': - resolution: {integrity: sha512-R8CvPsPHXwzIHCAza+bllY6PrctEk4lYq/SkHJz9NLoBHCcKQrbOcsfXxO6xmipSbUNIbNIUhH0lBsJGgsRdiw==} + '@aws-sdk/middleware-user-agent@3.972.8': + resolution: {integrity: sha512-3PGL+Kvh1PhB0EeJeqNqOWQgipdqFheO4OUKc6aYiFwEpM5t9AyE5hjjxZ5X6iSj8JiduWFZLPwASzF6wQRgFg==} engines: {node: '>=20.0.0'} - '@aws-sdk/nested-clients@3.993.0': - resolution: {integrity: sha512-iOq86f2H67924kQUIPOAvlmMaOAvOLoDOIb66I2YqSUpMYB6ufiuJW3RlREgskxv86S5qKzMnfy/X6CqMjK6XQ==} + '@aws-sdk/nested-clients@3.988.0': + resolution: {integrity: sha512-OgYV9k1oBCQ6dOM+wWAMNNehXA8L4iwr7ydFV+JDHyuuu0Ko7tDXnLEtEmeQGYRcAFU3MGasmlBkMB8vf4POrg==} engines: {node: '>=20.0.0'} '@aws-sdk/region-config-resolver@3.972.3': resolution: {integrity: sha512-v4J8qYAWfOMcZ4MJUyatntOicTzEMaU7j3OpkRCGGFSL2NgXQ5VbxauIyORA+pxdKZ0qQG2tCQjQjZDlXEC3Ow==} engines: {node: '>=20.0.0'} - '@aws-sdk/signature-v4-multi-region@3.995.0': - resolution: {integrity: sha512-9Qx5JcAucnxnomREPb2D6L8K8GLG0rknt3+VK/BU3qTUynAcV4W21DQ04Z2RKDw+DYpW88lsZpXbVetWST2WUg==} + '@aws-sdk/signature-v4-multi-region@3.988.0': + resolution: {integrity: sha512-SXwhbe2v0Jno7QLIBmZWAL2eVzGmXkfLLy0WkM6ZJVhE0SFUcnymDwMUA1oMDUvyArzvKBiU8khQ2ImheCKOHQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.993.0': - resolution: {integrity: sha512-+35g4c+8r7sB9Sjp1KPdM8qxGn6B/shBjJtEUN4e+Edw9UEQlZKIzioOGu3UAbyE0a/s450LdLZr4wbJChtmww==} + '@aws-sdk/token-providers@3.988.0': + resolution: {integrity: sha512-xvXVlRVKHnF2h6fgWBm64aPP5J+58aJyGfRrQa/uFh8a9mcK68mLfJOYq+ZSxQy/UN3McafJ2ILAy7IWzT9kRw==} engines: {node: '>=20.0.0'} '@aws-sdk/types@3.973.1': @@ -1620,12 +1549,8 @@ packages: resolution: {integrity: sha512-VkykWbqMjlSgBFDyrY3nOSqupMc6ivXuGmvci6Q3NnLq5kC+mKQe2QBZ4nrWRE/jqOxeFP2uYzLtwncYYcvQDg==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-endpoints@3.993.0': - resolution: {integrity: sha512-j6vioBeRZ4eHX4SWGvGPpwGg/xSOcK7f1GL0VM+rdf3ZFTIsUEhCFmD78B+5r2PgztcECSzEfvHQX01k8dPQPw==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/util-endpoints@3.995.0': - resolution: {integrity: sha512-aym/pjB8SLbo9w2nmkrDdAAVKVlf7CM71B9mKhjDbJTzwpSFBPHqJIMdDyj0mLumKC0aIVDr1H6U+59m9GvMFw==} + '@aws-sdk/util-endpoints@3.988.0': + resolution: {integrity: sha512-HuXu4boeUWU0DQiLslbgdvuQ4ZMCo4Lsk97w8BIUokql2o9MvjE5dwqI5pzGt0K7afO1FybjidUQVTMLuZNTOA==} engines: {node: '>=20.0.0'} '@aws-sdk/util-locate-window@3.965.4': @@ -1635,8 +1560,8 @@ packages: '@aws-sdk/util-user-agent-browser@3.972.3': resolution: {integrity: sha512-JurOwkRUcXD/5MTDBcqdyQ9eVedtAsZgw5rBwktsPTN7QtPiS2Ld1jkJepNgYoCufz1Wcut9iup7GJDoIHp8Fw==} - '@aws-sdk/util-user-agent-node@3.972.10': - resolution: {integrity: sha512-LVXzICPlsheET+sE6tkcS47Q5HkSTrANIlqL1iFxGAY/wRQ236DX/PCAK56qMh9QJoXAfXfoRW0B0Og4R+X7Nw==} + '@aws-sdk/util-user-agent-node@3.972.6': + resolution: {integrity: sha512-966xH8TPqkqOXP7EwnEThcKKz0SNP9kVJBKd9M8bNXE4GSqVouMKKnFBwYnzbWVKuLXubzX5seokcX4a0JLJIA==} engines: {node: '>=20.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -1644,8 +1569,8 @@ packages: aws-crt: optional: true - '@aws-sdk/xml-builder@3.972.5': - resolution: {integrity: sha512-mCae5Ys6Qm1LDu0qdGwx2UQ63ONUe+FHw908fJzLDqFKTDBK4LDZUqKWm4OkTCNFq19bftjsBSESIGLD/s3/rA==} + '@aws-sdk/xml-builder@3.972.4': + resolution: {integrity: sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==} engines: {node: '>=20.0.0'} '@aws/lambda-invoke-store@0.2.3': @@ -1684,16 +1609,16 @@ packages: resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} engines: {node: '>=20.0.0'} - '@azure/msal-browser@4.28.2': - resolution: {integrity: sha512-6vYUMvs6kJxJgxaCmHn/F8VxjLHNh7i9wzfwPGf8kyBJ8Gg2yvBXx175Uev8LdrD1F5C4o7qHa2CC4IrhGE1XQ==} + '@azure/msal-browser@4.28.1': + resolution: {integrity: sha512-al2u2fTchbClq3L4C1NlqLm+vwKfhYCPtZN2LR/9xJVaQ4Mnrwf5vANvuyPSJHcGvw50UBmhuVmYUAhTEetTpA==} engines: {node: '>=0.8.0'} - '@azure/msal-common@15.14.2': - resolution: {integrity: sha512-n8RBJEUmd5QotoqbZfd+eGBkzuFI1KX6jw2b3WcpSyGjwmzoeI/Jb99opIBPHpb8y312NB+B6+FGi2ZVSR8yfA==} + '@azure/msal-common@15.14.1': + resolution: {integrity: sha512-IkzF7Pywt6QKTS0kwdCv/XV8x8JXknZDvSjj/IccooxnP373T5jaadO3FnOrbWo3S0UqkfIDyZNTaQ/oAgRdXw==} engines: {node: '>=0.8.0'} - '@azure/msal-node@3.8.7': - resolution: {integrity: sha512-a+Xnrae+uwLnlw68bplS1X4kuJ9F/7K6afuMFyRkNIskhjgDezl5Fhrx+1pmAlDmC0VaaAxjRQMp1OmcqVwkIg==} + '@azure/msal-node@3.8.6': + resolution: {integrity: sha512-XTmhdItcBckcVVTy65Xp+42xG4LX5GK+9AqAsXPXk4IqUNv+LyQo5TMwNjuFYBfAB2GTG9iSQGk+QLc03vhf3w==} engines: {node: '>=16'} '@babel/code-frame@7.29.0': @@ -1790,11 +1715,11 @@ packages: '@canvas/image-data@1.1.0': resolution: {integrity: sha512-QdObRRjRbcXGmM1tmJ+MrHcaz1MftF2+W7YI+MsphnsCrmtyfS0d5qJbk0MeSbUeyM/jCb0hmnkXPsy026L7dA==} - '@clack/core@1.0.1': - resolution: {integrity: sha512-WKeyK3NOBwDOzagPR5H08rFk9D/WuN705yEbuZvKqlkmoLM2woKtXb10OO2k1NoSU4SFG947i2/SCYh+2u5e4g==} + '@clack/core@1.0.0': + resolution: {integrity: sha512-Orf9Ltr5NeiEuVJS8Rk2XTw3IxNC2Bic3ash7GgYeA8LJ/zmSNpSQ/m5UAhe03lA6KFgklzZ5KTHs4OAMA/SAQ==} - '@clack/prompts@1.0.1': - resolution: {integrity: sha512-/42G73JkuYdyWZ6m8d/CJtBrGl1Hegyc7Fy78m5Ob+jF85TOUmLR5XLce/U3LxYAw0kJ8CT5aI99RIvPHcGp/Q==} + '@clack/prompts@1.0.0': + resolution: {integrity: sha512-rWPXg9UaCFqErJVQ+MecOaWsozjaxol4yjnmYcGNipAWzdaWa2x+VJmKfGq7L0APwBohQOYdHC+9RO4qRXej+A==} '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} @@ -1879,36 +1804,36 @@ packages: peerDependencies: vue: 3.5.25 - '@csstools/color-helpers@6.0.1': - resolution: {integrity: sha512-NmXRccUJMk2AWA5A7e5a//3bCIMyOu2hAtdRYrhPPHjDxINuCwX1w6rnIZ4xjLcp0ayv6h8Pc3X0eJUGiAAXHQ==} - engines: {node: '>=20.19.0'} + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} + engines: {node: '>=18'} - '@csstools/css-calc@3.1.1': - resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} - engines: {node: '>=20.19.0'} + '@csstools/css-calc@2.1.4': + resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} + engines: {node: '>=18'} peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-color-parser@4.0.1': - resolution: {integrity: sha512-vYwO15eRBEkeF6xjAno/KQ61HacNhfQuuU/eGwH67DplL0zD5ZixUa563phQvUelA07yDczIXdtmYojCphKJcw==} - engines: {node: '>=20.19.0'} + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} + engines: {node: '>=18'} peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-parser-algorithms@4.0.0': - resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} - engines: {node: '>=20.19.0'} + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} + engines: {node: '>=18'} peerDependencies: - '@csstools/css-tokenizer': ^4.0.0 + '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-syntax-patches-for-csstree@1.0.27': - resolution: {integrity: sha512-sxP33Jwg1bviSUXAV43cVYdmjt2TLnLXNqCWl9xmxHawWVjGz/kEbdkr7F9pxJNBN2Mh+dq0crgItbW6tQvyow==} + '@csstools/css-syntax-patches-for-csstree@1.0.26': + resolution: {integrity: sha512-6boXK0KkzT5u5xOgF6TKB+CLq9SOpEGmkZw0g5n9/7yg85wab3UzSxB8TxhLJ31L4SGJ6BCFRw/iftTha1CJXA==} - '@csstools/css-tokenizer@4.0.0': - resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} - engines: {node: '>=20.19.0'} + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} + engines: {node: '>=18'} '@cypress/request@3.0.9': resolution: {integrity: sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==} @@ -1936,8 +1861,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.27.3': - resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + '@esbuild/aix-ppc64@0.27.2': + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -1948,8 +1873,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.3': - resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + '@esbuild/android-arm64@0.27.2': + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -1960,8 +1885,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.3': - resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + '@esbuild/android-arm@0.27.2': + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -1972,8 +1897,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.3': - resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + '@esbuild/android-x64@0.27.2': + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -1984,8 +1909,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.3': - resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + '@esbuild/darwin-arm64@0.27.2': + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -1996,8 +1921,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.3': - resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + '@esbuild/darwin-x64@0.27.2': + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -2008,8 +1933,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.3': - resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + '@esbuild/freebsd-arm64@0.27.2': + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -2020,8 +1945,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.3': - resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + '@esbuild/freebsd-x64@0.27.2': + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -2032,8 +1957,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.3': - resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + '@esbuild/linux-arm64@0.27.2': + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -2044,8 +1969,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.3': - resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + '@esbuild/linux-arm@0.27.2': + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -2056,8 +1981,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.3': - resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + '@esbuild/linux-ia32@0.27.2': + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -2068,8 +1993,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.3': - resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + '@esbuild/linux-loong64@0.27.2': + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -2080,8 +2005,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.3': - resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + '@esbuild/linux-mips64el@0.27.2': + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -2092,8 +2017,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.3': - resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + '@esbuild/linux-ppc64@0.27.2': + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -2104,8 +2029,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.3': - resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + '@esbuild/linux-riscv64@0.27.2': + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -2116,8 +2041,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.3': - resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + '@esbuild/linux-s390x@0.27.2': + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -2128,8 +2053,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.3': - resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + '@esbuild/linux-x64@0.27.2': + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -2140,8 +2065,8 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.27.3': - resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + '@esbuild/netbsd-arm64@0.27.2': + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -2152,8 +2077,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.3': - resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + '@esbuild/netbsd-x64@0.27.2': + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -2164,8 +2089,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.3': - resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + '@esbuild/openbsd-arm64@0.27.2': + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -2176,8 +2101,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.3': - resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + '@esbuild/openbsd-x64@0.27.2': + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -2188,8 +2113,8 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/openharmony-arm64@0.27.3': - resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + '@esbuild/openharmony-arm64@0.27.2': + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -2200,8 +2125,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.3': - resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + '@esbuild/sunos-x64@0.27.2': + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -2212,8 +2137,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.3': - resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + '@esbuild/win32-arm64@0.27.2': + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -2224,8 +2149,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.3': - resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + '@esbuild/win32-ia32@0.27.2': + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -2236,8 +2161,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.3': - resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + '@esbuild/win32-x64@0.27.2': + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -2268,8 +2193,8 @@ packages: resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.3': - resolution: {integrity: sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==} + '@eslint/js@9.39.2': + resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.7': @@ -2295,14 +2220,6 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - '@fontsource/inter@5.2.8': - resolution: {integrity: sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==} - - '@graphql-typed-document-node/core@3.2.0': - resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@hocuspocus/common@2.15.3': resolution: {integrity: sha512-Rzh1HF0a2o/tf90A3w2XNdXd9Ym3aQzMDfD3lAUONCX9B9QOdqdyiORrj6M25QEaJrEIbXFy8LtAFcL0wRdWzA==} @@ -2334,111 +2251,248 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + 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.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.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.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + '@img/sharp-libvips-darwin-arm64@1.0.4': resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} cpu: [arm64] os: [darwin] + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + 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.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + 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] + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + '@img/sharp-libvips-linux-arm@1.0.5': resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} cpu: [arm] os: [linux] + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + '@img/sharp-libvips-linux-s390x@1.0.4': resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} cpu: [s390x] os: [linux] + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + '@img/sharp-libvips-linux-x64@1.0.4': resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} cpu: [x64] os: [linux] + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} cpu: [arm64] os: [linux] + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + '@img/sharp-libvips-linuxmusl-x64@1.0.4': resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} cpu: [x64] os: [linux] + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + '@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] + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + '@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] + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + '@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] + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + '@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] + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + '@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] + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + '@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] + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + '@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.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.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.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.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.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@inquirer/ansi@1.0.2': resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} engines: {node: '>=18'} @@ -2573,6 +2627,14 @@ packages: '@types/node': optional: true + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.1': + resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==} + engines: {node: 20 || >=22} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -2581,118 +2643,6 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jimp/core@1.6.0': - resolution: {integrity: sha512-EQQlKU3s9QfdJqiSrZWNTxBs3rKXgO2W+GxNXDtwchF3a4IqxDheFX1ti+Env9hdJXDiYLp2jTRjlxhPthsk8w==} - engines: {node: '>=18'} - - '@jimp/diff@1.6.0': - resolution: {integrity: sha512-+yUAQ5gvRC5D1WHYxjBHZI7JBRusGGSLf8AmPRPCenTzh4PA+wZ1xv2+cYqQwTfQHU5tXYOhA0xDytfHUf1Zyw==} - engines: {node: '>=18'} - - '@jimp/file-ops@1.6.0': - resolution: {integrity: sha512-Dx/bVDmgnRe1AlniRpCKrGRm5YvGmUwbDzt+MAkgmLGf+jvBT75hmMEZ003n9HQI/aPnm/YKnXjg/hOpzNCpHQ==} - engines: {node: '>=18'} - - '@jimp/js-bmp@1.6.0': - resolution: {integrity: sha512-FU6Q5PC/e3yzLyBDXupR3SnL3htU7S3KEs4e6rjDP6gNEOXRFsWs6YD3hXuXd50jd8ummy+q2WSwuGkr8wi+Gw==} - engines: {node: '>=18'} - - '@jimp/js-gif@1.6.0': - resolution: {integrity: sha512-N9CZPHOrJTsAUoWkWZstLPpwT5AwJ0wge+47+ix3++SdSL/H2QzyMqxbcDYNFe4MoI5MIhATfb0/dl/wmX221g==} - engines: {node: '>=18'} - - '@jimp/js-jpeg@1.6.0': - resolution: {integrity: sha512-6vgFDqeusblf5Pok6B2DUiMXplH8RhIKAryj1yn+007SIAQ0khM1Uptxmpku/0MfbClx2r7pnJv9gWpAEJdMVA==} - engines: {node: '>=18'} - - '@jimp/js-png@1.6.0': - resolution: {integrity: sha512-AbQHScy3hDDgMRNfG0tPjL88AV6qKAILGReIa3ATpW5QFjBKpisvUaOqhzJ7Reic1oawx3Riyv152gaPfqsBVg==} - engines: {node: '>=18'} - - '@jimp/js-tiff@1.6.0': - resolution: {integrity: sha512-zhReR8/7KO+adijj3h0ZQUOiun3mXUv79zYEAKvE0O+rP7EhgtKvWJOZfRzdZSNv0Pu1rKtgM72qgtwe2tFvyw==} - engines: {node: '>=18'} - - '@jimp/plugin-blit@1.6.0': - resolution: {integrity: sha512-M+uRWl1csi7qilnSK8uxK4RJMSuVeBiO1AY0+7APnfUbQNZm6hCe0CCFv1Iyw1D/Dhb8ph8fQgm5mwM0eSxgVA==} - engines: {node: '>=18'} - - '@jimp/plugin-blur@1.6.0': - resolution: {integrity: sha512-zrM7iic1OTwUCb0g/rN5y+UnmdEsT3IfuCXCJJNs8SZzP0MkZ1eTvuwK9ZidCuMo4+J3xkzCidRwYXB5CyGZTw==} - engines: {node: '>=18'} - - '@jimp/plugin-circle@1.6.0': - resolution: {integrity: sha512-xt1Gp+LtdMKAXfDp3HNaG30SPZW6AQ7dtAtTnoRKorRi+5yCJjKqXRgkewS5bvj8DEh87Ko1ydJfzqS3P2tdWw==} - engines: {node: '>=18'} - - '@jimp/plugin-color@1.6.0': - resolution: {integrity: sha512-J5q8IVCpkBsxIXM+45XOXTrsyfblyMZg3a9eAo0P7VPH4+CrvyNQwaYatbAIamSIN1YzxmO3DkIZXzRjFSz1SA==} - engines: {node: '>=18'} - - '@jimp/plugin-contain@1.6.0': - resolution: {integrity: sha512-oN/n+Vdq/Qg9bB4yOBOxtY9IPAtEfES8J1n9Ddx+XhGBYT1/QTU/JYkGaAkIGoPnyYvmLEDqMz2SGihqlpqfzQ==} - engines: {node: '>=18'} - - '@jimp/plugin-cover@1.6.0': - resolution: {integrity: sha512-Iow0h6yqSC269YUJ8HC3Q/MpCi2V55sMlbkkTTx4zPvd8mWZlC0ykrNDeAy9IJegrQ7v5E99rJwmQu25lygKLA==} - engines: {node: '>=18'} - - '@jimp/plugin-crop@1.6.0': - resolution: {integrity: sha512-KqZkEhvs+21USdySCUDI+GFa393eDIzbi1smBqkUPTE+pRwSWMAf01D5OC3ZWB+xZsNla93BDS9iCkLHA8wang==} - engines: {node: '>=18'} - - '@jimp/plugin-displace@1.6.0': - resolution: {integrity: sha512-4Y10X9qwr5F+Bo5ME356XSACEF55485j5nGdiyJ9hYzjQP9nGgxNJaZ4SAOqpd+k5sFaIeD7SQ0Occ26uIng5Q==} - engines: {node: '>=18'} - - '@jimp/plugin-dither@1.6.0': - resolution: {integrity: sha512-600d1RxY0pKwgyU0tgMahLNKsqEcxGdbgXadCiVCoGd6V6glyCvkNrnnwC0n5aJ56Htkj88PToSdF88tNVZEEQ==} - engines: {node: '>=18'} - - '@jimp/plugin-fisheye@1.6.0': - resolution: {integrity: sha512-E5QHKWSCBFtpgZarlmN3Q6+rTQxjirFqo44ohoTjzYVrDI6B6beXNnPIThJgPr0Y9GwfzgyarKvQuQuqCnnfbA==} - engines: {node: '>=18'} - - '@jimp/plugin-flip@1.6.0': - resolution: {integrity: sha512-/+rJVDuBIVOgwoyVkBjUFHtP+wmW0r+r5OQ2GpatQofToPVbJw1DdYWXlwviSx7hvixTWLKVgRWQ5Dw862emDg==} - engines: {node: '>=18'} - - '@jimp/plugin-hash@1.6.0': - resolution: {integrity: sha512-wWzl0kTpDJgYVbZdajTf+4NBSKvmI3bRI8q6EH9CVeIHps9VWVsUvEyb7rpbcwVLWYuzDtP2R0lTT6WeBNQH9Q==} - engines: {node: '>=18'} - - '@jimp/plugin-mask@1.6.0': - resolution: {integrity: sha512-Cwy7ExSJMZszvkad8NV8o/Z92X2kFUFM8mcDAhNVxU0Q6tA0op2UKRJY51eoK8r6eds/qak3FQkXakvNabdLnA==} - engines: {node: '>=18'} - - '@jimp/plugin-print@1.6.0': - resolution: {integrity: sha512-zarTIJi8fjoGMSI/M3Xh5yY9T65p03XJmPsuNet19K/Q7mwRU6EV2pfj+28++2PV2NJ+htDF5uecAlnGyxFN2A==} - engines: {node: '>=18'} - - '@jimp/plugin-quantize@1.6.0': - resolution: {integrity: sha512-EmzZ/s9StYQwbpG6rUGBCisc3f64JIhSH+ncTJd+iFGtGo0YvSeMdAd+zqgiHpfZoOL54dNavZNjF4otK+mvlg==} - engines: {node: '>=18'} - - '@jimp/plugin-resize@1.6.0': - resolution: {integrity: sha512-uSUD1mqXN9i1SGSz5ov3keRZ7S9L32/mAQG08wUwZiEi5FpbV0K8A8l1zkazAIZi9IJzLlTauRNU41Mi8IF9fA==} - engines: {node: '>=18'} - - '@jimp/plugin-rotate@1.6.0': - resolution: {integrity: sha512-JagdjBLnUZGSG4xjCLkIpQOZZ3Mjbg8aGCCi4G69qR+OjNpOeGI7N2EQlfK/WE8BEHOW5vdjSyglNqcYbQBWRw==} - engines: {node: '>=18'} - - '@jimp/plugin-threshold@1.6.0': - resolution: {integrity: sha512-M59m5dzLoHOVWdM41O8z9SyySzcDn43xHseOH0HavjsfQsT56GGCC4QzU1banJidbUrePhzoEdS42uFE8Fei8w==} - engines: {node: '>=18'} - - '@jimp/types@1.6.0': - resolution: {integrity: sha512-7UfRsiKo5GZTAATxm2qQ7jqmUXP0DxTArztllTcYdyw6Xi5oT4RaoXynVtCD4UyLK5gJgkZJcwonoijrhYFKfg==} - engines: {node: '>=18'} - - '@jimp/utils@1.6.0': - resolution: {integrity: sha512-gqFTGEosKbOkYF/WFj26jMHOI5OH2jeP1MmC/zbK6BF6VJBf8rIC5898dPfSzZEbSA0wbbV5slbntWVc5PKLFA==} - engines: {node: '>=18'} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -2736,10 +2686,6 @@ packages: '@lifeomic/attempt@3.1.0': resolution: {integrity: sha512-QZqem4QuAnAyzfz+Gj5/+SLxqwCAw2qmt7732ZXodr6VDWGeYLG6w1i/vYLa55JQM9wRuBKLmXmiZ2P0LtE5rw==} - '@linear/sdk@53.0.0': - resolution: {integrity: sha512-KWsNUDc8JkIGn4lqvy6EKXoMDY1QedBOVQWO8MhrbUFR8QuYtthVL0YknK9eCcW5j1sDQCvRuyesvDVgpwxEFw==} - engines: {node: '>=12.x', yarn: 1.x} - '@mdx-js/mdx@3.1.1': resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} @@ -2749,11 +2695,11 @@ packages: '@types/react': '>=16' react: '>=16' - '@microsoft/api-extractor-model@7.33.1': - resolution: {integrity: sha512-KX0LI6xzI0gcBOXXmr5mnnbdhsK2W93pqvJo8OgJgWvRRh+wMEp0Ccj38h1XKeJ29E1tuAZKSUOfHUQ1WA8fZg==} + '@microsoft/api-extractor-model@7.32.2': + resolution: {integrity: sha512-Ussc25rAalc+4JJs9HNQE7TuO9y6jpYQX9nWD1DhqUzYPBr3Lr7O9intf+ZY8kD5HnIqeIRJX7ccCT0QyBy2Ww==} - '@microsoft/api-extractor@7.57.2': - resolution: {integrity: sha512-Dih58xLlG+M6k2qVSksk9xJx8HvmJEyK3LcHrcqXE7eK/U7pg/8cTT8j1TKijU4P4639wvCy1zhDuvtjRy+02Q==} + '@microsoft/api-extractor@7.56.1': + resolution: {integrity: sha512-wX9ugJFqhsEWwt+UFTAkvXcBOzSQ1FeKe0ZdwEDKtjsf20Ec2frmCDXPjQwPtSNrpXUy1yQgyaF6YJVuC8gMtg==} hasBin: true '@microsoft/tsdoc-config@0.18.0': @@ -2762,19 +2708,19 @@ packages: '@microsoft/tsdoc@0.16.0': resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} - '@mintlify/cli@4.0.971': - resolution: {integrity: sha512-qcnHRjWM8nOoQJ+7AIXv0/CZTpMnQmwgNTj6k2CfYdxUiMKCK11q2LnVLkLI+c1Y/WXr4sriUnjemjbvckUmpQ==} + '@mintlify/cli@4.0.935': + resolution: {integrity: sha512-mY0T3QOdDNuZlb4qx6GEAq0nSkWQGCn0Ug5kjQH3GjZFeeROm0EDYzoXlwAgLL/DkFEU9GpWmO3kU8EvetXtBw==} engines: {node: '>=18.0.0'} hasBin: true '@mintlify/common@1.0.661': resolution: {integrity: sha512-/Hdiblzaomp+AWStQ4smhVMgesQhffzQjC9aYBnmLReNdh2Js+ccQFUaWL3TNIxwiS2esaZvsHSV/D+zyRS3hg==} - '@mintlify/common@1.0.743': - resolution: {integrity: sha512-ZOpps3m6hOG06fGGeX1YmUC38boQ8OvU1L0DsFbwPYH7TFGu4WTqrfWhuJnKzkOJWmrsS5PmJxZQG4IU5nOZKQ==} + '@mintlify/common@1.0.713': + resolution: {integrity: sha512-0Ir8BLMVfADPi04/O5jDDemL+dxpNqHgx/JDQALuCFS4ANqHk7C9ES7ifsnt/rjmiiX7kuXSFqoAZrt1WMTLaA==} - '@mintlify/link-rot@3.0.906': - resolution: {integrity: sha512-ANBO1CTF3F1OQwl7wt3+L7itw4+BTe3VgteqW/JutgRH/OXv+3XpVOPoo52uYCERrQwkrSCoF4jBBL+UfImUZQ==} + '@mintlify/link-rot@3.0.872': + resolution: {integrity: sha512-2KDAD+hTmRZZCq0XCvvG+p/xSn5gtHCkHYA8Zfd2mhHceHCofNikvjffpYKx96eqaNCLhbeUYVnLlquBs820oQ==} engines: {node: '>=18.0.0'} '@mintlify/mdx@3.0.4': @@ -2788,19 +2734,19 @@ packages: resolution: {integrity: sha512-LIUkfA7l7ypHAAuOW74ZJws/NwNRqlDRD/U466jarXvvSlGhJec/6J4/I+IEcBvWDnc9anLFKmnGO04jPKgAsg==} engines: {node: '>=18.0.0'} - '@mintlify/models@0.0.273': - resolution: {integrity: sha512-u2azWZWw3HG5HpBgXcwVQuCRWNLgaXCb6iS6+QUPK2XHD7rMw66zismibJtZhiVS/42jlUnx38LIW6BUVoFfgw==} + '@mintlify/models@0.0.268': + resolution: {integrity: sha512-8HDPI3luABg5p/VTVYAOqabqOtcK2jdBuRTYOJiV39QqjQY29Q7kWH697PUokN6CO9uP2CCkPG5O5Gi7QxflWA==} engines: {node: '>=18.0.0'} '@mintlify/openapi-parser@0.0.8': resolution: {integrity: sha512-9MBRq9lS4l4HITYCrqCL7T61MOb20q9IdU7HWhqYMNMM1jGO1nHjXasFy61yZ8V6gMZyyKQARGVoZ0ZrYN48Og==} engines: {node: '>=18'} - '@mintlify/prebuild@1.0.880': - resolution: {integrity: sha512-cNXXz3oOaZn8GoGNPbDoYG/CVS53FbuEVDDN6hY3bmhZg4VzAZH5IAjj7eUmg9l3BLyILexUfDWuzEv99MhStQ==} + '@mintlify/prebuild@1.0.849': + resolution: {integrity: sha512-GlFRJYrS7sIByZXKLa91VeCGruMunbwoxGbWRF5gAiknkuhng9SuX7zB7yTa0J3ApmLO3oZG5baWfzflcQY01w==} - '@mintlify/previewing@4.0.937': - resolution: {integrity: sha512-yjbN7c5GtDFByUqXnF4kg4Bd7gf7whv95ciH7ukKi5QFe8xGntW9UlMLer2UvuJzNG7JGvJkRGvsVwUrm3lLXw==} + '@mintlify/previewing@4.0.905': + resolution: {integrity: sha512-3PjzszHkvswA742dofEDohINUnlbmi4gnKP9xWK7wA+dLszKJ56BYjm6VCWJjpG3PuO4oPFIS9vI1YRCEM8kRQ==} engines: {node: '>=18.0.0'} '@mintlify/scraping@4.0.522': @@ -2808,85 +2754,85 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - '@mintlify/scraping@4.0.605': - resolution: {integrity: sha512-pLHEBNZQ+XuDJCZokQt3MjhhK5F8G4Lk9DSDnHp8grDWdIEeYdP/K95jZzNTbpPJx1cVinSEjSsrIasP8Z4S4g==} + '@mintlify/scraping@4.0.574': + resolution: {integrity: sha512-FN2MM8uxBi2Foxpua0UIDLYo4YvcJE/NMwOGfbQ/HWx73eWhsA0LI+uhqpq8ZYqgc4awVif1oKc7OcuEhtY7Kg==} engines: {node: '>=18.0.0'} hasBin: true '@mintlify/validation@0.1.555': resolution: {integrity: sha512-11QVUReL4N5u8wSCgZt4RN7PA0jYQoMEBZ5IrUp5pgb5ZJBOoGV/vPsQrxPPa1cxsUDAuToNhtGxRQtOav/w8w==} - '@mintlify/validation@0.1.602': - resolution: {integrity: sha512-r8wf9w4IWgcewoN49Ks6r64VBysO7VpgQUsbe9vCXFfZdUegcxFZ2LLIlJVbEgXb14mYQFJRDIfvTfjrtQYRLw==} + '@mintlify/validation@0.1.585': + resolution: {integrity: sha512-32mezT7v1dmPQa2DyGDYf0t+HHUbmpShJVnMrxxhXyMHvKUqOu4ENoRCAxRbfc4OLPxAFRB4qEEq2toID+tOHw==} - '@napi-rs/canvas-android-arm64@0.1.94': - resolution: {integrity: sha512-YQ6K83RWNMQOtgpk1aIML97QTE3zxPmVCHTi5eA8Nss4+B9JZi5J7LHQr7B5oD7VwSfWd++xsPdUiJ1+frqsMg==} + '@napi-rs/canvas-android-arm64@0.1.91': + resolution: {integrity: sha512-SLLzXXgSnfct4zy/BVAfweZQkYkPJsNsJ2e5DOE8DFEHC6PufyUrwb12yqeu2So2IOIDpWJJaDAxKY/xpy6MYQ==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@napi-rs/canvas-darwin-arm64@0.1.94': - resolution: {integrity: sha512-h1yl9XjqSrYZAbBUHCVLAhwd2knM8D8xt081Pv40KqNJXfeMmBrhG1SfroRymG2ak+pl42iQlWjFZ2Z8AWFdSw==} + '@napi-rs/canvas-darwin-arm64@0.1.91': + resolution: {integrity: sha512-bzdbCjIjw3iRuVFL+uxdSoMra/l09ydGNX9gsBxO/zg+5nlppscIpj6gg+nL6VNG85zwUarDleIrUJ+FWHvmuA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@napi-rs/canvas-darwin-x64@0.1.94': - resolution: {integrity: sha512-rkr/lrafbU0IIHebst+sQJf1HjdHvTMN0GGqWvw5OfaVS0K/sVxhNHtxi8oCfaRSvRE62aJZjWTcdc2ue/o6yw==} + '@napi-rs/canvas-darwin-x64@0.1.91': + resolution: {integrity: sha512-q3qpkpw0IsG9fAS/dmcGIhCVoNxj8ojbexZKWwz3HwxlEWsLncEQRl4arnxrwbpLc2nTNTyj4WwDn7QR5NDAaA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@napi-rs/canvas-linux-arm-gnueabihf@0.1.94': - resolution: {integrity: sha512-q95TDo32YkTKdi+Sp2yQ2Npm7pmfKEruNoJ3RUIw1KvQQ9EHKL3fii/iuU60tnzP0W+c8BKN7BFstNFcm2KXCQ==} + '@napi-rs/canvas-linux-arm-gnueabihf@0.1.91': + resolution: {integrity: sha512-Io3g8wJZVhK8G+Fpg1363BE90pIPqg+ZbeehYNxPWDSzbgwU3xV0l8r/JBzODwC7XHi1RpFEk+xyUTMa2POj6w==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@napi-rs/canvas-linux-arm64-gnu@0.1.94': - resolution: {integrity: sha512-Je5/gKVybWAoIGyDOcJF1zYgBTKWkPIkfOgvCzrQcl8h7DiDvRvEY70EapA+NicGe4X3DW9VsCT34KZJnerShA==} + '@napi-rs/canvas-linux-arm64-gnu@0.1.91': + resolution: {integrity: sha512-HBnto+0rxx1bQSl8bCWA9PyBKtlk2z/AI32r3cu4kcNO+M/5SD4b0v1MWBWZyqMQyxFjWgy3ECyDjDKMC6tY1A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@napi-rs/canvas-linux-arm64-musl@0.1.94': - resolution: {integrity: sha512-9YleDDauDEZNsFnfz3HyZvp1LK1ECu8N2gDUg1wtL7uWLQv8dUbfVeFtp5HOdxht1o7LsWRmQeqeIbnD4EqE2A==} + '@napi-rs/canvas-linux-arm64-musl@0.1.91': + resolution: {integrity: sha512-/eJtVe2Xw9A86I4kwXpxxoNagdGclu12/NSMsfoL8q05QmeRCbfjhg1PJS7ENAuAvaiUiALGrbVfeY1KU1gztQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@napi-rs/canvas-linux-riscv64-gnu@0.1.94': - resolution: {integrity: sha512-lQUy9Xvz7ch8+0AXq8RkioLD41iQ6EqdKFu5uV40BxkBDijB2SCm1jna/BRhqitQRSjwAk2KlLUxTjHChyfNGg==} + '@napi-rs/canvas-linux-riscv64-gnu@0.1.91': + resolution: {integrity: sha512-floNK9wQuRWevUhhXRcuis7h0zirdytVxPgkonWO+kQlbvxV7gEUHGUFQyq4n55UHYFwgck1SAfJ1HuXv/+ppQ==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] - '@napi-rs/canvas-linux-x64-gnu@0.1.94': - resolution: {integrity: sha512-0IYgyuUaugHdWxXRhDQUCMxTou8kAHHmpIBFtbmdRlciPlfK7AYQW5agvUU1PghPc5Ja3Zzp5qZfiiLu36vIWQ==} + '@napi-rs/canvas-linux-x64-gnu@0.1.91': + resolution: {integrity: sha512-c3YDqBdf7KETuZy2AxsHFMsBBX1dWT43yFfWUq+j1IELdgesWtxf/6N7csi3VPf6VA3PmnT9EhMyb+M1wfGtqw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@napi-rs/canvas-linux-x64-musl@0.1.94': - resolution: {integrity: sha512-xuetfzzcflCIiBw2HJlOU4/+zTqhdxoe1BEcwdBsHAd/5wAQ4Pp+FGPi5g74gDvtcXQmTdEU3fLQvHc/j3wbxQ==} + '@napi-rs/canvas-linux-x64-musl@0.1.91': + resolution: {integrity: sha512-RpZ3RPIwgEcNBHSHSX98adm+4VP8SMT5FN6250s5jQbWpX/XNUX5aLMfAVJS/YnDjS1QlsCgQxFOPU0aCCWgag==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@napi-rs/canvas-win32-arm64-msvc@0.1.94': - resolution: {integrity: sha512-2F3p8wci4Q4vjbENlQtSibqFWxBdpzYk1c8Jh1mqqLE92rBKElG018dBJ6C8Dp49vE350Hmy5LrfdLgFKMG8sg==} + '@napi-rs/canvas-win32-arm64-msvc@0.1.91': + resolution: {integrity: sha512-gF8MBp4X134AgVurxqlCdDA2qO0WaDdi9o6Sd5rWRVXRhWhYQ6wkdEzXNLIrmmros0Tsp2J0hQzx4ej/9O8trQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@napi-rs/canvas-win32-x64-msvc@0.1.94': - resolution: {integrity: sha512-hjwaIKMrQLoNiu3724octSGhDVKkBwJtMeQ3qUXOi+y60h2q6Sxq3+MM2za3V88+XQzzwn0DgG0Xo6v6gzV8kQ==} + '@napi-rs/canvas-win32-x64-msvc@0.1.91': + resolution: {integrity: sha512-++gtW9EV/neKI8TshD8WFxzBYALSPag2kFRahIJV+LYsyt5kBn21b1dBhEUDHf7O+wiZmuFCeUa7QKGHnYRZBA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@napi-rs/canvas@0.1.94': - resolution: {integrity: sha512-8jBkvqynXNdQPNZjLJxB/Rp9PdnnMSHFBLzPmMc615nlt/O6w0ergBbkEDEOr8EbjL8nRQDpEklPx4pzD7zrbg==} + '@napi-rs/canvas@0.1.91': + resolution: {integrity: sha512-eeIe1GoB74P1B0Nkw6pV8BCQ3hfCfvyYr4BntzlCsnFXzVJiPMDnLeIx3gVB0xQMblHYnjK/0nCLvirEhOjr5g==} engines: {node: '>= 10'} '@napi-rs/wasm-runtime@0.2.12': @@ -2915,8 +2861,8 @@ packages: resolution: {integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==} engines: {node: '>= 20'} - '@octokit/endpoint@11.0.3': - resolution: {integrity: sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==} + '@octokit/endpoint@11.0.2': + resolution: {integrity: sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==} engines: {node: '>= 20'} '@octokit/graphql@9.0.3': @@ -2935,8 +2881,8 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-retry@8.1.0': - resolution: {integrity: sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw==} + '@octokit/plugin-retry@8.0.3': + resolution: {integrity: sha512-vKGx1i3MC0za53IzYBSBXcrhmd+daQDzuZfYDd52X5S0M2otf3kVZTVP8bLA3EkU0lTvd1WEC2OlNNa4G+dohA==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=7' @@ -2951,8 +2897,8 @@ packages: resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==} engines: {node: '>= 20'} - '@octokit/request@10.0.8': - resolution: {integrity: sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==} + '@octokit/request@10.0.7': + resolution: {integrity: sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==} engines: {node: '>= 20'} '@octokit/types@15.0.2': @@ -2981,8 +2927,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.58.2': - resolution: {integrity: sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==} + '@playwright/test@1.58.1': + resolution: {integrity: sha512-6LdVIUERWxQMmUSSQi0I53GgCBYgM2RpGngCPY7hSeju+VrKjq3lvs7HpJoPbDiY5QM5EYRtRX5fvrinnMAz3w==} engines: {node: '>=18'} hasBin: true @@ -3307,8 +3253,8 @@ packages: '@rolldown/pluginutils@1.0.0-beta.53': resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} - '@rolldown/pluginutils@1.0.0-rc.3': - resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} + '@rolldown/pluginutils@1.0.0-rc.2': + resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} '@rollup/plugin-inject@5.0.5': resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} @@ -3328,160 +3274,160 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.58.0': - resolution: {integrity: sha512-mr0tmS/4FoVk1cnaeN244A/wjvGDNItZKR8hRhnmCzygyRXYtKF5jVDSIILR1U97CTzAYmbgIj/Dukg62ggG5w==} + '@rollup/rollup-android-arm-eabi@4.57.1': + resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.58.0': - resolution: {integrity: sha512-+s++dbp+/RTte62mQD9wLSbiMTV+xr/PeRJEc/sFZFSBRlHPNPVaf5FXlzAL77Mr8FtSfQqCN+I598M8U41ccQ==} + '@rollup/rollup-android-arm64@4.57.1': + resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.58.0': - resolution: {integrity: sha512-MFWBwTcYs0jZbINQBXHfSrpSQJq3IUOakcKPzfeSznONop14Pxuqa0Kg19GD0rNBMPQI2tFtu3UzapZpH0Uc1Q==} + '@rollup/rollup-darwin-arm64@4.57.1': + resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.58.0': - resolution: {integrity: sha512-yiKJY7pj9c9JwzuKYLFaDZw5gma3fI9bkPEIyofvVfsPqjCWPglSHdpdwXpKGvDeYDms3Qal8qGMEHZ1M/4Udg==} + '@rollup/rollup-darwin-x64@4.57.1': + resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.58.0': - resolution: {integrity: sha512-x97kCoBh5MOevpn/CNK9W1x8BEzO238541BGWBc315uOlN0AD/ifZ1msg+ZQB05Ux+VF6EcYqpiagfLJ8U3LvQ==} + '@rollup/rollup-freebsd-arm64@4.57.1': + resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.58.0': - resolution: {integrity: sha512-Aa8jPoZ6IQAG2eIrcXPpjRcMjROMFxCt1UYPZZtCxRV68WkuSigYtQ/7Zwrcr2IvtNJo7T2JfDXyMLxq5L4Jlg==} + '@rollup/rollup-freebsd-x64@4.57.1': + resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.58.0': - resolution: {integrity: sha512-Ob8YgT5kD/lSIYW2Rcngs5kNB/44Q2RzBSPz9brf2WEtcGR7/f/E9HeHn1wYaAwKBni+bdXEwgHvUd0x12lQSA==} + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.58.0': - resolution: {integrity: sha512-K+RI5oP1ceqoadvNt1FecL17Qtw/n9BgRSzxif3rTL2QlIu88ccvY+Y9nnHe/cmT5zbH9+bpiJuG1mGHRVwF4Q==} + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.58.0': - resolution: {integrity: sha512-T+17JAsCKUjmbopcKepJjHWHXSjeW7O5PL7lEFaeQmiVyw4kkc5/lyYKzrv6ElWRX/MrEWfPiJWqbTvfIvjM1Q==} + '@rollup/rollup-linux-arm64-gnu@4.57.1': + resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.58.0': - resolution: {integrity: sha512-cCePktb9+6R9itIJdeCFF9txPU7pQeEHB5AbHu/MKsfH/k70ZtOeq1k4YAtBv9Z7mmKI5/wOLYjQ+B9QdxR6LA==} + '@rollup/rollup-linux-arm64-musl@4.57.1': + resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.58.0': - resolution: {integrity: sha512-iekUaLkfliAsDl4/xSdoCJ1gnnIXvoNz85C8U8+ZxknM5pBStfZjeXgB8lXobDQvvPRCN8FPmmuTtH+z95HTmg==} + '@rollup/rollup-linux-loong64-gnu@4.57.1': + resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.58.0': - resolution: {integrity: sha512-68ofRgJNl/jYJbxFjCKE7IwhbfxOl1muPN4KbIqAIe32lm22KmU7E8OPvyy68HTNkI2iV/c8y2kSPSm2mW/Q9Q==} + '@rollup/rollup-linux-loong64-musl@4.57.1': + resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.58.0': - resolution: {integrity: sha512-dpz8vT0i+JqUKuSNPCP5SYyIV2Lh0sNL1+FhM7eLC457d5B9/BC3kDPp5BBftMmTNsBarcPcoz5UGSsnCiw4XQ==} + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.58.0': - resolution: {integrity: sha512-4gdkkf9UJ7tafnweBCR/mk4jf3Jfl0cKX9Np80t5i78kjIH0ZdezUv/JDI2VtruE5lunfACqftJ8dIMGN4oHew==} + '@rollup/rollup-linux-ppc64-musl@4.57.1': + resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.58.0': - resolution: {integrity: sha512-YFS4vPnOkDTD/JriUeeZurFYoJhPf9GQQEF/v4lltp3mVcBmnsAdjEWhr2cjUCZzZNzxCG0HZOvJU44UGHSdzw==} + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.58.0': - resolution: {integrity: sha512-x2xgZlFne+QVNKV8b4wwaCS8pwq3y14zedZ5DqLzjdRITvreBk//4Knbcvm7+lWmms9V9qFp60MtUd0/t/PXPw==} + '@rollup/rollup-linux-riscv64-musl@4.57.1': + resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.58.0': - resolution: {integrity: sha512-jIhrujyn4UnWF8S+DHSkAkDEO3hLX0cjzxJZPLF80xFyzyUIYgSMRcYQ3+uqEoyDD2beGq7Dj7edi8OnJcS/hg==} + '@rollup/rollup-linux-s390x-gnu@4.57.1': + resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.58.0': - resolution: {integrity: sha512-+410Srdoh78MKSJxTQ+hZ/Mx+ajd6RjjPwBPNd0R3J9FtL6ZA0GqiiyNjCO9In0IzZkCNrpGymSfn+kgyPQocg==} + '@rollup/rollup-linux-x64-gnu@4.57.1': + resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.58.0': - resolution: {integrity: sha512-ZjMyby5SICi227y1MTR3VYBpFTdZs823Rs/hpakufleBoufoOIB6jtm9FEoxn/cgO7l6PM2rCEl5Kre5vX0QrQ==} + '@rollup/rollup-linux-x64-musl@4.57.1': + resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.58.0': - resolution: {integrity: sha512-ds4iwfYkSQ0k1nb8LTcyXw//ToHOnNTJtceySpL3fa7tc/AsE+UpUFphW126A6fKBGJD5dhRvg8zw1rvoGFxmw==} + '@rollup/rollup-openbsd-x64@4.57.1': + resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.58.0': - resolution: {integrity: sha512-fd/zpJniln4ICdPkjWFhZYeY/bpnaN9pGa6ko+5WD38I0tTqk9lXMgXZg09MNdhpARngmxiCg0B0XUamNw/5BQ==} + '@rollup/rollup-openharmony-arm64@4.57.1': + resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.58.0': - resolution: {integrity: sha512-YpG8dUOip7DCz3nr/JUfPbIUo+2d/dy++5bFzgi4ugOGBIox+qMbbqt/JoORwvI/C9Kn2tz6+Bieoqd5+B1CjA==} + '@rollup/rollup-win32-arm64-msvc@4.57.1': + resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.58.0': - resolution: {integrity: sha512-b9DI8jpFQVh4hIXFr0/+N/TzLdpBIoPzjt0Rt4xJbW3mzguV3mduR9cNgiuFcuL/TeORejJhCWiAXe3E/6PxWA==} + '@rollup/rollup-win32-ia32-msvc@4.57.1': + resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.58.0': - resolution: {integrity: sha512-CSrVpmoRJFN06LL9xhkitkwUcTZtIotYAF5p6XOR2zW0Zz5mzb3IPpcoPhB02frzMHFNo1reQ9xSF5fFm3hUsQ==} + '@rollup/rollup-win32-x64-gnu@4.57.1': + resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.58.0': - resolution: {integrity: sha512-QFsBgQNTnh5K0t/sBsjJLq24YVqEIVkGpfN2VHsnN90soZyhaiA9UUHufcctVNL4ypJY0wrwad0wslx2KJQ1/w==} + '@rollup/rollup-win32-x64-msvc@4.57.1': + resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} cpu: [x64] os: [win32] - '@rushstack/node-core-library@5.20.1': - resolution: {integrity: sha512-QvxZyh+RsTJ77JpQkS9K9lJujh6lj5WyMxieT0bdACtwqxEkGB9zCuSMX5UlXRweaIgSpu1ztdHmhV07fKUpMg==} + '@rushstack/node-core-library@5.19.1': + resolution: {integrity: sha512-ESpb2Tajlatgbmzzukg6zyAhH+sICqJR2CNXNhXcEbz6UGCQfrKCtkxOpJTftWc8RGouroHG0Nud1SJAszvpmA==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/problem-matcher@0.2.1': - resolution: {integrity: sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog==} + '@rushstack/problem-matcher@0.1.1': + resolution: {integrity: sha512-Fm5XtS7+G8HLcJHCWpES5VmeMyjAKaWeyZU5qPzZC+22mPlJzAsOxymHiWIfuirtPckX3aptWws+K2d0BzniJA==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/rig-package@0.7.1': - resolution: {integrity: sha512-hLwDnp4yMcAd/gcUol8NPWNctpIXzVOgMyhZ8DagnEJls9TOZd0xF//5hS+YTiX7/+4rLfBra+NoB3rtFxjDdA==} + '@rushstack/rig-package@0.6.0': + resolution: {integrity: sha512-ZQmfzsLE2+Y91GF15c65L/slMRVhF6Hycq04D4TwtdGaUAbIXXg9c5pKA5KFU7M4QMaihoobp9JJYpYcaY3zOw==} - '@rushstack/terminal@0.22.1': - resolution: {integrity: sha512-Mdtu0VN7v31O5Zcno8ZZH5kQHF13Ez7WN9Aio7nFJVcR36i4bkERionYrWgBDQJ0JdVPLKGecZER/xRU5IvGLw==} + '@rushstack/terminal@0.21.0': + resolution: {integrity: sha512-cLaI4HwCNYmknM5ns4G+drqdEB6q3dCPV423+d3TZeBusYSSm09+nR7CnhzJMjJqeRcdMAaLnrA4M/3xDz4R3w==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/ts-command-line@5.3.1': - resolution: {integrity: sha512-mid/JIZSJafwy3x9e4v0wVLuAqSSYYErEHV0HXPALYLSBN13YNkR5caOk0hf97lSRKrxhtvQjGaDKSEelR3sMg==} + '@rushstack/ts-command-line@5.2.0': + resolution: {integrity: sha512-lYxCX0nDdkDtCkVpvF0m25ymf66SaMWuppbD6b7MdkIzvGXKBXNIVZlwBH/C0YfkanrupnICWf2n4z3AKSfaHw==} '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -3601,8 +3547,8 @@ packages: resolution: {integrity: sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==} engines: {node: '>=18.0.0'} - '@smithy/core@3.23.2': - resolution: {integrity: sha512-HaaH4VbGie4t0+9nY3tNBRSxVTr96wzIqexUa6C2qx3MPePAuz7lIxPxYtt1Wc//SPfJLNoZJzfdt0B6ksj2jA==} + '@smithy/core@3.23.0': + resolution: {integrity: sha512-Yq4UPVoQICM9zHnByLmG8632t2M0+yap4T7ANVw482J0W7HW0pOuxwVmeOwzJqX2Q89fkXz0Vybz55Wj2Xzrsg==} engines: {node: '>=18.0.0'} '@smithy/credential-provider-imds@4.2.8': @@ -3665,12 +3611,12 @@ packages: resolution: {integrity: sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.16': - resolution: {integrity: sha512-L5GICFCSsNhbJ5JSKeWFGFy16Q2OhoBizb3X2DrxaJwXSEujVvjG9Jt386dpQn2t7jINglQl0b4K/Su69BdbMA==} + '@smithy/middleware-endpoint@4.4.14': + resolution: {integrity: sha512-FUFNE5KVeaY6U/GL0nzAAHkaCHzXLZcY1EhtQnsAqhD8Du13oPKtMB9/0WK4/LK6a/T5OZ24wPoSShff5iI6Ag==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.33': - resolution: {integrity: sha512-jLqZOdJhtIL4lnA9hXnAG6GgnJlo1sD3FqsTxm9wSfjviqgWesY/TMBVnT84yr4O0Vfe0jWoXlfFbzsBVph3WA==} + '@smithy/middleware-retry@4.4.31': + resolution: {integrity: sha512-RXBzLpMkIrxBPe4C8OmEOHvS8aH9RUuCOH++Acb5jZDEblxDjyg6un72X9IcbrGTJoiUwmI7hLypNfuDACypbg==} engines: {node: '>=18.0.0'} '@smithy/middleware-serde@4.2.9': @@ -3717,8 +3663,8 @@ packages: resolution: {integrity: sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.11.5': - resolution: {integrity: sha512-xixwBRqoeP2IUgcAl3U9dvJXc+qJum4lzo3maaJxifsZxKUYLfVfCXvhT4/jD01sRrHg5zjd1cw2Zmjr4/SuKQ==} + '@smithy/smithy-client@4.11.3': + resolution: {integrity: sha512-Q7kY5sDau8OoE6Y9zJoRGgje8P4/UY0WzH8R2ok0PDh+iJ+ZnEKowhjEqYafVcubkbYxQVaqwm3iufktzhprGg==} engines: {node: '>=18.0.0'} '@smithy/types@4.12.0': @@ -3753,12 +3699,12 @@ packages: resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.3.32': - resolution: {integrity: sha512-092sjYfFMQ/iaPH798LY/OJFBcYu0sSK34Oy9vdixhsU36zlZu8OcYjF3TD4e2ARupyK7xaxPXl+T0VIJTEkkg==} + '@smithy/util-defaults-mode-browser@4.3.30': + resolution: {integrity: sha512-cMni0uVU27zxOiU8TuC8pQLC1pYeZ/xEMxvchSK/ILwleRd1ugobOcIRr5vXtcRqKd4aBLWlpeBoDPJJ91LQng==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.2.35': - resolution: {integrity: sha512-miz/ggz87M8VuM29y7jJZMYkn7+IErM5p5UgKIf8OtqVs/h2bXr1Bt3uTsREsI/4nK8a0PQERbAPsVPVNIsG7Q==} + '@smithy/util-defaults-mode-node@4.2.33': + resolution: {integrity: sha512-LEb2aq5F4oZUSzWBG7S53d4UytZSkOEJPXcBq/xbG2/TmK9EW5naUZ8lKu1BEyWMzdHIzEVN16M3k8oxDq+DJA==} engines: {node: '>=18.0.0'} '@smithy/util-endpoints@3.2.8': @@ -3910,9 +3856,6 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@tokenizer/token@0.3.0': - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} @@ -3940,8 +3883,8 @@ packages: '@types/babel__traverse@7.28.0': resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - '@types/bun@1.3.9': - resolution: {integrity: sha512-KQ571yULOdWJiMH+RIWIOZ7B2RXQGpL1YQrBtLIV3FqDcCu6FsbFUBwhdKUlCKUpS3PJDsHlJ1QKlpxoVR+xtw==} + '@types/bun@1.3.8': + resolution: {integrity: sha512-3LvWJ2q5GerAXYxO2mffLTqOzEu5qnhEAlh48Vnu8WQfnmSwbgagjGZV6BoHKJztENYEDn6QmVd949W4uESRJA==} '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -4019,14 +3962,11 @@ packages: '@types/nlcst@2.0.3': resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} - '@types/node@16.9.1': - resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} - '@types/node@22.19.2': resolution: {integrity: sha512-LPM2G3Syo1GLzXLGJAKdqoU35XvrWzGJ21/7sgZTUpbkBaOasTj8tjwn6w+hCkqaa1TfJ/w67rJSwYItlJ2mYw==} - '@types/node@25.3.0': - resolution: {integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==} + '@types/node@22.19.8': + resolution: {integrity: sha512-ebO/Yl+EAvVe8DnMfi+iaAyIqYdK0q/q0y0rw82INWEKJOBe6b/P3YWE8NW7oOlF/nXFNrHwhARrN/hdgDkraA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -4039,8 +3979,8 @@ packages: peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.14': - resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + '@types/react@19.2.11': + resolution: {integrity: sha512-tORuanb01iEzWvMGVGv2ZDhYZVeRMrw453DCSAIn/5yvcSVnMoUMTyf33nQJLahYEnv9xqrTNbgz4qY5EfSh0g==} '@types/responselike@1.0.0': resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} @@ -4057,8 +3997,8 @@ packages: '@types/urijs@1.19.26': resolution: {integrity: sha512-wkXrVzX5yoqLnndOwFsieJA7oKM8cNkOKJtf/3vVGSUFkWDKZvFHpIl9Pvqb/T9UsawBBFMTTD8xu7sK5MWuvg==} - '@types/vscode@1.109.0': - resolution: {integrity: sha512-0Pf95rnwEIwDbmXGC08r0B4TQhAbsHQ5UyTIgVgoieDe4cOnf92usuR5dEczb6bTKEp7ziZH4TV1TRGPPCExtw==} + '@types/vscode@1.108.1': + resolution: {integrity: sha512-DerV0BbSzt87TbrqmZ7lRDIYaMiqvP8tmJTzW2p49ZBVtGUnGAu2RGQd1Wv4XMzEVUpaHbsemVM5nfuQJj7H6w==} '@types/whatwg-mimetype@3.0.2': resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} @@ -4069,72 +4009,72 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.56.0': - resolution: {integrity: sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==} + '@typescript-eslint/eslint-plugin@8.54.0': + resolution: {integrity: sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.56.0 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + '@typescript-eslint/parser': ^8.54.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.56.0': - resolution: {integrity: sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==} + '@typescript-eslint/parser@8.54.0': + resolution: {integrity: sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.56.0': - resolution: {integrity: sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==} + '@typescript-eslint/project-service@8.54.0': + resolution: {integrity: sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.56.0': - resolution: {integrity: sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==} + '@typescript-eslint/scope-manager@8.54.0': + resolution: {integrity: sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.56.0': - resolution: {integrity: sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==} + '@typescript-eslint/tsconfig-utils@8.54.0': + resolution: {integrity: sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.56.0': - resolution: {integrity: sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==} + '@typescript-eslint/type-utils@8.54.0': + resolution: {integrity: sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.56.0': - resolution: {integrity: sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==} + '@typescript-eslint/types@8.54.0': + resolution: {integrity: sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.56.0': - resolution: {integrity: sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==} + '@typescript-eslint/typescript-estree@8.54.0': + resolution: {integrity: sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.56.0': - resolution: {integrity: sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==} + '@typescript-eslint/utils@8.54.0': + resolution: {integrity: sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.56.0': - resolution: {integrity: sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==} + '@typescript-eslint/visitor-keys@8.54.0': + resolution: {integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript/vfs@1.6.4': - resolution: {integrity: sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ==} + '@typescript/vfs@1.6.2': + resolution: {integrity: sha512-hoBwJwcbKHmvd2QVebiytN1aELvpk9B74B4L1mFm/XT1Q/VOYAWl2vQ9AWRFtQq8zmz6enTpfTV8WRc4ATjW/g==} peerDependencies: typescript: '*' - '@typespec/ts-http-runtime@0.3.3': - resolution: {integrity: sha512-91fp6CAAJSRtH5ja95T1FHSKa8aPW9/Zw6cta81jlZTUw/+Vq8jM/AfF/14h2b71wwR84JUTW/3Y8QPhDAawFA==} + '@typespec/ts-http-runtime@0.3.2': + resolution: {integrity: sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==} engines: {node: '>=20.0.0'} '@ungap/structured-clone@1.3.0': @@ -4314,8 +4254,8 @@ packages: resolution: {integrity: sha512-EgyazlL0VejvZqWZ6KL3ig27Yl8RXcwhz1hayuqeAIxaqbsnmSmogL2zKXgGnm9y/A6QkPfZH1BcQoUh1STvtQ==} engines: {node: '>=18'} - '@vitejs/plugin-react@5.1.4': - resolution: {integrity: sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==} + '@vitejs/plugin-react@5.1.3': + resolution: {integrity: sha512-NVUnA6gQCl8jfoYqKqQU5Clv0aPw14KkZYCsX6T9Lfu9slI0LOU10OTwFHS/WmptsMMpshNd/1tuWsHQ2Uk+cg==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -4473,9 +4413,6 @@ packages: '@vue/test-utils@2.4.6': resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==} - '@yarnpkg/lockfile@1.1.0': - resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} - '@zeit/schemas@2.36.0': resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} @@ -4505,8 +4442,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true @@ -4567,8 +4504,8 @@ packages: ajv: optional: true - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} @@ -4579,9 +4516,6 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - alien-signals@0.4.14: resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} @@ -4620,9 +4554,6 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} - any-base@1.1.0: - resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} - any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -4667,9 +4598,15 @@ packages: arkregex@0.0.3: resolution: {integrity: sha512-bU21QJOJEFJK+BPNgv+5bVXkvRxyAvgnon75D92newgHxkBJTgiFwQxusyViYyJkETsddPlHyspshDQcCzmkNg==} + arkregex@0.0.5: + resolution: {integrity: sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw==} + arktype@2.1.27: resolution: {integrity: sha512-enctOHxI4SULBv/TDtCVi5M8oLd4J5SVlPUblXDzSsOYQNMzmVbUosGBnJuZDKmFlN5Ie0/QVEuTE+Z5X1UhsQ==} + arktype@2.1.29: + resolution: {integrity: sha512-jyfKk4xIOzvYNayqnD8ZJQqOwcrTOUbIU4293yrzAjA3O1dWh61j71ArMQ6tS/u4pD7vabSPe7nG3RCyoXW6RQ==} + array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} @@ -4771,10 +4708,6 @@ packages: resolution: {integrity: sha512-yOA4wFeI7ET3v32Di/sUybQ+ttP20JHSW3mxLuNGeO0uD6PPcvLrIQXSvy/rhJOWU5JrYh7U4OHplWMmtAtjMg==} engines: {node: '>=0.11'} - await-to-js@3.0.0: - resolution: {integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==} - engines: {node: '>=6.0.0'} - aws-sign2@0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} @@ -4790,8 +4723,8 @@ packages: azure-devops-node-api@12.5.0: resolution: {integrity: sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==} - b4a@1.8.0: - resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} + b4a@1.7.3: + resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} peerDependencies: react-native-b4a: '*' peerDependenciesMeta: @@ -4804,10 +4737,6 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - balanced-match@4.0.3: - resolution: {integrity: sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==} - engines: {node: 20 || >=22} - bare-events@2.8.2: resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} peerDependencies: @@ -4816,8 +4745,8 @@ packages: bare-abort-controller: optional: true - bare-fs@4.5.4: - resolution: {integrity: sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==} + bare-fs@4.5.3: + resolution: {integrity: sha512-9+kwVx8QYvt3hPWnmb19tPnh38c6Nihz8Lx3t0g9+4GoIf3/fTgYwM4Z6NxgI+B9elLQA7mLE9PpqcWtOMRDiQ==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -4832,8 +4761,8 @@ packages: bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - bare-stream@2.8.0: - resolution: {integrity: sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==} + bare-stream@2.7.0: + resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} peerDependencies: bare-buffer: '*' bare-events: '*' @@ -4853,9 +4782,8 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - baseline-browser-mapping@2.10.0: - resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} - engines: {node: '>=6.0.0'} + baseline-browser-mapping@2.9.19: + resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} hasBin: true basic-ftp@5.1.0: @@ -4885,14 +4813,11 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - bmp-ts@1.0.9: - resolution: {integrity: sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw==} - - bn.js@4.12.3: - resolution: {integrity: sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==} + bn.js@4.12.2: + resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} - bn.js@5.2.3: - resolution: {integrity: sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==} + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} @@ -4921,10 +4846,6 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - brace-expansion@5.0.2: - resolution: {integrity: sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==} - engines: {node: 20 || >=22} - braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -4988,8 +4909,8 @@ packages: builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} - bun-types@1.3.9: - resolution: {integrity: sha512-+UBWWOakIP4Tswh0Bt0QD0alpTY8cb5hvgiYeWCMet9YukHbzuruIEeXC2D7nMJPB12kbh8C7XJykSexEqGKJg==} + bun-types@1.3.8: + resolution: {integrity: sha512-fL99nxdOWvV4LqjmC+8Q9kW3M4QTtTR1eePs94v5ctGqU8OeceWrSUaRw3JYb7tU3FkMIAjkueehrHPPPGKi5Q==} bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} @@ -5053,8 +4974,8 @@ packages: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} - caniuse-lite@1.0.30001770: - resolution: {integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==} + caniuse-lite@1.0.30001767: + resolution: {integrity: sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==} canvas@3.2.0: resolution: {integrity: sha512-jk0GxrLtUEmW/TmFsk2WghvgHe8B0pxGilqCL21y8lHkPUGa6FTsnCNtHPOzT8O3y+N+m3espawV80bbBlgfTA==} @@ -5152,10 +5073,6 @@ packages: peerDependencies: devtools-protocol: '*' - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - cipher-base@1.0.7: resolution: {integrity: sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==} engines: {node: '>= 0.10'} @@ -5320,8 +5237,8 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - confbox@0.2.4: - resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -5785,8 +5702,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.302: - resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} + electron-to-chromium@1.5.286: + resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==} elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} @@ -5913,8 +5830,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.27.3: - resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} engines: {node: '>=18'} hasBin: true @@ -6017,12 +5934,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-visitor-keys@5.0.1: - resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - - eslint@9.39.3: - resolution: {integrity: sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==} + eslint@9.39.2: + resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -6116,9 +6029,6 @@ packages: resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} engines: {node: ^18.19.0 || >=20.5.0} - exif-parser@0.1.12: - resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} - expand-template@2.0.3: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} @@ -6178,8 +6088,8 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fast-xml-parser@5.3.6: - resolution: {integrity: sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==} + fast-xml-parser@5.3.4: + resolution: {integrity: sha512-EFd6afGmXlCx8H8WTZHhAoDaWaGyuIBoZJ2mknrNxug+aZKjkp0a0dlars9Izl+jF+7Gu1/5f/2h68cQpe0IiA==} hasBin: true fastq@1.20.1: @@ -6220,10 +6130,6 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - file-type@16.5.4: - resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} - engines: {node: '>=10'} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -6260,9 +6166,6 @@ packages: resolution: {integrity: sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==} engines: {node: '>=18'} - find-yarn-workspace-root@2.0.0: - resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} - fix-dts-default-cjs-exports@1.0.1: resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} @@ -6399,8 +6302,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.5.0: - resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} engines: {node: '>=18'} get-intrinsic@1.3.0: @@ -6439,8 +6342,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.13.6: - resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} + get-tsconfig@4.13.1: + resolution: {integrity: sha512-EoY1N2xCn44xU6750Sx7OjOIT59FkmstNc3X6y5xpz7D5cBtZRe/3pSlTkDJgqsOk3WwZPkWfonhhUJfttQo3w==} get-uri@6.0.5: resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} @@ -6449,9 +6352,6 @@ packages: getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} - gifwrap@0.10.1: - resolution: {integrity: sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==} - git-log-parser@1.2.1: resolution: {integrity: sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==} @@ -6542,10 +6442,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphql@15.10.1: - resolution: {integrity: sha512-BL/Xd/T9baO6NFzoMpiMD7YUZ62R6viR5tp/MULVEnbYJXZA//kRNW7J0j1w/wXArgL0sCxhDfK5dczSKn3+cg==} - engines: {node: '>= 10.x'} - gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} hasBin: true @@ -6825,9 +6721,6 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} - image-q@4.0.0: - resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} - immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} @@ -7192,8 +7085,8 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} - is-wsl@3.1.1: - resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} isarray@1.0.0: @@ -7209,9 +7102,6 @@ packages: resolution: {integrity: sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==} engines: {node: '>=10'} - isomorphic-unfetch@3.1.0: - resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} - isomorphic.js@0.2.5: resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} @@ -7249,10 +7139,6 @@ packages: resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} engines: {node: '>= 0.6.0'} - jimp@1.6.0: - resolution: {integrity: sha512-YcwCHw1kiqEeI5xRpDlPPBGL2EOpBKLwO4yIBJcXWHPj5PnA5urGq0jbyhM5KoNpypQ6VboSoxc9D8HyfvngSg==} - engines: {node: '>=18'} - jiti@1.21.7: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true @@ -7268,9 +7154,6 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} - jpeg-js@0.4.4: - resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} - js-beautify@1.15.4: resolution: {integrity: sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==} engines: {node: '>=14'} @@ -7347,16 +7230,9 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-stable-stringify@1.3.0: - resolution: {integrity: sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==} - engines: {node: '>= 0.4'} - json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - json-with-bigint@3.5.3: - resolution: {integrity: sha512-QObKu6nxy7NsxqR0VK4rkXnsNr5L9ElJaGEg+ucJ6J7/suoKZ0n+p76cu9aCqowytxEbwYNzvrMerfMkXneF5A==} - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -7374,15 +7250,12 @@ packages: jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - jsonify@0.0.1: - resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} - jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} - jsonpath-plus@10.4.0: - resolution: {integrity: sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA==} + jsonpath-plus@10.3.0: + resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==} engines: {node: '>=18.0.0'} hasBin: true @@ -7421,9 +7294,6 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - klaw-sync@6.0.0: - resolution: {integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==} - kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -7716,8 +7586,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.6: - resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} + lru-cache@11.2.5: + resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -7990,9 +7860,6 @@ packages: micromark-extension-mdx-jsx@3.0.1: resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==} - micromark-extension-mdx-jsx@3.0.2: - resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} - micromark-extension-mdx-md@2.0.0: resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} @@ -8201,13 +8068,13 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - minimatch@10.2.1: - resolution: {integrity: sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==} + minimatch@10.0.3: + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} - minimatch@10.2.2: - resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} - engines: {node: 18 || 20 || >=22} + minimatch@10.1.2: + resolution: {integrity: sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==} + engines: {node: 20 || >=22} minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -8239,16 +8106,16 @@ packages: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} - minipass@7.1.3: - resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - mintlify@4.2.368: - resolution: {integrity: sha512-3LmLU6UeIxrL5AmIfOL3on7IGOWZ63yKVvdtgeaWM8xffO/5Jexs+wzCH7AXTqAk0vcU3w8yyQNlPXAj42Su6A==} + mintlify@4.2.331: + resolution: {integrity: sha512-57mLAnYuZ9EEpTT84NAgUOFK7SSEM0cuO1J+NxNfywJi/RL+JmDijd9Tv74QHOEUhPwHjKPzOkhYR82vMqIdvw==} engines: {node: '>=18.0.0'} hasBin: true @@ -8332,9 +8199,9 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - next-mdx-remote-client@1.1.6: - resolution: {integrity: sha512-O4HIpi44d6SismhfG5W78aTUfgxfbsj6FgoM4/G3o4Vtcobt0Ej439IiDPkv+IqsmtouVYG1tGAsz1DIuj9Tfg==} - engines: {node: '>=20.9.0'} + next-mdx-remote-client@1.1.4: + resolution: {integrity: sha512-psCMdO50tfoT1kAH7OGXZvhyRfiHVK6IqwjmWFV5gtLo4dnqjAgcjcLNeJ92iI26UNlKShxYrBs1GQ6UXxk97A==} + engines: {node: '>=18.18.0'} peerDependencies: react: '>= 18.3.0 < 19.0.0' react-dom: '>= 18.3.0 < 19.0.0' @@ -8365,10 +8232,6 @@ packages: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} - node-exports-info@1.6.0: - resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} - engines: {node: '>= 0.4'} - node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} @@ -8401,15 +8264,11 @@ packages: resolution: {integrity: sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==} engines: {node: '>=10'} - nodemon@3.1.13: - resolution: {integrity: sha512-nPN6L7A9cTA3BnJ3zZIibH5FiDh3GbmibeS17bl5YEU1IRO2mcfvR0ZJXH3ndoeKItjUcaX81FSKc/Kq/IiG6g==} + nodemon@3.1.11: + resolution: {integrity: sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g==} engines: {node: '>=10'} hasBin: true - non-error@0.1.0: - resolution: {integrity: sha512-TMB1uHiGsHRGv1uYclfhivcnf0/PdFp2pNqRxXjncaAsjYMoisaQJI+SSZCqRq+VliwRTC8tsMQfmrWjDMhkPQ==} - engines: {node: '>=20'} - nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -8642,9 +8501,6 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} - omggif@1.0.10: - resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} - on-exit-leak-free@2.1.2: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} @@ -8678,10 +8534,6 @@ packages: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} - open@7.4.2: - resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} - engines: {node: '>=8'} - open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -8812,15 +8664,6 @@ packages: resolution: {integrity: sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==} engines: {node: '>= 0.10'} - parse-bmfont-ascii@1.0.6: - resolution: {integrity: sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==} - - parse-bmfont-binary@1.0.6: - resolution: {integrity: sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==} - - parse-bmfont-xml@1.1.6: - resolution: {integrity: sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==} - parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} @@ -8891,11 +8734,6 @@ packages: resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - patch-package@8.0.1: - resolution: {integrity: sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==} - engines: {node: '>=14', npm: '>5'} - hasBin: true - path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -8969,10 +8807,6 @@ packages: resolution: {integrity: sha512-sm6TxKTtWv1Oh6n3C6J6a8odejb5uO4A4zo/2dgkHuC0iu8ZMAXOezEODkVaoVp8nX1Xzr+0WxFJJmUr45hQzg==} engines: {node: '>=20.16.0 || >=22.3.0'} - peek-readable@4.1.0: - resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} - engines: {node: '>=8'} - peek-stream@1.1.3: resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} @@ -9031,14 +8865,6 @@ packages: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} - pixelmatch@5.3.0: - resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==} - hasBin: true - - pixelmatch@7.1.0: - resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} - hasBin: true - pkg-conf@2.1.0: resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} engines: {node: '>=4'} @@ -9053,24 +8879,16 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - playwright-core@1.58.2: - resolution: {integrity: sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==} + playwright-core@1.58.1: + resolution: {integrity: sha512-bcWzOaTxcW+VOOGBCQgnaKToLJ65d6AqfLVKEWvexyS3AS6rbXl+xdpYRMGSRBClPvyj44njOWoxjNdL/H9UNg==} engines: {node: '>=18'} hasBin: true - playwright@1.58.2: - resolution: {integrity: sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==} + playwright@1.58.1: + resolution: {integrity: sha512-+2uTZHxSCcxjvGc5C891LrS1/NlxglGxzrC4seZiVjcYVQfUa87wBL6rTDqzGjuoWNjnBzRqKmF6zRYGMvQUaQ==} engines: {node: '>=18'} hasBin: true - pngjs@6.0.0: - resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} - engines: {node: '>=12.13.0'} - - pngjs@7.0.0: - resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} - engines: {node: '>=14.19.0'} - pony-cause@1.1.1: resolution: {integrity: sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==} engines: {node: '>=12.0.0'} @@ -9152,7 +8970,6 @@ packages: prebuild-install@7.1.3: resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} engines: {node: '>=10'} - deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available. hasBin: true prelude-ls@1.2.1: @@ -9242,8 +9059,8 @@ packages: prosemirror-transform@1.11.0: resolution: {integrity: sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw==} - prosemirror-view@1.41.6: - resolution: {integrity: sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg==} + prosemirror-view@1.41.5: + resolution: {integrity: sha512-UDQbIPnDrjE8tqUBbPmCOZgtd75htE6W3r0JCmY9bL6W1iemDM37MZEKC49d+tdQ0v/CKx4gjxLoLsfkD2NiZA==} proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -9306,12 +9123,8 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} - qs@6.14.2: - resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} - engines: {node: '>=0.6'} - - qs@6.15.0: - resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} + qs@6.14.1: + resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} engines: {node: '>=0.6'} quansync@0.2.11: @@ -9454,10 +9267,6 @@ packages: resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - readable-web-to-node-stream@3.0.4: - resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==} - engines: {node: '>=8'} - readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -9556,8 +9365,8 @@ packages: remark-math@6.0.0: resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} - remark-mdx-remove-esm@1.2.3: - resolution: {integrity: sha512-n6r36SaE+7cno7pmshWbGzYolDVLxJm5EKuw67+q4SPQT6kelNJHyZAiFYYtOB0axh+/1xF4BC57Ec3jncAGXQ==} + remark-mdx-remove-esm@1.2.2: + resolution: {integrity: sha512-YSaUwqiuJuD6S9XTAD6zmO4JJJZJgsRAdsl2drZO8/ssAVv0HXAg4vkSgHZAP46ORh8ERPFQrC7JWlbkwBwu1A==} peerDependencies: unified: ^11 @@ -9582,9 +9391,6 @@ packages: remark-rehype@11.1.1: resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} - remark-rehype@11.1.2: - resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} - remark-smartypants@3.0.2: resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} engines: {node: '>=16.0.0'} @@ -9631,9 +9437,8 @@ packages: engines: {node: '>= 0.4'} hasBin: true - resolve@2.0.0-next.6: - resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==} - engines: {node: '>= 0.4'} + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true responselike@2.0.1: @@ -9734,8 +9539,8 @@ packages: rollup: optional: true - rollup@4.58.0: - resolution: {integrity: sha512-wbT0mBmWbIvvq8NeEYWWvevvxnOyhKChir47S66WCxw1SXqhw7ssIYejnQEVt7XYQpsj2y8F9PM+Cr3SNEa0gw==} + rollup@4.57.1: + resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -9857,11 +9662,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} - engines: {node: '>=10'} - hasBin: true - send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} @@ -9870,9 +9670,9 @@ packages: resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} - serialize-error@13.0.1: - resolution: {integrity: sha512-bBZaRwLH9PN5HbLCjPId4dP5bNGEtumcErgOX952IsvOhVPrm3/AeK1y0UHA/QaPG701eg0yEnOKsCOC6X/kaA==} - engines: {node: '>=20'} + serialize-error@12.0.0: + resolution: {integrity: sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==} + engines: {node: '>=18'} serve-handler@6.1.6: resolution: {integrity: sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==} @@ -9920,6 +9720,10 @@ packages: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -9985,10 +9789,6 @@ packages: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} - simple-xml-to-json@1.2.3: - resolution: {integrity: sha512-kWJDCr9EWtZ+/EYYM5MareWj2cRnZGF93YDNpH4jQiHB+hBIZnfPFSQiVMzZOdk+zXWqTZ/9fTeQNu2DqeiudA==} - engines: {node: '>=20.12.2'} - sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -9996,10 +9796,6 @@ packages: resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} engines: {node: '>=8'} - slash@2.0.0: - resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} - engines: {node: '>=6'} - slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -10038,8 +9834,8 @@ packages: sonic-boom@3.8.1: resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} - sonic-boom@4.2.1: - resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} @@ -10223,10 +10019,6 @@ packages: strnum@2.1.2: resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==} - strtok3@6.3.0: - resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} - engines: {node: '>=10'} - style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} @@ -10242,11 +10034,11 @@ packages: resolution: {integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==} engines: {node: '>=18'} - superdoc@1.15.0: - resolution: {integrity: sha512-gLFqPYA74my5kE9cYvZWzkbmBBOKH8WqyQDl91EMIHvKS1LLzM959EBhda+BGkoH0i/CYx8CogJfzSO9I6hFLQ==} + superdoc@1.11.0: + resolution: {integrity: sha512-DY5uObI50Itfxjjog9h8FQKGWLx0o0au2H0h9hbNtBrNXvg8mAeQvekSgYgwmL7xIW+juo/ZMSGY035eLDMmnw==} peerDependencies: '@hocuspocus/provider': ^2.13.6 - pdfjs-dist: ^5.4.296 + pdfjs-dist: '>=4.3.136 <=4.6.82' y-prosemirror: ^1.3.7 yjs: 13.6.19 @@ -10277,10 +10069,6 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tagged-tag@1.0.0: - resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} - engines: {node: '>=20'} - tailwindcss@3.4.4: resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} engines: {node: '>=14.0.0'} @@ -10304,9 +10092,6 @@ packages: engines: {node: '>=10'} deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - teex@1.0.1: - resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} - temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} @@ -10327,8 +10112,8 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} - text-decoder@1.2.7: - resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} text-extensions@2.4.0: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} @@ -10361,9 +10146,6 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinycolor2@1.6.0: - resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} @@ -10393,15 +10175,15 @@ packages: tldts-core@6.1.86: resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} - tldts-core@7.0.23: - resolution: {integrity: sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==} + tldts-core@7.0.22: + resolution: {integrity: sha512-KgbTDC5wzlL6j/x6np6wCnDSMUq4kucHNm00KXPbfNzmllCmtmvtykJHfmgdHntwIeupW04y8s1N/43S1PkQDw==} tldts@6.1.86: resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} hasBin: true - tldts@7.0.23: - resolution: {integrity: sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==} + tldts@7.0.22: + resolution: {integrity: sha512-nqpKFC53CgopKPjT6Wfb6tpIcZXHcI6G37hesvikhx0EmUGPkZrujRyAjgnmp1SHNgpQfKVanZ+KfpANFt2Hxw==} hasBin: true tmp@0.2.5: @@ -10423,10 +10205,6 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - token-types@4.2.1: - resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} - engines: {node: '>=10'} - touch@3.1.1: resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} hasBin: true @@ -10557,10 +10335,6 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - type-fest@5.4.4: - resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==} - engines: {node: '>=20'} - type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -10584,11 +10358,11 @@ packages: typed-rest-client@1.8.11: resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==} - typescript-eslint@8.56.0: - resolution: {integrity: sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg==} + typescript-eslint@8.54.0: + resolution: {integrity: sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' typescript@5.8.2: @@ -10626,22 +10400,16 @@ packages: undefsafe@2.0.5: resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} - underscore@1.13.8: - resolution: {integrity: sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==} + underscore@1.13.7: + resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.18.2: - resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} - - undici@7.22.0: - resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} + undici@7.20.0: + resolution: {integrity: sha512-MJZrkjyd7DeC+uPZh+5/YaMDxFiiEEaDgbUSVMXayofAkDWF1088CDo+2RPg7B1BuS1qf1vgNE7xqwPxE0DuSQ==} engines: {node: '>=20.18.1'} - unfetch@4.2.0: - resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} - unicode-emoji-modifier-base@1.0.0: resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} engines: {node: '>=4'} @@ -10804,9 +10572,6 @@ packages: '@types/react': optional: true - utif2@4.1.0: - resolution: {integrity: sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==} - util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -11185,9 +10950,6 @@ packages: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} - xml-parse-from-string@1.0.1: - resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} - xml2js@0.5.0: resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} @@ -11313,9 +11075,6 @@ packages: zod@3.24.0: resolution: {integrity: sha512-Hz+wiY8yD0VLA2k/+nsg2Abez674dDGTai33SwNvMPuf9uIrBC9eFgIMQxBBbHFxVXi8W+5nX9DcAh9YNSQm/w==} - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} @@ -11328,7 +11087,7 @@ snapshots: '@adobe/css-tools@4.4.4': {} - '@alcalzone/ansi-tokenize@0.2.5': + '@alcalzone/ansi-tokenize@0.2.4': dependencies: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 @@ -11344,29 +11103,35 @@ snapshots: dependencies: '@ark/util': 0.55.0 + '@ark/schema@0.56.0': + dependencies: + '@ark/util': 0.56.0 + '@ark/util@0.55.0': {} - '@asamuzakjp/css-color@4.1.2': + '@ark/util@0.56.0': {} + + '@asamuzakjp/css-color@4.1.1': dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-color-parser': 4.0.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - lru-cache: 11.2.6 + '@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) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + lru-cache: 11.2.5 - '@asamuzakjp/dom-selector@6.8.1': + '@asamuzakjp/dom-selector@6.7.7': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 css-tree: 3.1.0 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.2.6 + lru-cache: 11.2.5 '@asamuzakjp/nwsapi@2.3.9': {} '@asyncapi/parser@3.4.0': dependencies: - '@asyncapi/specs': 6.8.1 + '@asyncapi/specs': 6.11.1 '@openapi-contrib/openapi-schema-to-json-schema': 3.2.0 '@stoplight/json': 3.21.0 '@stoplight/json-ref-readers': 1.2.2 @@ -11378,16 +11143,20 @@ snapshots: '@stoplight/types': 13.20.0 '@types/json-schema': 7.0.15 '@types/urijs': 1.19.26 - ajv: 8.18.0 - ajv-errors: 3.0.0(ajv@8.18.0) - ajv-formats: 2.1.1(ajv@8.18.0) + ajv: 8.17.1 + ajv-errors: 3.0.0(ajv@8.17.1) + ajv-formats: 2.1.1(ajv@8.17.1) avsc: 5.7.9 - js-yaml: 4.1.0 - jsonpath-plus: 10.4.0 + js-yaml: 4.1.1 + jsonpath-plus: 10.3.0 node-fetch: 2.6.7 transitivePeerDependencies: - encoding + '@asyncapi/specs@6.11.1': + dependencies: + '@types/json-schema': 7.0.15 + '@asyncapi/specs@6.8.1': dependencies: '@types/json-schema': 7.0.15 @@ -11439,31 +11208,31 @@ snapshots: '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-s3@3.995.0': + '@aws-sdk/client-s3@3.988.0': dependencies: '@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.11 - '@aws-sdk/credential-provider-node': 3.972.10 + '@aws-sdk/core': 3.973.8 + '@aws-sdk/credential-provider-node': 3.972.7 '@aws-sdk/middleware-bucket-endpoint': 3.972.3 '@aws-sdk/middleware-expect-continue': 3.972.3 - '@aws-sdk/middleware-flexible-checksums': 3.972.9 + '@aws-sdk/middleware-flexible-checksums': 3.972.6 '@aws-sdk/middleware-host-header': 3.972.3 '@aws-sdk/middleware-location-constraint': 3.972.3 '@aws-sdk/middleware-logger': 3.972.3 '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-sdk-s3': 3.972.11 + '@aws-sdk/middleware-sdk-s3': 3.972.8 '@aws-sdk/middleware-ssec': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.11 + '@aws-sdk/middleware-user-agent': 3.972.8 '@aws-sdk/region-config-resolver': 3.972.3 - '@aws-sdk/signature-v4-multi-region': 3.995.0 + '@aws-sdk/signature-v4-multi-region': 3.988.0 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.995.0 + '@aws-sdk/util-endpoints': 3.988.0 '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.10 + '@aws-sdk/util-user-agent-node': 3.972.6 '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.2 + '@smithy/core': 3.23.0 '@smithy/eventstream-serde-browser': 4.2.8 '@smithy/eventstream-serde-config-resolver': 4.3.8 '@smithy/eventstream-serde-node': 4.2.8 @@ -11474,21 +11243,21 @@ snapshots: '@smithy/invalid-dependency': 4.2.8 '@smithy/md5-js': 4.2.8 '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.16 - '@smithy/middleware-retry': 4.4.33 + '@smithy/middleware-endpoint': 4.4.14 + '@smithy/middleware-retry': 4.4.31 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.10 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.5 + '@smithy/smithy-client': 4.11.3 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.32 - '@smithy/util-defaults-mode-node': 4.2.35 + '@smithy/util-defaults-mode-browser': 4.3.30 + '@smithy/util-defaults-mode-node': 4.2.33 '@smithy/util-endpoints': 3.2.8 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -11499,41 +11268,41 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.993.0': + '@aws-sdk/client-sso@3.988.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.11 + '@aws-sdk/core': 3.973.8 '@aws-sdk/middleware-host-header': 3.972.3 '@aws-sdk/middleware-logger': 3.972.3 '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.11 + '@aws-sdk/middleware-user-agent': 3.972.8 '@aws-sdk/region-config-resolver': 3.972.3 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.993.0 + '@aws-sdk/util-endpoints': 3.988.0 '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.10 + '@aws-sdk/util-user-agent-node': 3.972.6 '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.2 + '@smithy/core': 3.23.0 '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.2.8 '@smithy/invalid-dependency': 4.2.8 '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.16 - '@smithy/middleware-retry': 4.4.33 + '@smithy/middleware-endpoint': 4.4.14 + '@smithy/middleware-retry': 4.4.31 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.10 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.5 + '@smithy/smithy-client': 4.11.3 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.32 - '@smithy/util-defaults-mode-node': 4.2.35 + '@smithy/util-defaults-mode-browser': 4.3.30 + '@smithy/util-defaults-mode-node': 4.2.33 '@smithy/util-endpoints': 3.2.8 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -11542,16 +11311,16 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.973.11': + '@aws-sdk/core@3.973.8': dependencies: '@aws-sdk/types': 3.973.1 - '@aws-sdk/xml-builder': 3.972.5 - '@smithy/core': 3.23.2 + '@aws-sdk/xml-builder': 3.972.4 + '@smithy/core': 3.23.0 '@smithy/node-config-provider': 4.3.8 '@smithy/property-provider': 4.2.8 '@smithy/protocol-http': 5.3.8 '@smithy/signature-v4': 5.3.8 - '@smithy/smithy-client': 4.11.5 + '@smithy/smithy-client': 4.11.3 '@smithy/types': 4.12.0 '@smithy/util-base64': 4.3.0 '@smithy/util-middleware': 4.2.8 @@ -11563,37 +11332,37 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.9': + '@aws-sdk/credential-provider-env@3.972.6': dependencies: - '@aws-sdk/core': 3.973.11 + '@aws-sdk/core': 3.973.8 '@aws-sdk/types': 3.973.1 '@smithy/property-provider': 4.2.8 '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.11': + '@aws-sdk/credential-provider-http@3.972.8': dependencies: - '@aws-sdk/core': 3.973.11 + '@aws-sdk/core': 3.973.8 '@aws-sdk/types': 3.973.1 '@smithy/fetch-http-handler': 5.3.9 '@smithy/node-http-handler': 4.4.10 '@smithy/property-provider': 4.2.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.5 + '@smithy/smithy-client': 4.11.3 '@smithy/types': 4.12.0 '@smithy/util-stream': 4.5.12 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.972.9': + '@aws-sdk/credential-provider-ini@3.972.6': dependencies: - '@aws-sdk/core': 3.973.11 - '@aws-sdk/credential-provider-env': 3.972.9 - '@aws-sdk/credential-provider-http': 3.972.11 - '@aws-sdk/credential-provider-login': 3.972.9 - '@aws-sdk/credential-provider-process': 3.972.9 - '@aws-sdk/credential-provider-sso': 3.972.9 - '@aws-sdk/credential-provider-web-identity': 3.972.9 - '@aws-sdk/nested-clients': 3.993.0 + '@aws-sdk/core': 3.973.8 + '@aws-sdk/credential-provider-env': 3.972.6 + '@aws-sdk/credential-provider-http': 3.972.8 + '@aws-sdk/credential-provider-login': 3.972.6 + '@aws-sdk/credential-provider-process': 3.972.6 + '@aws-sdk/credential-provider-sso': 3.972.6 + '@aws-sdk/credential-provider-web-identity': 3.972.6 + '@aws-sdk/nested-clients': 3.988.0 '@aws-sdk/types': 3.973.1 '@smithy/credential-provider-imds': 4.2.8 '@smithy/property-provider': 4.2.8 @@ -11603,10 +11372,10 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-login@3.972.9': + '@aws-sdk/credential-provider-login@3.972.6': dependencies: - '@aws-sdk/core': 3.973.11 - '@aws-sdk/nested-clients': 3.993.0 + '@aws-sdk/core': 3.973.8 + '@aws-sdk/nested-clients': 3.988.0 '@aws-sdk/types': 3.973.1 '@smithy/property-provider': 4.2.8 '@smithy/protocol-http': 5.3.8 @@ -11616,14 +11385,14 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.972.10': + '@aws-sdk/credential-provider-node@3.972.7': dependencies: - '@aws-sdk/credential-provider-env': 3.972.9 - '@aws-sdk/credential-provider-http': 3.972.11 - '@aws-sdk/credential-provider-ini': 3.972.9 - '@aws-sdk/credential-provider-process': 3.972.9 - '@aws-sdk/credential-provider-sso': 3.972.9 - '@aws-sdk/credential-provider-web-identity': 3.972.9 + '@aws-sdk/credential-provider-env': 3.972.6 + '@aws-sdk/credential-provider-http': 3.972.8 + '@aws-sdk/credential-provider-ini': 3.972.6 + '@aws-sdk/credential-provider-process': 3.972.6 + '@aws-sdk/credential-provider-sso': 3.972.6 + '@aws-sdk/credential-provider-web-identity': 3.972.6 '@aws-sdk/types': 3.973.1 '@smithy/credential-provider-imds': 4.2.8 '@smithy/property-provider': 4.2.8 @@ -11633,20 +11402,20 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-process@3.972.9': + '@aws-sdk/credential-provider-process@3.972.6': dependencies: - '@aws-sdk/core': 3.973.11 + '@aws-sdk/core': 3.973.8 '@aws-sdk/types': 3.973.1 '@smithy/property-provider': 4.2.8 '@smithy/shared-ini-file-loader': 4.4.3 '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.972.9': + '@aws-sdk/credential-provider-sso@3.972.6': dependencies: - '@aws-sdk/client-sso': 3.993.0 - '@aws-sdk/core': 3.973.11 - '@aws-sdk/token-providers': 3.993.0 + '@aws-sdk/client-sso': 3.988.0 + '@aws-sdk/core': 3.973.8 + '@aws-sdk/token-providers': 3.988.0 '@aws-sdk/types': 3.973.1 '@smithy/property-provider': 4.2.8 '@smithy/shared-ini-file-loader': 4.4.3 @@ -11655,10 +11424,10 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.972.9': + '@aws-sdk/credential-provider-web-identity@3.972.6': dependencies: - '@aws-sdk/core': 3.973.11 - '@aws-sdk/nested-clients': 3.993.0 + '@aws-sdk/core': 3.973.8 + '@aws-sdk/nested-clients': 3.988.0 '@aws-sdk/types': 3.973.1 '@smithy/property-provider': 4.2.8 '@smithy/shared-ini-file-loader': 4.4.3 @@ -11684,12 +11453,12 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/middleware-flexible-checksums@3.972.9': + '@aws-sdk/middleware-flexible-checksums@3.972.6': dependencies: '@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32c': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.973.11 + '@aws-sdk/core': 3.973.8 '@aws-sdk/crc64-nvme': 3.972.0 '@aws-sdk/types': 3.973.1 '@smithy/is-array-buffer': 4.2.0 @@ -11728,16 +11497,16 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.972.11': + '@aws-sdk/middleware-sdk-s3@3.972.8': dependencies: - '@aws-sdk/core': 3.973.11 + '@aws-sdk/core': 3.973.8 '@aws-sdk/types': 3.973.1 '@aws-sdk/util-arn-parser': 3.972.2 - '@smithy/core': 3.23.2 + '@smithy/core': 3.23.0 '@smithy/node-config-provider': 4.3.8 '@smithy/protocol-http': 5.3.8 '@smithy/signature-v4': 5.3.8 - '@smithy/smithy-client': 4.11.5 + '@smithy/smithy-client': 4.11.3 '@smithy/types': 4.12.0 '@smithy/util-config-provider': 4.2.0 '@smithy/util-middleware': 4.2.8 @@ -11751,51 +11520,51 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.972.11': + '@aws-sdk/middleware-user-agent@3.972.8': dependencies: - '@aws-sdk/core': 3.973.11 + '@aws-sdk/core': 3.973.8 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.993.0 - '@smithy/core': 3.23.2 + '@aws-sdk/util-endpoints': 3.988.0 + '@smithy/core': 3.23.0 '@smithy/protocol-http': 5.3.8 '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.993.0': + '@aws-sdk/nested-clients@3.988.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.11 + '@aws-sdk/core': 3.973.8 '@aws-sdk/middleware-host-header': 3.972.3 '@aws-sdk/middleware-logger': 3.972.3 '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.11 + '@aws-sdk/middleware-user-agent': 3.972.8 '@aws-sdk/region-config-resolver': 3.972.3 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.993.0 + '@aws-sdk/util-endpoints': 3.988.0 '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.10 + '@aws-sdk/util-user-agent-node': 3.972.6 '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.2 + '@smithy/core': 3.23.0 '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.2.8 '@smithy/invalid-dependency': 4.2.8 '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.16 - '@smithy/middleware-retry': 4.4.33 + '@smithy/middleware-endpoint': 4.4.14 + '@smithy/middleware-retry': 4.4.31 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.10 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.5 + '@smithy/smithy-client': 4.11.3 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.32 - '@smithy/util-defaults-mode-node': 4.2.35 + '@smithy/util-defaults-mode-browser': 4.3.30 + '@smithy/util-defaults-mode-node': 4.2.33 '@smithy/util-endpoints': 3.2.8 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -11812,19 +11581,19 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.995.0': + '@aws-sdk/signature-v4-multi-region@3.988.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.972.11 + '@aws-sdk/middleware-sdk-s3': 3.972.8 '@aws-sdk/types': 3.973.1 '@smithy/protocol-http': 5.3.8 '@smithy/signature-v4': 5.3.8 '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.993.0': + '@aws-sdk/token-providers@3.988.0': dependencies: - '@aws-sdk/core': 3.973.11 - '@aws-sdk/nested-clients': 3.993.0 + '@aws-sdk/core': 3.973.8 + '@aws-sdk/nested-clients': 3.988.0 '@aws-sdk/types': 3.973.1 '@smithy/property-provider': 4.2.8 '@smithy/shared-ini-file-loader': 4.4.3 @@ -11842,15 +11611,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.993.0': - dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-endpoints': 3.2.8 - tslib: 2.8.1 - - '@aws-sdk/util-endpoints@3.995.0': + '@aws-sdk/util-endpoints@3.988.0': dependencies: '@aws-sdk/types': 3.973.1 '@smithy/types': 4.12.0 @@ -11869,18 +11630,18 @@ snapshots: bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.972.10': + '@aws-sdk/util-user-agent-node@3.972.6': dependencies: - '@aws-sdk/middleware-user-agent': 3.972.11 + '@aws-sdk/middleware-user-agent': 3.972.8 '@aws-sdk/types': 3.973.1 '@smithy/node-config-provider': 4.3.8 '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.5': + '@aws-sdk/xml-builder@3.972.4': dependencies: '@smithy/types': 4.12.0 - fast-xml-parser: 5.3.6 + fast-xml-parser: 5.3.4 tslib: 2.8.1 '@aws/lambda-invoke-store@0.2.3': {} @@ -11916,7 +11677,7 @@ snapshots: '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 - '@typespec/ts-http-runtime': 0.3.3 + '@typespec/ts-http-runtime': 0.3.2 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -11928,7 +11689,7 @@ snapshots: '@azure/core-util@1.13.1': dependencies: '@azure/abort-controller': 2.1.2 - '@typespec/ts-http-runtime': 0.3.3 + '@typespec/ts-http-runtime': 0.3.2 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -11942,8 +11703,8 @@ snapshots: '@azure/core-tracing': 1.3.1 '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 - '@azure/msal-browser': 4.28.2 - '@azure/msal-node': 3.8.7 + '@azure/msal-browser': 4.28.1 + '@azure/msal-node': 3.8.6 open: 10.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -11951,20 +11712,20 @@ snapshots: '@azure/logger@1.3.0': dependencies: - '@typespec/ts-http-runtime': 0.3.3 + '@typespec/ts-http-runtime': 0.3.2 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/msal-browser@4.28.2': + '@azure/msal-browser@4.28.1': dependencies: - '@azure/msal-common': 15.14.2 + '@azure/msal-common': 15.14.1 - '@azure/msal-common@15.14.2': {} + '@azure/msal-common@15.14.1': {} - '@azure/msal-node@3.8.7': + '@azure/msal-node@3.8.6': dependencies: - '@azure/msal-common': 15.14.2 + '@azure/msal-common': 15.14.1 jsonwebtoken: 9.0.3 uuid: 8.3.2 @@ -12086,14 +11847,14 @@ snapshots: '@canvas/image-data@1.1.0': {} - '@clack/core@1.0.1': + '@clack/core@1.0.0': dependencies: picocolors: 1.1.1 sisteransi: 1.0.5 - '@clack/prompts@1.0.1': + '@clack/prompts@1.0.0': dependencies: - '@clack/core': 1.0.1 + '@clack/core': 1.0.0 picocolors: 1.1.1 sisteransi: 1.0.5 @@ -12121,7 +11882,7 @@ snapshots: '@commitlint/config-validator@19.8.1': dependencies: '@commitlint/types': 19.8.1 - ajv: 8.18.0 + ajv: 8.17.1 '@commitlint/ensure@19.8.1': dependencies: @@ -12142,7 +11903,7 @@ snapshots: '@commitlint/is-ignored@19.8.1': dependencies: '@commitlint/types': 19.8.1 - semver: 7.7.4 + semver: 7.7.3 '@commitlint/lint@19.8.1': dependencies: @@ -12218,27 +11979,27 @@ snapshots: dependencies: vue: 3.5.25(typescript@5.9.3) - '@csstools/color-helpers@6.0.1': {} + '@csstools/color-helpers@5.1.0': {} - '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.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)': dependencies: - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-color-parser@4.0.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: - '@csstools/color-helpers': 6.0.1 - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 + '@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) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': dependencies: - '@csstools/css-tokenizer': 4.0.0 + '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-syntax-patches-for-csstree@1.0.27': {} + '@csstools/css-syntax-patches-for-csstree@1.0.26': {} - '@csstools/css-tokenizer@4.0.0': {} + '@csstools/css-tokenizer@3.0.4': {} '@cypress/request@3.0.9': dependencies: @@ -12282,7 +12043,7 @@ snapshots: '@es-joy/jsdoccomment@0.56.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/types': 8.54.0 comment-parser: 1.4.1 esquery: 1.7.0 jsdoc-type-pratt-parser: 5.1.1 @@ -12290,162 +12051,162 @@ snapshots: '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/aix-ppc64@0.27.3': + '@esbuild/aix-ppc64@0.27.2': optional: true '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm64@0.27.3': + '@esbuild/android-arm64@0.27.2': optional: true '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-arm@0.27.3': + '@esbuild/android-arm@0.27.2': optional: true '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/android-x64@0.27.3': + '@esbuild/android-x64@0.27.2': optional: true '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.27.3': + '@esbuild/darwin-arm64@0.27.2': optional: true '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/darwin-x64@0.27.3': + '@esbuild/darwin-x64@0.27.2': optional: true '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.27.3': + '@esbuild/freebsd-arm64@0.27.2': optional: true '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.27.3': + '@esbuild/freebsd-x64@0.27.2': optional: true '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm64@0.27.3': + '@esbuild/linux-arm64@0.27.2': optional: true '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-arm@0.27.3': + '@esbuild/linux-arm@0.27.2': optional: true '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-ia32@0.27.3': + '@esbuild/linux-ia32@0.27.2': optional: true '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-loong64@0.27.3': + '@esbuild/linux-loong64@0.27.2': optional: true '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-mips64el@0.27.3': + '@esbuild/linux-mips64el@0.27.2': optional: true '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-ppc64@0.27.3': + '@esbuild/linux-ppc64@0.27.2': optional: true '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.27.3': + '@esbuild/linux-riscv64@0.27.2': optional: true '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-s390x@0.27.3': + '@esbuild/linux-s390x@0.27.2': optional: true '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/linux-x64@0.27.3': + '@esbuild/linux-x64@0.27.2': optional: true '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.27.3': + '@esbuild/netbsd-arm64@0.27.2': optional: true '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.27.3': + '@esbuild/netbsd-x64@0.27.2': optional: true '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.27.3': + '@esbuild/openbsd-arm64@0.27.2': optional: true '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.27.3': + '@esbuild/openbsd-x64@0.27.2': optional: true '@esbuild/openharmony-arm64@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.27.3': + '@esbuild/openharmony-arm64@0.27.2': optional: true '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/sunos-x64@0.27.3': + '@esbuild/sunos-x64@0.27.2': optional: true '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-arm64@0.27.3': + '@esbuild/win32-arm64@0.27.2': optional: true '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-ia32@0.27.3': + '@esbuild/win32-ia32@0.27.2': optional: true '@esbuild/win32-x64@0.25.12': optional: true - '@esbuild/win32-x64@0.27.3': + '@esbuild/win32-x64@0.27.2': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.3(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': dependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -12468,7 +12229,7 @@ snapshots: '@eslint/eslintrc@3.3.3': dependencies: - ajv: 6.14.0 + ajv: 6.12.6 debug: 4.4.3(supports-color@5.5.0) espree: 10.4.0 globals: 14.0.0 @@ -12480,7 +12241,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.39.3': {} + '@eslint/js@9.39.2': {} '@eslint/object-schema@2.1.7': {} @@ -12506,12 +12267,6 @@ snapshots: '@floating-ui/utils@0.2.10': {} - '@fontsource/inter@5.2.8': {} - - '@graphql-typed-document-node/core@3.2.0(graphql@15.10.1)': - dependencies: - graphql: 15.10.1 - '@hocuspocus/common@2.15.3': dependencies: lib0: 0.2.117 @@ -12553,405 +12308,318 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@img/colour@1.0.0': {} + '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 optional: true + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + 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.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + '@img/sharp-libvips-darwin-arm64@1.0.4': optional: true - '@img/sharp-libvips-darwin-x64@1.0.4': + '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm64@1.0.4': + '@img/sharp-libvips-darwin-x64@1.0.4': optional: true - '@img/sharp-libvips-linux-arm@1.0.5': + '@img/sharp-libvips-darwin-x64@1.2.4': optional: true - '@img/sharp-libvips-linux-s390x@1.0.4': + '@img/sharp-libvips-linux-arm64@1.0.4': optional: true - '@img/sharp-libvips-linux-x64@1.0.4': + '@img/sharp-libvips-linux-arm64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + '@img/sharp-libvips-linux-arm@1.0.5': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.4': + '@img/sharp-libvips-linux-arm@1.2.4': optional: true - '@img/sharp-linux-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true - '@img/sharp-linux-arm@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true - '@img/sharp-linux-s390x@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-s390x@1.0.4': optional: true - '@img/sharp-linux-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linux-s390x@1.2.4': optional: true - '@img/sharp-linuxmusl-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linux-x64@1.0.4': optional: true - '@img/sharp-linuxmusl-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-libvips-linux-x64@1.2.4': optional: true - '@img/sharp-wasm32@0.33.5': - dependencies: - '@emnapi/runtime': 1.8.1 + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': optional: true - '@img/sharp-win32-ia32@0.33.5': + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true - '@img/sharp-win32-x64@0.33.5': + '@img/sharp-libvips-linuxmusl-x64@1.0.4': optional: true - '@inquirer/ansi@1.0.2': {} + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true - '@inquirer/checkbox@4.3.2(@types/node@25.3.0)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.3.0) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.3.0) - yoctocolors-cjs: 2.1.3 + '@img/sharp-linux-arm64@0.33.5': optionalDependencies: - '@types/node': 25.3.0 + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true - '@inquirer/confirm@5.1.21(@types/node@25.3.0)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.0) - '@inquirer/type': 3.0.10(@types/node@25.3.0) + '@img/sharp-linux-arm64@0.34.5': optionalDependencies: - '@types/node': 25.3.0 + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true - '@inquirer/core@10.3.2(@types/node@25.3.0)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.3.0) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 + '@img/sharp-linux-arm@0.33.5': optionalDependencies: - '@types/node': 25.3.0 + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true - '@inquirer/editor@4.2.23(@types/node@25.3.0)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.0) - '@inquirer/external-editor': 1.0.3(@types/node@25.3.0) - '@inquirer/type': 3.0.10(@types/node@25.3.0) + '@img/sharp-linux-arm@0.34.5': optionalDependencies: - '@types/node': 25.3.0 + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true - '@inquirer/expand@4.0.23(@types/node@25.3.0)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.0) - '@inquirer/type': 3.0.10(@types/node@25.3.0) - yoctocolors-cjs: 2.1.3 + '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: - '@types/node': 25.3.0 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true - '@inquirer/external-editor@1.0.3(@types/node@25.3.0)': - dependencies: - chardet: 2.1.1 - iconv-lite: 0.7.2 + '@img/sharp-linux-riscv64@0.34.5': optionalDependencies: - '@types/node': 25.3.0 - - '@inquirer/figures@1.0.15': {} + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true - '@inquirer/input@4.3.1(@types/node@25.3.0)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.0) - '@inquirer/type': 3.0.10(@types/node@25.3.0) + '@img/sharp-linux-s390x@0.33.5': optionalDependencies: - '@types/node': 25.3.0 + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true - '@inquirer/number@3.0.23(@types/node@25.3.0)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.0) - '@inquirer/type': 3.0.10(@types/node@25.3.0) + '@img/sharp-linux-s390x@0.34.5': optionalDependencies: - '@types/node': 25.3.0 + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true - '@inquirer/password@4.0.23(@types/node@25.3.0)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.3.0) - '@inquirer/type': 3.0.10(@types/node@25.3.0) - optionalDependencies: - '@types/node': 25.3.0 - - '@inquirer/prompts@7.9.0(@types/node@25.3.0)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@25.3.0) - '@inquirer/confirm': 5.1.21(@types/node@25.3.0) - '@inquirer/editor': 4.2.23(@types/node@25.3.0) - '@inquirer/expand': 4.0.23(@types/node@25.3.0) - '@inquirer/input': 4.3.1(@types/node@25.3.0) - '@inquirer/number': 3.0.23(@types/node@25.3.0) - '@inquirer/password': 4.0.23(@types/node@25.3.0) - '@inquirer/rawlist': 4.1.11(@types/node@25.3.0) - '@inquirer/search': 3.2.2(@types/node@25.3.0) - '@inquirer/select': 4.4.2(@types/node@25.3.0) + '@img/sharp-linux-x64@0.33.5': optionalDependencies: - '@types/node': 25.3.0 + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true - '@inquirer/rawlist@4.1.11(@types/node@25.3.0)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.0) - '@inquirer/type': 3.0.10(@types/node@25.3.0) - yoctocolors-cjs: 2.1.3 + '@img/sharp-linux-x64@0.34.5': optionalDependencies: - '@types/node': 25.3.0 + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true - '@inquirer/search@3.2.2(@types/node@25.3.0)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.0) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.3.0) - yoctocolors-cjs: 2.1.3 + '@img/sharp-linuxmusl-arm64@0.33.5': optionalDependencies: - '@types/node': 25.3.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true - '@inquirer/select@4.4.2(@types/node@25.3.0)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.3.0) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.3.0) - yoctocolors-cjs: 2.1.3 + '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: - '@types/node': 25.3.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true - '@inquirer/type@3.0.10(@types/node@25.3.0)': + '@img/sharp-linuxmusl-x64@0.33.5': optionalDependencies: - '@types/node': 25.3.0 - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@istanbuljs/schema@0.1.3': {} + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true - '@jimp/core@1.6.0': - dependencies: - '@jimp/file-ops': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - await-to-js: 3.0.0 - exif-parser: 0.1.12 - file-type: 16.5.4 - mime: 3.0.0 + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true - '@jimp/diff@1.6.0': + '@img/sharp-wasm32@0.33.5': dependencies: - '@jimp/plugin-resize': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - pixelmatch: 5.3.0 - - '@jimp/file-ops@1.6.0': {} + '@emnapi/runtime': 1.8.1 + optional: true - '@jimp/js-bmp@1.6.0': + '@img/sharp-wasm32@0.34.5': dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - bmp-ts: 1.0.9 + '@emnapi/runtime': 1.8.1 + optional: true - '@jimp/js-gif@1.6.0': - dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - gifwrap: 0.10.1 - omggif: 1.0.10 + '@img/sharp-win32-arm64@0.34.5': + optional: true - '@jimp/js-jpeg@1.6.0': - dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - jpeg-js: 0.4.4 + '@img/sharp-win32-ia32@0.33.5': + optional: true - '@jimp/js-png@1.6.0': - dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - pngjs: 7.0.0 + '@img/sharp-win32-ia32@0.34.5': + optional: true - '@jimp/js-tiff@1.6.0': - dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - utif2: 4.1.0 + '@img/sharp-win32-x64@0.33.5': + optional: true - '@jimp/plugin-blit@1.6.0': - dependencies: - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - zod: 3.25.76 + '@img/sharp-win32-x64@0.34.5': + optional: true - '@jimp/plugin-blur@1.6.0': - dependencies: - '@jimp/core': 1.6.0 - '@jimp/utils': 1.6.0 + '@inquirer/ansi@1.0.2': {} - '@jimp/plugin-circle@1.6.0': + '@inquirer/checkbox@4.3.2(@types/node@22.19.8)': dependencies: - '@jimp/types': 1.6.0 - zod: 3.25.76 + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@22.19.8) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.19.8) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.19.8 - '@jimp/plugin-color@1.6.0': + '@inquirer/confirm@5.1.21(@types/node@22.19.8)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - tinycolor2: 1.6.0 - zod: 3.25.76 + '@inquirer/core': 10.3.2(@types/node@22.19.8) + '@inquirer/type': 3.0.10(@types/node@22.19.8) + optionalDependencies: + '@types/node': 22.19.8 - '@jimp/plugin-contain@1.6.0': + '@inquirer/core@10.3.2(@types/node@22.19.8)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/plugin-blit': 1.6.0 - '@jimp/plugin-resize': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - zod: 3.25.76 + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.19.8) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.19.8 - '@jimp/plugin-cover@1.6.0': + '@inquirer/editor@4.2.23(@types/node@22.19.8)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/plugin-crop': 1.6.0 - '@jimp/plugin-resize': 1.6.0 - '@jimp/types': 1.6.0 - zod: 3.25.76 + '@inquirer/core': 10.3.2(@types/node@22.19.8) + '@inquirer/external-editor': 1.0.3(@types/node@22.19.8) + '@inquirer/type': 3.0.10(@types/node@22.19.8) + optionalDependencies: + '@types/node': 22.19.8 - '@jimp/plugin-crop@1.6.0': + '@inquirer/expand@4.0.23(@types/node@22.19.8)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - zod: 3.25.76 + '@inquirer/core': 10.3.2(@types/node@22.19.8) + '@inquirer/type': 3.0.10(@types/node@22.19.8) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.19.8 - '@jimp/plugin-displace@1.6.0': + '@inquirer/external-editor@1.0.3(@types/node@22.19.8)': dependencies: - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - zod: 3.25.76 + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 22.19.8 - '@jimp/plugin-dither@1.6.0': - dependencies: - '@jimp/types': 1.6.0 + '@inquirer/figures@1.0.15': {} - '@jimp/plugin-fisheye@1.6.0': + '@inquirer/input@4.3.1(@types/node@22.19.8)': dependencies: - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - zod: 3.25.76 + '@inquirer/core': 10.3.2(@types/node@22.19.8) + '@inquirer/type': 3.0.10(@types/node@22.19.8) + optionalDependencies: + '@types/node': 22.19.8 - '@jimp/plugin-flip@1.6.0': + '@inquirer/number@3.0.23(@types/node@22.19.8)': dependencies: - '@jimp/types': 1.6.0 - zod: 3.25.76 + '@inquirer/core': 10.3.2(@types/node@22.19.8) + '@inquirer/type': 3.0.10(@types/node@22.19.8) + optionalDependencies: + '@types/node': 22.19.8 - '@jimp/plugin-hash@1.6.0': + '@inquirer/password@4.0.23(@types/node@22.19.8)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/js-bmp': 1.6.0 - '@jimp/js-jpeg': 1.6.0 - '@jimp/js-png': 1.6.0 - '@jimp/js-tiff': 1.6.0 - '@jimp/plugin-color': 1.6.0 - '@jimp/plugin-resize': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - any-base: 1.1.0 + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@22.19.8) + '@inquirer/type': 3.0.10(@types/node@22.19.8) + optionalDependencies: + '@types/node': 22.19.8 + + '@inquirer/prompts@7.9.0(@types/node@22.19.8)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@22.19.8) + '@inquirer/confirm': 5.1.21(@types/node@22.19.8) + '@inquirer/editor': 4.2.23(@types/node@22.19.8) + '@inquirer/expand': 4.0.23(@types/node@22.19.8) + '@inquirer/input': 4.3.1(@types/node@22.19.8) + '@inquirer/number': 3.0.23(@types/node@22.19.8) + '@inquirer/password': 4.0.23(@types/node@22.19.8) + '@inquirer/rawlist': 4.1.11(@types/node@22.19.8) + '@inquirer/search': 3.2.2(@types/node@22.19.8) + '@inquirer/select': 4.4.2(@types/node@22.19.8) + optionalDependencies: + '@types/node': 22.19.8 - '@jimp/plugin-mask@1.6.0': + '@inquirer/rawlist@4.1.11(@types/node@22.19.8)': dependencies: - '@jimp/types': 1.6.0 - zod: 3.25.76 + '@inquirer/core': 10.3.2(@types/node@22.19.8) + '@inquirer/type': 3.0.10(@types/node@22.19.8) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.19.8 - '@jimp/plugin-print@1.6.0': + '@inquirer/search@3.2.2(@types/node@22.19.8)': dependencies: - '@jimp/core': 1.6.0 - '@jimp/js-jpeg': 1.6.0 - '@jimp/js-png': 1.6.0 - '@jimp/plugin-blit': 1.6.0 - '@jimp/types': 1.6.0 - parse-bmfont-ascii: 1.0.6 - parse-bmfont-binary: 1.0.6 - parse-bmfont-xml: 1.1.6 - simple-xml-to-json: 1.2.3 - zod: 3.25.76 + '@inquirer/core': 10.3.2(@types/node@22.19.8) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.19.8) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.19.8 - '@jimp/plugin-quantize@1.6.0': + '@inquirer/select@4.4.2(@types/node@22.19.8)': dependencies: - image-q: 4.0.0 - zod: 3.25.76 + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@22.19.8) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.19.8) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.19.8 - '@jimp/plugin-resize@1.6.0': - dependencies: - '@jimp/core': 1.6.0 - '@jimp/types': 1.6.0 - zod: 3.25.76 + '@inquirer/type@3.0.10(@types/node@22.19.8)': + optionalDependencies: + '@types/node': 22.19.8 - '@jimp/plugin-rotate@1.6.0': - dependencies: - '@jimp/core': 1.6.0 - '@jimp/plugin-crop': 1.6.0 - '@jimp/plugin-resize': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - zod: 3.25.76 + '@isaacs/balanced-match@4.0.1': {} - '@jimp/plugin-threshold@1.6.0': + '@isaacs/brace-expansion@5.0.1': dependencies: - '@jimp/core': 1.6.0 - '@jimp/plugin-color': 1.6.0 - '@jimp/plugin-hash': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - zod: 3.25.76 + '@isaacs/balanced-match': 4.0.1 - '@jimp/types@1.6.0': + '@isaacs/cliui@8.0.2': dependencies: - zod: 3.25.76 + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.2 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jimp/utils@1.6.0': - dependencies: - '@jimp/types': 1.6.0 - tinycolor2: 1.6.0 + '@istanbuljs/schema@0.1.3': {} '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -12990,21 +12658,13 @@ snapshots: '@lifeomic/attempt@3.1.0': {} - '@linear/sdk@53.0.0': - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@15.10.1) - graphql: 15.10.1 - isomorphic-unfetch: 3.1.0 - transitivePeerDependencies: - - encoding - '@mdx-js/mdx@3.1.1': dependencies: '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdx': 2.0.13 - acorn: 8.16.0 + acorn: 8.15.0 collapse-white-space: 2.1.0 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 @@ -13013,12 +12673,12 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.16.0) + recma-jsx: 1.0.1(acorn@8.15.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 remark-mdx: 3.1.1 remark-parse: 11.0.0 - remark-rehype: 11.1.2 + remark-rehype: 11.1.1 source-map: 0.7.6 unified: 11.0.5 unist-util-position-from-estree: 2.0.0 @@ -13028,40 +12688,40 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.3)': + '@mdx-js/react@3.1.1(@types/react@19.2.11)(react@19.2.3)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.2.14 + '@types/react': 19.2.11 react: 19.2.3 - '@microsoft/api-extractor-model@7.33.1(@types/node@22.19.2)': + '@microsoft/api-extractor-model@7.32.2(@types/node@22.19.2)': dependencies: '@microsoft/tsdoc': 0.16.0 '@microsoft/tsdoc-config': 0.18.0 - '@rushstack/node-core-library': 5.20.1(@types/node@22.19.2) + '@rushstack/node-core-library': 5.19.1(@types/node@22.19.2) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor-model@7.33.1(@types/node@25.3.0)': + '@microsoft/api-extractor-model@7.32.2(@types/node@22.19.8)': dependencies: '@microsoft/tsdoc': 0.16.0 '@microsoft/tsdoc-config': 0.18.0 - '@rushstack/node-core-library': 5.20.1(@types/node@25.3.0) + '@rushstack/node-core-library': 5.19.1(@types/node@22.19.8) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.57.2(@types/node@22.19.2)': + '@microsoft/api-extractor@7.56.1(@types/node@22.19.2)': dependencies: - '@microsoft/api-extractor-model': 7.33.1(@types/node@22.19.2) + '@microsoft/api-extractor-model': 7.32.2(@types/node@22.19.2) '@microsoft/tsdoc': 0.16.0 '@microsoft/tsdoc-config': 0.18.0 - '@rushstack/node-core-library': 5.20.1(@types/node@22.19.2) - '@rushstack/rig-package': 0.7.1 - '@rushstack/terminal': 0.22.1(@types/node@22.19.2) - '@rushstack/ts-command-line': 5.3.1(@types/node@22.19.2) + '@rushstack/node-core-library': 5.19.1(@types/node@22.19.2) + '@rushstack/rig-package': 0.6.0 + '@rushstack/terminal': 0.21.0(@types/node@22.19.2) + '@rushstack/ts-command-line': 5.2.0(@types/node@22.19.2) diff: 8.0.3 lodash: 4.17.23 - minimatch: 10.2.1 + minimatch: 10.0.3 resolve: 1.22.11 semver: 7.5.4 source-map: 0.6.1 @@ -13069,18 +12729,18 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.57.2(@types/node@25.3.0)': + '@microsoft/api-extractor@7.56.1(@types/node@22.19.8)': dependencies: - '@microsoft/api-extractor-model': 7.33.1(@types/node@25.3.0) + '@microsoft/api-extractor-model': 7.32.2(@types/node@22.19.8) '@microsoft/tsdoc': 0.16.0 '@microsoft/tsdoc-config': 0.18.0 - '@rushstack/node-core-library': 5.20.1(@types/node@25.3.0) - '@rushstack/rig-package': 0.7.1 - '@rushstack/terminal': 0.22.1(@types/node@25.3.0) - '@rushstack/ts-command-line': 5.3.1(@types/node@25.3.0) + '@rushstack/node-core-library': 5.19.1(@types/node@22.19.8) + '@rushstack/rig-package': 0.6.0 + '@rushstack/terminal': 0.21.0(@types/node@22.19.8) + '@rushstack/ts-command-line': 5.2.0(@types/node@22.19.8) diff: 8.0.3 lodash: 4.17.23 - minimatch: 10.2.1 + minimatch: 10.0.3 resolve: 1.22.11 semver: 7.5.4 source-map: 0.6.1 @@ -13097,24 +12757,23 @@ snapshots: '@microsoft/tsdoc@0.16.0': {} - '@mintlify/cli@4.0.971(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@25.3.0)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3)': + '@mintlify/cli@4.0.935(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@22.19.8)(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3)': dependencies: - '@inquirer/prompts': 7.9.0(@types/node@25.3.0) - '@mintlify/common': 1.0.743(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/link-rot': 3.0.906(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/models': 0.0.273 - '@mintlify/prebuild': 1.0.880(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/previewing': 4.0.937(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) - '@mintlify/scraping': 4.0.605(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/validation': 0.1.602(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@inquirer/prompts': 7.9.0(@types/node@22.19.8) + '@mintlify/common': 1.0.713(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/link-rot': 3.0.872(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/models': 0.0.268 + '@mintlify/prebuild': 1.0.849(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/previewing': 4.0.905(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) + '@mintlify/validation': 0.1.585(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) adm-zip: 0.5.16 chalk: 5.2.0 color: 4.2.3 detect-port: 1.5.1 front-matter: 4.0.2 fs-extra: 11.2.0 - ink: 6.3.0(@types/react@19.2.14)(react@19.2.3) - inquirer: 12.3.0(@types/node@25.3.0) + ink: 6.3.0(@types/react@19.2.11)(react@19.2.3) + inquirer: 12.3.0(@types/node@22.19.8) js-yaml: 4.1.0 mdast-util-mdx-jsx: 3.2.0 react: 19.2.3 @@ -13138,13 +12797,13 @@ snapshots: - typescript - utf-8-validate - '@mintlify/common@1.0.661(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/common@1.0.661(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: '@asyncapi/parser': 3.4.0 - '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@mintlify/models': 0.0.255 '@mintlify/openapi-parser': 0.0.8 - '@mintlify/validation': 0.1.555(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/validation': 0.1.555(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@sindresorhus/slugify': 2.2.0 '@types/mdast': 4.0.4 acorn: 8.11.2 @@ -13198,14 +12857,14 @@ snapshots: - ts-node - typescript - '@mintlify/common@1.0.743(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/common@1.0.713(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: '@asyncapi/parser': 3.4.0 '@asyncapi/specs': 6.8.1 - '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/models': 0.0.273 + '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/models': 0.0.268 '@mintlify/openapi-parser': 0.0.8 - '@mintlify/validation': 0.1.602(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/validation': 0.1.585(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@sindresorhus/slugify': 2.2.0 '@types/mdast': 4.0.4 acorn: 8.11.2 @@ -13259,13 +12918,13 @@ snapshots: - ts-node - typescript - '@mintlify/link-rot@3.0.906(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/link-rot@3.0.872(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: - '@mintlify/common': 1.0.743(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/prebuild': 1.0.880(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/previewing': 4.0.937(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) - '@mintlify/scraping': 4.0.522(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/validation': 0.1.602(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/common': 1.0.713(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/prebuild': 1.0.849(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/previewing': 4.0.905(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) + '@mintlify/scraping': 4.0.522(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/validation': 0.1.585(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) fs-extra: 11.1.0 unist-util-visit: 4.1.2 transitivePeerDependencies: @@ -13285,18 +12944,18 @@ snapshots: - typescript - utf-8-validate - '@mintlify/mdx@3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/mdx@3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: - '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) '@shikijs/transformers': 3.22.0 '@shikijs/twoslash': 3.22.0(typescript@5.9.3) - arktype: 2.1.27 + arktype: 2.1.29 hast-util-to-string: 3.0.1 mdast-util-from-markdown: 2.0.2 mdast-util-gfm: 3.1.0 mdast-util-mdx-jsx: 3.2.0 mdast-util-to-hast: 13.2.1 - next-mdx-remote-client: 1.1.6(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(unified@11.0.5) + next-mdx-remote-client: 1.1.4(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(unified@11.0.5) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) rehype-katex: 7.0.1 @@ -13318,7 +12977,7 @@ snapshots: transitivePeerDependencies: - debug - '@mintlify/models@0.0.273': + '@mintlify/models@0.0.268': dependencies: axios: 1.13.2 openapi-types: 12.1.3 @@ -13327,19 +12986,19 @@ snapshots: '@mintlify/openapi-parser@0.0.8': dependencies: - ajv: 8.18.0 - ajv-draft-04: 1.0.0(ajv@8.18.0) - ajv-formats: 3.0.1(ajv@8.18.0) + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) + ajv-formats: 3.0.1(ajv@8.17.1) jsonpointer: 5.0.1 leven: 4.1.0 yaml: 2.8.2 - '@mintlify/prebuild@1.0.880(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/prebuild@1.0.849(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: - '@mintlify/common': 1.0.743(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/common': 1.0.713(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@mintlify/openapi-parser': 0.0.8 - '@mintlify/scraping': 4.0.605(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/validation': 0.1.602(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/scraping': 4.0.574(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/validation': 0.1.585(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) chalk: 5.3.0 favicons: 7.2.0 front-matter: 4.0.2 @@ -13366,11 +13025,11 @@ snapshots: - typescript - utf-8-validate - '@mintlify/previewing@4.0.937(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3)': + '@mintlify/previewing@4.0.905(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3)': dependencies: - '@mintlify/common': 1.0.743(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/prebuild': 1.0.880(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/validation': 0.1.602(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/common': 1.0.713(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/prebuild': 1.0.849(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/validation': 0.1.585(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) better-opn: 3.0.2 chalk: 5.2.0 chokidar: 3.5.3 @@ -13378,8 +13037,8 @@ snapshots: front-matter: 4.0.2 fs-extra: 11.1.0 got: 13.0.0 - ink: 6.3.0(@types/react@19.2.14)(react@19.2.3) - ink-spinner: 5.0.0(ink@6.3.0(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + ink: 6.3.0(@types/react@19.2.11)(react@19.2.3) + ink-spinner: 5.0.0(ink@6.3.0(@types/react@19.2.11)(react@19.2.3))(react@19.2.3) is-online: 10.0.0 js-yaml: 4.1.0 openapi-types: 12.1.3 @@ -13404,9 +13063,9 @@ snapshots: - typescript - utf-8-validate - '@mintlify/scraping@4.0.522(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/scraping@4.0.522(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: - '@mintlify/common': 1.0.661(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/common': 1.0.661(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@mintlify/openapi-parser': 0.0.8 fs-extra: 11.1.1 hast-util-to-mdast: 10.1.0 @@ -13439,9 +13098,9 @@ snapshots: - typescript - utf-8-validate - '@mintlify/scraping@4.0.605(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/scraping@4.0.574(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: - '@mintlify/common': 1.0.743(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/common': 1.0.713(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@mintlify/openapi-parser': 0.0.8 fs-extra: 11.1.1 hast-util-to-mdast: 10.1.0 @@ -13474,9 +13133,9 @@ snapshots: - typescript - utf-8-validate - '@mintlify/validation@0.1.555(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/validation@0.1.555(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: - '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@mintlify/models': 0.0.255 arktype: 2.1.27 js-yaml: 4.1.0 @@ -13496,10 +13155,10 @@ snapshots: - supports-color - typescript - '@mintlify/validation@0.1.602(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/validation@0.1.585(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': dependencies: - '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/models': 0.0.273 + '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/models': 0.0.268 arktype: 2.1.27 js-yaml: 4.1.0 lcm: 0.0.3 @@ -13518,52 +13177,52 @@ snapshots: - supports-color - typescript - '@napi-rs/canvas-android-arm64@0.1.94': + '@napi-rs/canvas-android-arm64@0.1.91': optional: true - '@napi-rs/canvas-darwin-arm64@0.1.94': + '@napi-rs/canvas-darwin-arm64@0.1.91': optional: true - '@napi-rs/canvas-darwin-x64@0.1.94': + '@napi-rs/canvas-darwin-x64@0.1.91': optional: true - '@napi-rs/canvas-linux-arm-gnueabihf@0.1.94': + '@napi-rs/canvas-linux-arm-gnueabihf@0.1.91': optional: true - '@napi-rs/canvas-linux-arm64-gnu@0.1.94': + '@napi-rs/canvas-linux-arm64-gnu@0.1.91': optional: true - '@napi-rs/canvas-linux-arm64-musl@0.1.94': + '@napi-rs/canvas-linux-arm64-musl@0.1.91': optional: true - '@napi-rs/canvas-linux-riscv64-gnu@0.1.94': + '@napi-rs/canvas-linux-riscv64-gnu@0.1.91': optional: true - '@napi-rs/canvas-linux-x64-gnu@0.1.94': + '@napi-rs/canvas-linux-x64-gnu@0.1.91': optional: true - '@napi-rs/canvas-linux-x64-musl@0.1.94': + '@napi-rs/canvas-linux-x64-musl@0.1.91': optional: true - '@napi-rs/canvas-win32-arm64-msvc@0.1.94': + '@napi-rs/canvas-win32-arm64-msvc@0.1.91': optional: true - '@napi-rs/canvas-win32-x64-msvc@0.1.94': + '@napi-rs/canvas-win32-x64-msvc@0.1.91': optional: true - '@napi-rs/canvas@0.1.94': + '@napi-rs/canvas@0.1.91': optionalDependencies: - '@napi-rs/canvas-android-arm64': 0.1.94 - '@napi-rs/canvas-darwin-arm64': 0.1.94 - '@napi-rs/canvas-darwin-x64': 0.1.94 - '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.94 - '@napi-rs/canvas-linux-arm64-gnu': 0.1.94 - '@napi-rs/canvas-linux-arm64-musl': 0.1.94 - '@napi-rs/canvas-linux-riscv64-gnu': 0.1.94 - '@napi-rs/canvas-linux-x64-gnu': 0.1.94 - '@napi-rs/canvas-linux-x64-musl': 0.1.94 - '@napi-rs/canvas-win32-arm64-msvc': 0.1.94 - '@napi-rs/canvas-win32-x64-msvc': 0.1.94 + '@napi-rs/canvas-android-arm64': 0.1.91 + '@napi-rs/canvas-darwin-arm64': 0.1.91 + '@napi-rs/canvas-darwin-x64': 0.1.91 + '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.91 + '@napi-rs/canvas-linux-arm64-gnu': 0.1.91 + '@napi-rs/canvas-linux-arm64-musl': 0.1.91 + '@napi-rs/canvas-linux-riscv64-gnu': 0.1.91 + '@napi-rs/canvas-linux-x64-gnu': 0.1.91 + '@napi-rs/canvas-linux-x64-musl': 0.1.91 + '@napi-rs/canvas-win32-arm64-msvc': 0.1.91 + '@napi-rs/canvas-win32-x64-msvc': 0.1.91 optional: true '@napi-rs/wasm-runtime@0.2.12': @@ -13598,20 +13257,20 @@ snapshots: dependencies: '@octokit/auth-token': 6.0.0 '@octokit/graphql': 9.0.3 - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.7 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 before-after-hook: 4.0.0 universal-user-agent: 7.0.3 - '@octokit/endpoint@11.0.3': + '@octokit/endpoint@11.0.2': dependencies: '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 '@octokit/graphql@9.0.3': dependencies: - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.7 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 @@ -13624,7 +13283,7 @@ snapshots: '@octokit/core': 7.0.6 '@octokit/types': 15.0.2 - '@octokit/plugin-retry@8.1.0(@octokit/core@7.0.6)': + '@octokit/plugin-retry@8.0.3(@octokit/core@7.0.6)': dependencies: '@octokit/core': 7.0.6 '@octokit/request-error': 7.1.0 @@ -13641,13 +13300,12 @@ snapshots: dependencies: '@octokit/types': 16.0.0 - '@octokit/request@10.0.8': + '@octokit/request@10.0.7': dependencies: - '@octokit/endpoint': 11.0.3 + '@octokit/endpoint': 11.0.2 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 fast-content-type-parse: 3.0.0 - json-with-bigint: 3.5.3 universal-user-agent: 7.0.3 '@octokit/types@15.0.2': @@ -13673,9 +13331,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.58.2': + '@playwright/test@1.58.1': dependencies: - playwright: 1.58.2 + playwright: 1.58.1 '@pnpm/config.env-replace@1.1.0': {} @@ -13697,7 +13355,7 @@ snapshots: extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 - semver: 7.7.2 + semver: 7.7.3 tar-fs: 3.1.1 unbzip2-stream: 1.4.3 yargs: 17.7.2 @@ -13709,188 +13367,188 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.11 + '@types/react-dom': 19.2.3(@types/react@19.2.11) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.3)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.11)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.3)': + '@radix-ui/react-context@1.1.2(@types/react@19.2.11)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.11)(react@19.2.3) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.11 + '@types/react-dom': 19.2.3(@types/react@19.2.11) - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.3)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.11)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.11)(react@19.2.3) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.11 + '@types/react-dom': 19.2.3(@types/react@19.2.11) - '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.3)': + '@radix-ui/react-id@1.1.1(@types/react@19.2.11)(react@19.2.3)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.11)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.11)(react@19.2.3) aria-hidden: 1.2.6 react: 19.2.3 react-dom: 19.2.4(react@19.2.3) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.3) + react-remove-scroll: 2.7.2(@types/react@19.2.11)(react@19.2.3) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.11 + '@types/react-dom': 19.2.3(@types/react@19.2.11) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.11)(react@19.2.3) '@radix-ui/rect': 1.1.1 react: 19.2.3 react-dom: 19.2.4(react@19.2.3) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.11 + '@types/react-dom': 19.2.3(@types/react@19.2.11) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.11)(react@19.2.3) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.11 + '@types/react-dom': 19.2.3(@types/react@19.2.11) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.11)(react@19.2.3) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.11 + '@types/react-dom': 19.2.3(@types/react@19.2.11) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.11)(react@19.2.3) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.11 + '@types/react-dom': 19.2.3(@types/react@19.2.11) - '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.3)': + '@radix-ui/react-slot@1.2.3(@types/react@19.2.11)(react@19.2.3)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.11)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.3)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.11)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.3)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.11)(react@19.2.3)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.11)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.11)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.3)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.11)(react@19.2.3)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.11)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.3)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.11)(react@19.2.3)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.11)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.3)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.11)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.3)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.11)(react@19.2.3)': dependencies: '@radix-ui/rect': 1.1.1 react: 19.2.3 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.3)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.11)(react@19.2.3)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.11)(react@19.2.3) react: 19.2.3 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 '@radix-ui/rect@1.1.1': {} @@ -13939,100 +13597,100 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.53': {} - '@rolldown/pluginutils@1.0.0-rc.3': {} + '@rolldown/pluginutils@1.0.0-rc.2': {} - '@rollup/plugin-inject@5.0.5(rollup@4.58.0)': + '@rollup/plugin-inject@5.0.5(rollup@4.57.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.58.0) + '@rollup/pluginutils': 5.3.0(rollup@4.57.1) estree-walker: 2.0.2 magic-string: 0.30.21 optionalDependencies: - rollup: 4.58.0 + rollup: 4.57.1 - '@rollup/pluginutils@5.3.0(rollup@4.58.0)': + '@rollup/pluginutils@5.3.0(rollup@4.57.1)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.58.0 + rollup: 4.57.1 - '@rollup/rollup-android-arm-eabi@4.58.0': + '@rollup/rollup-android-arm-eabi@4.57.1': optional: true - '@rollup/rollup-android-arm64@4.58.0': + '@rollup/rollup-android-arm64@4.57.1': optional: true - '@rollup/rollup-darwin-arm64@4.58.0': + '@rollup/rollup-darwin-arm64@4.57.1': optional: true - '@rollup/rollup-darwin-x64@4.58.0': + '@rollup/rollup-darwin-x64@4.57.1': optional: true - '@rollup/rollup-freebsd-arm64@4.58.0': + '@rollup/rollup-freebsd-arm64@4.57.1': optional: true - '@rollup/rollup-freebsd-x64@4.58.0': + '@rollup/rollup-freebsd-x64@4.57.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.58.0': + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.58.0': + '@rollup/rollup-linux-arm-musleabihf@4.57.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.58.0': + '@rollup/rollup-linux-arm64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.58.0': + '@rollup/rollup-linux-arm64-musl@4.57.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.58.0': + '@rollup/rollup-linux-loong64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-loong64-musl@4.58.0': + '@rollup/rollup-linux-loong64-musl@4.57.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.58.0': + '@rollup/rollup-linux-ppc64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-ppc64-musl@4.58.0': + '@rollup/rollup-linux-ppc64-musl@4.57.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.58.0': + '@rollup/rollup-linux-riscv64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.58.0': + '@rollup/rollup-linux-riscv64-musl@4.57.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.58.0': + '@rollup/rollup-linux-s390x-gnu@4.57.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.58.0': + '@rollup/rollup-linux-x64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-x64-musl@4.58.0': + '@rollup/rollup-linux-x64-musl@4.57.1': optional: true - '@rollup/rollup-openbsd-x64@4.58.0': + '@rollup/rollup-openbsd-x64@4.57.1': optional: true - '@rollup/rollup-openharmony-arm64@4.58.0': + '@rollup/rollup-openharmony-arm64@4.57.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.58.0': + '@rollup/rollup-win32-arm64-msvc@4.57.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.58.0': + '@rollup/rollup-win32-ia32-msvc@4.57.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.58.0': + '@rollup/rollup-win32-x64-gnu@4.57.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.58.0': + '@rollup/rollup-win32-x64-msvc@4.57.1': optional: true - '@rushstack/node-core-library@5.20.1(@types/node@22.19.2)': + '@rushstack/node-core-library@5.19.1(@types/node@22.19.2)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -14045,7 +13703,7 @@ snapshots: optionalDependencies: '@types/node': 22.19.2 - '@rushstack/node-core-library@5.20.1(@types/node@25.3.0)': + '@rushstack/node-core-library@5.19.1(@types/node@22.19.8)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -14056,49 +13714,49 @@ snapshots: resolve: 1.22.11 semver: 7.5.4 optionalDependencies: - '@types/node': 25.3.0 + '@types/node': 22.19.8 - '@rushstack/problem-matcher@0.2.1(@types/node@22.19.2)': + '@rushstack/problem-matcher@0.1.1(@types/node@22.19.2)': optionalDependencies: '@types/node': 22.19.2 - '@rushstack/problem-matcher@0.2.1(@types/node@25.3.0)': + '@rushstack/problem-matcher@0.1.1(@types/node@22.19.8)': optionalDependencies: - '@types/node': 25.3.0 + '@types/node': 22.19.8 - '@rushstack/rig-package@0.7.1': + '@rushstack/rig-package@0.6.0': dependencies: resolve: 1.22.11 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.22.1(@types/node@22.19.2)': + '@rushstack/terminal@0.21.0(@types/node@22.19.2)': dependencies: - '@rushstack/node-core-library': 5.20.1(@types/node@22.19.2) - '@rushstack/problem-matcher': 0.2.1(@types/node@22.19.2) + '@rushstack/node-core-library': 5.19.1(@types/node@22.19.2) + '@rushstack/problem-matcher': 0.1.1(@types/node@22.19.2) supports-color: 8.1.1 optionalDependencies: '@types/node': 22.19.2 - '@rushstack/terminal@0.22.1(@types/node@25.3.0)': + '@rushstack/terminal@0.21.0(@types/node@22.19.8)': dependencies: - '@rushstack/node-core-library': 5.20.1(@types/node@25.3.0) - '@rushstack/problem-matcher': 0.2.1(@types/node@25.3.0) + '@rushstack/node-core-library': 5.19.1(@types/node@22.19.8) + '@rushstack/problem-matcher': 0.1.1(@types/node@22.19.8) supports-color: 8.1.1 optionalDependencies: - '@types/node': 25.3.0 + '@types/node': 22.19.8 - '@rushstack/ts-command-line@5.3.1(@types/node@22.19.2)': + '@rushstack/ts-command-line@5.2.0(@types/node@22.19.2)': dependencies: - '@rushstack/terminal': 0.22.1(@types/node@22.19.2) + '@rushstack/terminal': 0.21.0(@types/node@22.19.2) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 transitivePeerDependencies: - '@types/node' - '@rushstack/ts-command-line@5.3.1(@types/node@25.3.0)': + '@rushstack/ts-command-line@5.2.0(@types/node@22.19.8)': dependencies: - '@rushstack/terminal': 0.22.1(@types/node@25.3.0) + '@rushstack/terminal': 0.21.0(@types/node@22.19.8) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -14163,7 +13821,7 @@ snapshots: dependencies: '@octokit/core': 7.0.6 '@octokit/plugin-paginate-rest': 13.2.1(@octokit/core@7.0.6) - '@octokit/plugin-retry': 8.1.0(@octokit/core@7.0.6) + '@octokit/plugin-retry': 8.0.3(@octokit/core@7.0.6) '@octokit/plugin-throttling': 11.0.3(@octokit/core@7.0.6) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 @@ -14195,7 +13853,7 @@ snapshots: read-pkg: 9.0.1 registry-auth-token: 5.1.1 semantic-release: 24.2.9(typescript@5.9.3) - semver: 7.7.4 + semver: 7.7.3 tempy: 3.2.0 '@semantic-release/release-notes-generator@14.1.0(semantic-release@24.2.9(typescript@5.9.3))': @@ -14299,7 +13957,7 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/core@3.23.2': + '@smithy/core@3.23.0': dependencies: '@smithy/middleware-serde': 4.2.9 '@smithy/protocol-http': 5.3.8 @@ -14403,9 +14061,9 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.16': + '@smithy/middleware-endpoint@4.4.14': dependencies: - '@smithy/core': 3.23.2 + '@smithy/core': 3.23.0 '@smithy/middleware-serde': 4.2.9 '@smithy/node-config-provider': 4.3.8 '@smithy/shared-ini-file-loader': 4.4.3 @@ -14414,12 +14072,12 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.33': + '@smithy/middleware-retry@4.4.31': dependencies: '@smithy/node-config-provider': 4.3.8 '@smithy/protocol-http': 5.3.8 '@smithy/service-error-classification': 4.2.8 - '@smithy/smithy-client': 4.11.5 + '@smithy/smithy-client': 4.11.3 '@smithy/types': 4.12.0 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -14493,10 +14151,10 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/smithy-client@4.11.5': + '@smithy/smithy-client@4.11.3': dependencies: - '@smithy/core': 3.23.2 - '@smithy/middleware-endpoint': 4.4.16 + '@smithy/core': 3.23.0 + '@smithy/middleware-endpoint': 4.4.14 '@smithy/middleware-stack': 4.2.8 '@smithy/protocol-http': 5.3.8 '@smithy/types': 4.12.0 @@ -14541,20 +14199,20 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.3.32': + '@smithy/util-defaults-mode-browser@4.3.30': dependencies: '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.11.5 + '@smithy/smithy-client': 4.11.3 '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.2.35': + '@smithy/util-defaults-mode-node@4.2.33': dependencies: '@smithy/config-resolver': 4.4.6 '@smithy/credential-provider-imds': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.11.5 + '@smithy/smithy-client': 4.11.3 '@smithy/types': 4.12.0 tslib: 2.8.1 @@ -14616,9 +14274,9 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@stoplight/better-ajv-errors@1.0.3(ajv@8.18.0)': + '@stoplight/better-ajv-errors@1.0.3(ajv@8.17.1)': dependencies: - ajv: 8.18.0 + ajv: 8.17.1 jsonpointer: 5.0.1 leven: 3.1.0 @@ -14638,7 +14296,7 @@ snapshots: dependency-graph: 0.11.0 fast-memoize: 2.5.2 immer: 9.0.21 - lodash: 4.17.21 + lodash: 4.17.23 tslib: 2.8.1 urijs: 1.19.11 @@ -14648,7 +14306,7 @@ snapshots: '@stoplight/path': 1.3.2 '@stoplight/types': 13.20.0 jsonc-parser: 2.2.1 - lodash: 4.17.21 + lodash: 4.17.23 safe-stable-stringify: 1.1.1 '@stoplight/ordered-object-literal@1.0.5': {} @@ -14657,7 +14315,7 @@ snapshots: '@stoplight/spectral-core@1.21.0': dependencies: - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.18.0) + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) '@stoplight/json': 3.21.0 '@stoplight/path': 1.3.2 '@stoplight/spectral-parsers': 1.0.5 @@ -14666,11 +14324,11 @@ snapshots: '@stoplight/types': 13.6.0 '@types/es-aggregate-error': 1.0.6 '@types/json-schema': 7.0.15 - ajv: 8.18.0 - ajv-errors: 3.0.0(ajv@8.18.0) - ajv-formats: 2.1.1(ajv@8.18.0) + ajv: 8.17.1 + ajv-errors: 3.0.0(ajv@8.17.1) + ajv-formats: 2.1.1(ajv@8.17.1) es-aggregate-error: 1.0.14 - jsonpath-plus: 10.4.0 + jsonpath-plus: 10.3.0 lodash: 4.17.23 lodash.topath: 4.5.2 minimatch: 3.1.2 @@ -14692,16 +14350,16 @@ snapshots: '@stoplight/spectral-functions@1.10.1': dependencies: - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.18.0) + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) '@stoplight/json': 3.21.0 '@stoplight/spectral-core': 1.21.0 '@stoplight/spectral-formats': 1.8.2 '@stoplight/spectral-runtime': 1.1.4 - ajv: 8.18.0 - ajv-draft-04: 1.0.0(ajv@8.18.0) - ajv-errors: 3.0.0(ajv@8.18.0) - ajv-formats: 2.1.1(ajv@8.18.0) - lodash: 4.17.21 + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) + ajv-errors: 3.0.0(ajv@8.17.1) + ajv-formats: 2.1.1(ajv@8.17.1) + lodash: 4.17.23 tslib: 2.8.1 transitivePeerDependencies: - encoding @@ -14729,7 +14387,7 @@ snapshots: '@stoplight/path': 1.3.2 '@stoplight/types': 13.20.0 abort-controller: 3.0.0 - lodash: 4.17.21 + lodash: 4.17.23 node-fetch: 2.7.0 tslib: 2.8.1 transitivePeerDependencies: @@ -14787,22 +14445,20 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 '@testing-library/dom': 10.4.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.11 + '@types/react-dom': 19.2.3(@types/react@19.2.11) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: '@testing-library/dom': 10.4.1 - '@tokenizer/token@0.3.0': {} - '@tootallnate/quickjs-emscripten@0.23.0': {} '@tybys/wasm-util@0.10.1': @@ -14839,9 +14495,9 @@ snapshots: dependencies: '@babel/types': 7.29.0 - '@types/bun@1.3.9': + '@types/bun@1.3.8': dependencies: - bun-types: 1.3.9 + bun-types: 1.3.8 '@types/chai@5.2.3': dependencies: @@ -14850,13 +14506,13 @@ snapshots: '@types/conventional-commits-parser@5.0.2': dependencies: - '@types/node': 22.19.2 + '@types/node': 22.19.8 '@types/cookie@0.4.1': {} '@types/cors@2.8.19': dependencies: - '@types/node': 25.3.0 + '@types/node': 22.19.8 '@types/debug@4.1.12': dependencies: @@ -14866,7 +14522,7 @@ snapshots: '@types/es-aggregate-error@1.0.6': dependencies: - '@types/node': 25.3.0 + '@types/node': 22.19.8 '@types/estree-jsx@1.0.5': dependencies: @@ -14878,12 +14534,12 @@ snapshots: '@types/fs-extra@8.1.5': dependencies: - '@types/node': 25.3.0 + '@types/node': 22.19.8 '@types/glob@7.2.0': dependencies: '@types/minimatch': 6.0.0 - '@types/node': 25.3.0 + '@types/node': 22.19.8 '@types/hast@2.3.10': dependencies: @@ -14917,7 +14573,7 @@ snapshots: '@types/minimatch@6.0.0': dependencies: - minimatch: 10.2.2 + minimatch: 10.1.2 '@types/ms@2.1.0': {} @@ -14925,31 +14581,29 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/node@16.9.1': {} - '@types/node@22.19.2': dependencies: undici-types: 6.21.0 - '@types/node@25.3.0': + '@types/node@22.19.8': dependencies: - undici-types: 7.18.2 + undici-types: 6.21.0 '@types/normalize-package-data@2.4.4': {} '@types/parse5@6.0.3': {} - '@types/react-dom@19.2.3(@types/react@19.2.14)': + '@types/react-dom@19.2.3(@types/react@19.2.11)': dependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - '@types/react@19.2.14': + '@types/react@19.2.11': dependencies: csstype: 3.2.3 '@types/responselike@1.0.0': dependencies: - '@types/node': 22.19.2 + '@types/node': 22.19.8 '@types/supports-color@8.1.3': {} @@ -14959,28 +14613,28 @@ snapshots: '@types/urijs@1.19.26': {} - '@types/vscode@1.109.0': {} + '@types/vscode@1.108.1': {} '@types/whatwg-mimetype@3.0.2': {} '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.2 + '@types/node': 22.19.8 '@types/yauzl@2.10.3': dependencies: - '@types/node': 25.3.0 + '@types/node': 22.19.8 optional: true - '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.56.0 - eslint: 9.39.3(jiti@2.6.1) + '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.54.0 + '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.54.0 + eslint: 9.39.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -14988,89 +14642,89 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.56.0 + '@typescript-eslint/scope-manager': 8.54.0 + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.54.0 debug: 4.4.3(supports-color@5.5.0) - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.56.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.54.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) - '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) + '@typescript-eslint/types': 8.54.0 debug: 4.4.3(supports-color@5.5.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.56.0': + '@typescript-eslint/scope-manager@8.54.0': dependencies: - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/visitor-keys': 8.56.0 + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/visitor-keys': 8.54.0 - '@typescript-eslint/tsconfig-utils@8.56.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.54.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@5.5.0) - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.56.0': {} + '@typescript-eslint/types@8.54.0': {} - '@typescript-eslint/typescript-estree@8.56.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.54.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.56.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/visitor-keys': 8.56.0 + '@typescript-eslint/project-service': 8.54.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/visitor-keys': 8.54.0 debug: 4.4.3(supports-color@5.5.0) minimatch: 9.0.5 - semver: 7.7.4 + semver: 7.7.3 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - eslint: 9.39.3(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.54.0 + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.56.0': + '@typescript-eslint/visitor-keys@8.54.0': dependencies: - '@typescript-eslint/types': 8.56.0 - eslint-visitor-keys: 5.0.1 + '@typescript-eslint/types': 8.54.0 + eslint-visitor-keys: 4.2.1 - '@typescript/vfs@1.6.4(typescript@5.9.3)': + '@typescript/vfs@1.6.2(typescript@5.9.3)': dependencies: debug: 4.4.3(supports-color@5.5.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typespec/ts-http-runtime@0.3.3': + '@typespec/ts-http-runtime@0.3.2': dependencies: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -15296,40 +14950,34 @@ snapshots: lodash: 4.17.21 minimatch: 7.4.6 - '@vitejs/plugin-react@5.1.4(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-react@5.1.3(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) - '@rolldown/pluginutils': 1.0.0-rc.3 + '@rolldown/pluginutils': 1.0.0-rc.2 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@5.1.4(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-react@5.1.3(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) - '@rolldown/pluginutils': 1.0.0-rc.3 + '@rolldown/pluginutils': 1.0.0-rc.2 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.2(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': - dependencies: - '@rolldown/pluginutils': 1.0.0-beta.50 - vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - vue: 3.5.25(typescript@5.9.3) - - '@vitejs/plugin-vue@6.0.2(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.2(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.50 - vite: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) vue: 3.5.25(typescript@5.9.3) '@vitejs/plugin-vue@6.0.2(vite@7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': @@ -15338,7 +14986,7 @@ snapshots: vite: 7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) vue: 3.5.25(typescript@5.9.3) - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -15353,7 +15001,7 @@ snapshots: std-env: 3.10.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -15365,21 +15013,21 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@3.2.4(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/mocker@3.2.4(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@3.2.4(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@3.2.4': dependencies: @@ -15477,7 +15125,7 @@ snapshots: minimatch: 3.1.2 parse-semver: 1.1.1 read: 1.0.7 - semver: 7.7.4 + semver: 7.7.3 tmp: 0.2.5 typed-rest-client: 1.8.11 url-join: 4.0.1 @@ -15568,8 +15216,6 @@ snapshots: js-beautify: 1.15.4 vue-component-type-helpers: 2.2.12 - '@yarnpkg/lockfile@1.1.0': {} - '@zeit/schemas@2.36.0': {} JSONStream@1.3.5: @@ -15592,13 +15238,13 @@ snapshots: dependencies: acorn: 8.11.2 - acorn-jsx@5.3.2(acorn@8.16.0): + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: - acorn: 8.16.0 + acorn: 8.15.0 acorn@8.11.2: {} - acorn@8.16.0: {} + acorn@8.15.0: {} address@1.2.2: {} @@ -15631,27 +15277,27 @@ snapshots: optionalDependencies: ajv: 8.13.0 - ajv-draft-04@1.0.0(ajv@8.18.0): + ajv-draft-04@1.0.0(ajv@8.17.1): optionalDependencies: - ajv: 8.18.0 + ajv: 8.17.1 - ajv-errors@3.0.0(ajv@8.18.0): + ajv-errors@3.0.0(ajv@8.17.1): dependencies: - ajv: 8.18.0 + ajv: 8.17.1 - ajv-formats@2.1.1(ajv@8.18.0): + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: - ajv: 8.18.0 + ajv: 8.17.1 ajv-formats@3.0.1(ajv@8.13.0): optionalDependencies: ajv: 8.13.0 - ajv-formats@3.0.1(ajv@8.18.0): + ajv-formats@3.0.1(ajv@8.17.1): optionalDependencies: - ajv: 8.18.0 + ajv: 8.17.1 - ajv@6.14.0: + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -15679,13 +15325,6 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - ajv@8.18.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - alien-signals@0.4.14: {} ansi-align@3.0.1: @@ -15716,8 +15355,6 @@ snapshots: ansi-styles@6.2.3: {} - any-base@1.1.0: {} - any-promise@1.3.0: {} anymatch@3.1.3: @@ -15755,12 +15392,22 @@ snapshots: dependencies: '@ark/util': 0.55.0 + arkregex@0.0.5: + dependencies: + '@ark/util': 0.56.0 + arktype@2.1.27: dependencies: '@ark/schema': 0.55.0 '@ark/util': 0.55.0 arkregex: 0.0.3 + arktype@2.1.29: + dependencies: + '@ark/schema': 0.56.0 + '@ark/util': 0.56.0 + arkregex: 0.0.5 + array-buffer-byte-length@1.0.2: dependencies: call-bound: 1.0.4 @@ -15828,7 +15475,7 @@ snapshots: asn1.js@4.10.1: dependencies: - bn.js: 4.12.3 + bn.js: 4.12.2 inherits: 2.0.4 minimalistic-assert: 1.0.1 @@ -15880,8 +15527,6 @@ snapshots: avsc@5.7.9: {} - await-to-js@3.0.0: {} - aws-sign2@0.7.0: {} aws4@1.13.2: {} @@ -15907,21 +15552,19 @@ snapshots: tunnel: 0.0.6 typed-rest-client: 1.8.11 - b4a@1.8.0: {} + b4a@1.7.3: {} bail@2.0.2: {} balanced-match@1.0.2: {} - balanced-match@4.0.3: {} - bare-events@2.8.2: {} - bare-fs@4.5.4: + bare-fs@4.5.3: dependencies: bare-events: 2.8.2 bare-path: 3.0.0 - bare-stream: 2.8.0(bare-events@2.8.2) + bare-stream: 2.7.0(bare-events@2.8.2) bare-url: 2.3.2 fast-fifo: 1.3.2 transitivePeerDependencies: @@ -15937,10 +15580,9 @@ snapshots: bare-os: 3.6.2 optional: true - bare-stream@2.8.0(bare-events@2.8.2): + bare-stream@2.7.0(bare-events@2.8.2): dependencies: streamx: 2.23.0 - teex: 1.0.1 optionalDependencies: bare-events: 2.8.2 transitivePeerDependencies: @@ -15957,7 +15599,7 @@ snapshots: base64id@2.0.0: {} - baseline-browser-mapping@2.10.0: {} + baseline-browser-mapping@2.9.19: {} basic-ftp@5.1.0: {} @@ -15985,11 +15627,9 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2(patch_hash=e4aadcbd3e7fffdf34e27d9a810232cda21beee31c3b1f1fda75b4877dfe5e61) - bmp-ts@1.0.9: {} + bn.js@4.12.2: {} - bn.js@4.12.3: {} - - bn.js@5.2.3: {} + bn.js@5.2.2: {} body-parser@1.20.1: dependencies: @@ -16018,7 +15658,7 @@ snapshots: http-errors: 2.0.1 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.14.2 + qs: 6.14.1 raw-body: 2.5.3 type-is: 1.6.18 unpipe: 1.0.0 @@ -16035,7 +15675,7 @@ snapshots: dependencies: ansi-align: 3.0.1 camelcase: 7.0.1 - chalk: 5.0.1 + chalk: 5.6.2 cli-boxes: 3.0.0 string-width: 5.1.2 type-fest: 2.19.0 @@ -16051,10 +15691,6 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.2: - dependencies: - balanced-match: 4.0.3 - braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -16089,13 +15725,13 @@ snapshots: browserify-rsa@4.1.1: dependencies: - bn.js: 5.2.3 + bn.js: 5.2.2 randombytes: 2.1.0 safe-buffer: 5.2.1 browserify-sign@4.2.5: dependencies: - bn.js: 5.2.3 + bn.js: 5.2.2 browserify-rsa: 4.1.1 create-hash: 1.2.0 create-hmac: 1.1.7 @@ -16115,9 +15751,9 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.10.0 - caniuse-lite: 1.0.30001770 - electron-to-chromium: 1.5.302 + baseline-browser-mapping: 2.9.19 + caniuse-lite: 1.0.30001767 + electron-to-chromium: 1.5.286 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -16143,17 +15779,17 @@ snapshots: builtin-status-codes@3.0.0: {} - bun-types@1.3.9: + bun-types@1.3.8: dependencies: - '@types/node': 22.19.2 + '@types/node': 22.19.8 bundle-name@4.1.0: dependencies: run-applescript: 7.1.0 - bundle-require@5.1.0(esbuild@0.27.3): + bundle-require@5.1.0(esbuild@0.27.2): dependencies: - esbuild: 0.27.3 + esbuild: 0.27.2 load-tsconfig: 0.2.5 bytes@3.0.0: {} @@ -16209,7 +15845,7 @@ snapshots: camelcase@7.0.1: {} - caniuse-lite@1.0.30001770: {} + caniuse-lite@1.0.30001767: {} canvas@3.2.0: dependencies: @@ -16285,7 +15921,7 @@ snapshots: parse5: 7.3.0 parse5-htmlparser2-tree-adapter: 7.1.0 parse5-parser-stream: 7.1.2 - undici: 7.22.0 + undici: 7.20.0 whatwg-mimetype: 4.0.0 chokidar@3.5.3: @@ -16327,8 +15963,6 @@ snapshots: urlpattern-polyfill: 10.0.0 zod: 3.23.8 - ci-info@3.9.0: {} - cipher-base@1.0.7: dependencies: inherits: 2.0.4 @@ -16493,7 +16127,7 @@ snapshots: confbox@0.1.8: {} - confbox@0.2.4: {} + confbox@0.2.2: {} config-chain@1.1.13: dependencies: @@ -16531,7 +16165,7 @@ snapshots: conventional-commits-filter: 5.0.0 handlebars: 4.7.8 meow: 13.2.0 - semver: 7.7.4 + semver: 7.7.3 conventional-commits-filter@5.0.0: {} @@ -16594,7 +16228,7 @@ snapshots: create-ecdh@4.0.4: dependencies: - bn.js: 4.12.3 + bn.js: 4.12.2 elliptic: 6.6.1 create-hash@1.2.0: @@ -16669,10 +16303,10 @@ snapshots: cssstyle@5.3.7: dependencies: - '@asamuzakjp/css-color': 4.1.2 - '@csstools/css-syntax-patches-for-csstree': 1.0.27 + '@asamuzakjp/css-color': 4.1.1 + '@csstools/css-syntax-patches-for-csstree': 1.0.26 css-tree: 3.1.0 - lru-cache: 11.2.6 + lru-cache: 11.2.5 csstype@3.0.11: {} @@ -16848,7 +16482,7 @@ snapshots: diffie-hellman@5.0.3: dependencies: - bn.js: 4.12.3 + bn.js: 4.12.2 miller-rabin: 4.0.1 randombytes: 2.1.0 @@ -16982,15 +16616,15 @@ snapshots: '@one-ini/wasm': 0.1.1 commander: 10.0.1 minimatch: 9.0.1 - semver: 7.7.4 + semver: 7.7.3 ee-first@1.1.1: {} - electron-to-chromium@1.5.302: {} + electron-to-chromium@1.5.286: {} elliptic@6.6.1: dependencies: - bn.js: 4.12.3 + bn.js: 4.12.2 brorand: 1.1.0 hash.js: 1.1.7 hmac-drbg: 1.0.1 @@ -17025,7 +16659,7 @@ snapshots: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.19 - '@types/node': 25.3.0 + '@types/node': 22.19.8 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -17187,7 +16821,7 @@ snapshots: esast-util-from-js@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - acorn: 8.16.0 + acorn: 8.15.0 esast-util-from-estree: 2.0.0 vfile-message: 4.0.3 @@ -17220,34 +16854,34 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 - esbuild@0.27.3: + esbuild@0.27.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.3 - '@esbuild/android-arm': 0.27.3 - '@esbuild/android-arm64': 0.27.3 - '@esbuild/android-x64': 0.27.3 - '@esbuild/darwin-arm64': 0.27.3 - '@esbuild/darwin-x64': 0.27.3 - '@esbuild/freebsd-arm64': 0.27.3 - '@esbuild/freebsd-x64': 0.27.3 - '@esbuild/linux-arm': 0.27.3 - '@esbuild/linux-arm64': 0.27.3 - '@esbuild/linux-ia32': 0.27.3 - '@esbuild/linux-loong64': 0.27.3 - '@esbuild/linux-mips64el': 0.27.3 - '@esbuild/linux-ppc64': 0.27.3 - '@esbuild/linux-riscv64': 0.27.3 - '@esbuild/linux-s390x': 0.27.3 - '@esbuild/linux-x64': 0.27.3 - '@esbuild/netbsd-arm64': 0.27.3 - '@esbuild/netbsd-x64': 0.27.3 - '@esbuild/openbsd-arm64': 0.27.3 - '@esbuild/openbsd-x64': 0.27.3 - '@esbuild/openharmony-arm64': 0.27.3 - '@esbuild/sunos-x64': 0.27.3 - '@esbuild/win32-arm64': 0.27.3 - '@esbuild/win32-ia32': 0.27.3 - '@esbuild/win32-x64': 0.27.3 + '@esbuild/aix-ppc64': 0.27.2 + '@esbuild/android-arm': 0.27.2 + '@esbuild/android-arm64': 0.27.2 + '@esbuild/android-x64': 0.27.2 + '@esbuild/darwin-arm64': 0.27.2 + '@esbuild/darwin-x64': 0.27.2 + '@esbuild/freebsd-arm64': 0.27.2 + '@esbuild/freebsd-x64': 0.27.2 + '@esbuild/linux-arm': 0.27.2 + '@esbuild/linux-arm64': 0.27.2 + '@esbuild/linux-ia32': 0.27.2 + '@esbuild/linux-loong64': 0.27.2 + '@esbuild/linux-mips64el': 0.27.2 + '@esbuild/linux-ppc64': 0.27.2 + '@esbuild/linux-riscv64': 0.27.2 + '@esbuild/linux-s390x': 0.27.2 + '@esbuild/linux-x64': 0.27.2 + '@esbuild/netbsd-arm64': 0.27.2 + '@esbuild/netbsd-x64': 0.27.2 + '@esbuild/openbsd-arm64': 0.27.2 + '@esbuild/openbsd-x64': 0.27.2 + '@esbuild/openharmony-arm64': 0.27.2 + '@esbuild/sunos-x64': 0.27.2 + '@esbuild/win32-arm64': 0.27.2 + '@esbuild/win32-ia32': 0.27.2 + '@esbuild/win32-x64': 0.27.2 escalade@3.2.0: {} @@ -17269,77 +16903,77 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@9.1.2(eslint@9.39.3(jiti@2.6.1)): + eslint-config-prettier@9.1.2(eslint@9.39.2(jiti@2.6.1)): dependencies: - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: - get-tsconfig: 4.13.6 + get-tsconfig: 4.13.1 stable-hash-x: 0.2.0 optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 4.4.3(supports-color@5.5.0) - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) - get-tsconfig: 4.13.6 + get-tsconfig: 4.13.1 is-bun-module: 2.0.0 stable-hash-x: 0.2.0 tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)): dependencies: - '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/types': 8.54.0 comment-parser: 1.4.5 debug: 4.4.3(supports-color@5.5.0) - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 - minimatch: 10.2.2 - semver: 7.7.4 + minimatch: 10.1.2 + semver: 7.7.3 stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-jsdoc@54.7.0(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-jsdoc@54.7.0(eslint@9.39.2(jiti@2.6.1)): dependencies: '@es-joy/jsdoccomment': 0.56.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.3(supports-color@5.5.0) escape-string-regexp: 4.0.0 - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) espree: 10.4.0 esquery: 1.7.0 parse-imports-exports: 0.2.4 - semver: 7.7.4 + semver: 7.7.3 spdx-expression-parse: 4.0.0 transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks@7.0.1(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@2.6.1)): dependencies: '@babel/core': 7.29.0 '@babel/parser': 7.29.0 - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) hermes-parser: 0.25.1 zod: 4.3.6 zod-validation-error: 4.0.2(zod@4.3.6) transitivePeerDependencies: - supports-color - eslint-plugin-react@7.37.5(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-react@7.37.5(eslint@9.39.2(jiti@2.6.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -17347,7 +16981,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.2 - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -17356,7 +16990,7 @@ snapshots: object.fromentries: 2.0.8 object.values: 1.2.1 prop-types: 15.8.1 - resolve: 2.0.0-next.6 + resolve: 2.0.0-next.5 semver: 6.3.1 string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 @@ -17370,23 +17004,21 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint-visitor-keys@5.0.1: {} - - eslint@9.39.3(jiti@2.6.1): + eslint@9.39.2(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.1 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 '@eslint/eslintrc': 3.3.3 - '@eslint/js': 9.39.3 + '@eslint/js': 9.39.2 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - ajv: 6.14.0 + ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@5.5.0) @@ -17415,8 +17047,8 @@ snapshots: espree@10.4.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 esprima@4.0.1: {} @@ -17528,8 +17160,6 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.2 - exif-parser@0.1.12: {} - expand-template@2.0.3: {} expect-type@1.3.0: {} @@ -17595,7 +17225,7 @@ snapshots: parseurl: 1.3.3 path-to-regexp: 0.1.12 proxy-addr: 2.0.7 - qs: 6.14.2 + qs: 6.14.1 range-parser: 1.2.1 safe-buffer: 5.2.1 send: 0.19.2 @@ -17646,7 +17276,7 @@ snapshots: fast-uri@3.1.0: {} - fast-xml-parser@5.3.6: + fast-xml-parser@5.3.4: dependencies: strnum: 2.1.2 @@ -17689,12 +17319,6 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-type@16.5.4: - dependencies: - readable-web-to-node-stream: 3.0.4 - strtok3: 6.3.0 - token-types: 4.2.1 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -17750,15 +17374,11 @@ snapshots: semver-regex: 4.0.5 super-regex: 1.1.0 - find-yarn-workspace-root@2.0.0: - dependencies: - micromatch: 4.0.8 - fix-dts-default-cjs-exports@1.0.1: dependencies: magic-string: 0.30.21 mlly: 1.8.0 - rollup: 4.58.0 + rollup: 4.57.1 flat-cache@4.0.1: dependencies: @@ -17884,7 +17504,7 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.5.0: {} + get-east-asian-width@1.4.0: {} get-intrinsic@1.3.0: dependencies: @@ -17927,7 +17547,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.13.6: + get-tsconfig@4.13.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -17943,11 +17563,6 @@ snapshots: dependencies: assert-plus: 1.0.0 - gifwrap@0.10.1: - dependencies: - image-q: 4.0.0 - omggif: 1.0.10 - git-log-parser@1.2.1: dependencies: argv-formatter: 1.0.0 @@ -17991,7 +17606,7 @@ snapshots: foreground-child: 3.3.1 jackspeak: 3.4.3 minimatch: 9.0.5 - minipass: 7.1.3 + minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 @@ -18094,8 +17709,6 @@ snapshots: graceful-fs@4.2.11: {} - graphql@15.10.1: {} - gunzip-maybe@1.4.2: dependencies: browserify-zlib: 0.1.4 @@ -18116,7 +17729,7 @@ snapshots: happy-dom@20.4.0: dependencies: - '@types/node': 22.19.2 + '@types/node': 22.19.8 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 entities: 4.5.0 @@ -18563,10 +18176,6 @@ snapshots: ignore@7.0.5: {} - image-q@4.0.0: - dependencies: - '@types/node': 16.9.1 - immediate@3.0.6: {} immer@9.0.21: {} @@ -18608,15 +18217,15 @@ snapshots: ini@4.1.1: {} - ink-spinner@5.0.0(ink@6.3.0(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + ink-spinner@5.0.0(ink@6.3.0(@types/react@19.2.11)(react@19.2.3))(react@19.2.3): dependencies: cli-spinners: 2.9.2 - ink: 6.3.0(@types/react@19.2.14)(react@19.2.3) + ink: 6.3.0(@types/react@19.2.11)(react@19.2.3) react: 19.2.3 - ink@6.3.0(@types/react@19.2.14)(react@19.2.3): + ink@6.3.0(@types/react@19.2.11)(react@19.2.3): dependencies: - '@alcalzone/ansi-tokenize': 0.2.5 + '@alcalzone/ansi-tokenize': 0.2.4 ansi-escapes: 7.3.0 ansi-styles: 6.2.3 auto-bind: 5.0.1 @@ -18641,19 +18250,19 @@ snapshots: ws: 8.19.0 yoga-layout: 3.2.1 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 transitivePeerDependencies: - bufferutil - utf-8-validate inline-style-parser@0.2.7: {} - inquirer@12.3.0(@types/node@25.3.0): + inquirer@12.3.0(@types/node@22.19.8): dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.0) - '@inquirer/prompts': 7.9.0(@types/node@25.3.0) - '@inquirer/type': 3.0.10(@types/node@25.3.0) - '@types/node': 25.3.0 + '@inquirer/core': 10.3.2(@types/node@22.19.8) + '@inquirer/prompts': 7.9.0(@types/node@22.19.8) + '@inquirer/type': 3.0.10(@types/node@22.19.8) + '@types/node': 22.19.8 ansi-escapes: 4.3.2 mute-stream: 2.0.0 run-async: 3.0.0 @@ -18728,7 +18337,7 @@ snapshots: is-bun-module@2.0.0: dependencies: - semver: 7.7.4 + semver: 7.7.3 is-callable@1.2.7: {} @@ -18767,7 +18376,7 @@ snapshots: is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.4.0 is-generator-function@1.1.2: dependencies: @@ -18905,7 +18514,7 @@ snapshots: dependencies: is-docker: 2.2.1 - is-wsl@3.1.1: + is-wsl@3.1.0: dependencies: is-inside-container: 1.0.0 @@ -18917,13 +18526,6 @@ snapshots: isomorphic-timers-promises@1.0.1: {} - isomorphic-unfetch@3.1.0: - dependencies: - node-fetch: 2.7.0 - unfetch: 4.2.0 - transitivePeerDependencies: - - encoding - isomorphic.js@0.2.5: {} isstream@0.1.2: {} @@ -18974,36 +18576,6 @@ snapshots: java-properties@1.0.2: {} - jimp@1.6.0: - dependencies: - '@jimp/core': 1.6.0 - '@jimp/diff': 1.6.0 - '@jimp/js-bmp': 1.6.0 - '@jimp/js-gif': 1.6.0 - '@jimp/js-jpeg': 1.6.0 - '@jimp/js-png': 1.6.0 - '@jimp/js-tiff': 1.6.0 - '@jimp/plugin-blit': 1.6.0 - '@jimp/plugin-blur': 1.6.0 - '@jimp/plugin-circle': 1.6.0 - '@jimp/plugin-color': 1.6.0 - '@jimp/plugin-contain': 1.6.0 - '@jimp/plugin-cover': 1.6.0 - '@jimp/plugin-crop': 1.6.0 - '@jimp/plugin-displace': 1.6.0 - '@jimp/plugin-dither': 1.6.0 - '@jimp/plugin-fisheye': 1.6.0 - '@jimp/plugin-flip': 1.6.0 - '@jimp/plugin-hash': 1.6.0 - '@jimp/plugin-mask': 1.6.0 - '@jimp/plugin-print': 1.6.0 - '@jimp/plugin-quantize': 1.6.0 - '@jimp/plugin-resize': 1.6.0 - '@jimp/plugin-rotate': 1.6.0 - '@jimp/plugin-threshold': 1.6.0 - '@jimp/types': 1.6.0 - '@jimp/utils': 1.6.0 - jiti@1.21.7: {} jiti@2.6.1: {} @@ -19012,8 +18584,6 @@ snapshots: joycon@3.1.1: {} - jpeg-js@0.4.4: {} - js-beautify@1.15.4: dependencies: config-chain: 1.1.13 @@ -19050,7 +18620,7 @@ snapshots: jsdom@27.3.0(canvas@3.2.0): dependencies: '@acemir/cssom': 0.9.31 - '@asamuzakjp/dom-selector': 6.8.1 + '@asamuzakjp/dom-selector': 6.7.7 cssstyle: 5.3.7 data-urls: 6.0.1 decimal.js: 10.6.0 @@ -19094,18 +18664,8 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json-stable-stringify@1.3.0: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - isarray: 2.0.5 - jsonify: 0.0.1 - object-keys: 1.1.1 - json-stringify-safe@5.0.1: {} - json-with-bigint@3.5.3: {} - json5@2.2.3: {} jsonc-parser@2.2.1: {} @@ -19122,11 +18682,9 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonify@0.0.1: {} - jsonparse@1.3.1: {} - jsonpath-plus@10.4.0: + jsonpath-plus@10.3.0: dependencies: '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) @@ -19193,10 +18751,6 @@ snapshots: dependencies: json-buffer: 3.0.1 - klaw-sync@6.0.0: - dependencies: - graceful-fs: 4.2.11 - kleur@4.1.5: {} kolorist@1.8.0: {} @@ -19421,7 +18975,7 @@ snapshots: dependencies: graceful-fs: 4.2.11 is-promise: 2.2.2 - lodash: 4.17.21 + lodash: 4.17.23 pify: 3.0.0 steno: 0.4.4 @@ -19431,7 +18985,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.2.6: {} + lru-cache@11.2.5: {} lru-cache@5.1.1: dependencies: @@ -19463,7 +19017,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.4 + semver: 7.7.3 map-cache@0.2.2: {} @@ -19498,7 +19052,7 @@ snapshots: md5.js@1.3.5: dependencies: - hash-base: 3.0.5 + hash-base: 3.1.2 inherits: 2.0.4 safe-buffer: 5.2.1 @@ -20054,19 +19608,6 @@ snapshots: micromark-util-types: 2.0.2 vfile-message: 4.0.3 - micromark-extension-mdx-jsx@3.0.2: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - micromark-factory-mdx-expression: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - vfile-message: 4.0.3 - micromark-extension-mdx-md@2.0.0: dependencies: micromark-util-types: 2.0.2 @@ -20085,10 +19626,10 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) micromark-extension-mdx-expression: 3.0.1 - micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-jsx: 3.0.1 micromark-extension-mdx-md: 2.0.0 micromark-extension-mdxjs-esm: 3.0.0 micromark-util-combine-extensions: 2.0.1 @@ -20351,7 +19892,7 @@ snapshots: miller-rabin@4.0.1: dependencies: - bn.js: 4.12.3 + bn.js: 4.12.2 brorand: 1.1.0 mime-db@1.33.0: {} @@ -20390,13 +19931,13 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} - minimatch@10.2.1: + minimatch@10.0.3: dependencies: - brace-expansion: 5.0.2 + '@isaacs/brace-expansion': 5.0.1 - minimatch@10.2.2: + minimatch@10.1.2: dependencies: - brace-expansion: 5.0.2 + '@isaacs/brace-expansion': 5.0.1 minimatch@3.1.2: dependencies: @@ -20426,16 +19967,16 @@ snapshots: minipass@5.0.0: {} - minipass@7.1.3: {} + minipass@7.1.2: {} minizlib@2.1.2: dependencies: minipass: 3.3.6 yallist: 4.0.0 - mintlify@4.2.368(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@25.3.0)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3): + mintlify@4.2.331(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@22.19.8)(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3): dependencies: - '@mintlify/cli': 4.0.971(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@25.3.0)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) + '@mintlify/cli': 4.0.935(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.11))(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3))(@types/node@22.19.8)(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(typescript@5.9.3) transitivePeerDependencies: - '@radix-ui/react-popover' - '@types/node' @@ -20461,7 +20002,7 @@ snapshots: mlly@1.8.0: dependencies: - acorn: 8.16.0 + acorn: 8.15.0 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.6.3 @@ -20527,15 +20068,15 @@ snapshots: netmask@2.0.2: {} - next-mdx-remote-client@1.1.6(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(unified@11.0.5): + next-mdx-remote-client@1.1.4(@types/react@19.2.11)(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(unified@11.0.5): dependencies: '@babel/code-frame': 7.29.0 '@mdx-js/mdx': 3.1.1 - '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.3) + '@mdx-js/react': 3.1.1(@types/react@19.2.11)(react@19.2.3) react: 19.2.3 react-dom: 19.2.4(react@19.2.3) - remark-mdx-remove-esm: 1.2.3(unified@11.0.5) - serialize-error: 13.0.1 + remark-mdx-remove-esm: 1.2.2(unified@11.0.5) + serialize-error: 12.0.0 vfile: 6.0.3 vfile-matter: 5.0.1 transitivePeerDependencies: @@ -20550,7 +20091,7 @@ snapshots: astring: 1.9.0 jsep: 1.4.0 optionalDependencies: - jsonpath-plus: 10.4.0 + jsonpath-plus: 10.3.0 lodash.topath: 4.5.2 nlcst-to-string@4.0.0: @@ -20559,7 +20100,7 @@ snapshots: node-abi@3.87.0: dependencies: - semver: 7.7.4 + semver: 7.7.3 node-addon-api@4.3.0: optional: true @@ -20575,13 +20116,6 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 - node-exports-info@1.6.0: - dependencies: - array.prototype.flatmap: 1.3.3 - es-errors: 1.3.0 - object.entries: 1.1.9 - semver: 6.3.1 - node-fetch@2.6.7: dependencies: whatwg-url: 5.0.0 @@ -20631,21 +20165,19 @@ snapshots: util: 0.12.5 vm-browserify: 1.1.2 - nodemon@3.1.13: + nodemon@3.1.11: dependencies: chokidar: 3.6.0 debug: 4.4.3(supports-color@5.5.0) ignore-by-default: 1.0.1 - minimatch: 10.2.2 + minimatch: 3.1.2 pstree.remy: 1.1.8 - semver: 7.7.4 + semver: 7.7.3 simple-update-notifier: 2.0.0 supports-color: 5.5.0 touch: 3.1.1 undefsafe: 2.0.5 - non-error@0.1.0: {} - nopt@7.2.1: dependencies: abbrev: 2.0.0 @@ -20661,13 +20193,13 @@ snapshots: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.16.1 - semver: 7.7.4 + semver: 7.7.3 validate-npm-package-license: 3.0.4 normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.4 + semver: 7.7.3 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -20740,8 +20272,6 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 - omggif@1.0.10: {} - on-exit-leak-free@2.1.2: {} on-finished@2.4.1: @@ -20777,11 +20307,6 @@ snapshots: is-inside-container: 1.0.0 wsl-utils: 0.1.0 - open@7.4.2: - dependencies: - is-docker: 2.2.1 - is-wsl: 2.2.0 - open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -20911,15 +20436,6 @@ snapshots: pbkdf2: 3.1.5 safe-buffer: 5.2.1 - parse-bmfont-ascii@1.0.6: {} - - parse-bmfont-binary@1.0.6: {} - - parse-bmfont-xml@1.1.6: - dependencies: - xml-parse-from-string: 1.0.1 - xml2js: 0.5.0 - parse-entities@4.0.2: dependencies: '@types/unist': 2.0.11 @@ -21012,23 +20528,6 @@ snapshots: patch-console@2.0.0: {} - patch-package@8.0.1: - dependencies: - '@yarnpkg/lockfile': 1.1.0 - chalk: 4.1.2 - ci-info: 3.9.0 - cross-spawn: 7.0.6 - find-yarn-workspace-root: 2.0.0 - fs-extra: 10.1.0 - json-stable-stringify: 1.3.0 - klaw-sync: 6.0.0 - minimist: 1.2.8 - open: 7.4.2 - semver: 7.7.4 - slash: 2.0.0 - tmp: 0.2.5 - yaml: 2.8.2 - path-browserify@1.0.1: {} path-exists@3.0.0: {} @@ -21056,7 +20555,7 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.3 + minipass: 7.1.2 path-to-regexp@0.1.12: {} @@ -21081,11 +20580,9 @@ snapshots: pdfjs-dist@5.4.624: optionalDependencies: - '@napi-rs/canvas': 0.1.94 + '@napi-rs/canvas': 0.1.91 node-readable-to-web-readable-stream: 0.4.2 - peek-readable@4.1.0: {} - peek-stream@1.1.3: dependencies: buffer-from: 1.1.2 @@ -21140,19 +20637,11 @@ snapshots: quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.5.0 - sonic-boom: 4.2.1 + sonic-boom: 4.2.0 thread-stream: 3.1.0 pirates@4.0.7: {} - pixelmatch@5.3.0: - dependencies: - pngjs: 6.0.0 - - pixelmatch@7.1.0: - dependencies: - pngjs: 7.0.0 - pkg-conf@2.1.0: dependencies: find-up: 2.1.0 @@ -21170,22 +20659,18 @@ snapshots: pkg-types@2.3.0: dependencies: - confbox: 0.2.4 + confbox: 0.2.2 exsolve: 1.0.8 pathe: 2.0.3 - playwright-core@1.58.2: {} + playwright-core@1.58.1: {} - playwright@1.58.2: + playwright@1.58.1: dependencies: - playwright-core: 1.58.2 + playwright-core: 1.58.1 optionalDependencies: fsevents: 2.3.2 - pngjs@6.0.0: {} - - pngjs@7.0.0: {} - pony-cause@1.1.1: {} possible-typed-array-names@1.1.0: {} @@ -21306,20 +20791,20 @@ snapshots: dependencies: prosemirror-state: 1.4.4 prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.6 + prosemirror-view: 1.41.5 prosemirror-gapcursor@1.4.0: dependencies: prosemirror-keymap: 1.2.3 prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-view: 1.41.6 + prosemirror-view: 1.41.5 prosemirror-history@1.5.0: dependencies: prosemirror-state: 1.4.4 prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.6 + prosemirror-view: 1.41.5 rope-sequence: 1.3.4 prosemirror-inputrules@1.5.1: @@ -21350,7 +20835,7 @@ snapshots: dependencies: prosemirror-model: 1.25.4 prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.6 + prosemirror-view: 1.41.5 prosemirror-tables@1.8.5: dependencies: @@ -21358,7 +20843,7 @@ snapshots: prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 prosemirror-transform: 1.11.0 - prosemirror-view: 1.41.6 + prosemirror-view: 1.41.5 prosemirror-test-builder@1.1.1: dependencies: @@ -21370,7 +20855,7 @@ snapshots: dependencies: prosemirror-model: 1.25.4 - prosemirror-view@1.41.6: + prosemirror-view@1.41.5: dependencies: prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 @@ -21404,7 +20889,7 @@ snapshots: public-encrypt@4.0.3: dependencies: - bn.js: 4.12.3 + bn.js: 4.12.2 browserify-rsa: 4.1.1 create-hash: 1.2.0 parse-asn1: 5.1.9 @@ -21475,11 +20960,7 @@ snapshots: dependencies: side-channel: 1.1.0 - qs@6.14.2: - dependencies: - side-channel: 1.1.0 - - qs@6.15.0: + qs@6.14.1: dependencies: side-channel: 1.1.0 @@ -21548,32 +21029,32 @@ snapshots: react-refresh@0.18.0: {} - react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.3): + react-remove-scroll-bar@2.3.8(@types/react@19.2.11)(react@19.2.3): dependencies: react: 19.2.3 - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.3) + react-style-singleton: 2.2.3(@types/react@19.2.11)(react@19.2.3) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.3): + react-remove-scroll@2.7.2(@types/react@19.2.11)(react@19.2.3): dependencies: react: 19.2.3 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.3) - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.3) + react-remove-scroll-bar: 2.3.8(@types/react@19.2.11)(react@19.2.3) + react-style-singleton: 2.2.3(@types/react@19.2.11)(react@19.2.3) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.3) - use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.3) + use-callback-ref: 1.3.3(@types/react@19.2.11)(react@19.2.3) + use-sidecar: 1.1.3(@types/react@19.2.11)(react@19.2.3) optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.3): + react-style-singleton@2.2.3(@types/react@19.2.11)(react@19.2.3): dependencies: get-nonce: 1.0.1 react: 19.2.3 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 react@19.2.3: {} @@ -21645,10 +21126,6 @@ snapshots: process: 0.11.10 string_decoder: 1.3.0 - readable-web-to-node-stream@3.0.4: - dependencies: - readable-stream: 4.7.0 - readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -21663,10 +21140,10 @@ snapshots: estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.1(acorn@8.16.0): + recma-jsx@1.0.1(acorn@8.15.0): dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 @@ -21778,7 +21255,7 @@ snapshots: rehype-stringify@10.0.1: dependencies: '@types/hast': 3.0.4 - hast-util-to-html: 9.0.4 + hast-util-to-html: 9.0.5 unified: 11.0.5 remark-frontmatter@5.0.0: @@ -21802,7 +21279,7 @@ snapshots: remark-gfm@4.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-gfm: 3.0.0 + mdast-util-gfm: 3.1.0 micromark-extension-gfm: 3.0.0 remark-parse: 11.0.0 remark-stringify: 11.0.0 @@ -21838,7 +21315,7 @@ snapshots: transitivePeerDependencies: - supports-color - remark-mdx-remove-esm@1.2.3(unified@11.0.5): + remark-mdx-remove-esm@1.2.2(unified@11.0.5): dependencies: '@types/mdast': 4.0.4 mdast-util-mdxjs-esm: 2.0.1 @@ -21899,14 +21376,6 @@ snapshots: unified: 11.0.5 vfile: 6.0.3 - remark-rehype@11.1.2: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.1 - unified: 11.0.5 - vfile: 6.0.3 - remark-smartypants@3.0.2: dependencies: retext: 9.0.0 @@ -21968,12 +21437,9 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.6: + resolve@2.0.0-next.5: dependencies: - es-errors: 1.3.0 is-core-module: 2.16.1 - node-exports-info: 1.6.0 - object-keys: 1.1.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -22026,7 +21492,7 @@ snapshots: hash-base: 3.1.2 inherits: 2.0.4 - rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): + rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@oxc-project/runtime': 0.101.0 fdir: 6.5.0(picomatch@4.0.3) @@ -22037,13 +21503,13 @@ snapshots: tinyglobby: 0.2.15 optionalDependencies: '@types/node': 22.19.2 - esbuild: 0.27.3 + esbuild: 0.27.2 fsevents: 2.3.3 jiti: 2.6.1 tsx: 4.21.0 yaml: 2.8.2 - rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): + rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@oxc-project/runtime': 0.101.0 fdir: 6.5.0(picomatch@4.0.3) @@ -22053,8 +21519,8 @@ snapshots: rolldown: 1.0.0-beta.53 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.3.0 - esbuild: 0.27.3 + '@types/node': 22.19.8 + esbuild: 0.27.2 fsevents: 2.3.3 jiti: 2.6.1 tsx: 4.21.0 @@ -22087,44 +21553,44 @@ snapshots: globby: 10.0.1 is-plain-object: 3.0.1 - rollup-plugin-visualizer@5.14.0(rollup@4.58.0): + rollup-plugin-visualizer@5.14.0(rollup@4.57.1): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rollup: 4.58.0 + rollup: 4.57.1 - rollup@4.58.0: + rollup@4.57.1: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.58.0 - '@rollup/rollup-android-arm64': 4.58.0 - '@rollup/rollup-darwin-arm64': 4.58.0 - '@rollup/rollup-darwin-x64': 4.58.0 - '@rollup/rollup-freebsd-arm64': 4.58.0 - '@rollup/rollup-freebsd-x64': 4.58.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.58.0 - '@rollup/rollup-linux-arm-musleabihf': 4.58.0 - '@rollup/rollup-linux-arm64-gnu': 4.58.0 - '@rollup/rollup-linux-arm64-musl': 4.58.0 - '@rollup/rollup-linux-loong64-gnu': 4.58.0 - '@rollup/rollup-linux-loong64-musl': 4.58.0 - '@rollup/rollup-linux-ppc64-gnu': 4.58.0 - '@rollup/rollup-linux-ppc64-musl': 4.58.0 - '@rollup/rollup-linux-riscv64-gnu': 4.58.0 - '@rollup/rollup-linux-riscv64-musl': 4.58.0 - '@rollup/rollup-linux-s390x-gnu': 4.58.0 - '@rollup/rollup-linux-x64-gnu': 4.58.0 - '@rollup/rollup-linux-x64-musl': 4.58.0 - '@rollup/rollup-openbsd-x64': 4.58.0 - '@rollup/rollup-openharmony-arm64': 4.58.0 - '@rollup/rollup-win32-arm64-msvc': 4.58.0 - '@rollup/rollup-win32-ia32-msvc': 4.58.0 - '@rollup/rollup-win32-x64-gnu': 4.58.0 - '@rollup/rollup-win32-x64-msvc': 4.58.0 + '@rollup/rollup-android-arm-eabi': 4.57.1 + '@rollup/rollup-android-arm64': 4.57.1 + '@rollup/rollup-darwin-arm64': 4.57.1 + '@rollup/rollup-darwin-x64': 4.57.1 + '@rollup/rollup-freebsd-arm64': 4.57.1 + '@rollup/rollup-freebsd-x64': 4.57.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 + '@rollup/rollup-linux-arm-musleabihf': 4.57.1 + '@rollup/rollup-linux-arm64-gnu': 4.57.1 + '@rollup/rollup-linux-arm64-musl': 4.57.1 + '@rollup/rollup-linux-loong64-gnu': 4.57.1 + '@rollup/rollup-linux-loong64-musl': 4.57.1 + '@rollup/rollup-linux-ppc64-gnu': 4.57.1 + '@rollup/rollup-linux-ppc64-musl': 4.57.1 + '@rollup/rollup-linux-riscv64-gnu': 4.57.1 + '@rollup/rollup-linux-riscv64-musl': 4.57.1 + '@rollup/rollup-linux-s390x-gnu': 4.57.1 + '@rollup/rollup-linux-x64-gnu': 4.57.1 + '@rollup/rollup-linux-x64-musl': 4.57.1 + '@rollup/rollup-openbsd-x64': 4.57.1 + '@rollup/rollup-openharmony-arm64': 4.57.1 + '@rollup/rollup-win32-arm64-msvc': 4.57.1 + '@rollup/rollup-win32-ia32-msvc': 4.57.1 + '@rollup/rollup-win32-x64-gnu': 4.57.1 + '@rollup/rollup-win32-x64-msvc': 4.57.1 fsevents: 2.3.3 rope-sequence@1.3.4: {} @@ -22208,7 +21674,7 @@ snapshots: read-pkg: 5.2.0 registry-auth-token: 4.2.2 semantic-release: 24.2.9(typescript@5.9.3) - semver: 7.7.4 + semver: 7.7.3 tempy: 1.0.1 semantic-release@24.2.9(typescript@5.9.3): @@ -22238,7 +21704,7 @@ snapshots: p-reduce: 3.0.0 read-package-up: 11.0.0 resolve-from: 5.0.0 - semver: 7.7.4 + semver: 7.7.3 semver-diff: 5.0.0 signale: 1.4.0 yargs: 17.7.2 @@ -22248,7 +21714,7 @@ snapshots: semver-diff@5.0.0: dependencies: - semver: 7.7.4 + semver: 7.7.3 semver-regex@4.0.5: {} @@ -22264,8 +21730,6 @@ snapshots: semver@7.7.3: {} - semver@7.7.4: {} - send@0.18.0: dependencies: debug: 2.6.9 @@ -22302,10 +21766,9 @@ snapshots: transitivePeerDependencies: - supports-color - serialize-error@13.0.1: + serialize-error@12.0.0: dependencies: - non-error: 0.1.0 - type-fest: 5.4.4 + type-fest: 4.41.0 serve-handler@6.1.6: dependencies: @@ -22387,13 +21850,13 @@ snapshots: dependencies: decode-ico: 0.4.1 ico-endec: 0.1.6 - sharp: 0.33.5 + sharp: 0.34.5 sharp@0.33.5: dependencies: color: 4.2.3 detect-libc: 2.1.2 - semver: 7.7.2 + semver: 7.7.3 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.5 '@img/sharp-darwin-x64': 0.33.5 @@ -22415,6 +21878,37 @@ snapshots: '@img/sharp-win32-ia32': 0.33.5 '@img/sharp-win32-x64': 0.33.5 + sharp@0.34.5: + dependencies: + '@img/colour': 1.0.0 + detect-libc: 2.1.2 + semver: 7.7.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -22494,9 +21988,7 @@ snapshots: simple-update-notifier@2.0.0: dependencies: - semver: 7.7.4 - - simple-xml-to-json@1.2.3: {} + semver: 7.7.3 sisteransi@1.0.5: {} @@ -22504,8 +21996,6 @@ snapshots: dependencies: unicode-emoji-modifier-base: 1.0.0 - slash@2.0.0: {} - slash@3.0.0: {} slice-ansi@5.0.0: @@ -22567,7 +22057,7 @@ snapshots: dependencies: atomic-sleep: 1.0.0 - sonic-boom@4.2.1: + sonic-boom@4.2.0: dependencies: atomic-sleep: 1.0.0 @@ -22666,7 +22156,7 @@ snapshots: dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 - text-decoder: 1.2.7 + text-decoder: 1.2.3 transitivePeerDependencies: - bare-abort-controller - react-native-b4a @@ -22688,7 +22178,7 @@ snapshots: string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.4.0 strip-ansi: 7.1.2 string.prototype.matchall@4.0.12: @@ -22780,11 +22270,6 @@ snapshots: strnum@2.1.2: {} - strtok3@6.3.0: - dependencies: - '@tokenizer/token': 0.3.0 - peek-readable: 4.1.0 - style-to-js@1.1.21: dependencies: style-to-object: 1.0.14 @@ -22809,20 +22294,19 @@ snapshots: make-asynchronous: 1.0.1 time-span: 5.1.0 - superdoc@1.15.0(@hocuspocus/provider@2.15.3(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(canvas@3.2.0)(pdfjs-dist@5.4.624)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19): + superdoc@1.11.0(@hocuspocus/provider@2.15.3(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(canvas@3.2.0)(pdfjs-dist@5.4.624)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19): dependencies: '@hocuspocus/provider': 2.15.3(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19) buffer-crc32: 1.0.0 eventemitter3: 5.0.4 jsdom: 27.3.0(canvas@3.2.0) - konva: 10.2.0 naive-ui: 2.43.2(vue@3.5.25(typescript@5.9.3)) pdfjs-dist: 5.4.624 pinia: 2.3.1(typescript@5.9.3)(vue@3.5.25(typescript@5.9.3)) rollup-plugin-copy: 3.5.0 uuid: 9.0.1 vue: 3.5.25(typescript@5.9.3) - y-prosemirror: 1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19) + y-prosemirror: 1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19) y-websocket: 3.0.0(yjs@13.6.19) yjs: 13.6.19 transitivePeerDependencies: @@ -22856,8 +22340,6 @@ snapshots: symbol-tree@3.2.4: {} - tagged-tag@1.0.0: {} - tailwindcss@3.4.4: dependencies: '@alloc/quick-lru': 5.2.0 @@ -22897,7 +22379,7 @@ snapshots: pump: 3.0.3 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 4.5.4 + bare-fs: 4.5.3 bare-path: 3.0.0 transitivePeerDependencies: - bare-abort-controller @@ -22914,7 +22396,7 @@ snapshots: tar-stream@3.1.7: dependencies: - b4a: 1.8.0 + b4a: 1.7.3 fast-fifo: 1.3.2 streamx: 2.23.0 transitivePeerDependencies: @@ -22930,14 +22412,6 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - teex@1.0.1: - dependencies: - streamx: 2.23.0 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - temp-dir@2.0.0: {} temp-dir@3.0.0: {} @@ -22963,9 +22437,9 @@ snapshots: glob: 10.5.0 minimatch: 9.0.5 - text-decoder@1.2.7: + text-decoder@1.2.3: dependencies: - b4a: 1.8.0 + b4a: 1.7.3 transitivePeerDependencies: - react-native-b4a @@ -23000,8 +22474,6 @@ snapshots: tinybench@2.9.0: {} - tinycolor2@1.6.0: {} - tinyexec@0.3.2: {} tinyexec@1.0.2: {} @@ -23023,15 +22495,15 @@ snapshots: tldts-core@6.1.86: {} - tldts-core@7.0.23: {} + tldts-core@7.0.22: {} tldts@6.1.86: dependencies: tldts-core: 6.1.86 - tldts@7.0.23: + tldts@7.0.22: dependencies: - tldts-core: 7.0.23 + tldts-core: 7.0.22 tmp@0.2.5: {} @@ -23049,11 +22521,6 @@ snapshots: toidentifier@1.0.1: {} - token-types@4.2.1: - dependencies: - '@tokenizer/token': 0.3.0 - ieee754: 1.2.1 - touch@3.1.1: {} tough-cookie@5.1.2: @@ -23062,7 +22529,7 @@ snapshots: tough-cookie@6.0.0: dependencies: - tldts: 7.0.23 + tldts: 7.0.22 tr46@0.0.3: {} @@ -23092,27 +22559,27 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.1(@microsoft/api-extractor@7.57.2(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): + tsup@8.5.1(@microsoft/api-extractor@7.56.1(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): dependencies: - bundle-require: 5.1.0(esbuild@0.27.3) + bundle-require: 5.1.0(esbuild@0.27.2) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.3(supports-color@5.5.0) - esbuild: 0.27.3 + esbuild: 0.27.2 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2) resolve-from: 5.0.0 - rollup: 4.58.0 + rollup: 4.57.1 source-map: 0.7.6 sucrase: 3.35.1 tinyexec: 0.3.2 tinyglobby: 0.2.15 tree-kill: 1.2.2 optionalDependencies: - '@microsoft/api-extractor': 7.57.2(@types/node@22.19.2) + '@microsoft/api-extractor': 7.56.1(@types/node@22.19.2) postcss: 8.5.6 typescript: 5.9.3 transitivePeerDependencies: @@ -23123,8 +22590,8 @@ snapshots: tsx@4.21.0: dependencies: - esbuild: 0.27.3 - get-tsconfig: 4.13.6 + esbuild: 0.27.2 + get-tsconfig: 4.13.1 optionalDependencies: fsevents: 2.3.3 @@ -23142,7 +22609,7 @@ snapshots: twoslash@0.3.6(typescript@5.9.3): dependencies: - '@typescript/vfs': 1.6.4(typescript@5.9.3) + '@typescript/vfs': 1.6.2(typescript@5.9.3) twoslash-protocol: 0.3.6 typescript: 5.9.3 transitivePeerDependencies: @@ -23166,10 +22633,6 @@ snapshots: type-fest@4.41.0: {} - type-fest@5.4.4: - dependencies: - tagged-tag: 1.0.0 - type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -23210,17 +22673,17 @@ snapshots: typed-rest-client@1.8.11: dependencies: - qs: 6.15.0 + qs: 6.14.1 tunnel: 0.0.6 - underscore: 1.13.8 + underscore: 1.13.7 - typescript-eslint@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.3(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -23252,15 +22715,11 @@ snapshots: undefsafe@2.0.5: {} - underscore@1.13.8: {} + underscore@1.13.7: {} undici-types@6.21.0: {} - undici-types@7.18.2: {} - - undici@7.22.0: {} - - unfetch@4.2.0: {} + undici@7.20.0: {} unicode-emoji-modifier-base@1.0.0: {} @@ -23349,7 +22808,7 @@ snapshots: dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.1 - unist-util-visit-parents: 6.0.1 + unist-util-visit-parents: 6.0.2 unist-util-stringify-position@3.0.3: dependencies: @@ -23454,28 +22913,24 @@ snapshots: url@0.11.4: dependencies: punycode: 1.4.1 - qs: 6.15.0 + qs: 6.14.1 urlpattern-polyfill@10.0.0: {} - use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.3): + use-callback-ref@1.3.3(@types/react@19.2.11)(react@19.2.3): dependencies: react: 19.2.3 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.11 - use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.3): + use-sidecar@1.1.3(@types/react@19.2.11)(react@19.2.3): dependencies: detect-node-es: 1.1.0 react: 19.2.3 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.14 - - utif2@4.1.0: - dependencies: - pako: 1.0.11 + '@types/react': 19.2.11 util-deprecate@1.0.2: {} @@ -23644,13 +23099,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-node@3.2.4(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): + vite-node@3.2.4(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@5.5.0) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - esbuild @@ -23665,13 +23120,13 @@ snapshots: - tsx - yaml - vite-node@3.2.4(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): + vite-node@3.2.4(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@5.5.0) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - esbuild @@ -23686,10 +23141,10 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.5.4(@types/node@22.19.2)(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0)(typescript@5.9.3): + vite-plugin-dts@4.5.4(@types/node@22.19.2)(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1)(typescript@5.9.3): dependencies: - '@microsoft/api-extractor': 7.57.2(@types/node@22.19.2) - '@rollup/pluginutils': 5.3.0(rollup@4.58.0) + '@microsoft/api-extractor': 7.56.1(@types/node@22.19.2) + '@rollup/pluginutils': 5.3.0(rollup@4.57.1) '@volar/typescript': 2.4.28 '@vue/language-core': 2.2.0(typescript@5.9.3) compare-versions: 6.1.1 @@ -23699,16 +23154,16 @@ snapshots: magic-string: 0.30.21 typescript: 5.9.3 optionalDependencies: - vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-dts@4.5.4(@types/node@25.3.0)(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0)(typescript@5.9.3): + vite-plugin-dts@4.5.4(@types/node@22.19.8)(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1)(typescript@5.9.3): dependencies: - '@microsoft/api-extractor': 7.57.2(@types/node@25.3.0) - '@rollup/pluginutils': 5.3.0(rollup@4.58.0) + '@microsoft/api-extractor': 7.56.1(@types/node@22.19.8) + '@rollup/pluginutils': 5.3.0(rollup@4.57.1) '@volar/typescript': 2.4.28 '@vue/language-core': 2.2.0(typescript@5.9.3) compare-versions: 6.1.1 @@ -23718,23 +23173,23 @@ snapshots: magic-string: 0.30.21 typescript: 5.9.3 optionalDependencies: - vite: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-node-polyfills@0.25.0(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.58.0): + vite-plugin-node-polyfills@0.25.0(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(rollup@4.57.1): dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@4.58.0) + '@rollup/plugin-inject': 5.0.5(rollup@4.57.1) node-stdlib-browser: 1.3.1 - vite: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - rollup - vite-plugin-node-polyfills@0.25.0(rollup@4.58.0)(vite@7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-node-polyfills@0.25.0(rollup@4.57.1)(vite@7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@4.58.0) + '@rollup/plugin-inject': 5.0.5(rollup@4.57.1) node-stdlib-browser: 1.3.1 vite: 7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: @@ -23742,11 +23197,11 @@ snapshots: vite@7.3.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: - esbuild: 0.27.3 + esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.58.0 + rollup: 4.57.1 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 22.19.2 @@ -23756,11 +23211,11 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.2)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 3.2.4(rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -23778,8 +23233,8 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@22.19.2)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.4(@types/node@22.19.2)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -23800,11 +23255,11 @@ snapshots: - tsx - yaml - vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(esbuild@0.27.3)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.8)(esbuild@0.27.2)(happy-dom@20.4.0)(jiti@2.6.1)(jsdom@27.3.0(canvas@3.2.0))(tsx@4.21.0)(yaml@2.8.2): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 3.2.4(rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -23822,12 +23277,12 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: rolldown-vite@7.3.1(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: rolldown-vite@7.3.1(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.4(@types/node@22.19.8)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 25.3.0 + '@types/node': 22.19.8 happy-dom: 20.4.0 jsdom: 27.3.0(canvas@3.2.0) transitivePeerDependencies: @@ -24018,7 +23473,7 @@ snapshots: wsl-utils@0.1.0: dependencies: - is-wsl: 3.1.1 + is-wsl: 3.1.0 xml-js@1.6.11: dependencies: @@ -24026,8 +23481,6 @@ snapshots: xml-name-validator@5.0.0: {} - xml-parse-from-string@1.0.1: {} - xml2js@0.5.0: dependencies: sax: 1.4.4 @@ -24044,12 +23497,12 @@ snapshots: xtend@4.0.2: {} - y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19): + y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.19))(yjs@13.6.19): dependencies: lib0: 0.2.117 prosemirror-model: 1.25.4 prosemirror-state: 1.4.4 - prosemirror-view: 1.41.6 + prosemirror-view: 1.41.5 y-protocols: 1.0.7(yjs@13.6.19) yjs: 13.6.19 @@ -24147,8 +23600,6 @@ snapshots: zod@3.24.0: {} - zod@3.25.76: {} - zod@4.3.6: {} zwitch@2.0.4: {} diff --git a/scripts/test.mjs b/scripts/test.mjs index 6ec4207087..0d1592e675 100644 --- a/scripts/test.mjs +++ b/scripts/test.mjs @@ -20,13 +20,9 @@ if (vitestExitCode !== 0) { process.exit(vitestExitCode); } -// Preserve previous behavior: CLI tests are part of the default full test run. if (args.length === 0) { const sdkScriptsExitCode = run(pnpmCommand, ['--prefix', 'packages/sdk', 'run', 'test:scripts']); if (sdkScriptsExitCode !== 0) { process.exit(sdkScriptsExitCode); } - - const cliExitCode = run(pnpmCommand, ['run', 'test:cli']); - process.exit(cliExitCode); } diff --git a/tests/behavior/fixtures/superdoc.ts b/tests/behavior/fixtures/superdoc.ts index 04150358cf..196c6d9d4d 100644 --- a/tests/behavior/fixtures/superdoc.ts +++ b/tests/behavior/fixtures/superdoc.ts @@ -555,35 +555,40 @@ function createFixture(page: Page, editor: Locator, modKey: string) { .toBe('ok'); }, - async assertCommentHighlightExists(opts?: { text?: string; commentId?: string }) { + async assertCommentHighlightExists(opts?: { text?: string; commentId?: string; timeoutMs?: number }) { const expectedText = opts?.text; const expectedCommentId = opts?.commentId; + const timeoutMs = opts?.timeoutMs ?? 15_000; await expect - .poll(() => - page.evaluate( - ({ text, commentId }) => { - const highlights = Array.from(document.querySelectorAll('.superdoc-comment-highlight')); - if (highlights.length === 0) return false; - - if (text) { - const hasTextMatch = highlights.some((el) => (el.textContent ?? '').includes(text)); - if (!hasTextMatch) return false; - } + .poll( + () => + page.evaluate( + ({ text, commentId }) => { + const normalize = (value: string) => value.replace(/\s+/g, ' ').trim(); + const highlights = Array.from(document.querySelectorAll('.superdoc-comment-highlight')); + if (highlights.length === 0) return false; + + if (text) { + const expected = normalize(text); + const hasTextMatch = highlights.some((el) => normalize(el.textContent ?? '').includes(expected)); + if (!hasTextMatch) return false; + } - if (commentId) { - const hasCommentId = highlights.some((el) => - (el.getAttribute('data-comment-ids') ?? '') - .split(/[\s,]+/) - .filter(Boolean) - .includes(commentId), - ); - if (!hasCommentId) return false; - } + if (commentId) { + const hasCommentId = highlights.some((el) => + (el.getAttribute('data-comment-ids') ?? '') + .split(/[\s,]+/) + .filter(Boolean) + .includes(commentId), + ); + if (!hasCommentId) return false; + } - return true; - }, - { text: expectedText, commentId: expectedCommentId }, - ), + return true; + }, + { text: expectedText, commentId: expectedCommentId }, + ), + { timeout: timeoutMs }, ) .toBe(true); }, diff --git a/tests/behavior/helpers/document-api.ts b/tests/behavior/helpers/document-api.ts index 5328805e4c..a3019a6844 100644 --- a/tests/behavior/helpers/document-api.ts +++ b/tests/behavior/helpers/document-api.ts @@ -90,9 +90,14 @@ export async function addCommentByText( mode?: 'contains' | 'exact' | 'regex'; caseSensitive?: boolean; }, -): Promise { - await page.evaluate((payload) => { +): Promise { + const commentId = await page.evaluate((payload) => { const docApi = (window as any).editor.doc; + type ReceiptLike = { + success?: boolean; + inserted?: Array<{ entityType?: string; entityId?: string }>; + failure?: { code?: string; message?: string }; + }; const found = docApi.find({ select: { type: 'text', @@ -103,8 +108,21 @@ export async function addCommentByText( }); const target = found?.context?.[payload.occurrence ?? 0]?.textRanges?.[0]; if (!target) throw new Error(`No text range found for pattern "${payload.pattern}".`); - docApi.comments.add({ target, text: payload.text }); + const receipt = docApi.comments.add({ target, text: payload.text }) as ReceiptLike | undefined; + if (!receipt || receipt.success !== true) { + const failureCode = receipt?.failure?.code ?? 'UNKNOWN'; + const failureMessage = receipt?.failure?.message ?? 'comments.add returned a non-success receipt'; + throw new Error(`comments.add failed: ${failureCode} ${failureMessage}`); + } + const insertedEntity = Array.isArray(receipt.inserted) + ? receipt.inserted.find((entry) => entry?.entityType === 'comment' && typeof entry?.entityId === 'string') + : null; + if (!insertedEntity) { + throw new Error('comments.add succeeded but no inserted comment entityId was returned.'); + } + return insertedEntity.entityId as string; }, input); + return commentId; } export async function editComment(page: Page, input: { commentId: string; text: string }): Promise { diff --git a/tests/behavior/helpers/sdt.ts b/tests/behavior/helpers/sdt.ts index 29d4d647f7..53c1e08be3 100644 --- a/tests/behavior/helpers/sdt.ts +++ b/tests/behavior/helpers/sdt.ts @@ -83,3 +83,100 @@ export async function deselectSdt(page: Page, anchorText = 'Before SDT'): Promis editor.commands.setTextSelection({ from: pos, to: pos }); }, anchorText); } + +// --------------------------------------------------------------------------- +// CRUD helpers for structured content tests +// --------------------------------------------------------------------------- + +interface SdtAttrs { + id?: string; + alias?: string; + group?: string; + tag?: string; + lockMode?: string; + [key: string]: unknown; +} + +/** Insert a block SDT with full attrs + HTML content. */ +export async function insertBlockSdtWithHtml(page: Page, attrs: SdtAttrs, html: string): Promise { + await page.evaluate( + ({ attrs, html }) => { + (window as any).editor.commands.insertStructuredContentBlock({ attrs, html }); + }, + { attrs, html }, + ); +} + +/** Insert an inline SDT with full attrs (id, alias, group) and optional text. */ +export async function insertInlineSdtWithId(page: Page, attrs: SdtAttrs, text?: string): Promise { + await page.evaluate( + ({ attrs, text }) => { + (window as any).editor.commands.insertStructuredContentInline({ attrs, text }); + }, + { attrs, text }, + ); +} + +/** Update a structured content field by its unique ID. */ +export async function updateSdtById(page: Page, id: string, options: Record): Promise { + await page.evaluate( + ({ id, options }) => { + (window as any).editor.commands.updateStructuredContentById(id, options); + }, + { id, options }, + ); +} + +/** Update all structured content fields that share a group identifier. */ +export async function updateSdtByGroup(page: Page, group: string, options: Record): Promise { + await page.evaluate( + ({ group, options }) => { + (window as any).editor.commands.updateStructuredContentByGroup(group, options); + }, + { group, options }, + ); +} + +/** Delete structured content by ID (single or array). */ +export async function deleteSdtById(page: Page, idOrIds: string | string[]): Promise { + await page.evaluate((ids) => { + (window as any).editor.commands.deleteStructuredContentById(ids); + }, idOrIds); +} + +/** Delete the structured content at the current selection, preserving its content. */ +export async function deleteSdtAtSelection(page: Page): Promise { + await page.evaluate(() => { + (window as any).editor.commands.deleteStructuredContentAtSelection(); + }); +} + +/** Read the data-id attribute from the first DOM element matching [data-alias=""]. */ +export async function getSdtIdByAlias(page: Page, alias: string): Promise { + return page.evaluate((alias) => { + const el = document.querySelector(`[data-alias="${alias}"]`); + if (!el) throw new Error(`No SDT element found with alias "${alias}"`); + return (el as HTMLElement).dataset.id ?? ''; + }, alias); +} + +/** Get the data-id by reading ProseMirror state (more reliable than DOM). */ +export async function getSdtIdFromState(page: Page, alias: string): Promise { + return page.evaluate((alias) => { + const editor = (window as any).editor; + let foundId: string | null = null; + editor.state.doc.descendants((node: any) => { + if (foundId) return false; + if ( + (node.type.name === 'structuredContent' || node.type.name === 'structuredContentBlock') && + node.attrs.alias === alias + ) { + foundId = String(node.attrs.id); + return false; + } + return true; + }); + if (!foundId) throw new Error(`No SDT node found with alias "${alias}"`); + return foundId; + }, alias); +} diff --git a/tests/behavior/playwright.config.ts b/tests/behavior/playwright.config.ts index e58a8cfc31..a309a52f6d 100644 --- a/tests/behavior/playwright.config.ts +++ b/tests/behavior/playwright.config.ts @@ -4,7 +4,7 @@ export default defineConfig({ testDir: './tests', testIgnore: '**/legacy/**', fullyParallel: true, - workers: process.env.CI ? '50%' : 8, + workers: process.env.CI ? '50%' : '75%', timeout: 60_000, retries: process.env.CI ? 1 : 0, reporter: 'list', diff --git a/tests/behavior/tests/comments/basic-comment-insertion.spec.ts b/tests/behavior/tests/comments/basic-comment-insertion.spec.ts index ee77c27fba..ff3688eb2e 100644 --- a/tests/behavior/tests/comments/basic-comment-insertion.spec.ts +++ b/tests/behavior/tests/comments/basic-comment-insertion.spec.ts @@ -18,13 +18,23 @@ test('add a comment programmatically via document-api', async ({ superdoc }) => const initialComments = await listComments(superdoc.page, { includeResolved: true }); const initialCount = initialComments.total; - await addCommentByText(superdoc.page, { + const commentId = await addCommentByText(superdoc.page, { pattern: 'world', text: 'This is a programmatic comment', }); await superdoc.waitForStable(); - await superdoc.assertCommentHighlightExists({ text: 'world' }); + await expect + .poll(async () => { + const listed = await listComments(superdoc.page, { includeResolved: true }); + return listed.matches.some((entry) => entry.commentId === commentId); + }) + .toBe(true); + await superdoc.assertCommentHighlightExists({ + text: 'world', + commentId, + timeoutMs: 20_000, + }); await expect .poll(async () => { const listed = await listComments(superdoc.page, { includeResolved: true }); diff --git a/tests/behavior/tests/comments/replace-over-multi-paragraph-tracked-changes.spec.ts b/tests/behavior/tests/comments/replace-over-multi-paragraph-tracked-changes.spec.ts index 82925a0bd9..20cdf7b6ee 100644 --- a/tests/behavior/tests/comments/replace-over-multi-paragraph-tracked-changes.spec.ts +++ b/tests/behavior/tests/comments/replace-over-multi-paragraph-tracked-changes.spec.ts @@ -102,3 +102,80 @@ test('markDeletion plain delete preserves existing deletion ids', async ({ super expect(afterOldId).toBe(beforeOldId); expect(afterOldId).not.toBe(afterPlainId); }); + +test('replace over multi-paragraph tracked changes stays coherent', async ({ superdoc }) => { + // Step 1: Create three lines of text + await superdoc.type('Line one stays'); + await superdoc.newLine(); + await superdoc.type('Line two keeps tailword2'); + await superdoc.newLine(); + await superdoc.type('Line three keeps tailword3'); + await superdoc.waitForStable(); + + await superdoc.assertTextContains('Line one stays'); + await superdoc.assertTextContains('Line two keeps tailword2'); + await superdoc.assertTextContains('Line three keeps tailword3'); + + // Step 2: Switch to suggesting mode and delete last word on lines 2 and 3 + await superdoc.setDocumentMode('suggesting'); + await superdoc.waitForStable(); + + const tail2From = await superdoc.findTextPos('tailword2'); + await superdoc.setTextSelection(tail2From, tail2From + 'tailword2'.length); + await superdoc.press('Backspace'); + await superdoc.waitForStable(); + + const tail3From = await superdoc.findTextPos('tailword3'); + await superdoc.setTextSelection(tail3From, tail3From + 'tailword3'.length); + await superdoc.press('Backspace'); + await superdoc.waitForStable(); + + // Both words should still exist in PM (as tracked deletions, not truly removed) + await superdoc.assertTextContains('tailword2'); + await superdoc.assertTextContains('tailword3'); + + // Tracked delete marks should exist + const deletionCountAfterStep2 = await superdoc.page.evaluate(() => { + const editor = (window as any).editor; + let count = 0; + editor.state.doc.descendants((node: any) => { + if (!node.isText) return; + for (const mark of node.marks ?? []) { + if (mark.type?.name === 'trackDelete') count++; + } + }); + return count; + }); + expect(deletionCountAfterStep2).toBeGreaterThanOrEqual(2); + + // Step 3: Select from "Line two keeps" through "tailword3" and replace with typed text + const line2Start = await superdoc.findTextPos('Line two keeps'); + const tail3Pos = await superdoc.findTextPos('tailword3'); + await superdoc.setTextSelection(line2Start, tail3Pos + 'tailword3'.length); + await superdoc.type('Merged suggestion'); + await superdoc.waitForStable(); + + // The replacement text should be present + await superdoc.assertTextContains('Merged suggestion'); + + // Line one should remain untouched + await superdoc.assertTextContains('Line one stays'); + + // Verify a trackInsert mark exists for the replacement text + const hasTrackInsert = await superdoc.page.evaluate(() => { + const editor = (window as any).editor; + let found = false; + editor.state.doc.descendants((node: any) => { + if (found) return false; + if (!node.isText) return true; + for (const mark of node.marks ?? []) { + if (mark.type?.name === 'trackInsert') { + found = true; + return false; + } + } + }); + return found; + }); + expect(hasTrackInsert).toBe(true); +}); diff --git a/tests/behavior/tests/lists/list-editing-operations.spec.ts b/tests/behavior/tests/lists/list-editing-operations.spec.ts new file mode 100644 index 0000000000..355292d6a8 --- /dev/null +++ b/tests/behavior/tests/lists/list-editing-operations.spec.ts @@ -0,0 +1,137 @@ +import { test, expect } from '../../fixtures/superdoc.js'; + +test.use({ config: { toolbar: 'full' } }); + +const MARKER = '.superdoc-paragraph-marker'; + +test.describe('list editing operations', () => { + test('delete a list item by selecting and backspacing', async ({ superdoc }) => { + // Create a 3-item bullet list + await superdoc.type('- item one'); + await superdoc.newLine(); + await superdoc.type('item two'); + await superdoc.newLine(); + await superdoc.type('item three'); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 3); + + // Select from the end of "item one" through the end of "item two" to merge/delete the middle item + const endOfFirst = await superdoc.findTextPos('item one'); + const endOfSecond = await superdoc.findTextPos('item two'); + await superdoc.setTextSelection(endOfFirst + 'item one'.length, endOfSecond + 'item two'.length); + await superdoc.waitForStable(); + await superdoc.press('Backspace'); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 2); + await superdoc.assertTextContains('item one'); + await superdoc.assertTextContains('item three'); + }); + + test('pressing Enter before first list item inserts empty item', async ({ superdoc }) => { + // Create a 2-item ordered list + await superdoc.type('1. first'); + await superdoc.newLine(); + await superdoc.type('second'); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 2); + + // Place cursor at start of first item and press Enter + await superdoc.clickOnLine(0, 10); + await superdoc.waitForStable(); + await superdoc.press('Home'); + await superdoc.newLine(); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 3); + }); + + test('pressing Enter inside a list item splits it', async ({ superdoc }) => { + await superdoc.type('- HelloWorld'); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 1); + + // Position cursor between "Hello" and "World" + const pos = await superdoc.findTextPos('World'); + await superdoc.setTextSelection(pos); + await superdoc.newLine(); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 2); + await superdoc.assertTextContains('Hello'); + await superdoc.assertTextContains('World'); + }); + + test('pressing Enter after last item adds new item', async ({ superdoc }) => { + await superdoc.type('- alpha'); + await superdoc.newLine(); + await superdoc.type('beta'); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 2); + + // Press Enter after last item and type + await superdoc.newLine(); + await superdoc.type('gamma'); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 3); + await superdoc.assertTextContains('gamma'); + }); + + test('pressing Enter twice exits the list', async ({ superdoc }) => { + await superdoc.type('- only item'); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 1); + + // Press Enter twice to exit list + await superdoc.newLine(); + await superdoc.newLine(); + await superdoc.type('outside list'); + await superdoc.waitForStable(); + + // Should still have just 1 marker (the original item) + await superdoc.assertElementCount(MARKER, 1); + await superdoc.assertTextContains('outside list'); + }); + + test('insert text programmatically into a list item', async ({ superdoc }) => { + await superdoc.type('- existing'); + await superdoc.waitForStable(); + + // Insert text via PM transaction (reliable cross-browser) + await superdoc.page.evaluate(() => { + const editor = (window as any).editor; + const { state } = editor; + editor.view.dispatch(state.tr.insertText(' pasted')); + }); + await superdoc.waitForStable(); + + await superdoc.assertTextContains('pasted'); + await superdoc.assertElementCount(MARKER, 1); + }); + + test('turn existing text paragraphs into a list', async ({ superdoc }) => { + await superdoc.type('line one'); + await superdoc.newLine(); + await superdoc.type('line two'); + await superdoc.newLine(); + await superdoc.type('line three'); + await superdoc.waitForStable(); + + // Select all and click numbered list button + await superdoc.selectAll(); + await superdoc.waitForStable(); + await superdoc.page.locator('[data-item="btn-numberedlist"]').click(); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 3); + await superdoc.assertTextContains('line one'); + await superdoc.assertTextContains('line two'); + await superdoc.assertTextContains('line three'); + }); +}); diff --git a/tests/behavior/tests/lists/list-in-context.spec.ts b/tests/behavior/tests/lists/list-in-context.spec.ts new file mode 100644 index 0000000000..d2a05b763c --- /dev/null +++ b/tests/behavior/tests/lists/list-in-context.spec.ts @@ -0,0 +1,67 @@ +import { test, expect } from '../../fixtures/superdoc.js'; + +test.use({ config: { toolbar: 'full' } }); + +const MARKER = '.superdoc-paragraph-marker'; + +test.describe('lists in complex contexts', () => { + test('add a table inside a list item', async ({ superdoc }) => { + // Create a list item + await superdoc.type('- item with table'); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 1); + + // Insert a table via command + await superdoc.executeCommand('insertTable', { rows: 2, cols: 2, withHeaderRow: false }); + await superdoc.waitForStable(); + + // Table should exist in the document + await superdoc.assertTableExists(2, 2); + + // List marker should still be present + const markerCount = await superdoc.page.locator(MARKER).count(); + expect(markerCount).toBeGreaterThanOrEqual(1); + }); + + test('create list inside a table cell', async ({ superdoc }) => { + // Insert a table first + await superdoc.executeCommand('insertTable', { rows: 2, cols: 2, withHeaderRow: false }); + await superdoc.waitForStable(); + + // Type a bullet list trigger inside the first cell + await superdoc.type('- cell list item'); + await superdoc.waitForStable(); + + // Should have at least one list marker + await superdoc.assertElementExists(MARKER); + await superdoc.assertTextContains('cell list item'); + }); + + test('inline images within list items', async ({ superdoc }) => { + // Create a list item + await superdoc.type('- image item'); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 1); + + // Insert a small base64 image via editor command + await superdoc.page.evaluate(() => { + const editor = (window as any).editor; + const { schema, state } = editor; + const { tr, selection } = state; + // 1x1 transparent PNG + const src = + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg=='; + const imageNode = schema.nodes.image.create({ src }); + editor.view.dispatch(tr.insert(selection.from, imageNode)); + }); + await superdoc.waitForStable(); + + // Image should exist in the document + await superdoc.assertElementExists('img'); + + // List marker should still be present + await superdoc.assertElementCount(MARKER, 1); + }); +}); diff --git a/tests/behavior/tests/lists/list-type-and-nesting.spec.ts b/tests/behavior/tests/lists/list-type-and-nesting.spec.ts new file mode 100644 index 0000000000..4bf7cbb208 --- /dev/null +++ b/tests/behavior/tests/lists/list-type-and-nesting.spec.ts @@ -0,0 +1,100 @@ +import { test, expect } from '../../fixtures/superdoc.js'; + +test.use({ config: { toolbar: 'full' } }); + +const MARKER = '.superdoc-paragraph-marker'; + +test.describe('list type switching and nesting', () => { + test('change ordered list to unordered', async ({ superdoc }) => { + // Create a 2-item ordered list + await superdoc.type('1. first'); + await superdoc.newLine(); + await superdoc.type('second'); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 2); + + // Select all and click bullet list button to switch type + await superdoc.selectAll(); + await superdoc.waitForStable(); + await superdoc.page.locator('[data-item="btn-list"]').click(); + await superdoc.waitForStable(); + + // Markers should still exist + await superdoc.assertElementCount(MARKER, 2); + + // Verify the list is now unordered by checking listRendering attrs on paragraphs + const numberingType = await superdoc.page.evaluate(() => { + const editor = (window as any).editor; + let type: string | null = null; + editor.state.doc.descendants((node: any) => { + if (type) return false; + if (node.type.name === 'paragraph' && node.attrs.listRendering) { + type = node.attrs.listRendering.numberingType ?? null; + return false; + } + return true; + }); + return type; + }); + expect(numberingType).toBe('bullet'); + }); + + test('change sublist type independently of parent', async ({ superdoc }) => { + // Create ordered list with a nested item + await superdoc.type('1. parent'); + await superdoc.newLine(); + await superdoc.press('Tab'); + await superdoc.type('child'); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 2); + + // Cursor is already on the child item โ€” click bullet list to change sublist type + await superdoc.page.locator('[data-item="btn-list"]').click(); + await superdoc.waitForStable(); + + // Verify paragraphs have different numbering types + const numberingTypes = await superdoc.page.evaluate(() => { + const editor = (window as any).editor; + const types: string[] = []; + editor.state.doc.descendants((node: any) => { + if (node.type.name === 'paragraph' && node.attrs.listRendering) { + types.push(node.attrs.listRendering.numberingType ?? 'unknown'); + } + return true; + }); + return types; + }); + + // Parent should remain ordered (not 'bullet'), child should be 'bullet' + expect(numberingTypes.length).toBe(2); + expect(numberingTypes).toContain('bullet'); + // At least one item should NOT be bullet (the parent) + expect(numberingTypes.some((t) => t !== 'bullet')).toBe(true); + }); + + test('create deeply nested list with 3+ levels', async ({ superdoc }) => { + // Create 4-level nested list + await superdoc.type('- level 0'); + await superdoc.newLine(); + await superdoc.press('Tab'); + await superdoc.type('level 1'); + await superdoc.newLine(); + await superdoc.press('Tab'); + await superdoc.type('level 2'); + await superdoc.newLine(); + await superdoc.press('Tab'); + await superdoc.type('level 3'); + await superdoc.waitForStable(); + + // Should have 4 markers total + await superdoc.assertElementCount(MARKER, 4); + + // Verify content at all levels + await superdoc.assertTextContains('level 0'); + await superdoc.assertTextContains('level 1'); + await superdoc.assertTextContains('level 2'); + await superdoc.assertTextContains('level 3'); + }); +}); diff --git a/tests/behavior/tests/sdt/structured-content-crud.spec.ts b/tests/behavior/tests/sdt/structured-content-crud.spec.ts new file mode 100644 index 0000000000..ca932d33f3 --- /dev/null +++ b/tests/behavior/tests/sdt/structured-content-crud.spec.ts @@ -0,0 +1,381 @@ +import { test, expect } from '../../fixtures/superdoc.js'; +import { + insertBlockSdt, + insertInlineSdt, + insertBlockSdtWithHtml, + insertInlineSdtWithId, + updateSdtById, + updateSdtByGroup, + deleteSdtById, + deleteSdtAtSelection, + getSdtIdFromState, +} from '../../helpers/sdt.js'; + +test.use({ config: { toolbar: 'full' } }); + +// --------------------------------------------------------------------------- +// Selectors +// --------------------------------------------------------------------------- + +const BLOCK_SDT = '.superdoc-structured-content-block'; +const INLINE_SDT = '.superdoc-structured-content-inline'; +const MARKER = '.superdoc-paragraph-marker'; + +// ========================================================================== +// Inline SDT creation +// ========================================================================== + +test.describe('inline SDT creation', () => { + test('turn selected text into structured content inline', async ({ superdoc }) => { + await superdoc.type('wrap this text'); + await superdoc.waitForStable(); + + // Select "this" + const pos = await superdoc.findTextPos('this'); + await superdoc.setTextSelection(pos, pos + 4); + await superdoc.waitForStable(); + + await insertInlineSdtWithId(superdoc.page, { id: '1001', alias: 'Wrapped' }); + await superdoc.waitForStable(); + + await superdoc.assertElementExists(INLINE_SDT); + await superdoc.assertTextContains('this'); + }); + + test('insert inline with pre-populated text', async ({ superdoc }) => { + await superdoc.type('before '); + await superdoc.waitForStable(); + + await insertInlineSdtWithId(superdoc.page, { id: '1002', alias: 'Prefilled' }, 'hello world'); + await superdoc.waitForStable(); + + await superdoc.assertElementExists(INLINE_SDT); + await superdoc.assertTextContains('hello world'); + }); +}); + +// ========================================================================== +// Block SDT creation +// ========================================================================== + +test.describe('block SDT creation', () => { + test('insert HTML as block', async ({ superdoc }) => { + await superdoc.type('above'); + await superdoc.newLine(); + await superdoc.waitForStable(); + + await insertBlockSdtWithHtml(superdoc.page, { id: '2001', alias: 'HTML Block' }, '

Block paragraph content

'); + await superdoc.waitForStable(); + + await superdoc.assertElementExists(BLOCK_SDT); + await superdoc.assertTextContains('Block paragraph content'); + }); + + test('insert block with json content', async ({ superdoc }) => { + await superdoc.type('above'); + await superdoc.newLine(); + await superdoc.waitForStable(); + + await superdoc.page.evaluate(() => { + (window as any).editor.commands.insertStructuredContentBlock({ + attrs: { id: '2002', alias: 'JSON Block' }, + json: { + type: 'paragraph', + content: [{ type: 'text', text: 'json paragraph content' }], + }, + }); + }); + await superdoc.waitForStable(); + + await superdoc.assertElementExists(BLOCK_SDT); + await superdoc.assertTextContains('json paragraph content'); + + // Verify the node exists in PM state within the block SDT + const hasContent = await superdoc.page.evaluate(() => { + const editor = (window as any).editor; + let found = false; + editor.state.doc.descendants((node: any) => { + if (found) return false; + if (node.type.name === 'structuredContentBlock' && String(node.attrs.id) === '2002') { + found = true; + return false; + } + return true; + }); + return found; + }); + expect(hasContent).toBe(true); + }); + + test('insert block with html containing formatted content', async ({ superdoc }) => { + await superdoc.type('above'); + await superdoc.newLine(); + await superdoc.waitForStable(); + + await insertBlockSdtWithHtml( + superdoc.page, + { id: '2003', alias: 'Formatted Block' }, + '

bold text and normal text

', + ); + await superdoc.waitForStable(); + + await superdoc.assertElementExists(BLOCK_SDT); + await superdoc.assertTextContains('bold text'); + await superdoc.assertTextContains('normal text'); + }); +}); + +// ========================================================================== +// Update SDT by ID +// ========================================================================== + +test.describe('update SDT by ID', () => { + test.beforeEach(async ({ superdoc }) => { + await superdoc.type('context '); + await superdoc.newLine(); + await superdoc.waitForStable(); + }); + + test('update html โ†’ html', async ({ superdoc }) => { + await insertBlockSdtWithHtml(superdoc.page, { id: '3001', alias: 'Update Target' }, '

original html

'); + await superdoc.waitForStable(); + + await superdoc.assertTextContains('original html'); + + await updateSdtById(superdoc.page, '3001', { html: '

replaced html

' }); + await superdoc.waitForStable(); + + await superdoc.assertTextContains('replaced html'); + await superdoc.assertTextNotContains('original html'); + }); + + test('update html โ†’ json', async ({ superdoc }) => { + await insertBlockSdtWithHtml(superdoc.page, { id: '3002', alias: 'HTML to JSON' }, '

old html

'); + await superdoc.waitForStable(); + + await updateSdtById(superdoc.page, '3002', { + json: { type: 'paragraph', content: [{ type: 'text', text: 'new json text' }] }, + }); + await superdoc.waitForStable(); + + await superdoc.assertTextContains('new json text'); + await superdoc.assertTextNotContains('old html'); + }); + + test('update json โ†’ json', async ({ superdoc }) => { + // Insert via json + await superdoc.page.evaluate(() => { + (window as any).editor.commands.insertStructuredContentBlock({ + attrs: { id: '3003', alias: 'JSON to JSON' }, + json: { type: 'paragraph', content: [{ type: 'text', text: 'original json' }] }, + }); + }); + await superdoc.waitForStable(); + + await updateSdtById(superdoc.page, '3003', { + json: { type: 'paragraph', content: [{ type: 'text', text: 'updated json' }] }, + }); + await superdoc.waitForStable(); + + await superdoc.assertTextContains('updated json'); + await superdoc.assertTextNotContains('original json'); + }); + + test('update json โ†’ html', async ({ superdoc }) => { + await superdoc.page.evaluate(() => { + (window as any).editor.commands.insertStructuredContentBlock({ + attrs: { id: '3004', alias: 'JSON to HTML' }, + json: { type: 'paragraph', content: [{ type: 'text', text: 'json content' }] }, + }); + }); + await superdoc.waitForStable(); + + await updateSdtById(superdoc.page, '3004', { html: '

html replacement

' }); + await superdoc.waitForStable(); + + await superdoc.assertTextContains('html replacement'); + await superdoc.assertTextNotContains('json content'); + }); +}); + +// ========================================================================== +// Update SDT by group +// ========================================================================== + +test.describe('update SDT by group', () => { + test('update all fields in a group', async ({ superdoc }) => { + await superdoc.type('context '); + await superdoc.newLine(); + await superdoc.waitForStable(); + + await insertBlockSdtWithHtml( + superdoc.page, + { id: '4001', alias: 'Grouped Block', group: 'test-group' }, + '

group original

', + ); + await superdoc.waitForStable(); + + await superdoc.assertTextContains('group original'); + + await updateSdtByGroup(superdoc.page, 'test-group', { html: '

group updated

' }); + await superdoc.waitForStable(); + + await superdoc.assertTextContains('group updated'); + await superdoc.assertTextNotContains('group original'); + }); +}); + +// ========================================================================== +// Delete SDT +// ========================================================================== + +test.describe('delete SDT', () => { + test('delete inline by ID', async ({ superdoc }) => { + await superdoc.type('before '); + await superdoc.waitForStable(); + + await insertInlineSdtWithId(superdoc.page, { id: '5001', alias: 'Delete Me' }, 'doomed'); + await superdoc.waitForStable(); + + await superdoc.assertElementExists(INLINE_SDT); + + await deleteSdtById(superdoc.page, '5001'); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(INLINE_SDT, 0); + }); + + test('delete inline preserving content in PM state', async ({ superdoc }) => { + await superdoc.type('before '); + await superdoc.waitForStable(); + + await insertInlineSdtWithId(superdoc.page, { id: '5002', alias: 'Unwrap Me' }, 'kept text'); + await superdoc.waitForStable(); + + await superdoc.assertElementExists(INLINE_SDT); + + // Set cursor inside the SDT then call deleteStructuredContentAtSelection + const result = await superdoc.page.evaluate(() => { + const editor = (window as any).editor; + let sdtPos: number | null = null; + editor.state.doc.descendants((node: any, pos: number) => { + if (sdtPos !== null) return false; + if (node.type.name === 'structuredContent' && String(node.attrs.id) === '5002') { + sdtPos = pos; + return false; + } + return true; + }); + if (sdtPos === null) return { error: 'sdt not found' }; + const innerPos = sdtPos + 1; + editor.chain().setTextSelection({ from: innerPos, to: innerPos }).deleteStructuredContentAtSelection().run(); + // Check PM state after the command + let sdtCount = 0; + let textFound = false; + editor.state.doc.descendants((node: any) => { + if (node.type.name === 'structuredContent') sdtCount++; + if (node.isText && node.text?.includes('kept text')) textFound = true; + return true; + }); + return { sdtCount, textFound }; + }); + expect(result).toEqual({ sdtCount: 0, textFound: true }); + + // The text content should still be accessible via document API + await superdoc.assertTextContains('kept text'); + }); + + test('delete multiple inlines at once', async ({ superdoc }) => { + await superdoc.type('a '); + await superdoc.waitForStable(); + await insertInlineSdtWithId(superdoc.page, { id: '5003', alias: 'Multi A' }, 'sdt-a'); + await superdoc.waitForStable(); + + await superdoc.type(' b '); + await superdoc.waitForStable(); + await insertInlineSdtWithId(superdoc.page, { id: '5004', alias: 'Multi B' }, 'sdt-b'); + await superdoc.waitForStable(); + + await superdoc.type(' c '); + await superdoc.waitForStable(); + await insertInlineSdtWithId(superdoc.page, { id: '5005', alias: 'Multi C' }, 'sdt-c'); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(INLINE_SDT, 3); + + await deleteSdtById(superdoc.page, ['5003', '5004', '5005']); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(INLINE_SDT, 0); + }); +}); + +// ========================================================================== +// SDT in complex contexts +// ========================================================================== + +test.describe('SDT in complex contexts', () => { + test('insert inline SDT inside a list', async ({ superdoc }) => { + // Create a bullet list item + await superdoc.type('- list item '); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 1); + + // Insert inline SDT within the list item + await insertInlineSdtWithId(superdoc.page, { id: '6001', alias: 'List SDT' }, 'sdt in list'); + await superdoc.waitForStable(); + + await superdoc.assertElementExists(INLINE_SDT); + await superdoc.assertElementCount(MARKER, 1); + await superdoc.assertTextContains('sdt in list'); + }); + + test('insert multiple inlines in nested list', async ({ superdoc }) => { + // Create a nested list + await superdoc.type('- parent '); + await superdoc.waitForStable(); + await insertInlineSdtWithId(superdoc.page, { id: '6002', alias: 'Parent SDT' }, 'sdt-parent'); + await superdoc.waitForStable(); + + await superdoc.newLine(); + await superdoc.press('Tab'); + await superdoc.type('child '); + await superdoc.waitForStable(); + await insertInlineSdtWithId(superdoc.page, { id: '6003', alias: 'Child SDT' }, 'sdt-child'); + await superdoc.waitForStable(); + + await superdoc.assertElementCount(MARKER, 2); + await superdoc.assertElementCount(INLINE_SDT, 2); + }); + + test('insert inline SDT inside a table cell', async ({ superdoc }) => { + // Insert a table + await superdoc.executeCommand('insertTable', { rows: 2, cols: 2, withHeaderRow: false }); + await superdoc.waitForStable(); + + // Type some text in the first cell (cursor is already there) + await superdoc.type('cell '); + await superdoc.waitForStable(); + + // Insert inline SDT + await insertInlineSdtWithId(superdoc.page, { id: '6004', alias: 'Table SDT' }, 'sdt in cell'); + await superdoc.waitForStable(); + + await superdoc.assertElementExists(INLINE_SDT); + await superdoc.assertTextContains('sdt in cell'); + }); + + test('insert block SDT inside a table cell', async ({ superdoc }) => { + // Insert a table + await superdoc.executeCommand('insertTable', { rows: 2, cols: 2, withHeaderRow: false }); + await superdoc.waitForStable(); + + // Insert block SDT in the first cell + await insertBlockSdtWithHtml(superdoc.page, { id: '6005', alias: 'Table Block SDT' }, '

block in cell

'); + await superdoc.waitForStable(); + + await superdoc.assertElementExists(BLOCK_SDT); + await superdoc.assertTextContains('block in cell'); + }); +}); diff --git a/tests/visual/tests/behavior/comments-tcs/replace-over-multi-paragraph-tracked-changes.spec.ts b/tests/visual/tests/behavior/comments-tcs/replace-over-multi-paragraph-tracked-changes.spec.ts deleted file mode 100644 index 0cff2bd4bf..0000000000 --- a/tests/visual/tests/behavior/comments-tcs/replace-over-multi-paragraph-tracked-changes.spec.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { test } from '../../fixtures/superdoc.js'; - -test.use({ config: { comments: 'on', trackChanges: true, hideSelection: false } }); - -test('replace over multi-paragraph tracked changes stays coherent', async ({ superdoc }) => { - await superdoc.type('Line one stays'); - await superdoc.newLine(); - await superdoc.type('Line two keeps tailword2'); - await superdoc.newLine(); - await superdoc.type('Line three keeps tailword3'); - await superdoc.waitForStable(); - await superdoc.screenshot('it-67-step-1-initial-lines'); - - await superdoc.setDocumentMode('suggesting'); - await superdoc.waitForStable(); - - const tail2 = await superdoc.findTextRange('tailword2'); - await superdoc.setTextSelection(tail2.from, tail2.to); - await superdoc.press('Backspace'); - - const tail3 = await superdoc.findTextRange('tailword3'); - await superdoc.setTextSelection(tail3.from, tail3.to); - await superdoc.press('Backspace'); - - await superdoc.waitForStable(); - await superdoc.screenshot('it-67-step-2-lines-2-3-last-word-deleted'); - - const line2Start = await superdoc.findTextRange('Line two keeps'); - const line3Tail = await superdoc.findTextRange('tailword3'); - await superdoc.setTextSelection(line2Start.from, line3Tail.to); - await superdoc.type('Merged suggestion'); - - await superdoc.waitForStable(); - await superdoc.screenshot('it-67-step-3-replaced-lines-2-3-with-single-change'); -});